3

我的 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();
    }
}

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

任何的想法?

4

4 回答 4

6

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

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

代替

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

并查看下面的链接了解更多信息

Facebook 登录问题

于 2012-08-08T08:37:10.847 回答
0

我确信这是可能的,不幸的是我忘记了如何去做。但据我所知,这个想法是你应该强制出现登录对话框。如果我没记错的话,应该为对话框设置一个布尔参数以强制它出现。

于 2012-08-08T08:06:37.150 回答
0

iOS 和 Android 使用称为单点登录 (SSO) 的东西,这意味着任何尝试在 3rd 方应用程序中使用 Facebook 的人都将启动 Facebook 应用程序以便于登录。如果用户安装了 Facebook 应用程序,它将始终启动应用程序进行登录 - 没有办法绕过它。

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

于 2012-08-08T08:08:14.343 回答
0

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

于 2012-08-08T08:16:40.120 回答