📜  Android 集成LinkedIn API

📅  最后修改于: 2020-10-11 06:06:23             🧑  作者: Mango

将LinkedIn API集成到Android App中

在本教程中,我们将在我们的Android应用程序中集成LinkedIn登录功能。在Android应用程序中实现LinkedIn API可以帮助用户使用LinkedIn帐户登录,分享帖子等。

要将LinkedIn API集成到我们的Android应用中,我们需要LinkedIn身份验证密钥(客户端ID和客户端密钥)和应用哈希密钥。

生成LinkedIn身份验证密钥和APP哈希密钥的步骤

1.通过https://www.linkedin.com/developer/apps创建LinkedIn开发者帐户,然后单击“创建应用程序”。

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

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


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

要通过命令提示符生成哈希密钥,需要在我们的操作系统中安装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());
        }
    }
}

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

在Android应用中集成LinkedIn登录的示例

让我们创建一个在我们的Android应用程序中集成LinkedIn登录功能的示例。用户成功登录后,它将把用户重定向到另一个活动(ProfileActivity)并显示用户信息。

我们需要在项目中添加Android版LinkedIn SDK。可以从这里https://developer.linkedin.com/downloads#androidsdk下载。

在activity_main.xml文件中添加以下代码。从LinkedIn开发人员网站https://developer.linkedin.com/downloads下载推荐的LinkedIn按钮,并将其添加为按钮的背景。




    

    

MainActivity.java

在MainActivity.java类中,我们使用LISessionManager类,该类提供了创建和管理LISession对象(LinkedIn会话对象)的所有功能。在构建中,scope添加了“ 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文件中添加以下代码。在此活动中,成功登录后,我们将显示用户信息。




    
    
    

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();
            }
        });
    }
}

输出: