我正在尝试通过Facebook SDK登录并通过Graph检索用户的fb id。以下是实施:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* Facebook Authentication */
LoginButton authButton = (LoginButton) rootView.findViewById(R.id.authButton);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
Log.i(TAG, "Error " + error.getMessage());
}
});
// set permission list, Don't forget to add email
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
// session state call back event
authButton.setSessionStatusCallback(new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
Log.i(TAG, session.toString());
if (session.isOpened()) {
// not accessed
Log.i(TAG, "Access Token" + session.getAccessToken());
Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
Log.d("Social", user.getId());
// not accessed
}
}
}).executeAsync();
}
}
}); // Facebook Auth end
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(getActivity(), requestCode, resultCode, data);
}
布局中的Facebook登录按钮:
<com.facebook.widget.LoginButton xmlns:fb="http://schemas.android.com/apk/res-auto"
android:id="@+id/authButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textView"
fb:login_text="Login with Facebook"
fb:logout_text="Logout" />
一切都很好。我可以看到蓝色登录按钮。但是当我按下登录时,它返回了这一行:
{Session state:OPENING, token:{AccessToken token:ACCESS_TOKEN_REMOVED permissions:[]}, appId:xxxxx}
我已经在设置中设置了Keyhash,并且App ID是正确的。
我正在使用Facebook SDK 3.7。在此之前它有效。在Facebook更新其SDK后,它不再起作用了。
这段代码出了什么问题?
答案 0 :(得分:0)
而不是覆盖片段中的onActivityResult
,我必须将其放在托管片段的MainActivity中。
内部主要活动:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(getActivity(), requestCode, resultCode, data);
}