0


在浏览 Facebook 登录的示例程序时,我遇到了 SessionLoginSample 的 LoginUsingActvity.java https://github.com/facebook/facebook-android-sdk/blob/master/samples/SessionLoginSample/src/com/facebook/samples/sessionlogin /LoginUsingActivityActivity.java

另一个示例使用 UiLifecycleHelper 使用不同的登录方法,如 Scrumptious 示例 https://github.com/facebook/facebook-android-sdk/blob/master/samples/Scrumptious/src/com/facebook/scrumptious/MainActivity.java

这两种类型有什么区别,我应该为一个简单的登录而放松,我感兴趣的权限很少。

我遇到的另一种方法是使用 OpenRequest

   OpenRequest op = new Session.OpenRequest((Activity) this);
   op.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
   op.setCallback(null);
   List<String> permissions = new ArrayList<String>();
   permissions.add("user_likes");
   permissions.add("email");
   permissions.add("user_birthday");
   op.setPermissions(permissions);

   Session session = new Builder(this).build();
   Session.setActiveSession(session);
   session.openForRead(op);

如果有不止一种登录方式,我很困惑知道哪一个可能是最好的方法。

4

1 回答 1

2

每种方法都运作良好。新事物是 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 或更低版本中使用第三种方法,因为以前的方法在大多数情况下会显示意外错误。

于 2013-06-06T19:33:09.310 回答