2011-11-07 19 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