Android Facebook 登录回调从不触发
Android Facebook login callbacks never fire
我创建了一个带有 facebook 登录按钮的 activity 并在 onCreate 方法中注册了回调。现在,当我按下登录按钮并通过 facebook 登录时,我希望我的回调被触发,但它们没有。我做错了什么?
CallbackManager callbackManager;
LoginButton loginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(getApplicationContext());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
callbackManager = CallbackManager.Factory.create();
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "Cancelled!", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException e) {
Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
}
});
}
因为您发布的回调代码不起作用。
我假设您已经在 Facebook 开发者控制台上创建了一个项目,获得了开发哈希并且状态设置为 public。
您的应用程序清单包含应用程序 ID 的元数据标记。
因此,进一步了解您的代码,在您的 activity 中添加 onActivityResult() 并将其转发给您的 callbackManager。 (Facebook Documentation)
如果登录成功,则 LoginResult 参数具有新的 AccessToken,以及最近授予或拒绝的权限。
您不需要 registerCallback 即可成功登录,您可以选择使用下面描述的 AccessTokenTracker class 来跟踪当前访问令牌的更改。
然后在onActivityResult()中将登录结果转发给在onCreate()中创建的callbackManager:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
我遇到了同样的问题。请检查您是否在清单文件中添加了以下内容:
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
以及您的 strings.xml 中的以下内容:
<string name="fb_login_protocol_scheme">fbAPP_ID</string>
请注意在上一行中,您的应用程序 ID 应以 "fb" 开头。 Facebook 文档中清楚地提到了这一点,我没有注意到这个细节。
如果你的App ID是1234567,你应该使用fb1234567
但是当你调用 FacebookSdk.setApplicationId() 时,你不需要前缀 fb。
参考:https://developers.facebook.com/docs/facebook-login/android
我创建了一个带有 facebook 登录按钮的 activity 并在 onCreate 方法中注册了回调。现在,当我按下登录按钮并通过 facebook 登录时,我希望我的回调被触发,但它们没有。我做错了什么?
CallbackManager callbackManager;
LoginButton loginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(getApplicationContext());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
loginButton = (LoginButton) findViewById(R.id.login_button);
loginButton.setReadPermissions("user_friends");
callbackManager = CallbackManager.Factory.create();
loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Toast.makeText(getApplicationContext(), "Success!", Toast.LENGTH_LONG).show();
}
@Override
public void onCancel() {
Toast.makeText(getApplicationContext(), "Cancelled!", Toast.LENGTH_LONG).show();
}
@Override
public void onError(FacebookException e) {
Toast.makeText(getApplicationContext(), "Error!", Toast.LENGTH_LONG).show();
}
});
}
因为您发布的回调代码不起作用。
我假设您已经在 Facebook 开发者控制台上创建了一个项目,获得了开发哈希并且状态设置为 public。
您的应用程序清单包含应用程序 ID 的元数据标记。
因此,进一步了解您的代码,在您的 activity 中添加 onActivityResult() 并将其转发给您的 callbackManager。 (Facebook Documentation)
如果登录成功,则 LoginResult 参数具有新的 AccessToken,以及最近授予或拒绝的权限。
您不需要 registerCallback 即可成功登录,您可以选择使用下面描述的 AccessTokenTracker class 来跟踪当前访问令牌的更改。
然后在onActivityResult()中将登录结果转发给在onCreate()中创建的callbackManager:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
我遇到了同样的问题。请检查您是否在清单文件中添加了以下内容:
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/fb_login_protocol_scheme" />
</intent-filter>
</activity>
以及您的 strings.xml 中的以下内容:
<string name="fb_login_protocol_scheme">fbAPP_ID</string>
请注意在上一行中,您的应用程序 ID 应以 "fb" 开头。 Facebook 文档中清楚地提到了这一点,我没有注意到这个细节。 如果你的App ID是1234567,你应该使用fb1234567 但是当你调用 FacebookSdk.setApplicationId() 时,你不需要前缀 fb。 参考:https://developers.facebook.com/docs/facebook-login/android