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


Answers

我知道了!

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

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

這將在Current Access Tokes發生變化時被調用。 意思是,這只會幫助你,如果用戶已經登錄。

接下來,我們將這添加到我們的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() {...});

但是,我收到“無法解析符號”回調“”。

編輯!!!!!!

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

onCreate:

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

然後,這個calles我的updateWithToken方法:

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

            LOAD ACTIVITY A!

    } else {

            LOAD ACTIVITY B!
    }
}

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

如果有人能幫忙,我會很感激。

謝謝!




你可以用同樣的方式在菲利普的答案中提到,或者你可以用另外兩種方法。 但是,似乎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監聽器

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); 在你的Activity onActivityResult()