コツコツ

デザインやプログラミングについて学べる8bitspell.comの運営者のブログです。IT以外のことでも、思ったことをつらつらと書いていきます。

Amazon Web Service (AWS)のSNSを使ってiOSにプッシュを送ってみた 【Xcode編 その3】

f:id:takafoo:20161109235608p:plain

前回はProvisioning Profilesの作成をしました。 今回はXcodeでサンプルアプリを作成して、DeviceTokenを取得してみましょう。

サンプルアプリの作成

Xcodeを起動して、File>New>Projectを選択します。

f:id:takafoo:20161109235906p:plain


Single View Applicationを選択して、Nextをクリックします。

f:id:takafoo:20161109235958p:plain


Organizations Nameは識別しやすいもので大丈夫です。 Product NameとOrganizations Identifier を入力するのですが、その組み合わせがその1で作成したBundle Identifierと一致するようにしてください。 ここは凄く重要です。

f:id:takafoo:20161110000031p:plain


PROVISIONING PROFILEの割当て

以前作成したProvisioning Profileをサンプルアプリに割り当てていきます。 TARGETS>pushtest>Generalに移動したら、Teamのところから自分の開発用アカウントを選択します。

f:id:takafoo:20161110000112p:plain


pushtest>PROJECTのpushtestへ移動します。

f:id:takafoo:20161110000147p:plain


Build Settingsを選択して、Allが選択されていることを確認したら、検索バーにcode signと入力します。

f:id:takafoo:20161110000235p:plain


Provisioning ProfileのDebugには作成したプッシュ通知用のProvisioning Profileを指定します。Code Signing IdentifyにはProvisioning Profileに登録されたアカウントを指定します。この選択時にIdentifiers from Profile “hogehoge”というアナウンスが表示される場合は、それでサジェストされたアカウントを指定してください。上手く表示されない場合は、一度Xcode全体を終了して、再起動してみてください。これによって、Profileなどの認証がうまくいきます。新しいProvisioning Profileを追加した場合は再起動することをおすすめします。

f:id:takafoo:20161110000316p:plain


設定が完了すると次のようになります。

f:id:takafoo:20161110000341p:plain


TARGETS>pushtestのCode Signingについても同様の設定を行います。

f:id:takafoo:20161110000445p:plain


DEVICE TOKEN取得用コードの追加

TARGETS>pushtest>CapabilitiesからPush Notificationを有効化します。

f:id:takafoo:20161110000527p:plain


AppDelegate内に以下のコードを追加します。

// REGISTER DEVICE TOKEN
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        // GET TOKEN
        print("Device token = \(deviceToken)")
}

実機でアプリを起動すると、アプリがAppleのプッシュ管理用のサーバーにアクセスします。 端末固有のID情報の登録が完了すると、このファンクションを通じてdeviceTokenが表示されます。

// FAILED TO REGISTER DEVICE TOKEN
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
    print("couldn't register: \(error)")
}

また上のコードを追加することで、deviceTokenの取得に失敗した場合のエラー内容をみることができます。

//
// REGISTER DEVICE TOKEN
//
 
let userNotificationTypes:UIUserNotificationType = [UIUserNotificationType.Alert,UIUserNotificationType.Sound]
let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()

最後にAppDelegateのdidFinishLaunchingWithOptions内に上のコードを追加してくだい。 このコードでは通知設定を促すウィンドウとDeviceTokenの取得を試みます。


f:id:takafoo:20161110000559p:plain

DeviceTokenが取得できるとXcodeのConsole画面に次のように表示されます。 次回はAWSSNSを使って実際にプッシュ通知をしてみましょう!