Linkedin Integration - To provide the one click signup and signin process in the application, Android developers provide the login with social sites facilities like- facebook, twitter, linkedin, g+ etc. This tutorial guide you for Linkedin one click signup and signin process.
Steps to use recycle view in your project.
- Crate a project in android studio.
- First download linkedin sdk(Download SDK) and import as a module in your project.
- Open build.gradle(app) and add some dependency
//______add linkedin-sdk as a dependency compile project(':linkedin-sdk') //______add picaso dependency for image loding compile 'com.squareup.picasso:picasso:2.5.2'
- Click on "Sync Now"
- Open your main_activity.xml and update it-
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" tools:context="com.pankaj.linkedindemo.MainActivity"> <!--to show user image--> <ImageView android:id="@+id/ivUser" android:layout_width="180dp" android:layout_height="180dp" android:layout_margin="5dp" android:src="@drawable/ic_launcher" /> <!--to show user name--> <TextView android:id="@+id/tvName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="Point of Android" /> <!--to show user email--> <TextView android:id="@+id/tvMail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="e@mail.com" /> <!--for login with linkedin--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="login" android:text="Login with linkedin" /> <!--for generate keyhash--> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="generateHashkey" android:text="Genrate KeyHash" /> <!--to show package name--> <TextView android:id="@+id/tvPackage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="package" /> <!--to show keyhash--> <TextView android:id="@+id/tvKeyHash" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="Keyhash" /> </LinearLayout>
- Open your MainActivity.JAVA class and update it -
package com.pankaj.linkedindemo; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Base64; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.linkedin.platform.APIHelper; import com.linkedin.platform.LISessionManager; import com.linkedin.platform.errors.LIApiError; import com.linkedin.platform.errors.LIAuthError; import com.linkedin.platform.listeners.ApiListener; import com.linkedin.platform.listeners.ApiResponse; import com.linkedin.platform.listeners.AuthListener; import com.linkedin.platform.utils.Scope; import com.squareup.picasso.Picasso; import org.json.JSONObject; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MainActivity extends AppCompatActivity { //__________create objects private TextView tvName, tvMail, tvPackage, tvKeyHash; private ImageView ivUser; private final String TAG = MainActivity.class.getSimpleName(); private final String PACKAGE = "com.pankaj.linkedindemo"; private final String host = "api.linkedin.com"; private final String topCardUrl = "https://" + host + "/v1/people/~:(email-address,formatted-name,phone-numbers,public-profile-url,picture-url,picture-urls::(original))"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //___________initialization tvName = (TextView) findViewById(R.id.tvName); tvMail = (TextView) findViewById(R.id.tvMail); tvPackage = (TextView) findViewById(R.id.tvPackage); tvKeyHash = (TextView) findViewById(R.id.tvKeyHash); ivUser = (ImageView) findViewById(R.id.ivUser); } //____________methode will be call when click on login with linkedin public void login(View view) { //____________authentication request LISessionManager.getInstance(getApplicationContext()).init(this, buildScope(), new AuthListener() { @Override public void onAuthSuccess() { } @Override public void onAuthError(LIAuthError error) { Toast.makeText(getApplicationContext(), "failed " + error.toString(), Toast.LENGTH_LONG).show(); } }, true); } //_________create scope to get permission for access data from linkedin. private static Scope buildScope() { return Scope.build(Scope.R_BASICPROFILE, Scope.R_EMAILADDRESS); } //___________After complete authentication start new HomePage Activity @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { LISessionManager.getInstance(getApplicationContext()).onActivityResult(this, requestCode, resultCode, data); getUserData(); } //___________get data from linked in server private void getUserData() { //_______add request to get data APIHelper apiHelper = APIHelper.getInstance(getApplicationContext()); apiHelper.getRequest(this, topCardUrl, new ApiListener() { @Override public void onApiSuccess(ApiResponse result) { //_________set captured data on screen setUserProfile(result.getResponseDataAsJson()); } @Override public void onApiError(LIApiError error) { error.printStackTrace(); } }); } //___________set data to the screen public void setUserProfile(JSONObject response) { try { Log.e("linkedin response", response.toString()); //__set email address tvMail.setText(response.get("emailAddress").toString()); //__set Name tvName.setText(response.get("formattedName").toString()); //parce emage address String imageUrl = (String) response.getJSONObject("pictureUrls").getJSONArray("values").get(0); //_________load profile image image Picasso.with(this).load(imageUrl).into(ivUser); } catch (Exception e) { e.printStackTrace(); } } //______________genrate hashkey public void generateHashkey(View view) { try { PackageInfo info = getPackageManager().getPackageInfo(PACKAGE, PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); //___________set package name tvPackage.setText(PACKAGE); //___________set keyhash tvKeyHash.setText(Base64.encodeToString(md.digest(), Base64.NO_WRAP)); //___________add package name and key hash into log Log.e(TAG, "_____________________________________________"); Log.e("Package", PACKAGE); Log.e("KeyHash", tvKeyHash.getText().toString()); Log.e(TAG, "_____________________________________________"); Toast.makeText(this, "Check your logcate for keyhash", Toast.LENGTH_SHORT).show(); } } catch (PackageManager.NameNotFoundException e) { Log.d(TAG, e.getMessage(), e); } catch (NoSuchAlgorithmException e) { Log.d(TAG, e.getMessage(), e); } } }
- Now all the development steps for linkedin integration has completed, Please run the application and see the screen of device.
- Now add an application on linkedin developer console(Linkedin Developer Console).
click on Create application - fill all the information required to create the app and submit it.
- Look at the "Default Application Permissions". check the required permission box.
- Click on update.
- Select mobile from the left menu.
- Look on the "Android Settings" add package name and package Key Hash
- For package name and key has check your logcate.
- Click on update.
- Now go to the mobile application and click on "Login with Linkedin" and you will see the permission screen, then click on "OK".
- You can see the logedin user data(name,email and image) on you screen
- Good bye, Thanks to read this blog.