Android - Facebook SDK - 如何判断用户是否更改了密码或从Facebook上的应用设置中删除了应用

时间:2016-05-04 08:53:47

标签: android facebook xamarin xamarin.android android-facebook

我正在使用Facebook开发者网站上的测试用例测试我们的应用程序。

https://developers.facebook.com/docs/facebook-login/testing-your-login-flow

我们的应用程序在以下两个测试用例中失败了:

  
      
  1. 有人会通过应用设置从Facebook中移除您的应用并重新访问您的应用。您的应用应检测到此并提示该人   重新登录。

         
        
    • 转到您的应用并点击“#34;使用Facebook登录”按钮点按“确定”接受读取权限(再次确定接受写入   适用的权限)

    •   
    • 转到Facebook上的应用设置并移除您的应用

    •   
    • 重复步骤1-2并验证Facebook登录是否有效

    •   
  2.   
  3. 有人在使用Facebook登录您的应用后更改了Facebook密码在这种情况下,您的令牌将无效而您   应通知用户他们的Facebook会话已过期并询问   他们再次登录。

         
        
    • 更改您的Facebook密码,然后选择“退出其他设备”

    •   
    • 转到您的应用并点按“#34;使用Facebook登录”按钮

    •   
    • 点击“确定”接受读取权限(再次单击“确定”以接受写入权限)

    •   
    • 转到Facebook上的应用设置并验证授予的权限是否存在
    •   
  4.   

我一直试图在Facebook SDK上找到正确的方法来检查这个问题。是否有这样的方法告诉我用户需要再次登录(如果更改密码或从Facebook网站上的应用程序设置中删除应用程序)?

1 个答案:

答案 0 :(得分:0)

我最终做了一个" me" API调用。如果在OAuthException上失败,我可以确定用户登录状态有问题。

    Action<JSONObject, GraphResponse> facebookMeCallbackAction =
        delegate (JSONObject jsonObject, GraphResponse graphResponse)
        {
            try
            {
                if (graphResponse.Error == null)
                {
                    // Do whatever we need to do in regards to Facebook
                }
                else
                {
                    if (graphResponse.Error.ErrorType.Equals(FacebookMeCallback.OAuthExceptionExceptionType, StringComparison.InvariantCultureIgnoreCase))
                    {
                        // Something wrong is with the login state, ask for reconnection to Facebook, etc.
                    }
                    else
                    {
                        // Something else went wrong
                    }
                }
            }
            catch (Exception ex)
            {
                Util.LogException(ex);
            }
        };

    using (var facebookCallback = new FacebookMeCallback(facebookMeCallbackAction))
    {
        var newMeRequest = GraphRequest.NewMeRequest(AccessToken.CurrentAccessToken, facebookCallback);
        GraphRequest.ExecuteAndWait(newMeRequest);
    }

这是FacebookMeCallback类:

public class FacebookMeCallback : Java.Lang.Object, GraphRequest.IGraphJSONObjectCallback
    {
        public const string OAuthExceptionExceptionType = "OAuthException";

        private readonly Action<JSONObject, GraphResponse> onCompletedFacebookCallbackAction;

        public FacebookMeCallback(Action<JSONObject, GraphResponse> onCompletedFacebookCallbackAction)
        {
            this.onCompletedFacebookCallbackAction = onCompletedFacebookCallbackAction;
        }

        public void OnCompleted(JSONObject jsonObject, GraphResponse graphResponse)
        {
            if (onCompletedFacebookCallbackAction != null)
                onCompletedFacebookCallbackAction(jsonObject, graphResponse);
        }
    }