0

ユーザーがFacebookを介してアプリのアクセス許可を取り消す場合、このコードはユーザーに再認証を要求する必要がありますが、そうではありません。誰かが何か間違っているのを見ることができますか?「facebook」はFacebookオブジェクトです。

public void facebookSetup() {
    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);   //load an access token from sharedPreferences
    long expires = mPrefs.getLong("access_expires", 0);     //do the same for the token expiration time

    if (access_token != null) { //if the access token exists in sharedPreferences, we'll use it
        facebook.setAccessToken(access_token);
    }
    if (expires != 0) { //if the expiration time exists in shared preferences, use it
        facebook.setAccessExpires(expires);
    }

    if (!facebook.isSessionValid()) {
        facebook.authorize(this, new String[] { "email", "publish_stream", "user_photos", "publish_actions"}, new DialogListener() {
            @Override
            public void onComplete(Bundle values) {
                SharedPreferences.Editor editor = mPrefs.edit();
                editor.putString("access_token", facebook.getAccessToken());
                editor.putLong("access_expires", facebook.getAccessExpires());
                editor.commit();
            }
            @Override
            public void onFacebookError(FacebookError error) {}

            @Override
            public void onError(DialogError e) {}

            @Override
            public void onCancel() {}
        });
    } 
}
4

1 に答える 1

0

これはFacebookSDKドキュメントが言うことです:

onCompleteメソッドの応答パラメーターを調べることにより、アクセストークンエラーを検出できます。この場合、ユーザーを再認証して新しいアクセストークンを生成するには、もう一度facebook.authorize()を呼び出す必要があります。

このような状況を検出するには、Facebookの呼び出しの応答を確認する必要があります。例えば:

JSONObject responseJSON = new JSONObject(response);
JSONObject errorJSON = responseJSON.optJSONObject("error");
if (errorJSON!=null) {
    String error =errorJSON.optString("type");           
    if (error!=null && error.equals("OAuthException")) {    
        facebook.authorize(activity, FACEBOOK_PERMISSIONS, facebookDialogListener); 
        return; 
    }       
}       
于 2012-10-23T15:54:53.113 に答える