私のアプリはApp Storeで販売できるようになりましたが、実稼働デバイス(App Storeからアプリをインストールしたデバイス)はどれもプッシュ通知を受け取りません。実稼働デバイスにプッシュ通知を送信しようとすると、次のエラーが表示されます。
"The credentials supplied to the package were not recognized"
(System.ComponentModel.Win32Exception)
この例外は内部的にスローされ、無限ループでキャッチされます。
ApplePushChannel.cs
ファイルの539行目でスローされます。
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);
}
これは、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)
私が試したものは次のとおりです。
.p12
ファイルにエクスポートし、新しい証明書で再試行しました。 (開発プッシュ通知でも同じ問題があり、これで問題が解決しました)Ssl3
からTls
に変更しました。 (数日前にプロトコルバージョンに問題があり、一時的に問題を修正しました。これは必要ではないはずですが、私が得ているエラーは私が以前修正していたものと同じです)(端末出力)編集:サンドボックスサーバーにpingを送信しました。本番サーバーにpingを実行しました。これにも接続できることを確認したので、問題ではありません。
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
PushSharpがAPNSサーバーとネゴシエートしないのはなぜですか?
問題を見つけました。証明書を取り消して再生成しましたが、今回は(証明書なしで)秘密鍵のみをエクスポートしました。キーチェーンアクセスでは、.p12
としてエクスポートし、新しいファイルを使用して動作しました。何らかの理由で、証明書と秘密キーの両方がファイルに存在する場合、PushSharpは.p12
でうまく機能しませんでした。
「パッケージに提供された資格情報が認識されませんでした」という例外は、通常、コードを実行しているユーザーに十分な権限がないことを示しています。
Azure Webアプリまたはwebjobからプッシュ通知を送信している場合、ファイルまたはbase64エンコード文字列からAPNS証明書をロードしないでください。 Azure Portalに移動して、代わりに証明書をWebサイトに追加します。 thumb印に注意してください。
次に、WEBSITE_LOAD_CERTIFICATES設定を追加し、*
(アスタリスク)。
これで、C#コードからAPNS証明書を使用できます。
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);
私は何度も何度もテストされました。
p12
ファイルをpem
形式にすると、IIS制限されたユーザー、Azureで動作する可能性があります...
Windows証明書ストアを使用する場合(本番サーバーで証明書を管理する最も簡単な方法)、秘密キーに正しいアクセス許可を設定してください。
答えはどれも私にとってはうまくいきませんでした。最終的には、証明書と秘密キーをWindows証明書ストアにインポートし、.pfx
。
私は同じ例外を受け取っていたので、私の場合はIOS Push Services証明書の許可を追加する必要がありました。
Mmcの証明書を右クリック->すべてのタスク->秘密キーの管理... Webアプリのiisアプリケーションプールがそのアカウントを使用したため、NETWORK SERVICEを追加しました。
詳細については、以下を参照してください: http://blog.falafel.com/Apple-Push-notifications-certificates-and-iis/