android linkedin集成

本文概述

  • 生成LinkedIn身份验证密钥和APP哈希密钥的步骤
  • 在Android应用中集成LinkedIn登录的示例
在本教程中,我们将在我们的Android应用程序中集成LinkedIn登录功能。在Android应用程序中实现LinkedIn API可以帮助用户使用LinkedIn帐户登录,分享帖子等。
要将LinkedIn API集成到我们的Android应用中,我们需要LinkedIn身份验证密钥(客户端ID和客户端密钥)和应用哈希密钥。
生成LinkedIn身份验证密钥和APP哈希密钥的步骤1.在https://www.linkedin.com/developer/apps上创建LinkedIn开发者帐户,然后单击“创建应用程序”。
android linkedin集成

文章图片
2.在“创建新应用程序”表单中填写Android应用程序的所有必需详细信息,并接受LinkedIn API使用条款,然后单击“提交”。
android linkedin集成

文章图片
3.提交应用程序详细信息后,它将生成LinkedIn身份验证密钥。现在,我们将选择“默认应用程序权限”。该权限授权访问用户帐户的权限。在这里,我们选择r_basicprofile和“ r_emailaddress”,然后单击“更新”。
android linkedin集成

文章图片
android linkedin集成

文章图片
4.现在,我们需要为应用程序提供“哈希键”。它可以通过两种不同的方式生成。
  • 在命令提示符下使用命令。
视窗:
keytool -exportcert -keystore %HOMEPATH%\.android\debug.keystore -alias androiddebugkey | openssl sha1 -binary | openssl base64

Mac / Unix
keytool -exportcert -keystore ~/.android/debug.keystore -alias androiddebugkey | openssl sha1 -binary | openssl base64

【android linkedin集成】要通过命令提示符生成哈希密钥,需要在我们的操作系统中安装OpenSSL。我们可以从www.slproweb.com/products/Win32OpenSSL.html在Windows上下载它,并从http://www.openssl.org/source/在Mac / Unix上下载它。
  • 使用Activity.java类中的编程代码。
PackageInfo info = getPackageManager().getPackageInfo( "Your Package Nane", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));

对于此应用程序,我们将使用编程代码为我们的应用程序生成“哈希密钥”。
现在创建我们的应用程序,只需编写以下代码并运行以生成我们的“哈希密钥”。它将在Logcat中显示应用程序“哈希密钥”。
MainActivity.java
package example.com.linkedinlogindemo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Base64; import android.util.Log; import java.security.MessageDigest; public class MainActivity extends AppCompatActivity { public static final String PACKAGE = "example.com.linkedinlogindemo"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); computePakageHash(); }private void computePakageHash() { try { PackageInfo info = getPackageManager().getPackageInfo( "example.com.linkedinlogindemo", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (Exception e) { Log.e("TAG", e.getMessage()); } } }

android linkedin集成

文章图片
5.从Logcat复制“哈希密钥”,并将其粘贴到我们的LinkedIn应用程序的“移动”选项卡中。之后,单击“添加”和“更新”。这使我们的应用程序“哈希键”已在LinkedIn API中注册。
android linkedin集成

文章图片
在Android应用中集成LinkedIn登录的示例让我们创建一个在我们的Android应用程序中集成LinkedIn登录功能的示例。成功登录用户后,它将把用户重定向到另一个活动(ProfileActivity)并显示用户信息。
我们需要在项目中添加Android版LinkedIn SDK。可以从这里https://developer.linkedin.com/downloads下载
在activity_main.xml文件中添加以下代码。从LinkedIn开发人员网站https://developer.linkedin.com/downloads下载推荐的LinkedIn按钮,并将其添加为按钮的背景。
< ?xml version="1.0" encoding="utf-8"?> < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.com.linkedinlogindemo.MainActivity">< TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:textSize="20dp" android:layout_centerHorizontal="true" android:text="This is Login Page" />< Button android:id="@+id/login_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="17dp" android:background="@drawable/loginbutton" tools:layout_editor_absoluteX="58dp" tools:layout_editor_absoluteY="437dp" />< /RelativeLayout>

MainActivity.java
在MainActivity.java类中,我们使用LISessionManager类,该类提供了创建和管理LISession对象(LinkedIn会话对象)的所有功能。在构建中,范围添加了“ Scope.R_BASICPROFILE”和“ Scope.R_EMAILADDRESS”以访问用户基本个人资料信息和LinkedIn的电子邮件地址。
package example.com.linkedinlogindemo; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.linkedin.platform.LISessionManager; import com.linkedin.platform.errors.LIAuthError; import com.linkedin.platform.listeners.AuthListener; import com.linkedin.platform.utils.Scope; public class MainActivity extends AppCompatActivity { Button loginBtn; TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); loginBtn = (Button) findViewById(R.id.login_button); textView=(TextView)findViewById(R.id.textView); loginBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { loginHandle(); } }); } public void loginHandle() { LISessionManager.getInstance(getApplicationContext()).init(MainActivity.this, buildScope(), new AuthListener() { @Override public void onAuthSuccess() { // Authentication was successful.You can now do other calls with the SDK.Intent intent=new Intent(MainActivity.this, ProfileActivity.class); startActivity(intent); }@Override public void onAuthError(LIAuthError error) { // Handle authentication errors Toast.makeText(getApplicationContext(), "Login Error "+error.toString(), Toast.LENGTH_LONG).show(); } }, true); }private static Scope buildScope() { return Scope.build(Scope.R_BASICPROFILE, Scope.R_EMAILADDRESS); }@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Add this line to your existing onActivityResult() method LISessionManager.getInstance(getApplicationContext()).onActivityResult(this, requestCode, resultCode, data); }}

activity_profile.xml
现在,将以下代码添加到activity_profile.xml文件中。在此活动中,成功登录后,我们将显示用户信息。
< ?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal" tools:context="example.com.linkedinlogindemo.ProfileActivity">< TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Welcome to profile" /> < TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/userDetail" android:text="userdetail" android:layout_marginTop="20dp" /> < Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="30dp" android:textColor="#FFF" android:text="logout" android:id="@+id/logout_button" android:background="#022885" /> < /LinearLayout>

ProfileActivity.java
在APIHelper类的getRequest()方法中添加LinkedIn API URL https://api.linkedin.com/v1/people/~:(id,名字,姓氏,电子邮件地址)。它将获取有关LinkedIn API成功的用户信息。
package example.com.linkedinlogindemo; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.linkedin.platform.APIHelper; import com.linkedin.platform.LISession; import com.linkedin.platform.LISessionManager; import com.linkedin.platform.errors.LIApiError; import com.linkedin.platform.listeners.ApiListener; import com.linkedin.platform.listeners.ApiResponse; import org.json.JSONException; import org.json.JSONObject; public class ProfileActivity extends AppCompatActivity { TextView user_detail; String firstName, lastName, userEmail; Button logout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_profile); user_detail=(TextView)findViewById(R.id.userDetail); logout=(Button)findViewById(R.id.logout_button); fetchuserData(); logout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { LISessionManager.getInstance(getApplicationContext()).clearSession(); Toast.makeText(getApplicationContext(), "Logout Successfully", Toast.LENGTH_LONG).show(); Intent intent = new Intent(ProfileActivity.this, MainActivity.class); startActivity(intent); } }); }private void fetchuserData() { String url = "https://api.linkedin.com/v1/people/~:(id, first-name, last-name, email-address)"; APIHelper apiHelper = APIHelper.getInstance(getApplicationContext()); apiHelper.getRequest(this, url, new ApiListener() { @Override public void onApiSuccess(ApiResponse apiResponse) { // Success! try { JSONObject jsonObject = apiResponse.getResponseDataAsJson(); firstName = jsonObject.getString("firstName"); lastName = jsonObject.getString("lastName"); userEmail = jsonObject.getString("emailAddress"); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("First Name " + firstName + "\n\n"); stringBuilder.append("Last Name " + lastName + "\n\n"); stringBuilder.append("Email " + userEmail); user_detail.setText(stringBuilder); } catch (JSONException e) { e.printStackTrace(); }}@Override public void onApiError(LIApiError liApiError) { // Error making GET request! Toast.makeText(getApplicationContext(), "API Error"+liApiError.toString(), Toast.LENGTH_LONG).show(); } }); } }

输出:
android linkedin集成

文章图片
android linkedin集成

文章图片
android linkedin集成

文章图片
android linkedin集成

文章图片

    推荐阅读