Pushshsharp APNS production: les références fournies à l'emballage n'ont pas été reconnues (les travaux de développement bien que)
mon application vient d'être mise en vente sur App Store, mais aucun de mes appareils de production (les appareils qui ont installé L'application depuis App Store) ne reçoit de notification push. Lorsque j'essaie d'envoyer une notification push à une production de l'appareil, j'obtiens cette erreur:
"The credentials supplied to the package were not recognized"
(System.ComponentModel.Win32Exception)
cette exception est lancée en interne et prise dans une boucle infinie:
il est lancé sur la ligne 539 de ApplePushChannel.cs
fichier:
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);
}
Ceci est la sortie de L'application en sortie Visual Studio:
...
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)
Ici sont les choses que j'ai essayé:
- J'ai vérifié que l'ID de périphérique que j'essaie est enregistré avec un jeton de périphérique de production.
- a révoqué et régénéré le certificat de Production APNS, l'a exporté avec la clé privée vers un nouveau
.p12
fichier, et essayé à nouveau 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) - a changé le protocole SSL de
Ssl3
Tls
. (il y a quelques jours il y avait un problème avec la version de protocole, et il a corrigé un problème temporairement. Il ne devrait pas être nécessaire pour cela, mais l'erreur que je reçois est la même que celle que je recevais avant que cela corrigé) - vérifié que je suis en train d'essayer de me connecter au serveur de production avec le certificat de production au lieu du serveur/certificat de développement.
- vérifié que je peux accéder le serveur APNS directement (mon ASP.NET l'application vit à L'intérieur D'une VM Windows 8.1 de Parallels sur mon Mac, voici la sortie de mon Mac, juste pour éviter toute confusion:
(sortie du Terminal) Edit: j'ai pingé le serveur de bac à sable, j'ai pingé le serveur de production, je vérifie que je peux me connecter à lui aussi, donc ce n'est 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?
6 réponses
j'ai trouvé le problème. J'ai révoqué et régénéré le certificat à nouveau, et cette fois j'ai seulement exporté la clé privée (sans le certificat). Dans le Trousseau d'accès, j'ai exporté en tant que .p12
et utilisé le nouveau fichier et ça a fonctionné. Pour une raison quelconque, PushSharp n'était pas bien jouer avec .p12
lorsque le certificat et la clé privée sont présentes dans le fichier.
"les informations d'identification fournies au paquet n'ont pas été reconnues" exception indique habituellement que l'utilisateur exécutant le code n'a pas assez de permissions.
si vous envoyez des notifications push depuis Azure Web app ou webjob, ne chargez pas le certificat APNS à partir d'un fichier ou d'une chaîne encodée base64. Allez sur Azure Portal et ajoutez le certificat sur le site web à la place. Remarque l'empreinte.
suivant Ajouter WEBSITE_LOAD_CERTIFICATES setting and set it to *
(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);
Références
Aucune réponse n'a fonctionné pour moi. En fin de Compte, ce que j'ai fini par faire est d'importer le Cert et la clé privée dans le magasin Windows cert, puis d'exporter comme un .pfx
.
j'ai testé encore et encore.
convertissez le p12
le fichier pem
format, et il fonctionnera avec IIS utilisateurs limités et peut-être avec Azure....
je recevais la même exception et dans mon cas, j'ai dû ajouter la permission pour mon certificat iOS Push Services.
clic droit sur le certificat dans mmc -> toutes les tâches -> gérer les clés privées... J'ai ajouté le service réseau parce que 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/
lorsque vous utilisez windows certificate store, (imho la façon la plus facile de gérer les certificats sur un serveur de production), assurez-vous de définir les permissions correctes sur la clé privée.