Popularity
0.5
Stable
Activity
0.0
-
4
1
1

Description

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

Programming language: Kotlin
License: GNU General Public License v3.0 only
Latest version: v1.2.0

LinkedIn-SDK-Android alternatives and similar packages

Based on the "SDK" category.
Alternatively, view LinkedIn-SDK-Android alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of LinkedIn-SDK-Android or a related project?

Add another 'SDK' Package

README

LinkedIn-SDK-Android

Download

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

Table of contents

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:

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

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, so it's mainly divided into use cases, data, presentation(MVVM) and ui layers. Each has its own package, with manual dependency injection system to inject them when needed.

Why this UnOfficial SDK?

Adding the SDK to your Project

Just add the dependency to your app level build.gradle file

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.
<uses-permission android:name="android.permission.INTERNET" />
  1. Initiate Login Request. (You might want to do this on click of a login button)
    • From within fragments: Kotlin LinkedInFromFragmentBuilder.getInstance(MainActivity.this) .setClientID("<YOUR_CLIENT_ID_HERE>") .setClientSecret("<YOUR_CLIENT_SECRET_HERE>") .setRedirectURI("<YOUR_REDIRECT_URL_HERE>") .authenticate(LINKEDIN_REQUEST_CODE);
* From within activities:
```Kotlin
LinkedInFromActivityBuilder.getInstance(MainActivity.this)
        .setClientID(Œ"<YOUR_CLIENT_ID_HERE>")
        .setClientSecret("<YOUR_CLIENT_SECRET_HERE>")
        .setRedirectURI("<YOUR_REDIRECT_URL_HERE>")
        .authenticate(LINKEDIN_REQUEST_CODE);
```

You can download the official Sign In with LinkedIn button images from here

  1. Handling Result: the sdk returns LinkedInUser object which contains the result data.
    @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 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:

    LinkedInFromFragmentBuilder.getInstance(MainActivity.this)
        .setClientID("<YOUR_CLIENT_ID_HERE>")
        .setClientSecret("<YOUR_CLIENT_SECRET_HERE>")
        .setRedirectURI("<YOUR_REDIRECT_URL_HERE>")
        .setState("<YOUR_CSRF_TOKEN_HERE>")
        .authenticate(LINKEDIN_REQUEST_CODE);
    
  • From within activities:

    LinkedInFromActivityBuilder.getInstance(MainActivity.this)
        .setClientID("<YOUR_CLIENT_ID_HERE>")
        .setClientSecret("<YOUR_CLIENT_SECRET_HERE>")
        .setRedirectURI("<YOUR_REDIRECT_URL_HERE>")
        .setState("<YOUR_CSRF_TOKEN_HERE>")
        .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.