de notification push d'apple avec un APN sharp
j'utilise un APN Forte bibliothèque pour mon de notification push d'apple. j'ai downloded de Ici.j'ai un exemple de programme de test fourni par l'APN forte bibliothèque sans aucune modification.
il n'a tout simplement pas envoyer de notification jusqu'à ce que j'ai mis un point de rupture à cette ligne de code.
si j'ai mis un point de rupture. je viens de fonctionner correctement.est-ce que les comportements attendus ou je fais quelque chose de mal. et aussi je ne reçois aucune exception. merci pour toute aide.
voici le code
static void Main(string[] args)
{
bool sandbox = true;
string testDeviceToken = "Token";
string p12File = "apn_developer_identity.p12";
string p12FilePassword = "yourpassword";
int sleepBetweenNotifications = 15000;
string p12Filename = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, p12File);
NotificationService service = new NotificationService(sandbox, p12Filename, p12FilePassword, 1);
service.SendRetries = 5;
service.ReconnectDelay = 5000; //5 seconds
service.Error += new NotificationService.OnError(service_Error);
service.NotificationTooLong += new NotificationService.OnNotificationTooLong(service_NotificationTooLong);
service.BadDeviceToken += new NotificationService.OnBadDeviceToken(service_BadDeviceToken);
service.NotificationFailed += new NotificationService.OnNotificationFailed(service_NotificationFailed);
service.NotificationSuccess += new NotificationService.OnNotificationSuccess(service_NotificationSuccess);
service.Connecting += new NotificationService.OnConnecting(service_Connecting);
service.Connected += new NotificationService.OnConnected(service_Connected);
service.Disconnected += new NotificationService.OnDisconnected(service_Disconnected);
Notification alertNotification = new Notification(testDeviceToken);
alertNotification.Payload.Alert.Body = "Testing {0}...";
alertNotification.Payload.Sound = "default";
alertNotification.Payload.Badge = i;
if (service.QueueNotification(alertNotification))
Console.WriteLine("Notification Queued!");
else
Console.WriteLine("Notification Failed to be Queued!");
Console.WriteLine("Cleaning Up...");
service.Close();//if i dont put a break point in here, it simply does not send any notification
service.Dispose();
}
j'espère que ma question est claire...
Mise à jour: je suis coincé ici.svp quelqu'un peut m'aider.
vérifier simplement: Vous avez votre cert, droit? est votre cert mot de passe votre mot de passe'? Je me demandais si c'est quelque chose qui a été laissé par l'exemple.
Grâce ACBurk. oui je les ai tous. il a juste du bon travail, si j'ai mis un point de rupture.
Grâce ACBurk. oui je les ai tous. il a juste du bon travail, si j'ai mis un point de rupture.
OriginalL'auteur Nnp | 2010-07-01
Vous devez vous connecter pour publier un commentaire.
j'ai trouvé le problème. il était d'erreur dans les APNS FORTE de la bibliothèque de threads de flux de travail.
EDIT:
je suis l'appel de cette méthode après la mise en attente de tous les avis.
comme
service.start();
et ici, c'est la méthode
quand vous dites NotificationService service = new NotificationService(), sa commence un autre thred qui lit à partir de la file d'attente. mais avant d'ajouter toute notification à la file d'attente qui thred déjà terminé comme il n'y avait pas de notification. sens> si vous mettez un point de rupture puis listenr fil habitude de se terminer en raison de l'attente sur le point de rupture.
alors, comment vous résoudre ce problème?
en gros je créer une autre méthode appelée "Envoyer" dans le NotificationService qui "commence" le fil qui envoie la notification réel. ce "début" de la méthode a été appelée lorsque vous créez NotificationService objet. ce qui était faux. laissez-moi savoir si vous avez besoin de plus d'explication. j'ai également ajouté du code
OriginalL'auteur Nnp
Je vois cela ainsi. En regardant les NotificationConnection.La méthode Close() j'ai trouvé ceci:
//Dormir ici pour éviter une condition de course
//dans lequel une notification pourrait être mis en file d'attente pendant que le thread de travail
//est endormi après sa boucle, mais si l'on met de clôture vrai à l'intérieur de 100 ms,
//la le d'attente des notifications pendant ce temps serait pas retiré comme la boucle
//sortie en raison de la fermeture = true;
//250 ms devrait avoir assez de temps pour la boucle à retirer toutes autres notifications
//après, nous avons cessé d'accepter ci-dessus
Fil de discussion.Sommeil(250);
Et dans la boucle j'ai trouvé:
Fil de discussion.Sleep(500);
Réglage du temps de sommeil dans la méthode close pour 1000 fixes pour moi 😉
- la réponse :http://code.google.com/p/apns-sharp/issues/detail?id=41
OriginalL'auteur theiOSDude