2011-11-07 17 views
2

有从facebook平台获取访问令牌错误的可靠方法吗?Facebook的可靠性图形错误消息

我们的iOS/Android应用程序需要保存用户的Facebook会话。这很好,除了我们从Facebook获得的身份验证错误似乎不一致。基本上,如果我们从Facebook得到一个错误,我们想知道这是否需要用户重新进行验证,或者是否由于间歇性错误(即由于某种原因它们受到速率限制)。

大多数facebook图形错误似乎包含错误消息文本正文中的错误代码。有些人不会。

例如

{ “错误”:{ “消息”: “错误验证接入令牌:会话是无效的,因为该用户注销。”, “类型”: “OAuthException”}}

不包含错误代码,因此检查此错误的唯一方法是对“消息”进行字符串比较。这似乎是一个非常不可靠的检查错误的方法。

似乎〜几乎可以检查json字符串中的“type”变量是否指示“OAuthException”,除非用户受速率限制,那么也会抛出OAuthException,但它不会不要求用户重新登录,它只需要他们稍等片刻,并停止发布这么多。

我已经看到了如何在这里列出:https://developers.facebook.com/blog/post/500但仍然有问题,我的游戏将需要用户重新登录Facebook,如果他们碰巧过分热衷于张贴到他们的墙上。

那么,有没有从Facebook平台获取错误的可靠方法?

现在我可以找到的最佳解决方案是解析错误代码的消息字符串,如果我找不到任何然后重新分析寻找特定消息的字符串(如“验证访问令牌的错误”),然后最后如果我无法确定错误是什么,只需恐慌并将用户注销。

+0

现在我要保守了。我会假设任何OAuthException都需要用户注销,除非我可以确认这个异常不需要这个。 基本上这意味着测试我所知道的“安全”异常并向用户提供反馈。这仍然意味着用户可能会得到很多“抱歉,您必须重新登录”。 – agenttom

+0

对于任何感兴趣的,这里是一个常见错误响应的简短列表: '“会话在unix时间SOME_TIME已过期,当前的unix时间是SOME_TIME.' '”会话已失效,因为用户已更改“ '”验证访问令牌时出错:USER_ID未授权应用程序APP_ID“” '“验证访问令牌时出错:会话无效,因为用户已注销”“ '”必须使用有效的访问令牌查询关于当前用户的信息“' – agenttom

+0

,最后您可以测试以查看错误消息是否包含字符串(#341)以测试用户是否受限速。如果他们受速率限制,则不需要重新验证(它似乎)但只有一些反馈,他们应该停止张贴这么多。 – agenttom

回答

0

不幸的是,我还没有找到处理这个问题的好方法。目前为止我找到的最佳解决方案是查看错误是否为OAuthException,将错误消息与不需要重新认证的“可接受故障”白名单进行比较,但如果错误与这个白名单,我假设用户必须重新与Facebook进行认证。

仅供参考,我发现可以列入白名单的唯一错误是“用户是速率有限”错误。为了检测这一点,我检查错误消息是否包含子字符串“(#341)”,这是该错误的错误代码(不是该错误是错误消息中包含错误代码的少数几个错误之一身体)。

+0

“用户速率有限”错误可以忽略,因为它不需要用户重新进行验证,它只需要用户稍等一会并停止发布太多。处理这种错误的“正确”方式 - 我的眼睛 - 是向用户提供反馈,他们发布得太快,稍后再试,然后忽略错误。 – agenttom