Parse.comを使ったiOSデバイスへのプッシュ通知[ターゲッティング編]

前回、Parseを使ったiOSデバイス向けのプッシュ通知を行う方法をご紹介しました。
今回はプッシュ通知先の絞り込みについて、無料版でも利用可能なChannelというパラメータを使用した方法をご紹介します。

大まかには、以下のような流れで行います。

  1. デバイスにChannelの情報をひもづける
  2. Channelを指定してプッシュ通知を送る

デバイスにChannelの情報をひもづける

次のメソッドを使って、デバイス側からParse(サーバ)側にChannel情報を登録できます。

NSString *channelName = @"hogehoge";   
//登録するChannel名
[PFPush subscribeToChannelInBackground:channelName];

また次のメソッドを使うことで、Channel登録の実行結果に応じた処理を行えます。

NSString *channelName = @"hogehoge";    
//登録するChannel名
[PFPush subscribeTo
ChannelInBackground:channelName block:
^(BOOL succeeded, NSError *error)
{if(succeeded)
{NSLog(@"登録に成功しました");}
else{NSLog(@"登録に失敗しました");}}];

このように登録したChannel情報は、Parse上では配列として保持されています。

なので、異なるChannel名を引数にしてsubscribeToChannelInBackground:メソッドを実行することで、1つの端末に複数のChannel情報を設定することができます。

Channel情報はParseのDashboard上のData Browserタブで参照(および修正)が可能です。

これ以降の説明では、上の図のように、ch1とch2というChannelに設定した2つのデバイスがあるという想定で進めていきます。

ちなみに、Channelとして登録できる文字列には制限があり、英数字と-(ハイフン)と_(アンダーバー)のみが使える(空白もNG)ようです。

また数字やハイフン、アンダーバーから始まる文字列もNGのようです。

Channelを指定してプッシュ通知を送る

プッシュ通知は前回同様DashboardのPush Notificationから送ります。
送信画面のSend toをSegmentに設定し、通知先の絞り込み条件を指定します。

すると絞り込み条件を入力するフォームが表示され、デフォルトではセレクトボックスに「channels」と「containts one of」が選択されているかと思います。

ここで右端のテキストボックスを選択すると、現在設定されているChannel名が表示されるので、そこからChannelを選択します(今回はch1を選びます)。

このように入力すると、ch1というChannel情報が登録されたデバイスのみ通知を行う設定になり、右上に表示されている送信先の件数が変化します(今回はch1に設定されているデバイスは1つなので、1 recipantとなります)。

あとは通知メッセージの入力を行ってSend a Pushをクリックすると、指定されたChannelの端末のみにプッシュ通知が送られます。

以上がChannelを使ったプッシュ通知先の絞込みを行う手順です。

通知先の絞り込みについて

上の例では1つのChannelのみに通知を行いましたが、テキストボックスには複数のChannelを入力することでor指定ができます。

例えば以下のように指定すれば、ch1またはch2に設定されたデバイスに通知ができます(2 recipantsとなっています)。

また絞り込み条件は追加するとand指定が行えるので次のようにすれば「”10代”以外の”男性”」にのみ通知をするといった指定も可能です。

ただし、以下のように同一の絞り込み条件を複数並べた場合は、下の条件のみ適用されるようです。
(and指定になっていれば0 recipantsとなるはずですが、1 recipantとなっており、この状態で通知を行うとch2のデバイスに通知が送られます)

まとめ

本記事では、Parseを使ったプッシュ通知の際に、Channelパラメータを用いることで通知先の絞込みを行う手順についてご紹介しました。簡単な条件での絞込みであれば、非常に少ない作業でプッシュ通知の絞込みが実現できます。

最後に記したように、and指定を行う際の挙動が少し扱いづらいので、複雑な条件での絞込みをする場合は別途REST APIを用いて通知処理を行う必要がありそうです。

次回は、有効期限の設定や開封状況の確認などの方法についてご紹介します。

Related Post

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

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

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()”

dotFes 2012 SENDAIに参加してきましたdotFes 2012 SENDAIに参加してきました

これまで写心機(ver.1、ver.2)で、2度コラボレーションしてきたワンパク(1PAC Inc.)さんからお誘いあって、dotFes 2012 SENDAIに3度目のコラボレーションとなるデジタルインスタレーションを出展してきました! 今回のインスタレーションは、dotFesに合わせて新しく企画し造ったのですが、アイデアのスタートとしては、「Kinectを使わないインスタレーションにする」「たくさんの余ったデバイスを使う」という縛りでした。両社が短い開発期間と本業の合間をぬって、たくさんのアイデア出しと熱い議論を重ねました。そして完成したのが 「device organized table