Android 集成facebook授权登录以及过程中登录错误,密钥散列不匹配

Facebook开发文档
授权登录还是比较简单的,看着文档一步步下来就好。集成登录的代码也较少,直接在登录的activity写即可。

主要说下可能会遇到的问题:
授权登录出现: 应用程序未设置:此应用程序仍处于开发模式,并且您无权访问它…
这个时候要在facebook控制台顶部位置点击 开发中 设置成上线即可(ps:需要隐私政策和用户数据删除网址)
在这里插入图片描述

那么当你设置成上线模式的时候

    [code] 1349195 [message]: 该密钥散列不匹配任何已存储的密钥散列。请前往 https://developers.facebook.com/docs/facebook-login/android 了解更多信息。 [extra]: 
        at X.1aA.onError(:268275)
        at com.facebook.common.jniexecutors.NativeRunnable.run(Native Method)
        at com.facebook.common.jniexecutors.PooledNativeRunnable.run(:73542)
        at X.0gj.execute(:61285)
        at com.facebook.common.jniexecutors.NativeRunnable.run(Native Method)
        at com.facebook.common.jniexecutors.PooledNativeRunnable.run(:73542)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
        at X.1kv.run(:117294)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:457)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at X.1l8.run(:117313)
        at java.lang.Thread.run(Thread.java:784)

通过文档方式获取的密钥只能在开发模式使用,使用以下方式获取发布密钥散列

    private void facebookKeyHash(){
        try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "cn.appblog.example",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.e("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {

        } catch (NoSuchAlgorithmException e) {

        }
    }

还有可能出现的问题是: 登录错误:将您登录到此应用程序时出错。请稍后再试
我的原因是因为申请了没有权限的功能

facebook.setOnClickListener(v -> LoginManager.getInstance()
			.logInWithReadPermissions(this, 
				Arrays.asList("public_profile", "email", "user_friends")));

一般默认是只有public_profile和email,如果需要更多的权限比如user_friends则需要去申请
申请权限即可
也有可能是密钥生成错误或者是其他的原因,那就祝你好运啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值