gpt4 book ai didi

android - 无法获取适用于 Android 的 Facebook SDK 4.8.1 的访问 token (或)未调用 FacebookCallback(或)requestCode 在 Facebook 集成中不同

转载 作者:行者123 更新时间:2023-11-29 01:24:53 27 4
gpt4 key购买 nike

我关注了Facebook login for Android将 FB 集成到我的 Android 应用程序中。完成了。我看到权限屏幕,用户必须在其中接受使用他的电子邮件 ID。问题是没有调用 FacebookCallback 的回调。

我遵循了上述教程中提到的相同步骤。

  • 我启动了 FB SDK。
  • 然后创建了 CallBackManager 实例。
  • 有 setFragment(this)。
  • 以这种方式注册 FacebookCallback 回调

fragment 代码:

    public class MyFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(this.getActivity().getApplicationContext());
super.onCreate(savedInstanceState);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mButtonFbLogin.setReadPermissions(Arrays.asList("email"));
mButtonFbLogin.setFragment(this);

mCallbackManager = CallbackManager.Factory.create();

mButtonFbLogin.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "FB Login Successful. Token : " +loginResult.getAccessToken());
}

@Override
public void onCancel() {
Log.d(TAG, "FB Login cancelled..");
}

@Override
public void onError(FacebookException e) {
Log.d(TAG, "FB Login failed. Exception : " +e.toString());
}
});
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult of Fragment..");
mCallbackManager.onActivityResult(requestCode, resultCode, data);

}

}
  • 最后我调用了 mCallbackManager.onActivityResult(requestCode, resultCode, data);。我的 Activity 的 onActivityResult() 首先从我调用 fragment 的 onActivityResult() 的地方调用。

通过日志,我看到我的 fragment 的 onActivityResult 被调用,callbackManger 的 onActivityResult() 也被调用。但是没有调用 Facebook Callback 的回调。

有什么线索吗?

AccessToken.getCurrentAccessToken() 是一种可以在onCreate() 中使用的方法。但是有了这个我不能确切地知道第一次创建 token 的时间。

AccessTokenTracker实际上是跟踪 token 的变化,但不知道登录 session 何时成功、失败或取消。

更新:

我刚刚尝试使用 AccessTokenTracker,但是在我在权限屏幕上按下“确定”并且控制权返回到我的 fragment 后,没有调用 onCurrentAccessTokenChanged()。这是代码:

@覆盖public void onCreate(Bundle savedInstanceState) { FacebookSdk.sdkInitialize(this.getActivity().getApplicationContext());

mAccessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
Log.d(TAG, "onCurrentAccessTokenChanged : old : " +oldAccessToken);
Log.d(TAG, "onCurrentAccessTokenChanged : new : " +currentAccessToken);
}
};
mAccessTokenTracker.startTracking();

super.onCreate(savedInstanceState);

最佳答案

我有 MainActivity,它包含生成 CChildFragment 的 MainFragment。 ChildFragment 是添加 LoginButton 的地方。

MainActivity -> MainFragment -> ChildFragment(登录按钮)。

我在 MainActivity 和 ChildFragment 中也有 onActivityResult() 。在 MainActivity 的 onActivityResult() 中,我显式调用了 childFragment.onActivityResult(),其中我调用了 CallbackManager.onActivityResult()。我在 ChildFragment 中做了 setFragment(this)。一切正常,但没有调用 FacebookCallback 中的任何回调。

我尝试了多种解决方案并调试了 Facebook 代码,发现他们使用的 requestCode 作为索引来存储我们发送的回调。此代码在存储回调和检索回调时是不同的。所以什么也没发生。

作为 debuggin 的一部分,我将完整的代码移到了 MainFragment 中,它可以正常工作。 :-)

因此,解决方案 是覆盖 MainFragment 中的 onActivityResult() 并从那里调用 ChildFragment 的 onActivityResult()。有效。

因此,结论是,如果您将 LoginButton 放在子 fragment/嵌套 fragment 中,Facebook sdk 将调用父 fragment 的 onActivityResult 而不是子 fragment 或 Activity 的 onActivityResult()。

关于android - 无法获取适用于 Android 的 Facebook SDK 4.8.1 的访问 token (或)未调用 FacebookCallback(或)requestCode 在 Facebook 集成中不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34594971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com