J'ai développé une application iOS, qui reçoit des notifications Push. Je les envoie à partir d'un environnement .NET en utilisant PushSharp. Tout s'est bien passé pendant le développement, et les Push ont été envoyés avec succès:
var push = new PushBroker(); var appleCert = File.ReadAllBytes(@"Utils\Cert.Development.p12"); push.RegisterAppleService(new ApplePushChannelSettings(false, appleCert, "*******")); push.QueueNotification(new AppleNotification() .ForDeviceToken(token) .WithContentAvailable(1) ); push.StopAllServices();
Maintenant, l'application a été approuvée, et c'est sur AppStore. J'ai généré le bon certificate de production:
var push = new PushBroker(); var appleCert = File.ReadAllBytes(@"Utils\Cert.Production.p12"); push.RegisterAppleService(new ApplePushChannelSettings(true, appleCert, "*******")); push.QueueNotification(new AppleNotification() .ForDeviceToken(token) .WithContentAvailable(1) ); push.StopAllServices();
mais quand j'essaye d'envoyer le push de PushSharp, il jette l'exception suivante:
You have selected the Production server, yet your Certificate does not appear to be the Production certificatee! Please check to ensure you have the correct certificatee!
Je suis sûr que j'ai suivi toutes les étapes. J'ai téléchargé le certificate de production lié au file de provisionnement défini dans l'application à publier. Ouvert le et exporté le .p12.
Je suis également sûr que je n'utilise pas un développement par accident, car, si je définis PushSharp pour le développement, en utilisant ce dernier certificate, il renvoie l'erreur suivante:
You have selected the Development/Sandbox (Not production) server, yet your Certificate does not appear to be the Development/Sandbox (Not production) certificatee! Please check to ensure you have the correct certificatee!
Comment le certificate peut-il être ni développement, ni production?
Y a-t-il quelque part où je peux valider le file? S'il vous plaît, donnez-moi un peu d'insistance à ce sujet, car je n'ai aucune idée par où commencer
Apple a changé le nom. S'il vous plaît aller à ApplePushChannelSettings.cs et changez le nom comme ci-dessous.
De
if (production && !subjectName.Contains("Apple Production IOS Push Services"))
À
if (production && !subjectName.Contains("Apple Push Services"))
Je dois le faire quand je renouvelle mon CERT expiré hier. Changez le nom, reconstruisez-le et téléchargez-le sur le server, puis cela fonctionne à nouveau.
Apple a introduit un nouveau certificate push universel qui permet la connection à la fois aux environnements de production et de développement APN. C'est pourquoi le nom commun du certificate de production a été changé de Apple Push IOS Push Services à Apple Push Services.
Vous devez modifier le code sur le server Push du fournisseur pour qu'il soit compatible avec le nouveau nom commun.
Lorsque vous créez un certificate de production (.p12) pour .NET, Toujours exporter comme pour sélectionner le certificate uniquement. voir l'image ci-jointe
http://davidbits.blogspot.in/2016/02/error-you-have-selected-production.html
Problème dans la bibliothèque PushSharp il suffit de mettre à jour à la version .3 c'est parce que apple a changé le nom du certificate Push (Apple Push Service) à (service Apple Push) et pushSharp vérifier le nom du certificate: (production &&! SubjectName.Contains ( "Apple Push Services")).
Erreur: Vous avez sélectionné le server de production,
Pourtant, votre certificate ne semble pas être le certificate de production!
S'il vous plaît vérifier pour vous assurer que vous avez le bon certificate!
Solution: (production && !subjectName.Contains("Apple Push Services"))
Suivez les étapes du lien suivant pour générer le certificate SSL de production:
Comment créer un certificate APNS
Si cela ne fonctionne pas, vérifiez votre code, assurez-vous de lire le bon file de certificate et passez True
à ApplePushChannelSettings
Je recommand d'utiliser quelque chose à partir des versions de prévisualisation de nuget 3.0. Ce problème est résolu dans ces versions et ne sera pas rétroporté vers 2.x.
PushSharp 2.x> Push.Apple> ApplePushChannelSettings.cs
Sur ApplePushChannelSettings.cs, trouvez DetectProduction () et CheckProductionCertificateMatching () et remplacez '.Contains ("Apple Push IOS Push Services")' par '.Contains ("Apple Push Services")'
Cela se produit parce que Apple a changé le nom du certificate de «Apple Push IOS Push Services» à «Apple Push Services», le PushSharp identifier le type (production / développement) par le nom du certificate.