我使用以下代码在android中使用LinkedIn登录
private void linkedInLogin() {
/*isLogin();*/
System.out.println( "insidelogin" + "linkedin" );
LISessionManager.getInstance( getApplicationContext() ).init( this, buildScope(), new AuthListener() {
@Override
public void onAuthSuccess() {
System.out.println( "sucesslogin" + "linkedin" );
accessLinkedInData();
}
@Override
public void onAuthError(LIAuthError error) {
// Handle authentication errors
System.out.println( "login_error" + error );
}
}, true );
}
private void accessLinkedInData() {
String url = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,email-address,picture-url)?format=json";
//String url = "https://api.linkedin.com/v1/people/~?format=json";
APIHelper apiHelper = APIHelper.getInstance( getApplicationContext() );
apiHelper.getRequest( this, url, new ApiListener() {
@Override
public void onApiSuccess(ApiResponse apiResponse) {
//System.out.println( "apiResponse" + apiResponse.getResponseDataAsString() );
JSONObject linkedinResponse = apiResponse.getResponseDataAsJson();
firstName = linkedinResponse.optString( "firstName" );
lastName = linkedinResponse.optString( "lastName" );
emailAddress = linkedinResponse.optString( "emailAddress" );
mLinkedInID = linkedinResponse.optString( "id" );
if (linkedinResponse.has( "pictureUrl" )) {
profilePicUrl = linkedinResponse.optString( "pictureUrl" );// profile picture for uploading sometimes it get null
}else {
profilePicUrl = "";
}
isSocialLogin = true;
socialLogin();
}
@Override
public void onApiError(LIApiError liApiError) {
// Error making GET request!
}
} );
}
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 );
}
并在开发模式下使用此代码生成哈希密钥
private void computeHash() {
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo( "com.cap.connectingjobs", PackageManager.GET_SIGNATURES );
for (Signature signature : packageInfo.signatures) {
MessageDigest messageDigest = MessageDigest.getInstance( "SHA" );
messageDigest.update( signature.toByteArray() );
Log.d( "KeyHash:", Base64.encodeToString( messageDigest.digest(), Base64.DEFAULT ) );
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
毕竟,这可以正常工作,但是当我使用
为最终版本创建哈希键时keytool -exportcert -keystore YOUR_RELEASE_KEY_PATH -alias YOUR_RELEASE_KEY_ALIAS | openssl sha1 -binary | openssl base64
并将哈希密钥添加到LinkedIn开发人员帐户,并运行显示错误的发行版apk文件
"errorMessage": "either bundle id or package name \/ hash are invalid, unknown, malformed", "errorCode": "UNKNOWN_ERROR"
答案 0 :(得分:2)
由于只有签名的APK才会出现此问题,因此您配置了错误的发布密钥哈希值。
尝试检查正确存储在LinkedIn application's configuration:中的“ android程序包名称和哈希” LinkedIn应用程序配置中正确列出的密钥库的发布密钥哈希值
生成发布密钥哈希
要生成释放密钥哈希,请使用以下命令:
keytool -exportcert -keystore YOUR_RELEASE_KEY_PATH -alias YOUR_RELEASE_KEY_ALIAS | openssl sha1 -binary | openssl base64
配置值
您可以使用以下逗号分隔的格式在LinkedIn应用程序的配置中提供一个或多个值:
Android.Package.Name,Key-Hash-Value
希望这会有所帮助。
答案 1 :(得分:0)
转到Play商店并下载APK的 MODIFIED 版本(您的应用->版本->管理->在APK图标附近下载符号)。
按照此处的说明进行操作:https://ibby.ca/extract-key-hash-apk-file/。生成另一个密钥哈希,将http://tomeko.net/online_tools/hex_to_base64.php中的SHA1转换为Base64值,并将其注册到Linkedin中作为发布哈希。