public async override Task<Results> Run () { string subscriptionType; if (!TryGetString ("subscriptionType", out subscriptionType)) throw new InvalidProgramException (); var container = CKContainer.DefaultContainer; var privateDB = container.PrivateCloudDatabase; CKSubscription subscription; var notificationInfo = new CKNotificationInfo { ShouldBadge = true }; var recordType = "Items"; string zoneName; if (TryGetString ("zoneName", out zoneName) && subscriptionType == "RecordZone") { notificationInfo.AlertBody = $"Zone {zoneName} has changed."; var zoneID = new CKRecordZoneID (zoneName, CKContainer.OwnerDefaultName); subscription = new CKSubscription (zoneID, 0) { NotificationInfo = notificationInfo }; } else { var subscriptionOptions = (CKSubscriptionOptions)0; bool firesOnRecordCreation; if (TryGetBool ("FiresOnRecordCreation", out firesOnRecordCreation) && firesOnRecordCreation) subscriptionOptions |= CKSubscriptionOptions.FiresOnRecordCreation; bool firesOnRecordUpdate; if (TryGetBool ("FiresOnRecordUpdate", out firesOnRecordUpdate) && firesOnRecordUpdate) subscriptionOptions |= CKSubscriptionOptions.FiresOnRecordUpdate; bool firesOnRecordDeletion; if (TryGetBool ("FiresOnRecordDeletion", out firesOnRecordDeletion) && firesOnRecordDeletion) subscriptionOptions |= CKSubscriptionOptions.FiresOnRecordDeletion; bool firesOnce; if (TryGetBool ("FiresOnce", out firesOnce) && firesOnce) subscriptionOptions |= CKSubscriptionOptions.FiresOnce; string beginsWithText; NSPredicate predicate = TryGetString ("name BEGINSWITH", out beginsWithText) ? NSPredicate.FromFormat ("name BEGINSWITH %@", (NSString)beginsWithText) : NSPredicate.FromValue (true); notificationInfo.AlertBody = $"Changed {recordType} satisfying {predicate.PredicateFormat}"; subscription = new CKSubscription (recordType, predicate, subscriptionOptions) { NotificationInfo = notificationInfo }; } var sub = await privateDB.SaveSubscriptionAsync (subscription); var results = new Results (); if (sub != null) results.Items.Add (new CKSubscriptionWrapper (sub)); return results; }
public void Subscribe() { if (Subscribed) { return; } var truePredicate = NSPredicate.FromValue(true); var itemSubscription = new CKSubscription(ItemRecordType, truePredicate, CKSubscriptionOptions.FiresOnRecordCreation); var notification = new CKNotificationInfo { AlertBody = "New Item Added", ShouldSendContentAvailable = true }; itemSubscription.NotificationInfo = notification; publicDatabase.SaveSubscription(itemSubscription, (sub, error) => { if (error != null) { Console.WriteLine("An error occured: {0}", error.LocalizedDescription); return; } Console.WriteLine("Subscribed to Item"); var defaults = NSUserDefaults.StandardUserDefaults; defaults.SetBool(true, "subscribed"); defaults.SetString(sub.SubscriptionId, "subscriptionID"); }); }
private void CreateSubscription() { var database = CKContainer.DefaultContainer().PrivateCloudDatabase; var predicate = NSPredicate.PredicateWithValue(true); var notificationInfo = new CKNotificationInfo(); var querySubscription = new CKQuerySubscription( recordType, predicate, CKQuerySubscriptionOptions.FiresOnRecordCreation | CKQuerySubscriptionOptions.FiresOnRecordDeletion | CKQuerySubscriptionOptions.FiresOnRecordUpdate); querySubscription.NotificationInfo = notificationInfo; database.SaveSubscription(querySubscription, OnSubscriptionSaved); //alternatively...you can use a CKModifySubscriptionsOperation //var op = new CKModifySubscriptionsOperation(new[] { querySubscription }, null); //op.Configuration.QualityOfService = NSQualityOfService.UserInitiated; //op.ModifySubscriptionsCompletionBlock = OnSubscriptionModified; //database.AddOperation(op); }
static CKSubscription CreateSubscription () { var subNotification = new CKNotificationInfo { AlertBody = "New Post" }; CKSubscription subscriptionToUpload = new CKSubscription (Post.RecordType, NSPredicate.FromValue (true), SubscriptionID, CKSubscriptionOptions.FiresOnRecordCreation); subscriptionToUpload.NotificationInfo = subNotification; return subscriptionToUpload; }
static CKSubscription CreateSubscription() { var subNotification = new CKNotificationInfo { AlertBody = "New Post" }; CKSubscription subscriptionToUpload = new CKSubscription(Post.RecordType, NSPredicate.FromValue(true), SubscriptionID, CKSubscriptionOptions.FiresOnRecordCreation); subscriptionToUpload.NotificationInfo = subNotification; return(subscriptionToUpload); }
public void Subscribe () { if (Subscribed) return; var truePredicate = NSPredicate.FromValue (true); var itemSubscription = new CKSubscription (ItemRecordType, truePredicate, CKSubscriptionOptions.FiresOnRecordCreation); var notification = new CKNotificationInfo { AlertBody = "New Item Added", ShouldSendContentAvailable = true }; itemSubscription.NotificationInfo = notification; publicDatabase.SaveSubscription (itemSubscription, (sub, error) => { if (error != null) { Console.WriteLine ("An error occured: {0}", error.LocalizedDescription); return; } Console.WriteLine ("Subscribed to Item"); var defaults = NSUserDefaults.StandardUserDefaults; defaults.SetBool (true, "subscribed"); defaults.SetString (sub.SubscriptionId, "subscriptionID"); }); }
public async override Task <Results> Run() { string subscriptionType; if (!TryGetString("subscriptionType", out subscriptionType)) { throw new InvalidProgramException(); } var container = CKContainer.DefaultContainer; var privateDB = container.PrivateCloudDatabase; CKSubscription subscription; var notificationInfo = new CKNotificationInfo { ShouldBadge = true }; var recordType = "Items"; string zoneName; if (TryGetString("zoneName", out zoneName) && subscriptionType == "RecordZone") { notificationInfo.AlertBody = $"Zone {zoneName} has changed."; var zoneID = new CKRecordZoneID(zoneName, CKContainer.OwnerDefaultName); subscription = new CKSubscription(zoneID, 0) { NotificationInfo = notificationInfo }; } else { var subscriptionOptions = (CKSubscriptionOptions)0; bool firesOnRecordCreation; if (TryGetBool("FiresOnRecordCreation", out firesOnRecordCreation) && firesOnRecordCreation) { subscriptionOptions |= CKSubscriptionOptions.FiresOnRecordCreation; } bool firesOnRecordUpdate; if (TryGetBool("FiresOnRecordUpdate", out firesOnRecordUpdate) && firesOnRecordUpdate) { subscriptionOptions |= CKSubscriptionOptions.FiresOnRecordUpdate; } bool firesOnRecordDeletion; if (TryGetBool("FiresOnRecordDeletion", out firesOnRecordDeletion) && firesOnRecordDeletion) { subscriptionOptions |= CKSubscriptionOptions.FiresOnRecordDeletion; } bool firesOnce; if (TryGetBool("FiresOnce", out firesOnce) && firesOnce) { subscriptionOptions |= CKSubscriptionOptions.FiresOnce; } string beginsWithText; NSPredicate predicate = TryGetString("name BEGINSWITH", out beginsWithText) ? NSPredicate.FromFormat("name BEGINSWITH %@", (NSString)beginsWithText) : NSPredicate.FromValue(true); notificationInfo.AlertBody = $"Changed {recordType} satisfying {predicate.PredicateFormat}"; subscription = new CKSubscription(recordType, predicate, subscriptionOptions) { NotificationInfo = notificationInfo }; } var sub = await privateDB.SaveSubscriptionAsync(subscription); var results = new Results(); if (sub != null) { results.Items.Add(new CKSubscriptionWrapper(sub)); } return(results); }