Amazon Simple Notification Service(SNS)
2023/03/11 08:29
2023/11/22 14:26
Amazon SNS の基本的な概念
SMS プロトコル
送信元のアイデンティティ
- 送信者 ID
- 送信元番号
- 送信者 ID の使用が現地法により義務付けられている国や地域では送信元番号を利用できない
- 2022/06 現在、ベラルーシ、エジプト、インド、ヨルダン、クウェート、フィリピン、カタール、ロシア、サウジアラビア、スリランカ、東ティモール、トルコ、アラブ首長国連邦、ベトナムが該当する
- 複数の送信元番号を取得してユースケースごとに使い分けることも可能
米国の送信元番号
2022/06 現在、ショートコード、フリーダイヤル番号、10DLC の 3種類の電話番号の取得が可能
- ショートコード
- 桁数: 5-6 digits
- サポートチャネル: SMS
- トラフィック: Promotional, Transactional
- 企業情報検証の必要性: Required
- プロビジョニングに要する時間: 12 weeks
- スループット: 100+ messages/s (緩和には追加の料金が発生する)
- 必要なキーワード: Opt-in, opt-out, HELP
- Toll-free 番号
- 桁数: 10 digits
- サポートチャネル: SMS
- トラフィック: Transactional
- 企業情報検証の必要性: Not required
- プロビジョニングに要する時間: 即時
- スループット: 3 messages/s(より高いスループットが必要な場合は 10DLC かショートコードを利用する)
- 必要なキーワード: STOP, UNSTOP
- 10DLC
- 桁数: 10 digits
- サポートチャネル: SMS
- トラフィック: Promotional, Transactional
- 企業情報検証の必要性: Required
- プロビジョニングに要する時間: 1 weeks
- スループット: 10DLC スコアに依存するが 100 messages/s まで対応している
- 必要なキーワード: Opt-in, opt-out, HELP
Q&A
Application プロトコル
APNs へ証明書を用いて直接リクエストを行いたい
CERTIFICATE_FILE_NAME=path to the certificate file
CERTIFICATE_KEY_FILE_NAME=path to the private key file
TOPIC=App ID
DEVICE_TOKEN=device token for your app
APNS_HOST_NAME=api.sandbox.push.apple.com
openssl s_client -connect "${APNS_HOST_NAME}":443 -cert "${CERTIFICATE_FILE_NAME}" -certform DER -key "${CERTIFICATE_KEY_FILE_NAME}" -keyform PEM
curl -v --header "apns-topic: ${TOPIC}" --header "apns-push-type: alert" --cert "${CERTIFICATE_FILE_NAME}" --cert-type DER --key "${CERTIFICATE_KEY_FILE_NAME}" --key-type PEM --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}
APNs へトークンを用いて直接リクエストを行いたい
TEAM_ID=Team ID
TOKEN_KEY_FILE_NAME=path to the private key file
AUTH_KEY_ID=your key identifier
TOPIC=App ID
DEVICE_TOKEN=device token for your app
APNS_HOST_NAME=api.sandbox.push.apple.com
openssl s_client -connect "${APNS_HOST_NAME}":443
JWT_ISSUE_TIME=$(date +%s)
JWT_HEADER=$(printf '{ "alg": "ES256", "kid": "%s" }' "${AUTH_KEY_ID}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_CLAIMS=$(printf '{ "iss": "%s", "iat": %d }' "${TEAM_ID}" "${JWT_ISSUE_TIME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_HEADER_CLAIMS="${JWT_HEADER}.${JWT_CLAIMS}"
JWT_SIGNED_HEADER_CLAIMS=$(printf "${JWT_HEADER_CLAIMS}" | openssl dgst -binary -sha256 -sign "${TOKEN_KEY_FILE_NAME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
AUTHENTICATION_TOKEN="${JWT_HEADER}.${JWT_CLAIMS}.${JWT_SIGNED_HEADER_CLAIMS}"
curl -v --header "apns-topic: $TOPIC" --header "apns-push-type: alert" --header "authorization: bearer $AUTHENTICATION_TOKEN" --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}
FCM へ Legacy API を用いて直接リクエストを行いたい
アプリサーバーからの送信リクエストを作成する に詳細な情報の記載がある
FCM_TOKEN=<FCM_TOKEN>
SERVER_KEY=<SERVER_KEY>
PROJECT_ID=<PROJECT_ID>
curl -X POST \
--header "Authorization: key=$SERVER_KEY" \
--header "project_id: key=$PROJECT_ID" \
--header Content-Type:"application/json" \
https://fcm.googleapis.com/fcm/send \
-d @- << EOF
{
"to": "$FCM_TOKEN",
"notification": {
"body": "message_body"
},
}
EOF
FCM へ HTTP v1 API を用いて直接リクエストを行いたい
gcloud config configurations create playground
gcloud auth login
gcloud config set project playground
gcloud auth activate-service-account --key-file /path/to/keyfile.json
access_token=`gcloud auth print-access-token`
curl \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $access_token" \
-d '{"message": {"notification": {"title":"test title","body":"hello"}, "token": "<ACCESS_TOKEN>"}}' \
-X POST https://fcm.googleapis.com/v1/projects/playground/messages:send
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
JavaScript
PowerShell
kibana
elasticsearch
fluentd
nginx
イベント
五十嵐裕美
村川梨衣
logrotate
IoT
Scala
Java
C言語
iputils
ICMP
WUG
mastodon
Swift
AWS
Clock
Windows
アーキテクチャ
PoEAA
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
network
nc
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync
EFS
Gradle
english