如何檢查用戶是否使用FB SDK 4.0 for Android登錄?


1 Answers

我知道了!

首先,確保已初始化FB SDK。 其次,添加以下內容:

accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
            updateWithToken(newAccessToken);
        }
    };

噹噹前訪問令牌發生變化時,將調用此方法。 這意味著,這只會在用戶已經登錄時幫助您。

接下來,我們將其添加到onCreate()方法:

updateWithToken(AccessToken.getCurrentAccessToken());

當然,我們的updateWithToken()方法:

private void updateWithToken(AccessToken currentAccessToken) {

    if (currentAccessToken != null) {
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                Intent i = new Intent(SplashScreen.this, GeekTrivia.class);
                startActivity(i);

                finish();
            }
        }, SPLASH_TIME_OUT);
    } else {
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                Intent i = new Intent(SplashScreen.this, Login.class);
                startActivity(i);

                finish();
            }
        }, SPLASH_TIME_OUT);
    }
}

這樣做對我來說! =]

Question

幾天前,我實現了FB登錄到我的APP,今天我發現我已經實現的大部分內容現已棄用。

之前,我正在使用Session來查看用戶是否已登錄。 但是,這不適用於新的SDK。

根據他們的文檔,我們可以使用AccessToken.getCurrentAccessToken()Profile.getCurrentProfile()來檢查用戶是否已經登錄,但我無法使用它們。

我試過這樣的事情:

if(AccessToken.getCurrentAccessToken() == null)

我想知道如果我可以在其中使用它(這也是由FB提供),那是否會起作用:

LoginManager.getInstance().registerCallback(callbackManager, new LoginManager.Callback() {...});

但是,我得到一個“無法解析符號'回調'”。

編輯!!!!!!

好的,所以我能夠通過使用以下內容檢查用戶是否已登錄:

on onCreate:

accessTokenTracker = new AccessTokenTracker() {
        @Override
        protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
            updateWithToken(newAccessToken);
        }
    };

然後,調用我的updateWithToken方法:

private void updateWithToken(AccessToken currentAccessToken) {
    if (currentAccessToken != null) {

            LOAD ACTIVITY A!

    } else {

            LOAD ACTIVITY B!
    }
}

現在,問題是:如果用戶使用過該應用程序並且之前沒有登錄,我可以檢查一下! 但如果這是用戶第一次使用該應用程序,則我的AccessTokenTracker永遠不會調用updateWithToken

如果有人可以提供幫助,我真的很感激。

謝謝!




您可以使用Felipe在答案中提到的相同方式,也可以使用其他兩種方式。 但似乎AccessTokenTracker似乎是方便的方式,因為它可以幫助您跟踪訪問令牌(與ProfileTracker類一起使用)

  1. 如果您使用自定義按鈕登錄,請使用LoginManager回撥

例如

在你的佈局xml中

    <Button
        android:id="@+id/my_facebook_button"
        android:background="@drawable/btnfacebook"
        android:onClick="facebookLogin"/>

在你的活動中

    //Custom Button
    Button myFacebookButton = (Button) findViewById(R.id.my_facebook_button);

按鈕onclick Listener

public void facebookLogin(View view) {
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "user_friends"));
    }

最後是LoginManager回調

 //Create callback manager to handle login response
        CallbackManager callbackManager = CallbackManager.Factory.create();

       LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
           @Override
           public void onSuccess(LoginResult loginResult) {
               Log.i(TAG, "LoginManager FacebookCallback onSuccess");
               if(loginResult.getAccessToken() != null) {
                   Log.i(TAG, "Access Token:: " + loginResult.getAccessToken());
                   facebookSuccess();
               }
           }

           @Override
           public void onCancel() {
               Log.i(TAG, "LoginManager FacebookCallback onCancel");
           }

           @Override
           public void onError(FacebookException e) {
               Log.i(TAG, "LoginManager FacebookCallback onError");
           }
       });
  1. 如果您使用SDK中提供的按鈕(com.facebook.login.widget.LoginButton),請使用LoginButton回調(這在其參考文檔中詳細說明 - https://developers.facebook.com/docs/facebook-login/android/v2.3

例如

在你的佈局xml中

<com.facebook.login.widget.LoginButton
                android:id="@+id/login_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"/>

在你的活動中

    //Facebook SDK provided LoginButton
    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends");
    //Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            // App code
            Log.i(TAG, "LoginButton FacebookCallback onSuccess");
            if(loginResult.getAccessToken() != null){
                Log.i(TAG, "Access Token:: "+loginResult.getAccessToken());
                facebookSuccess();
            }

        }

        @Override
        public void onCancel() {
            // App code
            Log.i(TAG, "LoginButton FacebookCallback onCancel");
        }

        @Override
        public void onError(FacebookException exception) {
            // App code
            Log.i(TAG, "LoginButton FacebookCallback onError:: "+exception.getMessage());
            Log.i(TAG,"Exception:: "+exception.getStackTrace());
        }
    });

別忘了調用callbackManager.onActivityResult(requestCode, resultCode, data); 在您的活動onActivityResult()






Related