gpt4 book ai didi

Android Facebook SDK 4.0 使用 LoginManager 登录

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:17:06 38 4
gpt4 key购买 nike

我正在尝试将旧应用程序的登录代码从 SDK 3.0 迁移到 SDK 4.0。我使用 LoginManager 实现了登录,因为我有自定义登录按钮。

问题是我没有从 Facebook API 得到任何响应。没有成功,没有错误,没有抛出任何异常。代码如下:

    //global refs
//callbacks
private CallbackManager mCallbackManager;
private FacebookCallback<LoginResult> mFacebookCallback;

private List<String> mPermissions = Arrays.asList("email");
private LoginManager mLoginMgr;
private Activity mActivity;

//........

//code is inside method
FacebookSdk.sdkInitialize(getApplicationContext());

//perhaps a bit excessive
FacebookSdk.addLoggingBehavior(LoggingBehavior.GRAPH_API_DEBUG_INFO);
FacebookSdk.addLoggingBehavior(LoggingBehavior.DEVELOPER_ERRORS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
FacebookSdk.addLoggingBehavior(LoggingBehavior.INCLUDE_RAW_RESPONSES);
FacebookSdk.setApplicationId(mActivity.getString(R.string.sample_fb_id));

//init callbacks
mFacebookCallback = new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.v("LoginActivity login", loginResult.toString());
GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
// Application code
Log.v("LoginActivity", response.toString());
try {
String email = object.getString("email");
Log.v("LoginActivity", "obtained email: ", email);
} catch (JSONException e) {
e.printStackTrace();
}
}
});
request.executeAsync();
}
@Override
public void onCancel() {
Log.e("LoginActivity", "facebook login canceled");
}

@Override
public void onError(FacebookException e) {
Log.e("LoginActivity", "facebook login failed error");
}
};
mCallbackManager = CallbackManager.Factory.create();
mLoginMgr = LoginManager.getInstance();
mLoginMgr.registerCallback(mCallbackManager, mFacebookCallback);
mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);

使用 Debugger,我可以看到这一行:mLoginMgr.logInWithReadPermissions(mActivity, mPermissions);被执行,但没有任何 callbacks 被触发。我在控制台中也没有错误,设备屏幕变黑,没有任何反应。

我认为这无关紧要,但代码是在包装类中执行的(在 Activity 之外)。我在 Activity 中尝试过,但没有任何区别。

有什么建议吗?非常感谢。

编辑:

这是在 AndroidManifest.xml 中声明的:

<activity android:name="com.facebook.FacebookActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:label="@string/app_name" />

最佳答案

如果您的代码在 fragment 中,请不要使用 mActivity 变量作为 Activity 上下文。

要做的事情:

  1. 添加一行:

     callbackManager.onActivityResult(requestCode, resultCode, data); in onActivityResult(, , , ) in fragment.
  2. 调用:

     LoginManager.getInstance().logInWithReadPermissions(**this**, Arrays.asList("public_profile", "user_friends")); 

使用this,不使用this.getActivity()

  1. 好的,完成。

关于Android Facebook SDK 4.0 使用 LoginManager 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29945195/

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