メモ > 技術 > サービス: AmazonSNS > 概要・前提・注意点など
■概要・前提・注意点など
■概要
AndroidとiOSにプッシュを送信するためのメモ
AndroidとiOSではプッシュの仕組みはまったく異なる
また、大量のプッシュを安定して配信するのも難しい部分が多い。この部分はAmazonSNSに任せることとする
iOSよりもAndroidの方が実装が比較的容易なので、
まずはAndroid単体でプッシュを実装し、
次にiOS単体でプッシュを実装し、
最後にAmazonSNSでAndroidとiOSの両方にプッシュを送信できるようにする
■参考ページ
Android から Amazon SNS を使ってみる - Qiita
https://qiita.com/kusokamayarou/items/27e023ad06cade20c731
※Android版のみだが、全体の流れとスクリーンショットは参考になる
ただし以下に記載したKotlin・Swift・PHPプログラムなどは、別途調査してくれた人のものをベースにしている
解説で触れられている Amazon Cognito は、以下に記載したメモでは使っていない
■開発環境
サーバサイドは通常のLAMP環境で大丈夫だが、PHPを使う場合は7以上が必要
Vagrantで構築することも可能だが、アプリからPHPにアクセス場合は同一LAN内の他端末からアクセスできるようにしておく必要がある
■アプリのID
いったんアプリを公開すると変更できないので、慎重に決定したい
「iOSとAndroidの両方で作る」「本番用と検収用と開発用がある」「Pushも使用する」などを考慮する
現状の結論として、iOSもAndroidも net.refirio.pushtest1 のようなIDで作って開発版書き出し時には .dev を付ける…が良さそう
iOSとAndroidでIDを統一できるように、「pushtest1」部分にハイフンやアンダーバーは無い方が無難
詳細はこのテキストの「考察: 本番公開用に作成する」も参考に
■Android: ターゲットデバイス
Android4は今はSSLへのリクエストに難がある
プッシュの動作を検証する程度なら問題無さそうだが、公開用のアプリならできるだけAndroid5以降をターゲットデバイスとする方が無難そう
Android4系端末のTLS1.1&1.2対応について - Qiita
https://qiita.com/ntsk/items/9f31fc7b44c04ea45e0b
android - javax.net.ssl.SSLException: Read error: ssl=0x9524b800: I/O error during system call, Connection reset by peer - Stack Overflow
https://stackoverflow.com/questions/30538640/javax-net-ssl-sslexception-read-error-ssl-0x9524b800-i-...
■Android: GCMの廃止
Googleのプッシュ送信は、以前はGCMが使われていた
今はFCMで作る必要があるので、古い解説を参考にする場合は注意する
「Googleクラウドメッセージング(GCM)」が1年後に廃止、「Firebase Cloud Messaging(FCM)」への移行が必要に:Googleのアプリメッセージング基盤が完全に交代 - @IT
http://www.atmarkit.co.jp/ait/articles/1804/13/news051.html
おじさんのための2018年スマホPUSH通知事情 (+GCM終了のお知らせ) - Qiita
https://qiita.com/keidroid/items/290af7b99952e889f4a7
ご注意ください!プッシュ配信GCM廃止について(〜2019年04月10日まで) - ニフクラ mobile backend(mBaaS)お役立ちブログ
https://blog.mbaas.nifcloud.com/entry/2018/04/11/165730
■iOS: レガシーバイナリプロトコルの廃止
※未検証
ApnsPHPでは「旧式のバイナリインターフェイス」を利用しているが、これは2020年11月以降使えなくなる
HTTP/2ベースに移行する必要がある
ニュース - Apple Developer
https://developer.apple.com/jp/news/
APNs Provider API(HTTP/2)をPHPで試してみる - Qiita
https://qiita.com/itosho/items/2402df4de85b360d5bd9
APNsとHTTP/2通信でiOSのPush通知 - Qiita
https://qiita.com/joooee0000/items/721e809954f7d1cc3c42
cURL(curl)でアプリにプッシュ通知を送信する - すいすいSwift
https://swiswiswift.com/2019-11-06/
環境の構築は以下を参考にできそう
PHP curlでHTTP/2リクエストを実行するための設定 on CentOS 7 | 稲葉サーバーデザイン
https://inaba-serverdesign.jp/blog/20171011/php_curl_http2_centos7.html
以下、昔調べてもらったときの資料
【ドキュメント】バイナリProvider API
https://developer.apple.com/jp/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Bin...
Binary Provider API
https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotifi...