0

Facebook でモバイル アプリを認証しようとしていますが、Facebook の認証ウィンドウを閉じると、アプリケーションの continueLoading(1) メソッドに戻りません。理由がわかりません:

private void authorizeFacebook(final Loader loader) {       
    String[] permissions = new String[] {"friends_status", "user_status"};
    facebook.authorize(this, permissions , new DialogListener() {
        @Override
        public void onComplete(Bundle values) {
            Log.e("finish", "oncomplete");
            //SharedPreferences.Editor editor = mPrefs.edit();
            //editor.putString("access_token", facebook.getAccessToken());
            //editor.putLong("access_expires", facebook.getAccessExpires());
            //editor.commit();                
            loader.continueLoading(1);
        }

        @Override
        public void onFacebookError(FacebookError error) { 
            Log.i("FacebookAuthorize", error.toString());               
            app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);      
        }

        @Override
        public void onError(DialogError e) { 
            Log.i("FacebookAuthorize", e.toString());               
            app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);
        }

        @Override
        public void onCancel() {
            Log.i("FacebookAuthorize", "onCancel");
            app.alert("Facebook Connection Error", "Please try to re-open the application", "Ok", loader);
        }
    });

}

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

ローダーの最初のステップ:

   private void continueLoading(int step) {     
    switch(step)
    {
            //loading current user facebook profile
    case 1: progressBar.incrementProgressBy(750);               
            loadingStatus.setText("Getting user's facebook details");                               
            facebookRunner = new AsyncFacebookRunner(facebook);         
            facebookConnection = new FacebookConnection(this, 1);
            facebookRunner.request("me",facebookConnection);   
            app.setFacebook(facebook);
            app.setFacebookRunner(facebookRunner);
            break;

アプリに戻る代わりに、すべてを閉じます..

4

1 に答える 1

0

facebookandroidsdkには2つの異なる認証フローがあります。

1)SSO-ユーザーが同じデバイスにFacebookアプリをインストールした場合に使用されます。この場合、使用しているfacebook sdkは、アプリに対してユーザーを認証するためにfacebookアプリへの新しいインテントを開始します。それがいつ行われたかを知ることができるようにするには、これを追加する必要があります:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    facebook.authorizeCallback(requestCode, resultCode, data);
}

2)デバイスにFacebookアプリがインストールされていない場合、SDKはユーザー認証用の独自のダイアログを開きます。この場合、メソッドDialogListenerに渡した実装authorizeが使用されます。

両方のケースを処理するには、(DialogListenerと)の両方が必要です。onActivityResult

于 2012-05-29T14:40:05.417 に答える