Mon application vient tout juste d'être prête pour la vente sur l'App Store, mais aucun de mes appareils de production (appareils ayant installé l'application depuis l'App Store) ne reçoit de notifications Push. Lorsque j'essaie d'envoyer une notification Push à un périphérique de production, le message d'erreur suivant s'affiche:
"The credentials supplied to the package were not recognized"
(System.ComponentModel.Win32Exception)
Cette exception est renvoyée en interne et capturée dans une boucle infinie:
Il est jeté à la ligne 539 du fichier ApplePushChannel.cs
:
try
{
stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates,
System.Security.Authentication.SslProtocols.Ssl3, false);
//stream.AuthenticateAsClient(this.appleSettings.Host);
}
catch (System.Security.Authentication.AuthenticationException ex)
{
throw new ConnectionFailureException("SSL Stream Failed to Authenticate as Client", ex);
}
Voici la sortie de l'application dans Visual Studio Output:
...
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
...(it keeps getting thrown until I stop it manually)
Voici les choses que j'ai essayées:
.p12
, puis renouvelé avec le nouveau certificat. (J'ai eu le même problème avec les notifications push de développement, et cela a résolu mon problème)Ssl3
à Tls
. (Il y a quelques jours, il y avait un problème avec la version du protocole et cela a été corrigé temporairement. Cela ne devrait pas être nécessaire, mais l'erreur que je reçois est la même que celle que j'avais avant que cette correction soit corrigée)(Sortie du terminal) Edit: Je cinglais le serveur sandbox, j’ai envoyé un ping au serveur de production, j’ai vérifié que je pouvais me connecter aussi, ce n’est donc pas le problème.
can$ Sudo nmap -p 2195 gateway.sandbox.Push.Apple.com
Starting Nmap 6.40-2 ( http://nmap.org ) at 2014-04-28 00:06 EEST
Nmap scan report for gateway.sandbox.Push.Apple.com (17.149.34.189)
Host is up (0.49s latency).
Other addresses for gateway.sandbox.Push.Apple.com (not scanned): 17.149.34.187 17.149.34.188
PORT STATE SERVICE
2195/tcp open unknown
Pourquoi PushSharp ne négocierait-il pas avec les serveurs APNS?
J'ai compris le problème. J'ai révoqué et régénéré le certificat à nouveau, et cette fois j'ai uniquement exporté la clé privée (sans le certificat). Dans l’accès au trousseau, j’ai exporté en tant que .p12
et utilisé le nouveau fichier. Pour une raison quelconque, PushSharp ne fonctionnait pas bien avec .p12
lorsque le certificat et la clé privée sont présents dans le fichier.
L'exception "Les informations d'identification fournies au package n'ont pas été reconnues" indique généralement que l'utilisateur qui exécute le code ne dispose pas d'autorisations suffisantes.
Si vous envoyez des notifications Push depuis une application Web Azure ou une tâche Web, ne chargez pas le certificat APNS à partir d'un fichier ou d'une chaîne codée en base64. Accédez au portail Azure et ajoutez le certificat au site Web à la place. Notez l'empreinte.
Ajoutez ensuite le paramètre WEBSITE_LOAD_CERTIFICATES et définissez-le sur *
(astérisque).
Maintenant, le certificat APNS peut être utilisé à partir du code C #:
string thumbprint = "YOUR THUMBPRINT";
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certificate = store.Certificates.Find(
X509FindType.FindByThumbprint, thumbprint, validOnly: false)
.Cast<X509Certificate2>().SingleOrDefault();
var apnsConfig = new ApnsConfiguration(
ApnsConfiguration.ApnsServerEnvironment.Production, certificate);
Je l'ai testé encore et encore.
Convertissez le fichier p12
au format pem
et il fonctionnera avec les utilisateurs limités IIS et peut-être avec Azure ....
Aucune des réponses n'a fonctionné pour moi. En fin de compte, j'ai fini par importer le certificat et la clé privée dans le magasin de certificats Windows, puis de l'exporter en tant que .pfx
.
Je recevais la même exception et, dans mon cas, je devais ajouter une autorisation pour mon certificat de services IOS.
Cliquez avec le bouton droit sur le certificat dans mmc -> Toutes les tâches -> Gérer les clés privées .... J'ai ajouté NETWORK SERVICE car le pool d'applications iis de mon application Web utilisait ce compte.
Voir pour plus de détails: http://blog.falafel.com/Apple-Push-notifications-certificates-and-iis/