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则需要去申请
也有可能是密钥生成错误或者是其他的原因,那就祝你好运啦