0


Facebook ログインのサンプル プログラムを調べているときに、SessionLoginSample の LoginUsingActvity.java https://github.com/facebook/facebook-android-sdk/blob/master/samples/SessionLoginSample/src/com/facebook/samples/sessionloginに出会いました。 /LoginUsingActivityActivity.java

別の例では、UiLifecycleHelper を使用してログインする別の方法があり ます。

これらの 2 つのタイプの違いは何ですか。興味のある権限がほとんどない単純なログインを使用する必要があります。

私が遭遇したもう1つの方法は、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.

Webdialog の使用 -

 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 以下のデバイスでは 3 番目のアプローチを使用してください。以前のデバイスではほとんどの場合に予期しないエラーが表示されるためです。

于 2013-06-06T19:33:09.310 に答える