每种方法都运作良好。新事物是 SDK 3.0 是会话管理。您只需要管理会话状态。除了您的代码之外,我将再说明 3 个,然后我会告诉您何时使用它们。
1.
获得活动会话后使用 Session 对象。
Session session = Session.getActiveSession();
if(session ==null)
session= new Session(getApplicationContext) // Also use session builder
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setPermissions(Arrays.asList("basic_info"))
.setCallback(statusCallback));
}
else
{
Session.openActiveSession(getActivity(), this, true, statusCallback);
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(session.isOpened()
//do something
}
2.
通过使用默认的 LoginButton 小部件。
<com.facebook.widget.LoginButton
android:id="@+id/authButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setFragment(this);
authButton.setReadPermissions(Arrays.asList(
"user_birthday",
"user_likes",
"read_stream",
));
Settings.addLoggingBehavior(LoggingBehavior.REQUESTS);
3.
使用网络对话框 -
Bundle bundle = new Bundle();
bundle.putString("message", "message");
WebDialog localWebDialog = new WebDialog.Builder(this, "app_id", "oauth", bundle).build();
localWebDialog.setOnCompleteListener(new WebDialog.OnCompleteListener()
{
public void onComplete(Bundle bundle, FacebookException facebookException)
{
Session.getActiveSession();
AccessToken localAccessToken = AccessToken.createFromExistingAccessToken(bundle.getString("access_token"), null, null, AccessTokenSource.WEB_VIEW, null);
Session.openActiveSessionWithAccessToken(MainActivity.this.getApplicationContext(), localAccessToken, MainActivity.this.callback);
}
});
localWebDialog.show();
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(session.isOpened()
//do something
}
在设备 2.3 或更低版本中使用第三种方法,因为以前的方法在大多数情况下会显示意外错误。