2

最新の Android SDK を使用しています。ダイアログが開かれますが、資格情報を入力するとダイアログが閉じ、ステータスが変わりません。

private StatusCallback statusCallback = new StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) // call just one time and state is "opening"
            authWithToken("facebook", session.getAccessToken());
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(new View(this));

    //setVisible(false);

    Settings.addLoggingBehavior(LoggingBehavior.CACHE);
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);
    //Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_RAW_RESPONSES);
    //Settings.addLoggingBehavior(LoggingBehavior.REQUESTS);

    Session session = Session.getActiveSession();

    if (session == null) {
        session = new Session.Builder(this).build();
        Session.setActiveSession(session);
    }

    if (!session.isOpened()) {
        Session.OpenRequest openRequest = new Session.OpenRequest(this);
        openRequest.setPermissions(permissions);
        openRequest.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
        openRequest.setCallback(statusCallback);
        session.openForPublish(openRequest); //here dialog is opened, user is able to enter credentials 
    }

    if (session != null && session.isOpened()) {
        if (!hasEmailPermission()) {
            NewPermissionsRequest request = new NewPermissionsRequest(this, permissions);
            request.setCallback(statusCallback);
            request.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);

            session.requestNewReadPermissions(request);
        }
    }

    if (session != null && session.isOpened())
        authWithToken("facebook", session.getAccessToken());
}

private boolean hasEmailPermission() {
    Session session = Session.getActiveSession();
    return session != null && session.getPermissions().containsAll(permissions);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //never call this method 
    super.onActivityResult(requestCode, resultCode, data);

    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

私は、Facebook公式の「はじめに」ドキュメントですべてを行いました

Android Facebook SDK3.0、セッション状態OPENING

Facebook 認証ダイアログが onActivityResult() を呼び出さないため、機能しません

Facebook アプリケーションがインストールされていません。

アップデート:

私がチェックしました。session.openForPublish(openRequest);アクティビティを閉じて、Facebook ダイアログを開きます。しかし、なぜ?

4

1 に答える 1

0

UiLifeCycleHelper クラスを使用して、セッションのステータスを変更します。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
        uiHelper = new UiLifecycleHelper(this, callback);
        uiHelper.onCreate(savedInstanceState);
}
于 2013-06-13T13:29:47.170 に答える