LinkedIn Android SDK - 無法連線 API (INVALID_REQUEST)

2022-09-03 16:08:52

我在连接到LinkedIn API 时遇到问题。

我正在关注这个 https://developer.linkedin.com/docs/android-sdk这个 https://developer.linkedin.com/docs/android-sdk-auth,但我得到这个错误代码:

{
"errorCode": "INVALID_REQUEST",
"errorMessage": "either bundle id or package name \/ hash are invalid, unknown, malformed"
}

到目前为止,我的实现非常简单:

public void shareOnLinkedin() {

    AuthListener authListener = new AuthListener() {
        @Override
        public void onAuthSuccess() {
            Log.d(TAG, "Success");
        }

        @Override
        public void onAuthError(LIAuthError error) {
            Log.d(TAG, error.toString());
        }
    };

    LISessionManager
            .getInstance(getApplicationContext())
            .init(ColectionDetailActivity.this, buildScope(), authListener, true);
}

private static Scope buildScope() {
    return Scope.build(Scope.R_BASICPROFILE, Scope.W_SHARE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    ...

    try {
        LISessionManager.getInstance(getApplicationContext())
                .onActivityResult(this, requestCode, resultCode, data);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

答案 1

确保您已在LinkedIn开发者控制台中正确添加了所有程序包哈希值。

生成调试键哈希值


它位于“移动”下,看起来像这样,

将使用LinkedIn SDK 的应用包:com.mypackage.app

生成的包哈希:/i17lYLZpSffk1wdD+KzlRJroZU=


答案 2

我遇到了同样的问题,在实现fb登录后,我开始实现LinkedIn登录,并添加了相同的哈希值,我为fb登录得到了它,但它不起作用。

为了解决这个问题,我做了以下操作。

对于发布哈希:

  1. 在您的发布apk上运行此命令以打印所有证书

    keytool -list -printcert -jarfile <your apk path>
    
  2. 复制 SHA1 值转到 http://tomeko.net/online_tools/hex_to_base64.php 并将 SHA1 十六进制值转换为 Base64

  3. 我得到的值与我从常规发布密钥库命令获得的值不同。

在仪表板中链接添加了哈希,并开始工作。

注意:如果有人知道为什么常规密钥库方法会失败以及为什么这个方法有效,请告诉我。

这是针对调试哈希:

上述方法也适用于调试apk。但这就是我如何获得调试apk的哈希值,它与给定的密钥库命令不同。

private void getTokenInfo() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "your package name here",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());

            Logger.d("packageName", info.packageName);
            Logger.d("hash", Base64.encodeToString(md.digest(), Base64.NO_WRAP));

        }
    } catch (PackageManager.NameNotFoundException e) {
        Logger.e(e);
    } catch (NoSuchAlgorithmException e) {
        Logger.e(e);
    }
}

这对我有用,我还没有理解这里发生了什么。


推荐