Watson's Blog

RubyMotion と Parse で Push Notifiation してみたよ〜

| Comments

先日に引き続き Parse で遊んでいます。今日はPush Quick Start Guide を読みながら Push Notifiation に挑戦しました。いろいろ設定することがあって大変ですね。慣れるとそうでもないのでしょうか?(^ ^;)

証明書を作成

  1. 「キーチェーンアクセス」を起動します。
  2. メニューの “キーチェーンアクセス” -> “証明書アシスタント” -> “認証局に証明書を要求” を選択します。
  3. メールアドレスと名前を記入して、"ディスクに保存" を選択し “続ける” をクリックします。CertificateSigningRequest.certSigningRequest というファイルが保存されます。(“CAのメールアドレス” の欄は未記入で良かったみたいです・・・)
    Certificate Signing Request

次に iOS Provisioning Portal で App ID の設定をします。

  1. “App IDs” というメニューを選択し、"New App ID" ボタンをクリックします。
  2. “Description” にアプリの内容、"Bundle Identifier" にアプリの識別子を記入します。識別子には * を含めず、アプリ名までしっかり記入する必要があるようです。
    App IDs
  3. 作成したアプリ ID の “Configure” をクリックします。
    App IDs
  4. “Enable for Apple Push Notification service” のチェックを on にし、"Development Push SSL Certificate" の “Configure” ボタンをクリックします。
    App IDs
  5. “Generate a Certificate Signing Request” というポップアップウィンドウが表示されます。"Continnue" ボタンをクリックして次の画面に進みます。
  6. “Submit Certificate Signing Request” 画面が表示されます。ここで、「キーチェーンアクセス」で作成した CertificateSigningRequest.certSigningRequest ファイルを選択し、"Generate" ボタンをクリックします。
    App IDs
  7. “Download & Install 〜” の画面まで進みます。"Download" をクリックして証明書をダウンロードしておきます。
    App IDs

  8. 上の作業でダウンロードした証明書をダブルクリックして「キーチェーンアクセス」へ登録します。

  9. キーチェーンアクセスで “ログイン” 項目の、"自分の証明書" を表示すると先ほど登録した証明書があります。右クリックして「書き出す」を選択します。
    KeyChain Export
  10. “.p12” という形式でファイルを保存します。
    KeyChain Export
  11. “.p12” 形式のファイルを保存する際にパスワードを求められますが、空欄のままにしておくようです。
    KeyChain Export

Provisioning Profile を作成

ここまでの作業ですでに心が折れそうなくらい、設定が面倒くさいですね。Parse がさっぱり出てこないし・・・。

iOS Provisioning Portal へ戻り、Provisioning Profile を作成しましょう。

  1. “Provisioning” メニューを選択し、"New Profile" ボタンをクリックします。
  2. わかりやすい “Profile Name” を記入し、プッシュ通知するアプリを選択します。
    Provisioning
  3. “New Profile” ボタンをクリックした画面に戻り、Provisioning をダウンロードしておきます。
    Provisioning
  4. ダウンロードした Provisioning Profile をダブルクリックし Xcode へ登録しておきます。

Parse へ .p12 ファイルを登録

  1. Parse の Dashboard を開きます。
  2. プッシュ通知を行うアプリの “Setting” 画面を開きます。
  3. キーチェーンアクセスで作成した “.p12” ファイルを登録します。
    Dashboard

プッシュ通知を受け付けるアプリを作成

Rakefile を編集

昨日作成した Rakefileidentifierprovisioning_profileentitlements の設定を追加します。

1
2
3
4
5
6
Motion::Project::App.setup do |app|
...
  app.identifier = 'com.yourcompany.HelloParsePush'
  app.provisioning_profile = "/Users/watson/Library/MobileDevice/Provisioning Profiles/CE5E34BE-FDEB-43C5-860A-9301122AB46D.mobileprovision"
  app.entitlements['aps-environment'] = 'development'
end

provisioning_profile に設定する Provisioning Profile のパスは Xcode の Organizer で確認することができます。該当する Profile 上で右クリック “Reveal Profile in Finder” を選択すると、Finder 上で確認できます。

アプリを作成

app/app_delegate.rb に、次のようなコードを記述します。

app/app_delegate.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    Parse.setApplicationId("<Application-Id>",
                           clientKey:"<Client-Key>")

    application.registerForRemoteNotificationTypes(UIRemoteNotificationTypeBadge|
                                                UIRemoteNotificationTypeAlert|
                                                UIRemoteNotificationTypeSound)

    true
  end

  def application(application,
        didRegisterForRemoteNotificationsWithDeviceToken:newDeviceToken)
    # Tell Parse about the device token.
    PFPush.storeDeviceToken(newDeviceToken)
    # Subscribe to the global broadcast channel.
    PFPush.subscribeToChannelInBackground("")
  end

  def application(application,
        didReceiveRemoteNotification:userInfo)
    PFPush.handlePush(userInfo)
  end

  def application(application,
        didFailToRegisterForRemoteNotificationsWithError:error)
    if error.code == 3010
      NSLog("Push notifications don't work in the simulator!")
    else
      NSLog("didFailToRegisterForRemoteNotificationsWithError: %@", error)
    end
  end
end

プッシュ通知はシミュレータ上で動作確認できないようなので、デバイスへアプリを転送します。

app/app_delegate.rb
1
$ rake device

デバイス上でアプリを起動したら、Push Quick Start Guide ページの “Send Push Test” ボタンをクリックします。

正しく動作すると、

Push Notification

のように、通知を受け取ることができます!

これで、Apple が何か発表したか監視するものを用意すれば、簡単にストーカー行為ができますね!

Comments