前回の続きです。
iCloudではクラウド上のデータの変更(追加/更新/削除)を、プッシュ通知(APN)で受け取ることができます。
プッシュ通知はシミュレータでは動作しないので、実機をつないで実行します。
基本的にはアップルデベロッパーライブラリの説明の通りです。(Swiftに読み替えて)
プッシュ通知を受けとるには、CKSubscription
とCKNotificationInfo
を使用します。
func saveSubscription() {
let collection = CKContainer.defaultContainer().publicCloudDatabase
// 1. Create a subscription on Persons.
let subscription = CKSubscription(recordType: "Persons", predicate: NSPredicate(format: "TRUEPREDICATE"), options: [CKSubscriptionOptions.FiresOnRecordCreation, CKSubscriptionOptions.FiresOnRecordUpdate])
// 2. Set a Notification details on it.
let notificationInfo = CKNotificationInfo()
notificationInfo.alertLocalizationKey = "Person record has changed!"
notificationInfo.shouldBadge = true
subscription.notificationInfo = notificationInfo // set it to the subscription
// 3. Save the subscription on 'Persons' record.
collection.saveSubscription(subscription) { (subscription:CKSubscription?, error:NSError?) in
if let error = error {
print("error occurred: \(error)")
}
print("Subscription is saved. \(subscription?.subscriptionID)")
}
}
- レコードタイプ
Persons
にレコードを追加FiresOnRecordCreation
, 更新FiresOnRecordUpdate
した場合にイベントを受け取るように定義します。 - プッシュ通知のメッセージを設定します。
CKNotificationInfo.alertLocalizationKey
- 作成したサブスクリプション定義を、iCloudサーバに登録します。
saveSubscription(subscription: CKSubscription,
プッシュ通知を有効にするためAppDelegate.swift
のapplication:didFinishLaunchingWithOptions:
に下記を追加します。
import CloudKit
...
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let notificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Sound], categories: nil)
application.registerUserNotificationSettings(notificationSettings)
application.registerForRemoteNotifications()
print("registered!")
return true
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
let notification = CKNotification(fromRemoteNotificationDictionary: userInfo as! [String:NSObject])
print("An alert has been recieved from iCloud: \(notification.alertBody)")
}
notification.alertBody
にメッセージの内容が渡されます。
以上です。
実機をつなぎ、ビルド&実行します。
プッシュ通知許可のダイアログが出ます。OKします。
CloudKitダッシュボードを開きます。
Subscriptoin Types
メニューを開き、サブスクリプションが登録されたのを確認します。
今回は、手動でレコードを新規作成してみます。(本来は、別のデバイスから登録することになります。)
PUBLIC DATA > Default Zone
を開きます。+
をクリックし、レコードの情報を入力します。
Save
をクリックします。(非常にわかりづらいですが、画面の右下にあります。)
すぐに、実機にプッシュ通知が送られます。
参考