私は、次のサブスクリプションに苦しんでいます:新しいプレーヤーレコードが作成または更新されたときにCloudKit購読苦悩は
let predicate = NSPredicate(format: "gc_alias != %@ AND distanceToLocation:fromLocation:(%K,%@) < %f",
self.localPlayer!.alias!,
"location",
self.currentLocation!,
10)
let subscription = CKSubscription(recordType: "Player", predicate: predicate, options: .FiresOnRecordCreation)
subscription.zoneID = nil
let notification = CKNotificationInfo()
notification.alertBody = "Nearby Player within Range!"
notification.soundName = UILocalNotificationDefaultSoundName
subscription.notificationInfo = notification
let container = CKContainer.defaultContainer()
let publicDb = container.publicCloudDatabase
publicDb.saveSubscription(subscription) { (result, error) -> Void in
if error != nil {
print(error!.localizedDescription)
} else {
print("SUBSCRIBED SUCCESS")
print(result)
NSUserDefaults.standardUserDefaults().setBool(true, forKey: "subscribed")
}
}
は基本的に、私は、ユーザの位置を記録します。
ユーザBがPlayerレコードを作成または更新して10KM以内にいる場合、プッシュ経由でユーザAに通知するようにします。
私はプッシュパーミッションが正しく設定されていると信じています(たとえば、サブが作成される前にこれを確認するように求められます)。
プッシュは到着しません。何か案は?基本的なCKの誤解に苦しんでいますか?
はあなたがCKレコードを作成し、通知の登録場所のコードを追加することができます。このような何かはトリックを行うべき? – diegog
distanceToLocation:fromLocation :()は、キロメートルではなくメートルを返します。 10の代わりに10000を渡す必要があります。 – diegog
Diegog FTW!メーターズはそれを揺るがすようだ!驚くべきことに、これに関するウェブ上の誤った情報があります。 :| – Genericrich