Truecaller Android SDK 错误代码3

19

我正在尝试在我的个人应用程序中实现Truecaller Android-SDK以进行登录/注册。我收到了Truecaller的合作伙伴密钥,以便在我的应用程序中实现它。按下“使用Truecaller自动填充”时返回“错误代码3”,在“public void onFailureProfileShared()”中调用“trueError.getErrorType()”。我似乎找不到描述错误的方法。是否有人知道如何解决这个错误?

我的实现:

public class auth extends AppCompatActivity implements ITrueCallback{

private TrueButton truebutton = null;
private TrueClient trueClient = null;

private String mTruecallerRequestNonce = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_auth);
    truebutton = (TrueButton) findViewById(R.id.com_truecaller_android_sdk_truebutton);

    boolean isUsable = truebutton.isUsable();
    if(isUsable) {
        trueClient = new TrueClient(auth.this, auth.this);
        truebutton.setTrueClient(trueClient);
    }
    else {
        truebutton.setVisibility(View.GONE);
    }

    truebutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            trueClient.getTruecallerUserProfile(auth.this);
        }
    });
}


@Override
protected void onResume() {
    mTruecallerRequestNonce = trueClient.generateRequestNonce();
    super.onResume();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(trueClient!=null && trueClient.onActivityResult(requestCode, resultCode, data)) {
        return;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onSuccesProfileShared(@NonNull TrueProfile trueProfile) {
    Toast.makeText(auth.this, trueProfile.firstName + " " + trueProfile.lastName, Toast.LENGTH_LONG).show();
}

@Override
public void onFailureProfileShared(@NonNull TrueError trueError) {
    Log.e("error code", trueError.getErrorType() + " ");
}
}
3个回答

13

以下是所有 TrueCaller 错误代码列表:

ERROR_TYPE_INTERNAL = 0;
ERROR_TYPE_NETWORK = 1;
ERROR_TYPE_USER_DENIED = 2;
ERROR_TYPE_UNAUTHORIZED_PARTNER = 3;
ERROR_TYPE_UNAUTHORIZED_USER = 4;
ERROR_TYPE_TRUECALLER_CLOSED_UNEXPECTEDLY = 5;
ERROR_TYPE_TRUESDK_TOO_OLD = 6;
ERROR_TYPE_POSSIBLE_REQ_CODE_COLLISION = 7;
ERROR_TYPE_RESPONSE_SIGNATURE_MISSMATCH = 8;
ERROR_TYPE_REQUEST_NONCE_MISSMATCH = 9;

这些代码是 TrueError 类的静态成员,所以您可以像这样访问它们:

switch (trueError.getErrorType()) {

    case TrueError.ERROR_TYPE_INTERNAL:
        // do something
        break;
    case TrueError.ERROR_TYPE_NETWORK:
        // do something else
        break;
    // etc.
}

在你的情况下,你收到的错误代码是3,ERROR_TYPE_UNAUTHORIZED_PARTNER。你确定已经获取了合作伙伴密钥,并在你的AndroidManifest.xml中添加了这行代码吗?

<meta-data android:name="com.truecaller.android.sdk.PartnerKey" android:value="YOUR_PARTNER_KEY_HERE"/>

是的,合作伙伴密钥我已经从Truecaller收到并添加到清单中了。 - VipiN Negi
1
在这种情况下,很可能签名不匹配。您是否确保为应用程序使用了与提交给Truecaller的相同签名密钥?此外,Android Studio可能会使用默认的调试证书而不是您自己的证书来签署您的调试应用程序。您可以查看此答案来解决这个问题。 - qualverse
抱歉,我不在站内。假设我的项目名称为“abc”,我在创建签名apk时为“abc”生成了一个名为“abc.jks”的密钥。我使用.jks文件在密钥位置文件夹中使用“keytool -list -v -keystore abc.jks”生成SHA1指纹。将相同的密钥提供给Truecaller,但我得到了不同的合作伙伴密钥。仍然出现相同的错误:3。 - VipiN Negi
我第一次尝试时也用了Debug密钥..但仍然没有成功 :( - VipiN Negi
此刻我无法确定发生了什么情况,但以下是Truecaller应用向其服务器发送的关于您的应用程序的所有信息(从反编译的Truecaller应用中获取):putString("PARTNERINFO_TRUESDK_VERSION", this.truesdkVersion); putString("PARTNERINFO_PARTNER_KEY", this.partnerKey); putString("PARTNERINFO_PACKAGE_NAME", this.packageName); putString("PARTNERINFO_APP_FINGERPRINT", this.appFingerprint); putString("PARTNERINFO_REQ_NONCE", this.reqNonce);如果您无法通过这些信息解决问题,您可能应该联系Truecaller支持。 - qualverse
自从上个月以来,我已经多次通过电子邮件联系Truecaller支持团队,但是他们没有回复。 - VipiN Negi

7

将您的构建变体从debug更改为release,并且使用发布的SHA1生成PartnerKey,然后构建应用程序。 我遇到了相同的问题,每次都会收到错误代码3。 将调试模式更改为发布模式解决了我的问题。


刚刚尝试了app-release.apk,仍然出现相同的错误代码3。 - VipiN Negi
谢谢Sayan,现在它可以正常工作了。实际上问题出在密钥上...我是用Debug SHA1生成的合作伙伴密钥,在测试发布的apk。 - VipiN Negi
抱歉延迟回复,我忘了提到发布的SHA1......很高兴终于知道你的合作伙伴密钥正常工作了。我也会更新我的帖子。 - Sayan Manna

7
最终得到了帮助使其正常工作。感谢 @Sayan 帮我迈出了接近成功的一步,感谢 @qualverse 帮我理解“错误代码”。
Truecaller要求您提供SHA1,并向您提供PartnerKey。我发现无论您的应用程序是发布版还是调试版,都不重要。如果使用调试SHA1密钥生成PartnerKey,则必须使用调试变体构建应用程序;如果使用发布SHA1生成PartnerKey,那么就要使用发布变体构建应用程序。
下面的截图将有助于了解关键类型:

enter image description here

您可以在Truecaller仪表板上为两个变体进行注册,以便同时处理这两个变体。请始终确保正确签署发布变体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接