顯示具有 facebook 標籤的文章。 顯示所有文章
顯示具有 facebook 標籤的文章。 顯示所有文章

2015年3月7日 星期六

Facebook Graph API (v2.x) 之檢查權限授權篇 - {user-id}/permission



我們假設你今天的 Facebook App,在某個按下按鈕的動作,或是某個 po 文的瞬間,因為當初 user 在 Facebook Login 時沒有給予你網站業務需求上應該需要的權限,而導致各種 error 或是 bla~bla~bla~  等奇怪的頁面,你就需要額外去想辦法知道該 user 是否有給你應有的權限去做某件事情,進而做出適當的處理。

(圖: 使用者透過 facebook 第一次登入時,可以修改是否要給予 APP 何種權限)


Example: 比方說你的某個功能需要幫 user 發文到塗鴉牆,照理說 user 應該要給你的 app 有 publish_action 的權限,但他沒有給,然而在 po 文的那刻才出錯,燈惹!~,因為你沒有去判斷他到底有沒有給你這個權限。

由於工程師在時程壓力下,大部份都會按照著心中認為順利的流程下去走,所以難免會遺漏掉這些不在正軌上的流程,往往會再發生問題那一刻才會想起來,對耶~ 忘記檔這個功能等等的內心 OS,其實我也是這樣,這是常態 XDD。

接下來就直接看 API 的部分:

/{user-id}/permission

/{user-id}/permission (/me/permissions) 這隻 Graph API 屬於 User 分類下面的 API, 我現在用的版本是 v2.x 的,過去 v1.0 也有這個 api,只是要到的資料格式不太一樣。

permission 僅供你兩個可用的 Method,Get 跟 Delete:

(一) GET
你用 GET (Reading) 的方式取拿取某個 user 針對你提出授權的項目的狀態,包含 granted 跟  declined (同意或是不同意)。

要到的資料為 permission 表示權限的名稱,以及 status 表示狀態,會用 enum 的方式列舉,不是 granted 就是 declined。

這是我用 Graph API Explorer 針對某隻 App 測試的結果:
{
  "data": [
    {
      "permission": "public_profile",
      "status": "granted"
    },
    {
      "permission": "email",
      "status": "granted"
    },
    {
      "permission": "publish_actions",
      "status": "granted"
    },
    {
      "permission": "user_friends",
      "status": "granted"
    }
  ]
}

如果要測試 declined,就要自己去 facebook app setting 找出該 app,把某個權限拿掉,ex: 拿掉該 app 的 publish_action:



然後再要一次 permission 的結果,就會拿到 declined:

通常如果取得 declined,在自己的 app 因為達不到某種功能,所以通常會有個訊息告訴 user 沒有給予適當的權限,可以先做 permission 確認再決定要不要繼續執行後面需要的 API。


(二) Delete 
用來刪除某個權限。(我現在想不起來到底哪時候會用到這個...,我沒有經驗,所以無法多做說明。XD)


結論
permission 確認其實蠻方便的,我太晚知道這個功能了,問題是什麼時機點要 call 這個 API 以及這種資料該用何種方式存下來我倒是覺得比較傷腦筋,值得思考...。很可惜我沒這方面的經驗,無法分享 :P


參考
*https://developers.facebook.com/docs/graph-api/reference/v2.2/user/permissions


相關文章
*Facebook Graph API 升級到 v2.x
*Facebook Graph API (v2.x) 之審核篇 - 標記朋友 Taggable Friends


2015年3月6日 星期五

Facebook Graph API (v2.x) 之審核篇 - 標記朋友 Taggable Friends


這一篇其實是想要延續昨天寫的 Facebook Graph API 升級到 v2.x 繼續聊。

現在的活動網站的方向,大部份都會跟社群媒體做結合,以 Facebook 的整合為最大宗,其次是 google 跟 twitter, instagram 等等。Facebook 的話,Graph API 多到數不清,想怎麼整就怎麼整,而且效果不差 (尤其是曝光度),問題是: 要~審~核~。

今天要提到的是如何申請取得好友名單的權限,在過去 v1.0 的版本時,可以輕鬆要到好友名單,在 v2.0 時,需要額外申請權限 Taggable Friends,跟 user 取得 Taggable Friends 你可以要到他的好友名單,當然,這個權限可以做的事情很多,確實你可以用它來標記朋友在 custom story 或是上傳圖片時可以 tag 朋友等等。

以下是合理的使用範圍: 
  * Let people tag their friends in stories published by your app
     讓 user 透過你的 app 在發佈 story 時可以 tag 他的朋友。
  * Let people mention their friends in stories published by your app

你不能做的事情: 
  * Use a person's friends for any purpose other than tagging or mentioning
  其實這樣寫有點籠統,總之主要你只能用來讓 user 標記他的朋友,其他事你不太能做,反正最後也是要通過審核那一關,到時候如果沒有通過,FB 會告訴你原因。

