Login Approach with Android Facebook 3.0 SDK

前端 未结 1 1590
旧时难觅i
旧时难觅i 2020-12-10 23:37


While going through the sample program for Facebook Login, I came across SessionLoginSample\'s LoginUsingActvity.java https://github.com/facebook/facebook-android-sd

1条回答
  •  时光说笑
    2020-12-11 00:22

    Every approach works well. The new thing is SDK 3.0 is session management. You just have to manage session state. Apart from your code I will state 3 more and then I'll tell you when to use them.

    1.

    Using Session object after getting active 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.

    By using default LoginButton Widget.

     
    
    
    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.

    Using 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
            }
    

    Use 3rd approach in devices 2.3 or lower because previous ones shows unexpected error on most cases.

    0 讨论(0)
提交回复
热议问题