コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

AmazonSNSでGCM向けとAPNs向けのJSON作るときは格別要素を削ってあげる必要はない

スマホネイティブアプリ向けPush通知をAmazonSNSで送ることってあると思うんですが、AndroidiOSで別々にJSON送らなくてもいいんだよというTips

解説

AmazonSNSでメッセージを送信する時にJSONの形式は以下の感じです

▼GCMへ送る場合

{
    "default": "送りたい文字列",
    "GCM": "GCMに送りたいJSON"
}

▼APNSに送りたい場合

{
    "default": "送りたい文字列",
    "APNS": "ApplePushNotificationServerに送りたいJSON",
}

このJSONを各AndroidはdefaultとGCMの要素を持つJSON,iOSはdefaultとAPNSの要素を持つJSONを送らなければならないのかと思いきや、一緒に送っても大丈夫。

実際に送ったことがあるJSONは以下。

{
    "default": "send message",
    "APNS": "{\"aps\":{\"alert\":{\"title\":\"送るTitle\",\"body\":\"send message\"},\"sound\":\"default\",\"badge\":1}}",
    "GCM": "{\"data\":{\"body\":\"send message\",\"title\":\"送るTitle\"}}"
}

JSONの中にJSONが入っているので " とかをエスケープする必要がある

そのため、わざわざ APNS用のJSON GCM用のJSON と分けて作らなくても同じものを込めてしまってもいいので、生成ロジックを複数に分けなくて済む。

余談

今、FCMにはAmazonSNSが対応していないのでFirebaseコンソールで古いキーを使ってるんだが、アップデートの予定あるんだろうか…。

関連リンク