「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>スマホ]]
--[[mBaaS]]
--[[通知プロバイダ]]

*目次 [#t16fc509]
#contents

*概要 [#qefff091]
SaaS開発で調べた[[プッシュ通知]]についてのメモ。

-プッシュは、~
特定のアカウントに対して行われるが、~
インフラストラクチャとしては、

--Apple(or Google)の通知用サーバに、
---[[APNs>#y98bdd9c]]~
Appleの通知用サーバ(iOSに通知を行う)
---[[FCM>#v11f894e]]~
Googleの通知用サーバ(Androidに通知を行う)

--スマホネイティブ・アプリケーションを登録する

>形になる。

-[[プッシュ通知]]までの流れ。
--スマホネイティブ・アプリケーションの登録後に、

--アプリケーションを実機にインストールすると、~
端末+アプリを識別する[[デバイス・トークン>#x56efdf7]]が発行される

--それを使用してサーバから通知を行う。
---AuthZ(AuthN) Server
---Resource Server

-なお、[[個人に送信>#ud033645]]するだけではなく、
--[[トピック購読者に送信>#t54fd02f]]
--[[特定グループに送信>#y2e7d9cd]]
--[[全体に送信>#m47e6433]]

>も[[デバイス・トークン>#x56efdf7]]を使用して行う。

*仕組み [#fdfd3258]
-AndroidとiOSでは、プッシュ通知に、前述の異なるが類似の仕組みが採用されている。
-なお、プッシュ通知の動作確認をする為にエミュレータは使用できない(実機へのインストールが必要)。

-[[mBaaS>#yfb3e1b6]]では、AndroidとiOSの差異をラップして隠蔽し、~
AndroidからもiOSからも利用できるプラグインを用意しているケースが多い。

**個人に送信 [#ud033645]

***初期化 [#y6697819]
+...。
+バックエンドサーバに[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]が発行した~
サービスアカウント情報(JSONファイル)を配置する。
+...。

***デバイス・トークンの保存 [#x56efdf7]
+デバイスにアプリケーションをインストールする際、~
[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバにデバイス登録を行う。
+登録結果としてデバイス・トークンを受け取る。
+デバイス・トークンをバックエンドサーバに送って保存する。~

※ 1, 2 の処理は、プラグインに~
 「デバイス・トークンを バックエンドサーバに送るデリゲート」~
 を渡せば短いコードで完了してしまう。

※ 登録の際、ユーザIDと紐付けて保存するため認証が必要。~
 ネイティブ・アプリの認証であれば[[PKCE>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth%20PKCE]]が一般的。

***通知の送信 [#k4c1bdc9]
+任意の箇所でアプリケーションのイベントを検出する。
+バックエンドサーバは、~
「サービスアカウント情報」と「デバイス・トークン」を使用して、~
[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバにプッシュ要求を送信する。
+[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバは、デバイスにプッシュ通知を送信する。

**トピック購読者に送信 [#t54fd02f]
トピック購読は、ユーザ自身が行う
(Nativeからに[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバに直アクセス)。

***初期化 [#j21103f0]
-デバイス・トークンを使用して、自端末のトピック登録依頼を[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバに送信する。
--[[個人に送信>#ud033645]]と異なり、送信時のデバイス・トークンは不要。
--トピック登録時、[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバにデバイス・トークンを渡して保存しているため。

***通知の送信 [#ya5c8950]
[[個人に送信>#ud033645]]と異なる点は、~
[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバにプッシュ要求を送信する際に、~
「サービスアカウント情報」と「トピック名」を使用する点。

**特定グループに送信 [#y2e7d9cd]
グループ作成とユーザ登録は、バックエンドの管理者やアプリケーションで行う。
***初期化 [#z45be148]
[[個人に送信>#ud033645]]と異なる点は、

>グループを作成依頼を[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバに送信して、

「通知キー」を受け取る点。

***通知の送信 [#rf7ababe]
[[個人に送信>#ud033645]]と異なる点は、~
[[FCM>#v11f894e]] / [[APNs>#y98bdd9c]] / [[JPush>#eca82729]]サーバにプッシュ要求を送信する際に、~
「サービスアカウント情報」と「通知キー」を使用する点。

**全体に送信 [#m47e6433]
-Firebaseコンソールなどポータルから送信可能。
-バックエンドサーバ経由で行う場合、~
事前に「全体に送信」[[トピック>#t54fd02f]]を登録しておく。

*参考 [#u5aead84]
-Kii Cloud のプッシュ通知の概要~
https://docs.kii.com/ja/guides/cloudsdk/rest/managing-push-notification/push-overview/

--Kii Cloud でのプッシュ通知機能~
https://docs.kii.com/ja/guides/cloudsdk/rest/managing-push-notification/push-overview/push-kiicloud/
--プッシュ通知の仕組み~
https://docs.kii.com/ja/guides/cloudsdk/rest/managing-push-notification/push-overview/structure/
--プラットフォーム間でのプッシュ通知~
https://docs.kii.com/ja/guides/cloudsdk/rest/managing-push-notification/push-overview/inter-platform/

***プッシュ通知サーバ [#s5c3d72c]
**プッシュ通知サーバ [#s5c3d72c]

***[[Android (FCM)]] [#v11f894e]

***[[iOS (APNs)]] [#y98bdd9c]

***JPush [#eca82729]
-JPushで中国国内のAndroid端末にプッシュ通知するための初期調査 - Qiita~
https://qiita.com/grachro/items/77036fc7b1672a4f77d2

**[[mBaaS]]利用時 [#yfb3e1b6]

***ニフクラ mobile backend [#w63fbaa6]
-iOS
--プッシュ通知 (iOS) : 基本的な使い方~
https://mbaas.nifcloud.com/doc/current/push/basic_usage_ios.html
--チュートリアル (iOS) : 位置情報に連動したプッシュ通知を送る~
https://mbaas.nifcloud.com/doc/current/tutorial/geolocation-notification.html#/iOS

-Android
--プッシュ通知 (Android) : 基本的な使い方~
http://mb.cloud.nifty.com/doc/current/push/basic_usage_android.html
--チュートリアル (Android) : 位置情報に連動したプッシュ通知を送る~
https://mbaas.nifcloud.com/doc/current/tutorial/geolocation-notification.html#/Android

***Firebase [#r02a15e7]
最もポピュラーなmBaaS

-Firebase Cloud Messaging~
https://firebase.google.com/docs/cloud-messaging/?hl=ja
-Firebase Cloud Messaging | プラットフォーム間で通知を無料送信~
https://firebase.google.com/products/cloud-messaging/?hl=ja

-第9回 Firebase Cloud MessagingとFirebase Notificationsでメッセージを送信する:~
スマホアプリ開発を加速する,Firebaseを使ってみよう|gihyo.jp … 技術評論社~
https://gihyo.jp/dev/serial/01/firebase/0009

-Firebaseを使うと簡単にユーザ属性毎のプッシュ通知が送れて~
既読管理やコンバージョンも簡単に把握することが出来るよ!~
しかも無料で!すごく魅力的だけどめっちゃハマった話~
https://qiita.com/chanibarin/items/48d5f5946b1e6c97e379

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS