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;
		}
Exemple #2
0
        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");
            });
        }
		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);
        }
        async void Subscribe()
        {
            CKSubscription subscriptionToUpload = CreateSubscription();

            try {
                await PublicDB.SaveSubscriptionAsync(subscriptionToUpload);

                ResetButton("Unsubscribe");
            } catch (NSErrorException ex) {
                HandleSubscribeError(ex);
            }
        }
Exemple #6
0
 private void OnSubscriptionSaved(CKSubscription subscription, NSError error)
 {
     if (error == null)
     {
         Debug.Log(string.Format("subscription saved with id: {0} of type: {1}",
                                 subscription.SubscriptionID, subscription.SubscriptionType));
     }
     else
     {
         Debug.LogError("error saving subscription: " + error.LocalizedDescription);
     }
 }
    public IEnumerator Can_save_subscription()
    {
        var            database           = CKContainer.DefaultContainer().PrivateCloudDatabase;
        var            wasCalled          = false;
        CKSubscription subscriptionToSave = null;

        database.SaveSubscription(subscriptionToSave, (sub, error) => {
        });

        yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout));

        Assert.IsTrue(wasCalled);
    }
    public IEnumerator Can_delete_subscription_by_its_id()
    {
        var            database           = CKContainer.DefaultContainer().PrivateCloudDatabase;
        var            wasCalled          = false;
        CKSubscription subscriptionToSave = null;

        database.DeleteSubscriptionWithID(subscriptionToSave.SubscriptionID, (sub, error) => {
            wasCalled = true;
        });

        yield return(WaitUntilWithTimeout(() => wasCalled, DefaultTimeout));

        Assert.IsTrue(wasCalled);
    }
		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);
        }
 public CKSubscriptionWrapper(CKSubscription subscription)
 {
     this.subscription = subscription;
 }