我正在使用Facebook开发者网站上的测试用例测试我们的应用程序。
https://developers.facebook.com/docs/facebook-login/testing-your-login-flow
我们的应用程序在以下两个测试用例中失败了:
有人会通过应用设置从Facebook中移除您的应用并重新访问您的应用。您的应用应检测到此并提示该人 重新登录。
转到您的应用并点击“#34;使用Facebook登录”按钮点按“确定”接受读取权限(再次确定接受写入 适用的权限)
转到Facebook上的应用设置并移除您的应用
重复步骤1-2并验证Facebook登录是否有效
- 醇>
有人在使用Facebook登录您的应用后更改了Facebook密码在这种情况下,您的令牌将无效而您 应通知用户他们的Facebook会话已过期并询问 他们再次登录。
更改您的Facebook密码,然后选择“退出其他设备”
转到您的应用并点按“#34;使用Facebook登录”按钮
点击“确定”接受读取权限(再次单击“确定”以接受写入权限)
- 转到Facebook上的应用设置并验证授予的权限是否存在
我一直试图在Facebook SDK上找到正确的方法来检查这个问题。是否有这样的方法告诉我用户需要再次登录(如果更改密码或从Facebook网站上的应用程序设置中删除应用程序)?
答案 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);
}
}