【问题标题】:Android Facebook SDK authorize methods shows dialog every timeAndroid Facebook SDK 授权方法每次都显示对话框
【发布时间】:2011-02-17 06:36:27
【问题描述】:

我正在编写一个应该将照片上传到 Facebook 的 Android 应用程序。

除了一件事,一切都很好。当我第一次调用 Facebook.authorize() 方法时,Facebook 对话框显示了请求的权限和“允许”/“不允许”按钮。那没关系。但是当我第二次运行我的应用程序时,我得到了相同的对话框,但显示我的应用程序已经允许的消息并建议按 OK 按钮。

有没有办法避免第二个对话框?在某些情况下我应该跳过授权方法吗?

我尝试在授权方法之前调用 Facebook.isSessionValid() 方法,但这没有帮助。

这是我的简化代码:

    mFacebook = new Facebook(APPLICATION_ID);
    mFacebookAsync = new AsyncFacebookRunner(mFacebook);

    if (mFacebook.isSessionValid()) {
        uploadPictureFile();
    }
    else {
        mFacebook.authorize(this, new String[] {"publish_stream"}, new Facebook.DialogListener() {

            @Override
            public void onFacebookError(FacebookError e) {
                Toast.makeText(PhotoFeederFacebookSendActivity.this, "Facebook error: " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
                finishWithResultCode(RESULT_CANCELED);
            }

            @Override
            public void onError(DialogError e) {
                Toast.makeText(PhotoFeederFacebookSendActivity.this, "Facebook dialog error: " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
                finishWithResultCode(RESULT_CANCELED);
            }

            @Override
            public void onComplete(Bundle values) {
                uploadPictureFile();
            }

            @Override
            public void onCancel() {Toast.makeText(PhotoFeederFacebookSendActivity.this, "Facebook authorization cancelled.", Toast.LENGTH_LONG).show();
                finishWithResultCode(RESULT_CANCELED);
            }
        });
    }

这是我的 onActivityResult 方法:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        mFacebook.authorizeCallback(requestCode, resultCode, data);
    }

任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 截至目前,我也面临这个问题。与 twitter 不同,我们每次必须执行任何功能时都必须打开授权对话框。
  • 好的,我自己解决了这个问题。正如 Facebook 示例中所做的那样,我将会话信息保存在共享首选项中。当我的应用第二次执行时,我只是从首选项中恢复会话信息并将其传递给 Facebook 对象。
  • Alexey,你能详细说明一下吗?如果用户注销然后重新登录怎么办?据我了解,这需要调用 authorize(),因此会显示授权对话框,说明该应用程序已被授权。我可以保存访问令牌,但如果用户注销,它就会变得无效,因此需要他们重新登录,我们又回到了同样的问题。
  • 在我看来,他们添加了代码以确保授权通过手机上的官方 Facebook 应用程序;它会查看意图信息以确保它没有被黑客入侵等。

标签: android facebook sdk single-sign-on


【解决方案1】:

您需要在mFacebook.isSessionValid() 之前致电mFacebook.setAccessToken("your token") 并且您需要将令牌保存到自己的偏好中

【讨论】:

  • 这在短期内解决了问题。会话只有一个小时左右,因此用户可能仍然每天都面临“已授权”对话框。我假设“offline_access”权限和非过期会话可以解决这个问题。但是由于我们实际上并不需要 离线 访问,因此更好的解决方案是首先尝试在后台建立会话。然后,如果用户未登录或未授予权限,将获得“连接”按钮或对话框。
【解决方案2】:

如果您只想更新状态,请在此处查看我的帖子... Android Facebook Graph API to update status

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多