android - 如果我安装了 Facebook 应用程序,我的 Facebook 登录 Android 应用程序将不会打开 session

标签 android facebook authentication

我正在开发一个非常简单的 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 应用程序登录?

最佳答案

Facebook 应用程序不应干扰您的应用程序登录 Facebook。事实上,如果用户安装了最新的 Facebook Android 应用程序,它会提供有用的 native 对话框。尝试使用此代码登录 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() 是您在 session 状态更改时放置代码的位置。保持您的 onActivityResult() 代码不变。最后,请记住将其放入 list 文件中:

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

尝试该代码,看看它是否有效。正如我之前所说,安装 Facebook 应用程序不应干扰您的应用程序登录 Facebook 的能力。

关于android - 如果我安装了 Facebook 应用程序,我的 Facebook 登录 Android 应用程序将不会打开 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16176468/

相关文章:

android - fragment 中不合适的上下文菜单

android - 自定义 View 只显示一次

Facebook API - 带有墙贴的新闻提要

authentication - 防止交互式 ssh 提示

azure - 从 Azure databricks 向 MS Onelake 写入数据时出错

java - android asynctask编译问题

android - Material 组件中没有 ImageView/ImageButton (Android)

objective-c - Mac OS X Facebook 登录失败 - 没有存储应用程序的 remote_app_id

javascript - 检查用户是否使用 FB.ui 在共享对话框中发布(或取消)共享到 Facebook

authentication - 基于声明的身份验证和用户圈子