我正在将“使用 Facebook 登录”集成到我的 Android 应用程序中,但我遇到了一个奇怪的问题,这是我第一次(也是第一次)启动我的应用程序(就在安装了新副本之后)Facebook 回调在我点击按钮后没有被调用(但正常登录)。如果我正常登录(或使用 Facebook),然后第二次注销,然后回调会正常触发。
我需要回调来执行一些用户会话操作,所以我对此很生气,很多天都找不到解决方案,所以我希望任何人都可以帮助我。我的 facebookCallBackManager() 函数在 onCreate 中调用。
在我下面的示例中,我需要 getFacebookUserData() 方法才能被触发,但设置断点和调试甚至 onSucces 都不会被触发。
提前致谢!
下面我将我的回调代码粘贴到我的 ActivityLogin 类中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
callbackManager.onActivityResult(requestCode, resultCode, data);
}
private void facebookCallBackManager() {
callbackManager = CallbackManager.Factory.create();
LoginButton btnFacebookLogin = (LoginButton) findViewById(R.id.btnFacebookLogin);
btnFacebookLogin.setReadPermissions("public_profile", "email", "user_friends");
btnFacebookLogin.registerCallback(callbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
GraphRequest.newMeRequest(
loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject json, GraphResponse response) {
if (response.getError() != null) {
// handle error
} else {
getFacebookUserData(json);
}
}
}
).executeAsync();
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException exception) {
if (!GeneralUtils.isOnline(oContext)){
GeneralUtils.showNoInternet(strTheme, oContext, ActivityLogin.this);
}else{
String strMessage=exception.getMessage();
GeneralUtils.showToast(strMessage, Toast.LENGTH_LONG, strTheme, ActivityLogin.this);
}
}
});
}
编辑1:
我忘了说我使用的是 SDK 4.23.0,所以不再需要 SDK 初始化。
编辑2:
更多可能有用的信息。
我的 ActivityMain 是主要的和默认的,如果用户未登录则启动时重定向到登录是通过下一行完成的:
private void doLogin(){
Intent i = new Intent(getApplicationContext(), ActivityLogin.class);
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
this.startActivity(i);
}
好吧,我会回答我自己的问题,以防万一它可以帮助任何可能面临相同(或类似)问题的人,但首先我必须说 @Michal_196 已经让我朝着正确的方向发展,所以我首先要感谢他。
第一次启动应用程序时未触发回调的问题与我调用 ActivityLogin 活动的方式有关,具体来说: setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
我的流程是调用 ActivityMain 并检查已登录的用户,如果不是,我将重定向到 ActivityLogin 并避免在后退按钮后登录时未登录的用户能够回击并访问我拥有的应用程序添加了“FLAG_ACTIVITY_NO_HISTORY”以从历史记录中清除主要内容,但我不知道为什么这是回调没有被解雇的罪魁祸首。
删除该行后,不仅回调工作正常,而且如果用户启动应用程序并被重定向到从主登录并点击返回按钮而不登录应用程序只是按预期退出,奇怪但有效!
编辑1:
现在思考得更好,我明白发生了什么,FLAG_ACTIVITY_NO_HISTORY 而不是从堆栈中清除主要活动表明登录活动不应该放在堆栈上,因此在调用 facebook 后没有触发回调,现在我很清楚,我已经解决了我的问题。再次感谢@Michal_196。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句