Memo

メモ > 技術 > サービス: AmazonSNS > トラブル

■トラブル
■プッシュが届かない 以下などを確認する ・アプリのパッケージ名を確認し、それに対応する設定が行われているか ・Firebase、Apple Developer Program、AmazonSNS でそれぞれ設定内容が正しいか Androidの場合は以下も確認する ・USBデバッグでインストールしたか、APKを書き出してインストールしたか iOSの場合は以下も確認する ・Distribution証明書とDevelopment証明書、適切な方を使用しているか ・アカウントの有効期限切れ、証明書の有効期限切れになっていないか ・「Development SSL Certificate」で設定をしたのか「Production SSL Certificate」で設定したのか 後述の「送信サーバによってはプッシュが届かない」も参照 ■送信サーバによってはプッシュが届かない 開発環境から突然プッシュ通知を送れなくなった ただし、別サーバで同じプログラムを実行すると送れる Amazon SNS からのエラーメッセージを確認すると、以下のようになっていた
Error executing "Publish" on "https://sns.ap-northeast-1.amazonaws.com"; AWS HTTP error: Client error: `POST https://sns.ap-northeast-1.amazonaws.com` resulted in a `403 Forbidden` response: <ErrorResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> <Error> <Type>Sender</Type> <Code>SignatureDo (truncated...) SignatureDoesNotMatch (client): Signature expired: 20200129T081327Z is now earlier than 20200129T081427Z (20200129T082927Z - 15 min.) - <ErrorResponse xmlns="http://sns.amazonaws.com/doc/2010-03-31/"> <Error> <Type>Sender</Type> <Code>SignatureDoesNotMatch</Code> <Message>Signature expired: 20200129T081327Z is now earlier than 20200129T081427Z (20200129T082927Z - 15 min.)</Message> </Error> <RequestId>b8fd243d-c596-5897-9820-72968131164b</RequestId> </ErrorResponse>
「20200129T081327Z is now earlier than 20200129T081427Z」となっている サーバの時間がおかしいみたい # date 2020年 1月 29日 水曜日 17:18:30 JST サーバの時間を確認すると、15分程度遅れていた # timedatectl set-timezone Asia/Tokyo # date 2020年 1月 29日 水曜日 17:19:20 JST タイムゾーンを再設定しても変化なし # chronyc -a makestep 200 OK chronyc で強制的に時間を調整してみる (chronyc がインストールされていなければインストールする) # date 2020年 1月 29日 水曜日 17:36:18 JST 時間がぴったりになった この状態ならAmazonSNSでプッシュが送れるようになった Centos7の時間がずれた - Qiita https://qiita.com/SwuBHj8aKGqBKHet/items/2f6a2003851420b460ba ■トークン管理 プッシュ送信先となるトークンは、ときどき変更されることがあるので注意 最新の登録情報を維持し続けるために、以下のような手段がある Amazon SNS のモバイルトークン管理についてのベストプラクティス | Developers.IO https://dev.classmethod.jp/cloud/aws/sns-mobile-token/ [PHP]Amazon SNS を使い、iOS・AndroidへPUSH通知 - SNS設定編 - - Qiita https://qiita.com/kei_ohsaki/items/723595671767fcae1ec1 [PHP]Amazon SNS を使い、iOS・AndroidへPUSH通知 - デバイストークン登録・更新編 - - Qiita https://qiita.com/kei_ohsaki/items/257e4f42224dd89e15ce [PHP]Amazon SNS を使い、iOS・AndroidへPUSH通知 - トピック作成・配信編 - - Qiita https://qiita.com/kei_ohsaki/items/564e75b346e1495a33e7 Amazon SNS モバイルプッシュ API の使用 - Amazon Simple Notification Service https://docs.aws.amazon.com/ja_jp/sns/latest/dg/mobile-push-api.html ■APIの取得件数制限 「listEndpointsByPlatformApplication」の場合、以下の注意点がある
Lists the endpoints and endpoint attributes for devices in a supported push notification service, such as GCM and APNS. The results for ListEndpointsByPlatformApplication are paginated and return a limited list of endpoints, up to 100. If additional records are available after the first page results, then a NextToken string will be returned. To receive the next page, you call ListEndpointsByPlatformApplication again using the NextToken string received from the previous call. When there are no more records to return, NextToken will be null. For more information, see Using Amazon SNS Mobile Push Notifications. This action is throttled at 30 transactions per second (TPS).
1回のリクエストで100件まで 1秒間に30トランザクションまで 一度に3000件以上取る場合は工夫が必要かも トークン管理のために 「無効になったトークンをすべて取得して何らかの処理をする」 とするよりも、上のリンク先で紹介されているように 「アプリ起動時に毎回トークンの有効/無効を確認する。無効ならトークンを差し替える」 とする方がいいかも ■その他 プッシュはどうしても 「GoogleやAppleが作ったブラックボックスを利用する」 となるので、そういった面でのリスクは常に発生する プッシュ通知の未達/遅延問題に真正面から取り組むLINE公式アカウント開発チーム - LINE ENGINEERING https://engineering.linecorp.com/ja/interview/aim-at-100-push-notification-knowledge-obtained/ 通知の送信には、AndroidであればGoogle、iOSはAppleの仕組みを利用することになり、その仕組みは我々からするとブラックボックスであり、すべてをつまびらかにすることはできない Androidの中に、該当アプリで一定数以上の通知がすでに表示されていると、それ以上の通知を抑止するというロジックが組み込まれていた LINE公式アカウントのように、通知量が多くなるアプリではクリティカルな問題になる可能性があるので注意が必要でしょう

Advertisement