リモート通知(Push通知) [Swift][iOS8] (1/2)

2015年6月2日

ios

 

iOS Dev Centerにおいてリモート通知用の「App ID」及び「Provisioning Profile」生成など一連の作業をおこない、単純なリモート通知(プッシュ通知)ができるアプリを作成する(Swift)。

 

開発環境

Xcode6.3  iOS8.3 Swift

PHP/MySQL

 

 

基本的な用語の確認


 

プログラミングガイド(PDF)等による基本的な用語を確認する。

 

デバイス:iPhoneやiPadなどのデバイス

 

APNs:Apple Push Nofitication serviceの略。リモート通知用のアップルのサーバ。

 

プロバイダ:リモート通知のタイミングやその配信内容を決めるサーバサイドプログラム。自前で用意する。本記事ではPHPで作成している。またサーバにはSSL証明書が必要となる。

 

SSL証明書:プロバイダとAPNsとの間で必要なSSL通信のための証明書。

 

 

 

リモート通知の一般的な流れ


 

1. アプリをデバイスにダウンロードして起動をする。ユーザがプッシュ通知の許可をすると、APNsにデバイスが登録され、APNsからデバイストークンが送られてくる。

 

2. アプリはそのデバイストークンをプロバイダのデータベースへ保存する。

 

3. プロバイダから通知を送る。しかし直接デバイスへは送られない。プロバイダに保存されているデバイストークンを元にAPNsへ接続。

 

4. APNsはデバイストークンと紐付けられているユーザーのデバイスに通知を送る。

 

Pushフロー

 

 

制作手順


 

概略

Xcodeでプロジェクトを作成したら(Bundle Identifierに注意)、 「iOS Dev Center」にログインしてリモート通知用の「App ID」を作成し、「SSL証明書」と「Provisioning Profile」を生成した。SSL証明書とProvisioning Profileは、開発用とAd Hoc/製品用それぞれが必要となることに注意。今回は開発用アプリを作成する。

 

 

まずはXcodeでプロジェクト(Single View Application)を作成。名前は「PushApp」にした。XcodeでのBundle Identifierは、自分の「ドメイン名+アプリ名」のように一意にする(今回は「net.noumenon-th.PushApp」となる)。のちほど「iOS Dev Center」側で登録する

 

PushApp1

 

 

■App IDの作成 

 

次に「iOS Dev Center」にログインして「App ID」の作成画面に移行する。

 

NameはXcodeではじめに作成したプロジェクト名と同じにすると分かりやすい。今回は「PushApp」にした。Push Notificationsをおこなうアプリはワイルドカード(※)ではなく、アプリ毎にそれぞれ固有のApp IDを作成しなければならない。「Bundle ID」は作成したXcodeのBundle Identifierと一致させておく

 

App ID Description

Name:今回は「PushApp」にした。

Apple ID Plefix

Value:適当な値を選択。

PushApp2

 

App ID Suffix

Explicit App ID にチェック。

Bundle ID:net.noumenon-th.PushApp

「Bundle ID」は作成したXcodeのBundle Identifierと一致させておく

PushApp2-2

 

App Services

Push Notificationsにチェックを入れ、Continueをクリックする。次の画面へ進む。

Push2-3

 

そのまま「Submit」をクリックし、次の画面へ進む。

Push2-4

 

 さらに「Done」をクリックし、次の画面へ進む。

Push3

 

 

この段階ではまだPush Notificationsは「Enabled」にはなっていない。

Editをクリックして、SSL証明書の生成に移る。

Push04

 

 

■SSL証明書の生成

 

SSL証明書を作成する項目を確認する。SSL証明書は「開発用(Development SSL Certificate)」と「Ad Hoc用/製品用(Prduction SSL Certificate)」の二つある。今回は開発用の「Create Certificate…」をクリックする。

 

Push5

 

 

そのまま「Continue」をクリックする。

Push6

 

 

すると「CSR file」(CertificateSigningRequestの略)のアップロード(Upload)が求められる。このファイルを作成するためにまずMacのユーティリティソフト、キーチェーンアクセスを起動させる。

Push7

 

 

キーチェーンアクセスを起動させたら、メニューから以下のように「認証局に証明書を要求…」を選択する。

Push8

 

 

「ディスクに保存」にチェックを入れ、ユーザのメールアドレスを適当に入力する(「通称」や「CAのメールアドレス」は特に入力しなくても大丈夫)。

「続ける」をクリックする。

Push9

 

「CertificateSigningRequest.certSigningRequest」という名前のファイルがダウンロードされるので、先ほどのブラウザ画面に戻り「Upload CSR file.」の項目においてそのファイルを選択し「Generete」をクリックする。

Push10

 

以下の画面に遷移した時点で、Push Notificationsは「Enabled」となる。

 

「Download」をクリックすると証明書(開発用)がダウンロードされるので、そのファイルをダブルクリックしてキーチェーンアクセスに登録する。

Push11

 

キーチェーンアクセスを開いたら「証明書」の欄に、先ほどダブルクリックして登録した証明書(開発用)を確認し、右クリックして書き出す。

Push12

 

 

保存する際、フォーマットは「個人情報交換(.p12)」を選択し、名前は「push_develop.p12(拡張子.p12)」にした。

Push-pem

 

パスワードを適当に入力して「OK」をクリックする。

もう一度パスワードを問われるが、Macのログインパスワードを入力して「許可」もしくは「常に許可」をクリックする。push_develop.p12が生成される。

Push13

 

push_develop.p12はそのままではプロバイダのPHPでは利用できないため、ターミナルを起動し、以下のコマンドでpem形式に変換する。名前は「push_develop.pem」(拡張子pem)にした。

 

 

作成した「push_develop.pem」ファイルは、プロバイダで利用するディレクトリに置いておく。

 

 

■ルート証明書について

 

ルート証明書はEntrustからダウンロードできる。このルート証明書がなくてもリモート通知できるが、APNs側の証明書も検証したい場合に必要となる。SSL証明書と違い、ルート証明書には開発用・製品用の区別はない。ターミナルを起動したら、以下のコマンドで取得できる。

 

 

このルート証明書はpemに変換しなくてもよい。SSL証明書と同様に、SSL証明書と同様にプロバイダで利用するディレクトリに置いておく。

 

 

 

■Provisioning Profileの生成

 

次にPushAppプロジェクト(Xcode)に必要なプロビジョニングプロファイル(Provisioning Profile)を作成する。開発用(iOS App Development)と製品用(App Store)、そして配布用(Ad Hoc)があることに注意。今回はSSL証明書と同様に開発用を生成する。

 

「iOS Dev Center」にログインしたら「Provisioning Profiles」の項目を選択し「+」をクリックする。

Development「iOS App Development」にチェックし「Continue」をクリックする。

Push15

 

 

作成したアプリ名(今回はPushApp)を選択し、「Continue」をクリックする。

Push016

 

 

開発用の証明書(iOS Development)にチェックし「Continue」をクリックする。

Push17

 

リモート通知を試したいデバイスをチェックし「Continue」をクリックする。

Push18

 

 

Profile Nameを開発用とすぐわかるような名前にして「Generate」をクリックすると、開発用のProvisioning Profileを生成することができる。

Push19

 

 

ダウンロードしたらXcodeに取り込む。

 

Push20

 

 

以上で「iOS Dev Center」側の作業は完了。

 

次回はアプリ(Swift)とプロバイダ側(PHP)の作業に移る。

→「リモート通知(Push通知) [Swift][iOS8] (2/2)

Copyright © 2019 アクト・オブ・リーディング All Rights Reserved.  プライバシーポリシー