ちょっと話題の記事

Amazon SNS で Mac OS X アプリに Push 通知が送信できるようになりました!

2015.06.19

OS X アプリに Push 通知を送信できるようになりました

先日6月15日(現地時間)に Amazon SNS のアップデートがあり、Mac OS X アプリと VoIP を利用した iOS アプリに対して Push 通知が送信できるようになりました。

push-to-mac25

ということで今回は OS X アプリへの Push 通知を試してみました。

必要なこと

以前は OS X アプリと iOS アプリの Developer Program はそれぞれ独立していましたが、先日の WWDC 2015 で新しく Apple Developer Program という名前になり一本化されました。Apple Developer Program に加入するだけで、OS X アプリ、iOS アプリ、Safari 拡張機能をすべて App Store で配布できるようになります。

Provisioning Profile を作成する

まずは iOS アプリと同じように Provisioning Profile を作成します。Provisioning Profile を作るには次の作業が必要です。

  1. Certificate の作成
  2. App ID の作成
  3. デバイスの登録
  4. Provisioning Profile の作成

Certificate の作成

Certificate は iOS アプリ用とは別になるので、新しく作成する必要があります。iOS と同じ作業ですので、以下を参考にしてください。

App ID の作成

次に OS X アプリの App ID を作成します。Push Notification にチェックを入れておきましょう。

push-to-mac01

App ID 作成後、App ID の詳細を見てみると Push Notification 欄が Configurable になっていると思います(黄色のマークが付いている状態)。Push Notification 用の Certificate も作成する必要があるので、先ほどと同じ手順で作成します。CertificateSigningRequest.certSigningRequest ファイルは先ほどと同じものでOKなので、キーチェーンアクセスの再操作は不要です。

push-to-mac02

今回は Development で試すとして、ひとまずこれで OK です。

push-to-mac03

デバイスの登録

デバイスは今使っている Mac を登録しましょう。Mac の UUID は Xcode の Organizer から見れます。

push-to-mac04

Provisioning Profile の作成

全ての準備が整ったので、最後に Provisioning Profile を作成します。Type は Mac App Development を選びます。

push-to-mac05

先ほど作成した App ID を選びます。

push-to-mac06

先ほど作成した Certificate を選びます。

push-to-mac07

先ほど作成したデバイスを選びます。

push-to-mac08

名前を付けます。

push-to-mac09

これで完了です。ダウンロードします。

push-to-mac10

ファイルを開くと Provisioning Profile のインストール確認画面が表示されるので、インストールしましょう。

push-to-mac11

OS X アプリを開発する

次に OS X アプリを開発しましょう。といっても通知を受け取りたいだけなので、デバイストークンを受け取るだけです。

Xcode を開いて「New」から「Project」を選択し、「Cocoa Application」を選択します。

push-to-mac12

Product Name と Organization Identifier は先ほど作成した App ID に合わせてください。

push-to-mac13

Xcode プロジェクトが起動したらプロジェクト設定の Signing の Developer ID を選択し、Team を Apple Developer Program の Team に設定します。

push-to-mac14

また、Build Settings の Provisiong Profile に先ほど作成した Provisioning Profile を設定します。

push-to-mac15

次に、ちょっとだけコーディングします。AppDelegateクラスに次のようなコードを実装してください。

#import "AppDelegate.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    // Remote Notification を登録
    NSApplication *application = [aNotification object];
    [application registerForRemoteNotificationTypes:
     NSRemoteNotificationTypeAlert |
     NSRemoteNotificationTypeBadge |
     NSRemoteNotificationTypeSound];
}

- (void)application:(NSApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // デバイストークンの取得
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"token: %@", token);
}

- (void)application:(NSApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    // エラーの場合
    NSLog(@"Error: %@", error);
}

@end

アプリを実行すると、ログにデバイストークンが出力されると思います。メモしておいてください。

push-to-mac16

証明書ファイルの書き出し

次に、上記で作成したアプリの Remote Notification の証明書ファイルを書き出します。このファイルは最終的に Amazon SNS に登録することになります。

キーチェーンアクセスを開くと先ほど登録した Remote Notification 用の Certificate があると思うので、右クリックを押して「"Apple Development Mac Push Services: アプリ名"を書き出す」を選びます。

push-to-mac17

パスワードを付けて P12 ファイルを書き出しましょう。

Platform Application を作成する

次にいよいよ Amazon SNS の登場です。まずはアプリを表現する Platform Application を作成しましょう。まずは「Create Platform Application」をクリックします。

push-to-mac18

次のような感じで登録します。

項目名 設定
Application Name 適当な識別しやすいアプリ名
Push Notification Platform Apple Development
Push Certificate Type MacOS Push Certificate
Choose P12 File 先ほど作成した P12 ファイル (日本語不可!)
Enter Password P12 ファイル生成時に設定したパスワード

ここまでできたら「Load Credential File」をクリックします。すると公開鍵と秘密鍵が表示されるはずです。エラーの場合は P12 ファイルの名前が日本語になっていないかチェックしてください。

push-to-mac19

作成後、デバイストークンを Platform Endpoint として登録します。作成した Platform Application を選択した状態で「Create Platform Endpoint」をクリックします。

push-to-mac20

Device Token に先ほどメモしておいたデバイストークンを入力します。User Data は使わないので空欄でOKです。

push-to-mac21

これで準備ができました!

Push 通知を送信する

では Push 通知を送信してみましょう。Platform Application の詳細画面にアクセスし、作成した Platform Endpoint を選択し「Publish to Endpoint」をクリックします。

push-to-mac22

適当な文章を。

push-to-mac23

Publishすると…届いたー!

push-to-mac24

もちろん、あとから通知センターからも確認できますヽ(`▽´)/

push-to-mac25

まとめ

手順が少し長くなりましたが、Amazon SNS に直接関係する手順はかなり少ないです。OS X アプリに対する Push 通知のしくみが簡単に構築できますし、何より iOS や Android などといった既にサポートされているプラットフォームも含めて共通の処理にできるので、管理も簡単になります。ぜひ使ってみてはいかがでしょうか。

SNS の送信先が Mac って、いろいろな場面で役立ちそうですね。S3 Event Notification と組み合わせたり、各種エラー通知先としてみたり…使い方は無限大!