2

我在一个非常简单的 Android 应用程序中工作。它应该很快就会投放市场。我必须登录 facebook,但 Facebook 应用程序似乎拒绝我的应用程序登录。我不能只卸载 Facebook 应用程序,因为它会在几周后上架 Google Play,当然我不能要求用户卸载他们的 Facebook 应用程序。

private void goFacebookLogin(){
        Session.openActiveSession(this, true, new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                if (session.isOpened()){
                    Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                        @Override
                        public void onCompleted(GraphUser user, Response response) {
                            if (user != null){
                                fbButton.setVisibility(Button.VISIBLE);
                            }

                        }
                    });
                }else{
                    Toast.makeText(getApplicationContext(), "session is not opened", Toast.LENGTH_LONG).show();
                }
            }
        });
    }



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

那是我使用的代码。那么...如何在无需卸载 Facebook 应用程序的情况下使用我的 facebook 应用程序登录?

4

1 回答 1

2

Facebook 应用程序不应干扰您的应用程序登录 Facebook。事实上,如果用户安装了最新的 Facebook Android 应用程序,它会提供有用的原生对话框。尝试使用以下代码登录 Facebook:

Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()){
    session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback);
}else{
    session.openActiveSession(this, true, statusCallback);
}

在哪里statusCallback

private Session.StatusCallback statusCallback = new SessionStatusCallback();

内部类SessionStatusCallback定义为:

    protected class SessionStatusCallback implements Session.StatusCallback {

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened() && session != null){
            sessionChangedCallback();
        }
    }
}//end of SessionStatusCallback class

该方法sessionChangedCallback()是您希望在会话状态更改时放置代码的位置。保持您的onActivityResult()代码不变。最后,记得把它放在你的清单文件中:

    <activity
        android:name="com.facebook.LoginActivity" >
    </activity>
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id" />

试试那个代码,看看它是否有效。就像我在安装 Facebook 应用程序之前所说的那样,不应干扰您的应用程序登录 Facebook 的能力。

于 2013-04-23T23:04:37.700 回答