如何禁用Facebook本机应用程序以进行用户登录

时间:2012-08-08 07:57:23

标签: android facebook login native single-sign-on

我在Android应用程序中登录facebook用户有问题。我希望用户使用他们的Facebook帐户登录我的系统但是当我点击登录按钮时,Facebook本机应用程序启动,用户输入电子邮件和密码,然后本机应用程序关闭,我的应用程序再次启动我不想使用原生应用程序进行此登录进程我想打开Facebook登录弹出窗口,就像其他没有Facebook原生应用程序的手机一样。

我该怎么做? 感谢

编辑:

我使用以下方法登录

protected void loginToFacebook()
{


    if( !mFacebook.isSessionValid() ) {
        Toast.makeText(mActivity, "logining", Toast.LENGTH_SHORT).show();
        mFacebook.authorize(mActivity,permissions, new LoginDialogListener());
    }
    else { 
        try {
            JSONObject json = Util.parseJson(mFacebook.request("me"));
            String facebookID = json.getString("id");
            String firstName = json.getString("first_name");
            String lastName = json.getString("last_name");
            String email = json.getString("email");
            Toast.makeText(mActivity,  mFacebook.getAccessToken()+email+"-" + firstName + " " + lastName + ". No need to re-authorize.", Toast.LENGTH_SHORT).show();

            appState.mFbToken = mFacebook.getAccessToken();
            appState.mFbEmail = email;
            mFacebookListener.onFacebookLoginSelected();

        }
        catch( Exception error ) {
            Toast.makeText( mActivity, error.toString(), Toast.LENGTH_SHORT).show();
        }
    }

}

听取回应

public final class LoginDialogListener implements DialogListener {
    public void onComplete(Bundle values) {
        try {
            //The user has logged in, so now you can query and use their Facebook info
            JSONObject json = Util.parseJson(mFacebook.request("me"));
            String facebookID = json.getString("id");
            String firstName = json.getString("first_name");
            String lastName = json.getString("last_name");
            String email = json.getString("email");
            Toast.makeText( mActivity, mFacebook.getAccessToken() +email+"-" +  firstName + " " + lastName + "!", Toast.LENGTH_SHORT).show();
            SessionStore.save(mFacebook, mActivity);

            appState.mFbToken = mFacebook.getAccessToken();
            appState.mFbEmail = email;
            mFacebookListener.onFacebookLoginSelected();


        }
        catch( Exception error ) {
            Toast.makeText( mActivity, error.toString(), Toast.LENGTH_SHORT).show();
        }
    }

    public void onFacebookError(FacebookError error) {
        Toast.makeText( mActivity, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
    }

    public void onError(DialogError error) {
        Toast.makeText( mActivity, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
    }

    public void onCancel() {
        Toast.makeText( mActivity, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
    }
}

如果原生应用程序启动我的对话框不起作用,但如果基于网络的登录弹出窗口启动,我的监听器工作正常。

任何想法?

4 个答案:

答案 0 :(得分:6)

请更新以下应用程序代码。

mFacebook.authorize(mActivity, permissions, Facebook.FORCE_DIALOG_AUTH,
            new LoginDialogListener());

而不是

mFacebook.authorize(mActivity, permissions, new LoginDialogListener());

请参阅以下链接以获取更多信息

Facebook Login Issue

答案 1 :(得分:0)

我确信这是可能的,不幸的是我忘记了怎么做。但据我记得,这个想法是你应该强制登录对话框出现。如果我没有弄错,应该在对话框中设置一个布尔参数来强制它出现。

答案 2 :(得分:0)

iOS和Android使用单点登录(SSO),这意味着任何尝试在第三方应用中使用Facebook的人都会启动Facebook应用程序以便于登录。如果用户安装了Facebook App,它将始终启动应用程序进行登录 - 无法绕过它。

它实际上是为了让用户更容易。用户通常已经登录到应用程序,因此使用第三方FB应用程序只需要一次触摸/点击即可授权和使用。您会发现没有FB应用程序的用户将看到基于Web的登录页面。

答案 3 :(得分:0)

不要启用SSO。这应该可以解决您的问题。