Aucun appareil enregistré avec Parse Push et Xamarin IOS

J'essaie de configurer des notifications push avec Parse Push et Xamarin IOS. J'ai suivi ces guides:

https://www.parse.com/docs/dotnet/guide#push-notifications-push-on-xamarinios https://www.parse.com/apps/quickstart#parse_push/ios/xamarin/existing https: //developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/ios/remote_notifications_in_ios/ https://groups.google.com/forum/#!topic/parse-developers/65WAfRIiEnA

De ma compréhension de ceux que j'ai modifié mon AppDelegate en tant que tel,

J'ai ajouté ceci au constructor:

ParseClient.Initialize("MY APP ID", "MY DOT NET KEY"); 

Avec les keys appropriées.

Et j'ai ajouté ceci à la méthode FinishedLancement

 if (Convert.ToInt16(UIDevice.CurrentDevice.SystemVersion.Split('.')[0].ToSsortingng()) < 8) { UIRemoteNotificationType notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound; UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes); } else { UIUserNotificationType notificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound; var settings = UIUserNotificationSettings.GetSettingsForTypes(notificationTypes, new NSSet(new ssortingng[] { })); UIApplication.SharedApplication.RegisterUserNotificationSettings(settings); UIApplication.SharedApplication.RegisterForRemoteNotifications(); } // Handle Push Notifications ParsePush.ParsePushNotificationReceived += (object sender, ParsePushNotificationEventArgs args) => { Utils.Log("Push!"); }; 

Puis j'ai ajouté les rlocations appropriés:

 public override void DidRegisterUserNotificationSettings(UIApplication application, UIUserNotificationSettings notificationSettings) { application.RegisterForRemoteNotifications(); } public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { ParseInstallation installation = ParseInstallation.CurrentInstallation; installation.SetDeviceTokenFromData(deviceToken); installation.SaveAsync(); } public override void FailedToRegisterForRemoteNotifications (UIApplication application , NSError error) { new UIAlertView("Error registering push notifications", error.LocalizedDescription, null, "OK", null).Show(); } public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo) { // We need this to fire userInfo into ParsePushNotificationReceived. ParsePush.HandlePush(userInfo); } 

Mais toujours pas de chance.

J'ai ajouté un point d'arrêt dans la méthode RegisteredForRemoteNotifications et il est appelé, donc je suis apparemment en train d'save des notifications mais quand j'essaye d'envoyer une notification push à partir de parse, il me dit "No Devices Registered".

Choses que j'ai essayées:

  • La vérification des profils d'approvisionnement est configurée pour les notifications push.
  • Suppression de tous les profils d'approvisionnement distants et locaux, puis régénération.
  • S'assurer par build utilise les nouveaux profils de provisioning.
  • Régénérer le file .p12 et le re-download pour parsingr.
  • La vérification de mon identifiant de bundle est cohérente dans les profils Info.plist et prov.

Mais j'imagine que ce n'est pas un problème avec les profils de provisioning car l'application enregistre des notifications,

Pourquoi Parse est-il en désaccord?

Qu'est-ce que je rate?

Je suis également confronté au même problème. J'ai suivi le tutoriel et recréé les profils de provisionnement, .p12 etc comme vous l'avez fait. Toujours pas de chance. Je suis allé à la manière manuelle en suivant l'exemple ici – https://www.parse.com/docs/rest/guide/#push-notifications-uploading-installation-data et enregistré mon appareil via une command curl:

 curl -X POST \ -H "X-Parse-Application-Id: <Your Parse app ID> " \ -H "X-Parse-REST-API-Key: <Your parse REST API key>" \ -H "Content-Type: application/json" \ -d '{ "deviceType": "ios", "deviceToken": "<Your device token>", "channels": [ "" ] }' \ https://api.parse.com/1/installations 

Après avoir fait cela, j'ai immédiatement vu mon appareil enregistré. J'ai essayé d'envoyer une notification push mais je ne l'ai pas encore reçue. Quelque chose me dit qu'il y a un problème avec l'installation de Xamarin ou avec des profils de certificates / approvisionnement. Je travaille toujours là-dessus, si je le résolvais je mettrai à jour.

Edit 1: J'ai découvert que si vous désinstallez l'application sur laquelle vous travaillez et que vous la réinstallez, le jeton de votre appareil change. Quoi qu'il en soit, j'ai encore essayé quelque chose de différent, j'ai lancé mon application et l'ai lancée en mode debugging via xamarin. J'ai attrapé le nouveau jeton de périphérique et ai émis cette command de boucle encore. Parse me dit maintenant que j'ai deux appareils enregistrés. J'ai frappé le button d'accueil sur mon application et dit d'parsingr pour triggersr une notification push et je l'ai reçu. Alors maintenant, j'étudie si l'application enregistre correctement avec parsingr. On dirait qu'il essaie de communiquer mais il peut y avoir une erreur quelque part et je ne suis pas sûr de ce que cela pourrait être.

Mise à jour: J'ai finalement eu mon appareil pour m'save mais d'une manière totalement différente. Voici à quoi ressemble mon RegisteredForRemoteNotifications maintenant. (Note: J'utilise Parse 1.5.5 étant donné que les versions les plus récentes ne fonctionnaient pas au moment de la rédaction de ce document.) Actuellement, la version la plus récente est 1.6.2. )

 public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { ParseObject obj = ParseObject.Create ("_Installation"); ssortingng dt = deviceToken.ToSsortingng ().Replace ("<", "").Replace (">", "").Replace (" ", ""); obj["deviceToken"] = dt; obj.SaveAsync ().ContinueWith (t => { if (t.IsFaulted) { using (IEnumerator<System.Exception> enumerator = t.Exception.InnerExceptions.GetEnumerator()) { if (enumerator.MoveNext()) { ParseException error = (ParseException) enumerator.Current; Console.WriteLine ("ERROR!!!: " + error.Message); } } } else { Console.WriteLine("Saved/Resortingeved Installation"); var data = NSUserDefaults.StandardUserDefaults; data.SetSsortingng ("currentInstallation", obj.ObjectId); Console.WriteLine("Installation ID = " + obj.ObjectId); } }); } 

J'aimerais toujours savoir pourquoi nous ne pouvons pas faire

 public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken) { ParseInstallation installation = ParseInstallation.CurrentInstallation; installation.SetDeviceTokenFromData(deviceToken); installation.SaveAsync(); } 

Mais pour l'instant j'ai quelque chose qui fonctionne.