0

AndroidアプリからFBにログインするとき、ログインすることを期待して、最後の有効な認証キーと有効期限をFacebookオブジェクト(5分以内に作成)に提供します。

代わりに、「このアプリは既に承認されています」というダイアログが表示されます。これは明らかに悪いユーザーエクスペリエンスであり、これなしでユーザーにログインさせるためにできることをしたいと思います。

ログインのフローは

  • 最後の有効な認証キーと有効期限を設定します
  • authorize()を呼び出す
  • 成功したら、この認証キーをサーバーに送信しました。サーバーは、キーがFBグラフAPIで有効であることを確認します。

これが私がこれを呼んでいる方法の縮小です:

Facebook m_facebook;
int ACTIVITY_CODE_FACEBOOK_AUTH = 1;
// auth key and expiration are set from a previous login
m_facebook.setAccessToken(accessToken);
m_facebook.setAccessExpires(expirationTime);
// permissions contains publish_stream, publish_actions, email and does not change.
m_facebook.authorize(m_activity, permissions, ACTIVITY_CODE_FACEBOOK_AUTH, new AppLoginListener());

考えられる回避策は、最初にauthキーを使用してGraph APIを呼び出し、それが有効であることを確認することです。有効でない場合は、上記のようにauthorize()を呼び出します。それが有効な場合は、承認を呼び出して続行するふりをしてください。これはハックのように感じます。姉妹化されたGraphAPIの回避策を作成しなくても、authorize()(およびSSOを使用)できるはずだと思います。

  • FB SDKrom2012/4/4を使用しています。それ以降、関連する変更はないようです。
  • 1年前からこれに似た質問を見てきましたが、問題を解決する具体的な答えは見ていません。また、解決策が私がすでに行っているものと異なっているようにも見えません。
4

1 に答える 1

-1

正直なところ、最近流れが変わったかどうかはわかりませんが、私が言えるのは、私はそれを別の方法で使用していて、これは私にとってはうまくいくということだけです.

  • 認証トークンが存在するかどうかを確認します(私は設定に保存しています)
  • まだ有効かどうかを確認する
  • 両方の条件のいずれかが満たされていない場合にのみ、承認する必要があります (再度)

    private SharedPreferences prefs = getSharedPreferences("APP_Preferences", MODE_PRIVATE); 
    Facebook facebook = new Facebook("app_number");
    
    if (!facebook.isSessionValid() || !prefs.contains("fb_access_token")){
        loginToFacebook();              
    }else{
        //do something else
    }
    

また、トークンがバックグラウンドで拡張されていることを確認して、有効なトークンをいつでも呼び出すことができるようにします。

    facebook.extendAccessTokenIfNeeded(context, null);

私のアプリのバックグラウンドサービスで。これにより、ユーザーが何日もアプリを開かなくても、トークンは常に有効で最新の状態であるため、ユーザーがしばらくしてからアプリを開いたときに迷惑な認証要求が発生することはありません。この流れがあなたの悩みを解決してくれると思います。

とにかく、他のより論理的な目的のためにアプリケーションでサービスを使用しているので、追加の利点としてこれを行うことができますが、トークンを拡張するためだけにアプリにサービスを実装することはおそらくお勧めできません...

于 2012-06-16T06:39:17.520 に答える