Feed on
Posts
Comments
Email訂閱

本文已分類在軟體開發

摘要:2015.4.30 Facebook將Graph API 1.0廢棄,強迫一定要升級至Graph API V2。由於太久沒有關注Facebook APP,所以根本沒有意會到這件事情,當然之前也沒有採取因應措施。直到系統真的壞給你看…。怪異現象陸續出現如下。

說明怪現象之前,先說說我的看法:強迫更新至Graph API V2,影響層面最大的是,從此透過Graph API做什麼事情幾乎都要取得使用者權限,而且這些權限必須 經過Facebook審查 之後,才能透過Graph API使用。審查權限雖然有助於改善對於使用者隱私的保護,但卻大大的限制APP開發者創意。

  1. 2015.5.1 之後在生活記趣網站發文,這個使用者動態不會再更新至生活記趣粉絲專頁(當時沒有意會到應該也不會更新到使用者自己的塗鴉牆)。原因:APP沒有生活記趣粉絲專頁管理員manage_pages的權限(本來有)。
  2. 2015 五月底發現雨傘大哥的鳥很久沒有飛到旅聯網了。而且從雨傘大哥Facebook過來的post,其留言也沒有被抓取,導致網頁沒有正常顯示。原因:APP沒有雨傘大哥user_photos,user_videos的權限(本來有)。進一步理解到,可能APP也不再有對使用者 publish_actions 的權限。
  3. 在登入頁,新使用者可以用他在facebook的帳號登入,並在旅聯網建立新帳號。使用Facebook JavaScript API可以得到FB登入者的username,並以此做為在旅聯網的帳號。但username在Graph API v2已經廢棄,所以在前端介面會看到使用者名稱為undefine。
  4. 若以APP開發者身分進行facebook登入,會出現 Invalid Scopes: publish_stream. This message is only shown to developers. 的錯誤訊息,且無法登入。可能是因為 publish_stream 已經廢棄了。參考這一篇 Error Invalid Scopes: offline_access, publish_stream, when I try to connect with Facebook API

步驟:

  1. 先確定Facebook自動將APP升級使用 Graph API v2,那我們的網站程式要不要更動?參考資料1。經由該文確認:
    • 旅聯網連通APP應不需要Facebook API 升級的前置環境設定。
    • 說是「Facebook 於 2015/4月底 強迫大家一定需要升級到 PHP SDK v4 and Graph API 2.0」,而且Facebook SDK PHP v4 的基本環境要求是 PHP 5.4 以上。衍生以下問題:
      • godaddy hosting目前使用php5.3,升級到php5.4,一直出現 internal server error 的錯誤。解決方法:php5.4之後,改採用.user.ini,而且同目錄中不要再有php5.ini,否則易出現 internal server error。
      • 重點是:後來發現就算沒有將Facebook PHP 以及 Javascript SDK 更新,目前呼叫Graph API v2取得資料的方式也沒有問題。但能不能取得資料的關鍵仍然是權限
  2. 既然前後端程式都不用改,就要針對要user的那些權限向Facebook提交審查申請權,參考資料2。衍生以下問題:
    • APP detail要寫一大堆資料,包括隱私政策。範本請參考資料 3。還要為每個要申請的權限寫 note,並附上截圖說明。到此應該很多人打退堂鼓了。這一次為APP申請了user_photos、user_videos、publish_actions。
    • 送審大概一天就回覆了。結果是..沒過。原因是:
      • APP canvas 頁需要使用SSL連線,也就是 https:// 開頭的網址。要使用SSL,必須要有用openssl建立的憑證。godaddy hosting只能用他們自己發行的憑證,而這要另外付費。
      • 若要通過publish_actions權限審查,必須證明APP沒有在使用者發布的訊息上加油添醋。這是審查者提供的訊息: Can you provide a timeline screenshot of the published story and make sure there are no pre-filled messages? 也就是從2015.5.1之後,你不會在FB的動態訊息上看到你的好友過了某個遊戲第幾關,或是誰在你的農場偷了你的菜之類的,這種不是由使用者自己發佈出來的訊息。
  3. 怪異現象處理方式:
    • 讓APP開發者也是生活記趣粉絲頁管理者,由此取得access_token,這樣就沒有權限問題。
    • 把雨傘大哥加入APP的測試者,這樣以前已經有跟雨傘大哥取得的授權便又重新可以使用。(所以使用Facebook Graph API v2 之後的問題不在使用者不授權給這APP。是在Facebook要不要讓這個APP有沒有某個權限的使用權。)於是旅聯網APP不再將使用者在網站活動的動態訊息發佈到使用者的塗鴉牆,但仍然會選擇性的發佈到粉絲專頁,譬如「某某山友已經完成了百岳足跡中的某某山」。
    • FB登入,改取 name 當作使用者在旅聯網的帳號,但就有可能是非英數字元。不過旅聯網本來就可使用中文帳號了,所以無妨。
    • publish_stream 已經廢棄,故在登入頁要向user要求的授權中將publish_stream移除即可。(publish_stream 應該已經被publish_actions完全取代)

參考資料:

  1. Facebook v4.4 PHP SDK 升級範例 :http://blog.longwin.com.tw/2015/04/facebook-v4-php-sdk-upgrade-example-2015/
  2. Facebook Graph API (v2.x) 之審核篇 – 標記朋友 Taggable Friends: http://blog.winwu.today/2015/03/facebook-graph-api-v2x-taggable-friends.html
  3. Facebook: Privacy Policy for Login Dialog and App Details: https://termsfeed.com/blog/facebook-privacy-policy-login-dialog-app-details/

 

留言區