Parse.comを使ったiOSデバイスへのプッシュ通知[導入編]

アプリのバックエンド機能を提供するBaaSサービスのParseを使ってプッシュ通知を行う方法をご紹介します。

Parseの詳細については公式ページまたは過去記事を参照してください。

無料版でも、ターゲットを絞り込んだ通知など多くのことが行えるので、3回に分けて紹介していきます。

今回はその第1回、プッシュ通知機能を実現するまでの導入手順についてです。

なお、ParseはiOS、Android、Windows Phoneなどさまざまなデバイスに通知を行うことができますが、この記事ではiOSを対象とします。

公式のドキュメント(Quick Start | Parse)に従い、作業の手順は次のような流れで進めます。

  1. App IDの作成
  2. 通知用証明書の作成
  3. プロビジョニングファイルの作成
  4. Parseに証明書を登録
  5. Xcode上で実装
  6. Parseからプッシュ通知を送る

App IDの作成

まず、Dev Centerにて通知を行うアプリのApp IDを作ります。

今回はプッシュ通知を行うので、SuffixはWildcard App IDではなくExplicit App IDを選択して作る必要があります。

Push Notificationにチェックを入れておき、AppIDを生成します。

AppIDを生成した時点では、まだプッシュ通知が有効になっていません。

ですので、続いて通知用証明書を作り、プッシュ通知を有効にします。


(Certificates, Identifiers & Profilesで確認したところ。Push Notificationsの項目がEnabledになっていません)

通知用証明書の作成

まずはキーチェーンアクセスで証明書要求ファイルを作成します。

「キーチェーンアクセス>証明書アシスタント>認証局に証明書を要求」 を実行し、メールアドレスと名前を設定します。

このとき、「ディスクに保存」をチェックしておき、証明書要求ファイルの書き出しを行います。

再びDev CenterのCertificates, Identiers & Profilesにアクセスし、通知を行うアプリの設定を編集します。

設定画面の下部にプッシュ通知に関する項目があるので、その中のCreate Certificate…をクリックして証明書を作成します。

なお、この画面から開発用と公開用の証明書の双方を作ることができますが、今回は開発用のものを作成します。

操作を進めていくと証明書要求ファイルをアップロードするよう求められるので、先ほど作成したファイルをアップロードします。

次の画面に進むと証明書ファイルがダウンロードできるので、これを保存しておきます。

ダウンロードした証明書ファイルをキーチェーンアクセスに登録したのち、この証明書を.p12ファイルとして書き出します。
なおp12ファイルについては、Parseではパスワードが利用できません。なので、p12ファイルの書き出し時にパスワードは設定しないようにして進めてください。

プロビジョニングファイルの作成

先ほど作成したApp IDを紐付けたプロビジョニングファイルを作成し、ダウンロードしておきます。

プロビジョニングファイルの作成自体は通常の手順と変わりません。

ただし、すでにプロビジョニングファイルと紐づいているApp IDに新たにプッシュ通知設定を加えた場合は、プロビジョニングファイルの更新を行う必要があります。

Parseに証明書を登録

プッシュ通知を行うための証明書をParseにも登録します。

まずは、Parseにログインした状態で、画面上部に表示される「Create New App」をクリックし、通知を行うアプリを作成します。

名前を入力してアプリを作成すると、新しく作成されたアプリの情報が見れるようになります。

この表示の右上にある歯車のアイコンをクリックし、設定画面を表示します。

設定画面の左側にあるメニューから「Push Notifications」を選択すると、証明書ファイルをアップロードするボタンが表示されるので、先ほど作った.p12ファイルをアップロードします。

Xcode上で実装

ここまででParse側の準備が整ったので、Xcodeでアプリを実装します。

まず、ParseのSDKおよび必要なライブラリ類を追加します。

SDKはこちらからダウンロードしてください。

SDKのほか追加するライブラリは以下の通りです。

  • AudioToolbox.framework
  • CFNetwork.framework
  • CoreGraphics.framework
  • CoreLocation.framework
  • libz.dylib
  • MobileCoreServices.framework
  • QuartzCore.framework
  • Security.framework
  • StoreKit.framework
  • SystemConfiguration.framework

あとはQuick Startに記載されたコードを記述していきます。

コードの追加はすべてAppDelegate.mに対して行います。

まず、.hファイルのインポートを行います。

#import <Parse/Parse.h>

次に、application:DidFinishLaunchingWithOptions:メソッドには次のコードを追加します。

[Parse setApplicationId:
@"applicationID" clientKey:
@"clientKey"]; 
[application registerForRemoteNotificationTypes:
UIRemoteNotificationTypeBadge |  UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound];

[2014/10/17追記] iOS8からはプッシュ通知の登録メソッドが変更されました。詳しくはこちらの記事をご覧ください。

なお、ここで必要になるアプリケーションIDとクライアントキーはParseの設定画面の「Application keys」を選択すると調べることが出来ます。

最後に、次の2つのメソッドを追加すれば実装は完了です。

- (void)application:(UIApplication *)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

PFInstallation *currentInstallation = [PFInstallation currentInstallation];

[currentInstallation setDeviceTokenFromData:deviceToken];

[currentInstallation saveInBackground];} 

- (void)application:

(UIApplication *)applicationdidReceiveRemoteNotification:

(NSDictionary *)
userInfo

{[PFPush handlePush:userInfo];}

あとはプロビジョニングファイル等の設定を行い、端末にアプリを転送します。

端末でアプリを起動するとプッシュ通知を許可するか尋ねられるので、許可しておきます。

Parseからプッシュ通知を送る

プッシュ通知を送るときは、プッシュ通知の管理画面の右上にある「Send a push」をクリックします。

次にプッシュ通知送信用画面が表示されます。ここで、画面右側に送信対象の数を示す「~ recipant(s)」と書かれたラベルが0以外になっていれば、プッシュ通知を送ることが出来ます。

あとは、通知メッセージを入力し、「Send Message」をクリックすれば…

端末に通知を送ることが出来ます。

なお、今回は説明を省きましたが、送信日時の設定や送信先の絞込みなどの設定もこの画面で行うことが出来ます。

まとめ

本記事では、Parseを使ったプッシュ通知の実装のために、Dev center・Parse・Xcode上で行う各手順についてご紹介しました。今回は開発用を例に紹介しましたが、公開用についてもおおむね同様の手順で行うことが出来ます。

次回は、今回紹介できなかった通知の送信先の絞込みについて、channelsパラメータを使用したものを例にご紹介したいと思います。

Related Post

iPhoneでHTML5のaudio要素を使うときに気をつけたいことiPhoneでHTML5のaudio要素を使うときに気をつけたいこと

HTML5ではaudio要素が追加され、外部プラグインを使わずブラウザで音を扱えるようになりました。そこで、デモを作ろうとしたのですが、ハマったポイントがいくつかあったので紹介します。検証環境はPC:Safari5.0.5(WIN)、iPhone:iOS4.3.2のMobile Safariです。 loop属性が効かない audio要素ではloop属性を付けることで、繰り返し再生が可能です。PCでは動作しますが、iPhoneではこれがうまく動作せず、1回再生されて停止してしまいました。onendedを使い、最後まで再生したらもう一度再生させれば対処できます。 <audio src=”audio.mp3″ preload=”auto” onended=”this.play()”

社内HTML5勉強会を行いました社内HTML5勉強会を行いました

先日、社内でHTML5勉強会を行いました。今回は「基礎編~HTML5の基礎とiPhone最適化~」と題して、HTML5でiPhone最適化を行う際の基礎知識とHTML5利用の目的共有を行いました。そこで、今回の勉強会の資料を一部公開します! HTML5といっても、新しく追加されたタグやAPI,CSS3など範囲が広く、その上主要ブラウザでも実装状況が違ったり、仕様の廃止があったりするのが現状です。しかし、スマートフォン(今回はiPhoneのみ)に限定してしまえば、ブラウザを限定することがほぼ可能なので、HTML5の機能を生かした最適化を行うことができます。機能面、操作性ではネイティブアプリに劣りますが、Webアプリであればデバイスに依存することなく開発でき、安価で導入しやすいという利点があります。  【資料の内容】●開発環境の整備●HTML5の基本セット●iPhone向けWebアプリケーションの開発-Viewport-付加機能●HTML5で追加されたタグ-audio-video-canvas-form属性●API-クライアントサイドのストレージ-geolovcation-オフラインアプリケーションキャッシュ●アニメーション  【資料はコチラ】 [file]/2010/12/HTML5_iPhone.pdf[/file]

iOS8とiOS7にプッシュ通知を送るiOS8とiOS7にプッシュ通知を送る

iOS8では、プッシュ通知から直接返信するなどのアクションが出来るようになりましたが、それに伴って通知の仕様も大きく変更されました。 この記事では基本的な手順とパラメータの変更点について簡単にまとめています。 プッシュ通知の登録手順の変更 上で述べた通知の機能拡張に伴い、アクションのない(=iOS7以前と同様の)プッシュ通知を行う場合でも実装方法が変わりました。具体的には、これまでプッシュ通知の登録時に使用していたregisterForRemoteNotificationTypes:メソッドが非推奨になり、registerUserNotificationSettings:メソッドとregisterForRemoteNotificationsメソッドを使う形になりました。 メソッド名だけ並べても分かりにくいので実際のコードで示すと iOS7以前ではこうだったのが… [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge