web-dev-qa-db-ja.com

Android facebook sdkはログイン後にコールバックを呼び出しません

助けて、

私はアプリケーションでFacebookのログインを処理するクラスを作成しようとしています。私の問題は、すべてのアクティビティで機能しないことです。そのアクティビティでは、コールバックを呼び出しません。ログインしてアプリケーションのWebViewを承認した後、コールバックは起動しません。 Logcatで最後に印刷された状態は[〜#〜] opening [〜#〜]です

ここに私のコードがあります:

public void doLogin() {


        if ((Session.getActiveSession() == null || !Session.getActiveSession().isOpened())) {
            List<String> permissions = new ArrayList<String>();
            permissions.add("email");

            // start Facebook Login
            openActiveSession(activity, true, new Session.StatusCallback() {

                // callback when session changes state
                @Override
                public void call(Session session, SessionState state,
                        Exception exception) {

                    Log.d("Sessionstate", state.toString());
                    if (session.isOpened()) {
                        // make request to the /me API
                        Request.executeMeRequestAsync(session,
                                new Request.GraphUserCallback() {

                                    @Override
                                    public void onCompleted(GraphUser user,
                                            Response response) {
                                        if (prgCheckFB.isShowing())
                                            prgCheckFB.dismiss();
                                        if (user != null) {

                                            Log.e("facebookid", id);
                                            doSomething(user);



                                        }
                                    }
                                });

                    } 
                }, permissions); 
        }
    }



private static Session openActiveSession(Activity activity,
        boolean allowLoginUI, Session.StatusCallback callback,
        List<String> permissions) {
    Session.OpenRequest openRequest = new Session.OpenRequest(activity)
            .setPermissions(permissions).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;
}

doSomethingは、共有設定にユーザーデータを保存する関数です。

何か問題でもありますか?この機能は一部のアクティビティで機能しますが、すべてのアクティビティでは機能しません。

ありがとうございました

31
skaciw

ログイン後に結果を処理するのを忘れているかもしれません...

オーバーライドメソッドを確認してくださいonActivityResult ..

結果を処理してMainActivityに戻すため、

多分これはあなたの問題を助けることができます。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

更新1

新しいSDKの場合:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode,
            resultCode, data);
}
103
sedayux

属性を持つAndroid:noHistory="true" AndroidManifest.xmlファイルでコールバックアクティビティを設定すると、コールバックメソッドが起動しなくなります。

6
Unknown