web-dev-qa-db-ja.com

Android Facebook SDK:ユーザーがログインしているかどうかを確認します

Androidアプリに機能があり、ユーザーはアプリを承認し、リンクを共有します。

また、ユーザーがFacebookからログアウトするためのオプションを指定する必要があり、ユーザーがintにログインしていない(またはアプリを認証していない)場合、このボタンを条件付きで無効にする必要があります。

Android SDK でAPI呼び出しが見つからないようです。これにより、ユーザーがログインしているかどうかをFBに尋ねることができます。

私が見つけたのは getAccessExpires()

現在のセッションの有効期限(Unixエポックからのミリ秒単位)を取得します。セッションが期限切れでないか存在しない場合は0を取得します。

セッションが0に等しいかどうかを確認する方法はありますか?それとも私が見逃しているものがありますか?

34
Jay Sidri

Facebook SDK 4.xバージョンには異なる方法があります:

boolean loggedIn = AccessToken.getCurrentAccessToken() != null;

または

関数を使用して

boolean loggedIn;
//...
loggedIn = isFacebookLoggedIn();
//...
public boolean isFacebookLoggedIn(){
    return AccessToken.getCurrentAccessToken() != null;
}

より良い参照のためにこのリンクを確認してください https://developers.facebook.com/docs/facebook-login/Android この見出しも確認してください "アクセストークンとプロファイル」というメッセージが表示されます。「AccessToken.getCurrentAccessToken()およびProfile.getCurrentProfile()を確認することで、ユーザーがすでにログインしているかどうかを確認できます。

55
Diljeet

読者への注意:これは、新しいFB 3.0 SDKで廃止されました。

facebook.isSessionValid()は、ユーザーがログインしている場合はtrue、ログインしていない場合はfalseを返します。

6
Jesse Chen
Session.getActiveSession().isOpened()

ユーザーがログインしている場合はtrue、ログインしていない場合はfalseを返します

3
Zennichimaro

Android Studio

compile 'com.facebook.Android:facebook-Android-sdk:4.0.1'

次に、次のようなログインを確認します。

private void facebookPost() {
    //check login
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    if (accessToken == null) {
        Log.d(TAG, ">>>" + "Signed Out");
    } else {
        Log.d(TAG, ">>>" + "Signed In");
    }
}
3

@diljeetは正しかった。 https://stackoverflow.com/a/29375963/8593

また、使用

return AccessToken.getAccessToken() != null && Profile.getCurrentProfile()!=null;

常にこのように機能します。

2
leeCoder

Facebookの場合Android SDK 4.xでは、@ Diljeetによると「AccessToken.getCurrentAccessToken()」を使用する必要がありますが、彼のチェックは機能しませんでした。

アクティビティ「onCreate」:

facebookAccessToken = AccessToken.getCurrentAccessToken();

セッションがまだアクティブかどうかを確認するには(「onResume」メソッドで作成しましたが、必要な場所で実行します):

  if(facebookAccessToken != null){
        sessionExpired = facebookAccessToken.isExpired();
  }else{
        sessionExpired = true;
  }

詳細は https://developers.facebook.com/docs/facebook-login/Android

1
Alberto Méndez

同じ問題がありました。 SDK 4.0を使用した私のソリューションは次のとおりです。

まず、ログインチェックを扱うアクティビティでは、必ずこのプライマリを呼び出すようにしてください。

        FacebookSdk.sdkInitialize(this.getApplicationContext());

OnCreateメソッドにこれを入れてください:

updateWithToken(AccessToken.getCurrentAccessToken());

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

次に、次のメソッドを追加します:

private void updateWithToken(AccessToken currentAccessToken) {
    if (currentAccessToken != null) {
        fillUIWithFacebookInfos(handler);
    } else {
        login();
    }
}

この方法は、すでにログインしているユーザーと新しくログインしたユーザーを処理します。

0
Thomas L.

これは、新しいSDKで非常にうまく機能しているようです。

private boolean isFacebookLoggedIn(){
    Session session = Session.getActiveSession();

    if (session != null) {
        //Session can be open, check for valid token
        if (!session.isClosed()) {
            if(!session.getAccessToken().equalsIgnoreCase("")){
                return true;
            }
        }
    }
    return false;
}
0
DeaMon1