0

我有一个带有 Facebook 登录的小型 Android 应用程序,我的手机上也安装了 Facebook 应用程序。Facebook登录的代码如下:

    if(access_token != null && access_token != "")
        facebook.setAccessToken(access_token);

    if(expires != 0)
        facebook.setAccessExpires(expires);

    if(!facebook.isSessionValid()) 
    {
        facebook.authorize(this, new String[] { "email", "publish_checkins", "publish_stream" }, new DialogListener() 
        {
            public void onComplete(Bundle values) 
            {
                /*
                if (GlobalData.user != null)
                {
                    GlobalData.user.fbToken = facebook.getAccessToken();
                    GlobalData.user.fbTokenExpires = facebook.getAccessExpires();
                    dataSource.addUser(GlobalData.user);
                }
                else */

                gatherFacebookData();
            }

            public void onFacebookError(FacebookError error) 
            {
                Toast.makeText(context, "Error: " + error, Toast.LENGTH_SHORT).show();
                return;
            }

            public void onError(DialogError e) 
            {
                Toast.makeText(context, "Error: " + e, Toast.LENGTH_SHORT).show();
                return;
            }

            public void onCancel() 
            {
                Toast.makeText(context, "Canceled", Toast.LENGTH_SHORT).show();
                return;
            }
        });
    }
    else
        this.gatherFacebookData();

在安装 Facebook 应用程序之前,我可以毫无问题地在我的应用程序中使用 Facebook SSO。但是,现在我单击“使用 Facebook 登录”按钮,弹出窗口会闪烁并带有加载屏幕,然后立即消失。没有调用任何 DialogListener 函数,所以我不知道会发生什么。Logcat 根本不显示任何错误。

我究竟做错了什么?

谢谢!

4

2 回答 2

3

使用此代码 facebook.authorize(this, permissions, Facebook.FORCE_DIALOG_AUTH, new LoginDialogListener());

于 2013-05-30T04:12:42.070 回答
0

要存储 access_token,请将以下代码片段添加到您的onComplete方法中(我不确定您的gatherFacebookData()方法是什么,因为您没有包含它。

            @Override
            public void onComplete(Bundle values) {
                SharedPreferences.Editor editor = mPrefs.edit();
                editor.putString("access_token", facebook.getAccessToken());
                editor.putLong("access_expires", facebook.getAccessExpires());
                editor.commit();
            }

如您所见,您将用户的 access_token 存储到 SharedPreferences 中,因此在您检查之前onCreate的方法中,您可以执行以下操作:if (!facebook.isSessionValid())

    /*
     * Get existing access_token if any
     */
    mPrefs = getPreferences(MODE_PRIVATE);
    String access_token = mPrefs.getString("access_token", null);
    long expires = mPrefs.getLong("access_expires", 0);
    if(access_token != null) {
        facebook.setAccessToken(access_token);
    }
    if(expires != 0) {
        facebook.setAccessExpires(expires);
    }

让我知道这是否有帮助。

于 2012-08-02T06:42:09.990 回答