Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/abdallahabdelfattah13/linkedin-sdk-android

A lightweight android library to implement Login with LinkedIn in your Android app.
https://github.com/abdallahabdelfattah13/linkedin-sdk-android

android android-library kotlin kotlin-android lightweight-android-library linkedin linkedin-login linkedin-profile linkedin-sdk linkedin-sdk-android

Last synced: 3 months ago
JSON representation

A lightweight android library to implement Login with LinkedIn in your Android app.

Awesome Lists containing this project

README

        

# LinkedIn-SDK-Android
[ ![Download](https://api.bintray.com/packages/abdallahabdelfattah13/maven/linkedin-sdk/images/download.svg?version=1.2.0) ](https://bintray.com/abdallahabdelfattah13/maven/linkedin-sdk/1.2.0/link)

A lightweight android library to implement Login with LinkedIn in your Android app, that supports both Activities and Fragments.

Inspired by [shantanu-deshmukh/LinkedIn-SDK-Android](https://github.com/shantanu-deshmukh/LinkedIn-SDK-Android)

Table of contents
=================
- [Targeted use cases](#Targeted-use-cases)
- [Main changes over the original](#Main-changes-over-the-original)
- [SDK Structure](#SDK-Structure)
- [Why this UnOfficial SDK?](#why-this-unofficial-sdk-)
- [Adding the SDK to your Project](#adding-the-sdk-to-your-project)
- [Usage](#usage)
* [Authenticating](#authenticating)
+ [LinkedInUser Class](#linkedinuser-class)
- [Security](#security)
- [Contributing](#contributing)

Targeted use cases
========================
This SDK was designed to be used to authenticate with LinkedIn mainly for two use cases:
1. If you want only to retrieve a user's access token.
* For example to be sent the a back end server via your own APIs for further processing and data fetching.
2. If you want to get the user's lite profile.
* For simpler login process and to get his user name and profile picture.

You can choose which one you best suits you, simply using the `setAccessTokenRetrievalOnlyRequest(accessTokenRetrievalOnlyRequest: Boolean)` method in `LinkedInBuilder` object.

For example:
```Kotlin
LinkedInFromFragmentBuilder.getInstance(MainActivity.this)
.setClientID(clientID)
.setAccessTokenRetrievalOnlyRequest(true)
.setClientSecret(clientSecret)
.setRedirectURI(redirectUrl)
.authenticate(LINKEDIN_REQUEST);
```
will only try to retrieve user access token while the following the try to get the lite profile as well
```Kotlin
LinkedInFromFragmentBuilder.getInstance(MainActivity.this)
.setClientID(clientID)
.setAccessTokenRetrievalOnlyRequest(false)
.setClientSecret(clientSecret)
.setRedirectURI(redirectUrl)
.authenticate(LINKEDIN_REQUEST);
```
> This flag defaults to *false* for backward compatibility reasons.

Main changes over the original
========================
- [x] Add support for usage from fragments.
- [x] Allow for access token only request.
- [x] Kotlin-lize the SDK since now Kotlin is the main dev language for Android.
- [ ] Better error handling.

SDK Structure
========================
The SDK follows the [clean architecture principles](https://five.agency/android-architecture-part-1-every-new-beginning-is-hard/), so it's mainly divided into use cases, data, presentation(MVVM) and ui layers. Each has its own package, with manual [dependency injection](https://en.wikipedia.org/wiki/Dependency_injection) system to inject them when needed.

Why this UnOfficial SDK?
========================
* [Existing SDKs have been discontinued.](https://engineering.linkedin.com/blog/2018/12/developer-program-updates)
* [Official docs](https://developer.linkedin.com/docs/android-sdk-auth) on developer.linkedin.com are outdated.

Adding the SDK to your Project
===============================
Just add the dependency to your app level `build.gradle` file

```gradle
dependencies {
implementation 'com.AbdAllahAbdElFattah13:linkedinsdk:1.2.0'
}
```

> If you are getting `Failed to resolve` ERROR, make sure that Jcenter repository is added to your project level `build.gradle` file. This is done by default in recent versions of Android Studio.

Usage
=====

Authenticating
--------------

1. Add internet permission to your `AndroidManifest.xml` file if it's not already added.

```xml

```

2. Initiate Login Request. (You might want to do this on click of a login button)
* From within fragments:
```Kotlin
LinkedInFromFragmentBuilder.getInstance(MainActivity.this)
.setClientID("")
.setClientSecret("")
.setRedirectURI("")
.authenticate(LINKEDIN_REQUEST_CODE);
```

* From within activities:
```Kotlin
LinkedInFromActivityBuilder.getInstance(MainActivity.this)
.setClientID(Œ"")
.setClientSecret("")
.setRedirectURI("")
.authenticate(LINKEDIN_REQUEST_CODE);
```
> You can download the official Sign In with LinkedIn button images from [here](https://content.linkedin.com/content/dam/developer/branding/signin_with_linkedin-buttons.zip)

3. Handling Result: the sdk returns `LinkedInUser` object which contains the result data.

```Java
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (requestCode == LINKEDIN_REQUEST_CODE && data != null) {
if (resultCode == RESULT_OK) {
//Successfully signed in
LinkedInUser user = data.getParcelableExtra("social_login");

//acessing user info
Log.i("LinkedInLogin", user.getFirstName());

} else {

if (data.getIntExtra("err_code", 0) == LinkedInBuilder.ERROR_USER_DENIED) {
//Handle : user denied access to account

} else if (data.getIntExtra("err_code", 0) == LinkedInBuilder.ERROR_FAILED) {

//Handle : Error in API : see logcat output for details
Log.e("LINKEDIN ERROR", data.getStringExtra("err_message"));
}
}
}

}

```

### LinkedInUser Class
| Return | Method | Description |
| ------------- |:-------------:|:-------------:|
| String | `getId()` | Returns LinkedIn user ID |
| String | `getEmail()` | Returns users email (May return `null`) |
| String | `getFirstName()` | Returns first name of the user|
| String | `getLastName()` | Returns last name of the user|
| String | `getProfileUrl()` | Returns profile url of the user|
| String | `getAccessToken()` | Returns access token that can be used to retrive data later. You might want to store it for later use.|
| long | `getAccessTokenExpiry()` | Expiry timestamp of the access token in Millisecond. |

Security
========
To protect against [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) during authorization, the sdk uses a 16 character token by default. If you want to use your own CSRF token, then use the `setState` method of the `LinkedInBuilder` class.

* From within fragments:
```Kotlin
LinkedInFromFragmentBuilder.getInstance(MainActivity.this)
.setClientID("")
.setClientSecret("")
.setRedirectURI("")
.setState("")
.authenticate(LINKEDIN_REQUEST_CODE);
```

* From within activities:
```Kotlin
LinkedInFromActivityBuilder.getInstance(MainActivity.this)
.setClientID("")
.setClientSecret("")
.setRedirectURI("")
.setState("")
.authenticate(LINKEDIN_REQUEST_CODE);
```

Contributing
============
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.