10

Facebookにログインして、メールなどの同じフィールドを取得する必要があります。FacebookSDKを使用し、developers.facebookでAndroidキーハッシュを設定し、「ConfiguredforAndroidSSO」を設定します。シミュレーターと一部のデバイスでは、アプリケーションは正常に動作します。

しかし、公式のFacebookアプリケーションがデバイスにインストールされている場合、私のアプリケーションは機能しません。ログインボタンを押しても、パスワードとログインを要求されたときにWebビューのダイアログが表示されません。スタックオーバーフローの質問の問題のようです。AndroidSDKでfacebook.authorizeを使用しても、onActivityResultまたはスタックオーバーフローの質問のAndroid Facebook APIシングルサインオンが呼び出されませんか?、しかし私はそれを解決する方法を理解することはできません。

私のコード

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}

public void getAccessToken() {
    SessionEvents.AuthListener listener = new SessionEvents.AuthListener() {
        @Override
        public void onAuthSucceed() {
            setupAccessToken(facebookConnector.getFacebook().getAccessToken());
        }

        @Override
        public void onAuthFail(String error) {
            Toast.makeText(getApplicationContext(), getString(R.string.error_login), Toast.LENGTH_SHORT).show();
        }
    };

    SessionEvents.addAuthListener(listener);
    facebookConnector.login();
}

facebookConnectorコード

public class FacebookConnector {
    public void login() {
        if (!facebook.isSessionValid()) {
            facebook.authorize(this.activity, this.permissions, new LoginDialogListener());
        }
    }

    private final class LoginDialogListener implements DialogListener {
        public void onComplete(Bundle values) {
            SessionEvents.onLoginSuccess();
        }

        public void onFacebookError(FacebookError error) {
            SessionEvents.onLoginError(error.getMessage());
        }

        public void onError(DialogError error) {
            SessionEvents.onLoginError(error.getMessage());
        }

        public void onCancel() {
            SessionEvents.onLoginError("Action Canceled");
        }
    }
}
4

4 に答える 4

20

アプリケーションの以下のコードを更新してください。それはあなたの問題を解決します。

public void loginAndPostToWall() {
    facebook.authorize(this, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH,
            new LoginDialogListener());
}
于 2012-05-30T12:32:58.443 に答える
5

私はあなたと同じ問題を抱えていました。最後に、私はこれを使用して解決しました:

Facebook SDKが提供するFacebook.javaを開き、次のように変更します。

public void authorize(Activity activity, String[] permissions,
                      int activityCode, final DialogListener listener) {
    boolean singleSignOnStarted = false;

    mAuthDialogListener = listener;

    /*
    // Prefer single sign-on, where available.
    if (activityCode >= 0) {
        singleSignOnStarted = startSingleSignOn(activity, mAppId,
                                                permissions, activityCode);
    }
    // Otherwise fall back to the traditional dialog.
    if (!singleSignOnStarted) {
    */

    startDialogAuth(activity, permissions);

    // }
}
于 2012-05-30T12:09:55.890 に答える
1

これは単なる野蛮な推測ですが、これの代わりに:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}

試す:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    this.facebookConnector.getFacebook().authorizeCallback(requestCode, resultCode, data);
}

親メソッドを呼び出していないため、期待どおりに機能しない場合があります...

于 2012-05-30T12:10:03.050 に答える
0
private static Session openActiveSession(Activity activity, boolean allowLoginUI, StatusCallback callback, List<String> permissions) {
    OpenRequest openRequest = new OpenRequest(activity).setPermissions(permissions).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO).setCallback(callback);
    Session session = new Session.Builder(activity).build();
    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState()) || allowLoginUI) {
        Session.setActiveSession(session);
        session.openForRead(openRequest);
        return session;
    }
    return null;
}

このようにopenactivesession関数を編集します

于 2013-08-26T16:44:54.790 に答える