PS:  如果你把每個登入你 app 而且給你 Taggable Friends user 的資料都存起來,你拿到的 facebook id 也只某種 scoped id 而已,看你想怎麼運用那些 data 吧...,我個人是覺得連這種資料都要存起來是挺變態的 XD。

說到這裡,下面可以進入正題了,我分三個部分來講,

(1) 設定篇

(2) Graph API 解說篇 (不包含程式實作)

(3) 送審篇


(1) 設定篇

基本順序就是這樣

a. 去 developer 頁面,『My Apps』(1) 下拉選單選擇你的 APP (前提是你有權限可以設定...),然後左側選單點選 『Status & Review』(2),切換到 『items in review』(3) 的 Tab,點選 『Add Items to this Submission』(4) 的按鈕,再勾選 FEATURES 底下的  Taggable Friends (5) 的權限,按下『Add Items』(6)。

(因為我這是為了截圖而開的測試 app,很多紅紅的地方是因為沒有填資料而已)


完成了 add 1 item 之後,畫面會 reload,你會看到這樣,看到紅色驚嘆號請不要緊張,我會解釋。

首先,Status & Reviews 的按鈕之所有驚嘆號,表示你有未通過的審核,或是尚未審核的項目。在網站還在開發階段時,這裡還是驚嘆號都無所謂,只要你測試的時候用的 Facebook 帳號有被加到這個 app 的 developers 之中,你都可以使用 Taggable Friends 的 API,或是你可以建立 Test User 帳號來測試 Taggable Friends 也可以用。

換句話說就是,不要天真的想說自己可以用,好像功能都正常,那是不是就不需要審核了呢,不是這樣的哦...。開發者可以用是很正常的,但是不要太開心請親朋好友測試,因為他們沒有被加到開發者名單,而且又還未通過審核的狀態時,他在使用這個 Facebook  登入  app 時會這樣... 顯示這樣的訊息 : 『Some of the permission below have not been approved for use by Facebook』,會露餡 :P

恩,總之這個部分我只是提醒,一定要審核。


完成設定上的步驟,接下來應該先實作你的程式,讓網站可以成功的跟 taggable friends 的 api 完美的 work,要完美哦! 因為審核是真的有人來用你的網站,玩到一半不能用就糗了。

第二件事情,App Details 在送審時不能沒有資料,你一定要寫,而且你的網站一定要有一個 privacy policy 的頁面網址。詳情可以看 https://developers.facebook.com/docs/apps/review。總之這頁該填的要填。




(2) Graph API 解說篇 (不包含程式實作)

API 實作其實沒有什麼好講的,我也說不清楚啊,看你用什麼語言開發 (看你是 php, 還是 javascript, android, ios...),方便用什麼方式去接資料吧。文章在此請服用。

文件寫得非常的直白了,我想我無法說得比文章更詳細。

只有以下事情要提醒跟說明:

(1) 用 taggable_friends 要搭配 user_friends 才可以用。user_friends 不用特地審核,可是你開始在取得 access token 時要自己加入這一項,以我自己的 php 的程式來說就像這樣:
   'default_scope' => ['email', 'user_friends', 'publish_actions'],
(2) 回傳的資料有該 user 可以被 tag 的朋友名單,其各個朋友的資料包含 id, name 跟 picture。id 就是要 tag 朋友時用的 id,這個等你需要做什麼發佈圖片或是 share with  誰誰誰的那種功能你就會用到了, picture 就是縮圖這樣而已。 三種資料你也不一定要全拿啦,但通常都是全拿  :P。






(3) 送審篇

如果你測試了 taggable_friends 沒問題之後,你必須在審核時合理的解釋為什麼需要用它,以及如何讓審核人員知道如何用 facebook 登入你的 app (必須截圖),並且說明。

送審你必須回到 developers  設定頁面。找到前面說的那個申請的地方,點開 taggable friends 的 Add Note 按鈕,然後詳述他問你的問題。

通常是一次送一堆出去審,比較方便 XD


下面的問題也要填,required 的地方一定要填,Screenshot 的地方,你要截下網頁的圖並且說明 (至少四張),審核人員是會真的造訪你的網站,親自去試的。

你如果不會寫,請先看 guideline,很實用,還有要注意,要用英文寫。
https://developers.facebook.com/docs/apps/review
最好是 step 說明,像他的提示那樣。




如果你都填好之後,同一下最下方,勾選你確定你測過這個功能了,然後按下 submit for Review,就可以了。



submit 一旦送出:
你不能再修改 review 寫的那些內容,screenshot, App Detail, website url 什麼的,都不能再改,除非你中途取消送審。

送審要多久?
最長七天,根據我的過去的經驗,最快 1 天半就過了,有時候是兩到三天,最久我沒等過七天的耶。


送審之後,你會收到一封信,只是通知你而已。
接著就是只能靜待審核結果,也是會寄信通知,或是會顯示在 alert 的頁面上。




