Amazon Web Services: SNS

Simple Notification Service (SNS) は、プッシュメッセージ送信サービス。

iOS、Android デバイスなどへのプッシュ通知ができる。

Apple 系ノーティフィケーション APNS (APNS_Sandbox) の場合

Push Notification 対応の AppID を適用した MobileProvisioning ファイルを作成している必要がある。

作り方手順:
iOS Dev Center Certificates のページから AppID のページにいき、Push Notification のチェックをオンにして生成。開発時は APNS Sandbox、リリース時は APNS を使用する。CertificateSigningRequest.certSigningRequest を Mac のキーチェーンから生成して、作成した AppID の PushNotification の欄から Certification へ追加。生成された aps_development.cer をダブルクリックして KeyChain を追加。

AWS で設定する送信先 (Endpoint) の Device Token 取得は以下のコードで取得できる。
ついでに通知からの起動 (didReceiveRemoteNotification:userInfo) も。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [[UIApplication sharedApplication]registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
    return YES;
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"%@",[NSString stringWithFormat:@"Device Token=%@",deviceToken]);
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"%@",[NSString stringWithFormat: @"Error: %@", err]);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    NSLog(@"ReceiveRemoteNotification on foreground: %@", userInfo);
}
Device Token=<XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX>

AWS 側での作業は先ほど Certification を取得してキーチェーンに登録した流れで「Apple Development IOS Push Services: xxxxxxxxxx」の証明書を右クリックして p12 ファイルを生成、AWS SNS のページから New App したときに APNS(開発用なら APNS Sandbox) で p12 ファイルを登録、load Credentials from File ボタンを押すとテキストファイルが埋められて、アプリが登録される。

あとは Endpoint に Device Token を登録して Publish で試せる。

JSON Publish 例

{ 
    "default": "<enter your message here>", 
    "email": "<enter your message here>", 
    "sqs": "<enter your message here>", 
    "http": "<enter your message here>", 
    "https": "<enter your message here>", 
    "sms": "<enter your message here>", 
    "APNS": "{\"aps\":{\"alert\": \"<message>\",\"sound\":\"default\"} }", 
    "APNS_SANDBOX": "{\"aps\":{\"alert\": \"<message>\",\"sound\":\"default\"} }", 
    "GCM": "{ \"data\": { \"message\": \"<message>\" } }", 
    "ADM": "{ \"data\": { \"message\": \"<message>\" } }" 
}

APNS だと sound が使える。