SlideShare a Scribd company logo
1 of 45
Download to read offline
API Survey #5
Firebase Cloud Messaging
@author Cara Wang <caraw@cnyes.com>
@since 2017/02/21
1
前情提要一下
我是 Cara Wang, 任職於 鉅亨網 cnYES
cnYES 的 API Team 每個月會分享一個 Public API 的使用方式
實作一個小玩具
分享 API 的使用方式
與覺得該 API 設計好的地方以及可能可以更好的地方
2
What is firebase cloud messaging?
整合好的推播機制: Web / iOS / Android
流程:
3
推播流程
4
What is firebase cloud messaging?
整合好的推播機制: Web / iOS / Android
以前叫做 GCM (Google Cloud Messaging)
Firebase Cloud Messaging (FCM) is the new version of GCM. It inherits the
reliable and scalable GCM infrastructure, plus new features! See the FAQ to learn
more. If you are integrating messaging in a new app, start with FCM. GCM users
are strongly recommended to upgrade to FCM, in order to benefit from new FCM
features today and in the future.
“
5
API
6
"notification"
"to"
API: PUSH Notification
POST https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key={Your Auth}
{
: {
"title": "推播標題",
"body": "推播內文",
"icon": "推播小圖",
"click_action": "推播動作"
},
"data": {自訂內容},
: "iid token"
}
01.
02.
03.
04.05.
06.
07.
08.
09.
10.
11.
12.
13.
14.
7
WebNotification:瀏覽器支援度
8
APIResponse-Header
9
APIResponse-JsonBody
10
FCMDownstream
11
FCMUpstream
12
IID_TOKEN TOPIC_NAME
API: Topic Registration
註冊特定議題
例如: 使用者對不同新聞類別感興趣
POST https://iid.googleapis.com/iid/v1/ /rel/topics/
Content-Length: 0
Authorization:key={Your Auth}
IID_TOKEN: instance id
TOPIC_NAME: 自訂的議題名稱
01.
02.
03.
13
FCMUpstream
14
"/topics/{議題名稱}"
API: PUSH Notification
推播給特定議題
POST https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key={Your Auth}
{
"notification": {
"title": "推播標題",
"body": "推播內文",
"icon": "推播小圖",
"click_action": "推播動作"
},
"to":
01.
02.
03.
04.05.
06.
07.
08.
09.
10.
11.
12.
15
API: Topic Registration
取得單一 IID 的資訊
GET https://iid.googleapis.com/iid/info/IID_TOKEN
Content-Type:application/json
Authorization:key={Your Auth}
Query String 帶入 details=true 才可以拿到這個 iid 註冊的議題有哪些
01.
02.
03.
16
GetIIDinfo-Header
17
GetIIDinfo-Body
18
RESTful API ?
POST https://fcm.googleapis.com/fcm/send
HTTP Method: 用 POST 建立 資料
Resource Name: send 是動詞, 不符合 RESTful 希望 Resource Name 要
是名詞的期望
Response Payload: 成功時的格式一致, 但失敗時是 HTML 格式, 不符合
Interface / Uniform Contract
19
HTTPStatusCode
20
RESTful API ?
POST https://fcm.googleapis.com/fcm/send
HTTP Method: 用 POST 建立 資料
Resource Name: send 是動詞, 不符合 RESTful 希望 Resource Name 要
是名詞的期望
Response Payload: 成功時的格式一致, 但失敗時是 HTML 格式, 不符合
Interface / Uniform Contract
HTTP Status Code: 200 是表示 FCM 收到資料, 並非成功傳給使用者
21
HTTPStatusCode
22
RESTful API ?
POST https://iid.googleapis.com/iid/v1/ IID_TOKEN /rel/topics/ TOPIC_NAME
GET https://iid.googleapis.com/iid/info/IID_TOKEN
HTTP Method: 用 POST 建立 資料, 用 GET 取得資料
Resource Name: 資源都是名詞, 且有分層關係, 但是 POST 有版本而 GET
沒有
Response Payload: 成功時的格式不一致
23
POSTAPI沒有ResponseBody
24
GETAPI則有ResponseBody
25
RESTful API ?
POST https://iid.googleapis.com/iid/v1/ IID_TOKEN /rel/topics/ TOPIC_NAME
GET https://iid.googleapis.com/iid/info/IID_TOKEN
HTTP Method: 用 POST 建立 資料, 用 GET 取得資料
Resource Name: 資源都是名詞, 且有分層關係, 但是 POST 有版本而 GET
沒有
Response Payload: 成功時的格式不一致, 失敗時有時是 HTML 有時是
Json, 格式也不一致
26
POSTAPI沒有帶入content-length的Header錯誤
27
GETAPI給錯誤的IID
28
GETAPI沒有帶入Auth在Header
29
RESTful API ?
POST https://iid.googleapis.com/iid/v1/ IID_TOKEN /rel/topics/ TOPIC_NAME
GET https://iid.googleapis.com/iid/info/IID_TOKEN
HTTP Method: 用 POST 建立 資料, 用 GET 取得資料
Resource Name: 資源都是名詞, 且有分層關係, 但是 POST 有版本而 GET
沒有
Response Payload: 成功時的格式不一致, 但失敗時是 HTML 格式是一致
的
HTTP Status Code:
30
HTTPStatusCode
31
Pros and Cons
1. Pros
1. 有一致的 HTTP Status Code 定義
2. 發生錯誤時的 API Response 若是 Json 格式, 使用字串代號而不是數字
代碼: ex: "error":"InvalidToken"
32
Pros and Cons
1. Cons
1. 沒有一致的 Response 格式, 造成串接上要依據不同 API 做個別的處理
2. 甚至有 HTML 回傳格式, 無法做解析
3. 使用 IID_TOKEN 在 Path 上, 造成 API Path 非常的長
33
Q & A
34
2015/09 ~ 2016/12
35
2016/03
36
37
38
2016/05
39
40
41
2016/08
42
2016/12
43
如果你對我們有興趣,歡迎來找彩蛋
44
45

More Related Content

Similar to Api survey #5 - firebase cloud messaging

Using google appengine_final
Using google appengine_finalUsing google appengine_final
Using google appengine_finalWei Sun
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》easychen
 
Cloud Foundry Introduction
Cloud Foundry IntroductionCloud Foundry Introduction
Cloud Foundry Introduction家弘 周
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展agen
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展agen
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
Re Introduce Web Development
Re Introduce Web DevelopmentRe Introduce Web Development
Re Introduce Web Developmentfinian lau
 
Bluemix Connect & Compose
Bluemix Connect & ComposeBluemix Connect & Compose
Bluemix Connect & ComposeChang-Yen Huang
 
鼎鈞數位行銷App營運實務全攻略
鼎鈞數位行銷App營運實務全攻略鼎鈞數位行銷App營運實務全攻略
鼎鈞數位行銷App營運實務全攻略淳甫 鄭
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用luolonghao
 
從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境MIS2000 Lab.
 
Kiss--yahoo(Kissext)
Kiss--yahoo(Kissext)Kiss--yahoo(Kissext)
Kiss--yahoo(Kissext)sunlick
 
Android &amp; fire base 玩上雲端囉
Android &amp; fire base 玩上雲端囉Android &amp; fire base 玩上雲端囉
Android &amp; fire base 玩上雲端囉政斌 楊
 
如何用 Google app engine 免费搭建站点
如何用 Google app engine 免费搭建站点如何用 Google app engine 免费搭建站点
如何用 Google app engine 免费搭建站点ahsou
 
PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统Tom Fan
 
AJAX Search & Cross Domain Survey
AJAX Search & Cross Domain SurveyAJAX Search & Cross Domain Survey
AJAX Search & Cross Domain Surveyfirestoke
 
Xamarin的Azure後端懶人包
Xamarin的Azure後端懶人包Xamarin的Azure後端懶人包
Xamarin的Azure後端懶人包Chen Yu Pao
 
Presta shop 1.6 的安装环境
Presta shop 1.6 的安装环境Presta shop 1.6 的安装环境
Presta shop 1.6 的安装环境YUCHENG HU
 
AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状Tom Fan
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享國昭 張
 

Similar to Api survey #5 - firebase cloud messaging (20)

Using google appengine_final
Using google appengine_finalUsing google appengine_final
Using google appengine_final
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》
 
Cloud Foundry Introduction
Cloud Foundry IntroductionCloud Foundry Introduction
Cloud Foundry Introduction
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展
 
基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展基于Greasemonkey的Firefox浏览器扩展
基于Greasemonkey的Firefox浏览器扩展
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
Re Introduce Web Development
Re Introduce Web DevelopmentRe Introduce Web Development
Re Introduce Web Development
 
Bluemix Connect & Compose
Bluemix Connect & ComposeBluemix Connect & Compose
Bluemix Connect & Compose
 
鼎鈞數位行銷App營運實務全攻略
鼎鈞數位行銷App營運實務全攻略鼎鈞數位行銷App營運實務全攻略
鼎鈞數位行銷App營運實務全攻略
 
富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用富文本编辑器在互联网上的应用
富文本编辑器在互联网上的应用
 
從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境從SOA到REST -- Web Service、WCF、WebAPI的應用情境
從SOA到REST -- Web Service、WCF、WebAPI的應用情境
 
Kiss--yahoo(Kissext)
Kiss--yahoo(Kissext)Kiss--yahoo(Kissext)
Kiss--yahoo(Kissext)
 
Android &amp; fire base 玩上雲端囉
Android &amp; fire base 玩上雲端囉Android &amp; fire base 玩上雲端囉
Android &amp; fire base 玩上雲端囉
 
如何用 Google app engine 免费搭建站点
如何用 Google app engine 免费搭建站点如何用 Google app engine 免费搭建站点
如何用 Google app engine 免费搭建站点
 
PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统PhoneGap 通信原理和插件系统
PhoneGap 通信原理和插件系统
 
AJAX Search & Cross Domain Survey
AJAX Search & Cross Domain SurveyAJAX Search & Cross Domain Survey
AJAX Search & Cross Domain Survey
 
Xamarin的Azure後端懶人包
Xamarin的Azure後端懶人包Xamarin的Azure後端懶人包
Xamarin的Azure後端懶人包
 
Presta shop 1.6 的安装环境
Presta shop 1.6 的安装环境Presta shop 1.6 的安装环境
Presta shop 1.6 的安装环境
 
AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状AT&T 的 HTML5 策略和应用现状
AT&T 的 HTML5 策略和应用现状
 
ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享ASP.Net WebAPI經驗分享
ASP.Net WebAPI經驗分享
 

More from Szuping Wang

Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事Szuping Wang
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHSzuping Wang
 
cnYes 如何使用 elasticsearch
cnYes 如何使用 elasticsearchcnYes 如何使用 elasticsearch
cnYes 如何使用 elasticsearchSzuping Wang
 
cnYES 的新聞數據分析資料
cnYES 的新聞數據分析資料cnYES 的新聞數據分析資料
cnYES 的新聞數據分析資料Szuping Wang
 
team18_媒體偏坦度
team18_媒體偏坦度team18_媒體偏坦度
team18_媒體偏坦度Szuping Wang
 

More from Szuping Wang (6)

Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事Laradebut #5 - 關於 CRUD 外的一點小事
Laradebut #5 - 關於 CRUD 外的一點小事
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTH
 
cnYes 如何使用 elasticsearch
cnYes 如何使用 elasticsearchcnYes 如何使用 elasticsearch
cnYes 如何使用 elasticsearch
 
cnYES 的新聞數據分析資料
cnYES 的新聞數據分析資料cnYES 的新聞數據分析資料
cnYES 的新聞數據分析資料
 
team18_媒體偏坦度
team18_媒體偏坦度team18_媒體偏坦度
team18_媒體偏坦度
 
Git 好吃嗎
Git 好吃嗎Git 好吃嗎
Git 好吃嗎
 

Api survey #5 - firebase cloud messaging

  • 1. API Survey #5 Firebase Cloud Messaging @author Cara Wang <caraw@cnyes.com> @since 2017/02/21 1
  • 2. 前情提要一下 我是 Cara Wang, 任職於 鉅亨網 cnYES cnYES 的 API Team 每個月會分享一個 Public API 的使用方式 實作一個小玩具 分享 API 的使用方式 與覺得該 API 設計好的地方以及可能可以更好的地方 2
  • 3. What is firebase cloud messaging? 整合好的推播機制: Web / iOS / Android 流程: 3
  • 5. What is firebase cloud messaging? 整合好的推播機制: Web / iOS / Android 以前叫做 GCM (Google Cloud Messaging) Firebase Cloud Messaging (FCM) is the new version of GCM. It inherits the reliable and scalable GCM infrastructure, plus new features! See the FAQ to learn more. If you are integrating messaging in a new app, start with FCM. GCM users are strongly recommended to upgrade to FCM, in order to benefit from new FCM features today and in the future. “ 5
  • 7. "notification" "to" API: PUSH Notification POST https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key={Your Auth} { : { "title": "推播標題", "body": "推播內文", "icon": "推播小圖", "click_action": "推播動作" }, "data": {自訂內容}, : "iid token" } 01. 02. 03. 04.05. 06. 07. 08. 09. 10. 11. 12. 13. 14. 7
  • 13. IID_TOKEN TOPIC_NAME API: Topic Registration 註冊特定議題 例如: 使用者對不同新聞類別感興趣 POST https://iid.googleapis.com/iid/v1/ /rel/topics/ Content-Length: 0 Authorization:key={Your Auth} IID_TOKEN: instance id TOPIC_NAME: 自訂的議題名稱 01. 02. 03. 13
  • 15. "/topics/{議題名稱}" API: PUSH Notification 推播給特定議題 POST https://fcm.googleapis.com/fcm/send Content-Type:application/json Authorization:key={Your Auth} { "notification": { "title": "推播標題", "body": "推播內文", "icon": "推播小圖", "click_action": "推播動作" }, "to": 01. 02. 03. 04.05. 06. 07. 08. 09. 10. 11. 12. 15
  • 16. API: Topic Registration 取得單一 IID 的資訊 GET https://iid.googleapis.com/iid/info/IID_TOKEN Content-Type:application/json Authorization:key={Your Auth} Query String 帶入 details=true 才可以拿到這個 iid 註冊的議題有哪些 01. 02. 03. 16
  • 19. RESTful API ? POST https://fcm.googleapis.com/fcm/send HTTP Method: 用 POST 建立 資料 Resource Name: send 是動詞, 不符合 RESTful 希望 Resource Name 要 是名詞的期望 Response Payload: 成功時的格式一致, 但失敗時是 HTML 格式, 不符合 Interface / Uniform Contract 19
  • 21. RESTful API ? POST https://fcm.googleapis.com/fcm/send HTTP Method: 用 POST 建立 資料 Resource Name: send 是動詞, 不符合 RESTful 希望 Resource Name 要 是名詞的期望 Response Payload: 成功時的格式一致, 但失敗時是 HTML 格式, 不符合 Interface / Uniform Contract HTTP Status Code: 200 是表示 FCM 收到資料, 並非成功傳給使用者 21
  • 23. RESTful API ? POST https://iid.googleapis.com/iid/v1/ IID_TOKEN /rel/topics/ TOPIC_NAME GET https://iid.googleapis.com/iid/info/IID_TOKEN HTTP Method: 用 POST 建立 資料, 用 GET 取得資料 Resource Name: 資源都是名詞, 且有分層關係, 但是 POST 有版本而 GET 沒有 Response Payload: 成功時的格式不一致 23
  • 26. RESTful API ? POST https://iid.googleapis.com/iid/v1/ IID_TOKEN /rel/topics/ TOPIC_NAME GET https://iid.googleapis.com/iid/info/IID_TOKEN HTTP Method: 用 POST 建立 資料, 用 GET 取得資料 Resource Name: 資源都是名詞, 且有分層關係, 但是 POST 有版本而 GET 沒有 Response Payload: 成功時的格式不一致, 失敗時有時是 HTML 有時是 Json, 格式也不一致 26
  • 30. RESTful API ? POST https://iid.googleapis.com/iid/v1/ IID_TOKEN /rel/topics/ TOPIC_NAME GET https://iid.googleapis.com/iid/info/IID_TOKEN HTTP Method: 用 POST 建立 資料, 用 GET 取得資料 Resource Name: 資源都是名詞, 且有分層關係, 但是 POST 有版本而 GET 沒有 Response Payload: 成功時的格式不一致, 但失敗時是 HTML 格式是一致 的 HTTP Status Code: 30
  • 32. Pros and Cons 1. Pros 1. 有一致的 HTTP Status Code 定義 2. 發生錯誤時的 API Response 若是 Json 格式, 使用字串代號而不是數字 代碼: ex: "error":"InvalidToken" 32
  • 33. Pros and Cons 1. Cons 1. 沒有一致的 Response 格式, 造成串接上要依據不同 API 做個別的處理 2. 甚至有 HTML 回傳格式, 無法做解析 3. 使用 IID_TOKEN 在 Path 上, 造成 API Path 非常的長 33
  • 37. 37
  • 38. 38
  • 40. 40
  • 41. 41
  • 45. 45