審核結果會顯示在 Statue & Review 頁面上
恩... 我實在是沒有未通過的照片,反正紅通通的就是沒過,綠通通的就是過摟。
沒過你也不用擔心,他會告訴你為什麼,反正你修改過後,送審的步驟就是再送一次,已經通過的不用重新送,沒通過的才要。

結尾
* 這篇只是個簡單介紹流程的文章,實際上標記朋友不會單獨申請,會搭配 publish_action 等等。
* test user 的功能很方便,別遺忘這個功能。
*要考慮到網站上線的時間,請務必要拿捏好審核的時間點,以及如果未通過之後,程式修改後又再次送審的時間。
*我之前研究這一塊真的是花蠻多時間的,當然送審沒過的機率也是有,通常會跟你有沒有正確使用這項權限有比較大的關係。


我們從頭到尾來複習一下要個權限有多少事情要做
1. 網站要有網址,不要用 ip (印象中 ip 應該也不行)
2. 申請要的權限項目 (Status & Review)
3. App Details 該填的填
4. 要準備 privacy policy 頁面,提供網址填到 app details 頁面的 privacy policy URL 項目
5. 程式要實作 api
6. 測試 fb 登入跟申請的 api 可以 work,以及流程順暢
7. 送審,做 screenshot,寫說明,然後就 submit! 靜待結果



2015年3月5日 星期四

Facebook Graph API 升級到 v2.x


因為公司的案子有一個 app 還是 v1.0 的狀況,所以最近我只要進入 developers 的頁面都一直被提醒,真的很煩,總之就是告訴你務必在 50 幾天之內趕快把你的 (Graph) API 版本換成 v2.0 的,否則有些權限在 v2.0 之後要全面用審核的方式通過,一些變更像是:


取得好友名單
在 v2.0 就要審核(需要分別跟每個使用者要求 user_friends 權限),而 /me/friends 只會拿到也有使用該 app 共同好友 (In v2.0 of the Graph API, calling /me/friends returns the person's friends who also use the app.)。

詳情你可以看這篇 stackoverflow,沒錯,如果換成 v2.0,/me/friends 可能回傳的資料會是空的,並不是 api 壞了,而是剛好真的沒有共同好友也有使用該 app。你必須搭配 user_friends 加上 /me/friends 才會取到該 user 的好友名單。


Basic info 改為 Public Profile
以前的預設權限叫做 basic_info 會被 public_profile 取代,public_profile 不包含使用者的朋友名單。參考。


權限申請審核
public_profile, email, user_friends 之外的 permission,都需要申請審核。


App-scoped User IDs
這大概是我覺得最恐怖的一件升級狀況。
v1.0 app 拿到的 user id 是他在 facebook 上真實的 id,但 v2.0 之後,會針對不同的 app 給不同的 scoped-id,也就是說,user 用 fb 登入你們的 app,你拿的到是他在你 app 之下的 scoped-id,不是他本人在 fb 上的 id。

很多人都在擔心,在詢問: 那以前登入我 app 的 user id 怎麼辦,應該是不會有事,不用擔心 id 不一樣的問題,請參考:How do I get old UserID as of Graph API v2.0?

However, for users that have previously logged into your app, the user ID will not change. 
(這句話我還在想是不是指說,之前登入過 app 的 user,則 id 應該不會被換掉.... 猜的拉,希望是,不然自家的會員系統會大亂...。)



除了要 /{id}/picture 之外,其他所有的 API 都需要 access token。


-------------------這-是-華-麗-的-分-隔-線---------------------


因為日子有點接近,所以特地要注意一下,如果你的 facebook app 使用的 api 是舊版的,要在今年 2015/4/30 之前完成更新到 v2.X 的版本。( We also announced that all apps requesting these additional permissions must undergo review by April 30, 2015, when we will deprecate Graph API v1.0. ),若我有說錯麻煩留言跟我說一下,謝謝。

就我的認知,其實你不自己升級應該也不會有事,fb 應該會幫你升級,只是有些權限你會拿到空的,或是拿不到資料而已...,像是 user_birthday,  friend,要注意自己的程式有沒有判斷到這一塊 QQ,不過,長久之計,還是升級吧..。

以下的文章可以幫助你更加了解升級的事情:

*Facebook 之不升級v2.0+ 你怎麼死都不知道指南 BY 羊小咩
*Facebook Platform Upgrade Guide
*Login Review and API v2.0 Migration Reminder by Andreea Manole - February 27 at 4:00am,這篇文章有提到如何避免你的 app 在 4/30 號之後會壞掉。
*Easily upgrade to Graph API v2.x with no code changes by Dan Xu - February 6 at 5:00am
    

Vue multiselect set autofocus and tinymce set autofocus

要在畫面一進來 focus multiselect 的方式: 參考: https://jsfiddle.net/shentao/mnphdt2g/ 主要就是在 multiselect 的 tag 加上 ref (例如: my_multiselect), 另外在 mounted...