2

CKSubscription のドキュメントには、次のように記載されています。レコードの変更によってサブスクリプションが起動すると、サーバーは、レコードに元の変更を加えたデバイスを除く、そのサブスクリプションを持つすべてのデバイスにプッシュ通知を送信します。

デバイス 1 が iPad で、デバイス 2 が iPhone で、どちらも同じiCloud アカウントでログインしているとします。両方のデバイスが特定のレコード タイプのレコード更新をサブスクライブしているとします。

私のコードは次のようになります(ハウスキーピングの一部を取り出しました)

NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"fromUserRecordIDName == %@", _member.userRecordIDName];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"fromUserRecordIDName == %@", notificationPublic = [[CKNotificationInfo alloc] init];
notificationPublic.shouldBadge =YES;
notificationPublic.desiredKeys = @[@"fromMemberNameText"];
notificationPublic.shouldSendContentAvailable = YES;


if ([[NSUserDefaults standardUserDefaults] objectForKey:@"TickleRecordUpdateSubscription"] == nil) {

    [cloudManager subscribe:@"TickleRecord" public: YES options:CKSubscriptionOptionsFiresOnRecordUpdate predicate:predicate2 notification:notificationPublic completionHandler:^(CKSubscription *subscription, NSError *operationError) {

      if (operationError) {

       NSLog(@"An error occured in %@: %@", NSStringFromSelector(_cmd), operationError);



      } else{
        [[NSUserDefaults standardUserDefaults] setObject:subscription.subscriptionID forKey:@"TickleRecordUpdateSubscription"];
        [[NSUserDefaults standardUserDefaults] setObject:@"TickleRecordUpdateSubscription"forKey:subscription.subscriptionID ];

      }
    }];

あるデバイスがレコードを更新すると、他のデバイスに通知する必要があるように思えます。しかし、それは起こっていることではありません - 通知はありません。WWDC 2014 の Advanced iCloud ビデオでは、1 つのデバイスが通知を既読としてマークしたときに通知されることについて話していますが、私はそれについても成功していません。

同じアカウントにサインインしている別のデバイスがレコードを更新したときに、あるデバイスに通知することに成功した人はいますか?

4

2 に答える 2

1

私も同じ問題を抱えていました。このサブスクリプションで動作するようになりました:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"recipient == %@", [[CKReference alloc] initWithRecordID:self.userRecordId action:CKReferenceActionNone]];
CKSubscription *subscription = [[CKSubscription alloc] initWithRecordType:@"Message" predicate:predicate options:CKSubscriptionOptionsFiresOnRecordCreation];
subscription.notificationInfo = [CKNotificationInfo new];
subscription.notificationInfo.shouldSendContentAvailable = YES;
subscription.notificationInfo.soundName = UILocalNotificationDefaultSoundName;
subscription.notificationInfo.shouldBadge = YES;
CKDatabase *publicDatabase = [[CKContainer defaultContainer] publicCloudDatabase];
[publicDatabase saveSubscription:subscription completionHandler:^(CKSubscription *subscription, NSError *error) {...}];

これにより、あるデバイスからレコードを作成し、同じ iCloud アカウントにサインインしている別のデバイスで通知を受け取ることができます。

編集:作成ではなくレコードの更新について質問していることに気付きましたが、私の回答が役立つ可能性があります。この問題が発生したときに私が変わったことの 1 つは、CKNotificationInfo の soundName プロパティの値を設定した後に通知を受け取り始めたことです。

于 2014-10-21T13:51:01.820 に答える
0

いいえ、2 つの異なるアカウントを使用する必要があります。これは、欠落している機能ではなく、CloudKit のバグだと思います。現在、両方のデバイスに最新のデータを保持する方法はありません。

于 2014-10-21T13:05:05.413 に答える