これらのNotificationHubリソースをフォローしましたが、iOSデバイスでプッシュ通知を受信できませんでした。
- http://msdn.microsoft.com/library/jj927169.aspx
- http://channel9.msdn.com/Blogs/Subscribe/Service-Bus-Notification-Hubs-Code-Walkthrough-iOS-Edition
セットアップを確認、再確認、および再確認しました。
- 新しい通知ハブを作成しました:myhubname
- すべての証明書プロビジョニング手順に従いました。
- プライベート証明書をエクスポートし、サンドボックスの下の通知ハブにアップロードして、正しいAPSゲートウェイが使用されていることを確認します
- プロジェクトのバンドルIDと一致し、コード署名用に自動検出され、正常にコンパイルされるプロビジョニングプロファイルをダウンロードしました。「V2D7FJQXP」は使用しないでください。疑問に思っている場合は、アプリIDに表示されるこの文字列の例:V2D7FJQXP.com.yourcompany.yourproject
- 物理デバイスで実行中-シミュレーターではありません
プッシュ通知を生成しているデモアプリケーション:
while (true)
{
string connectionString = ServiceBusConnectionStringBuilder.CreateUsingSharedAccessSecretWithFullAccess("myhubname-ns", "…snip");
var hubClient = NotificationHubClient.CreateClientFromConnectionString(connectionString, "myhubname");
var iosPayload = AppleNotificationJsonBuilder.Create("Hello!");
iosPayload.CustomFields.Add("inAppNotification", "Hello!");
hubClient.SendAppleNativeNotification(iosPayload.ToJsonString());
Console.WriteLine("Sent");
Thread.Sleep(20000);
}
例外や問題は発生しません。名前空間、キー、またはハブ名のいずれかを操作すると、例外がスローされ、Azureからのフィドラー応答コードは2xxであるため、すべてが正常に表示されます。
以下のコードごとに登録が正しく行われていることがわかります。
- デバイスでプッシュ通知を受け入れました
- createDefaultRegistrationWithTags呼び出しが一度表示され、その後の呼び出しで存在がtrueであることがわかります。
- didFailToRegisterForRemoteNotificationsWithErrorへの呼び出しはありません。これは問題ありません。
- ここのコード例:http://msdn.microsoft.com/library/jj927168.aspxでは、sb://をhttps://に置き換えました。そうしないとスローされます。私が考えている問題ではない
:
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *) deviceToken {
NSString* connectionString = [SBConnectionString stringWithEndpoint:@"https://gift-ns.servicebus.windows.net/" listenAccessSecret:@"…snip"];
self.hub = [[SBNotificationHub alloc] initWithConnectionString:connectionString notificationHubPath:@"gift-usw-dev"];
[self.hub refreshRegistrationsWithDeviceToken:deviceToken completion:^(NSError* error) {
if (error == nil) {
[self.hub defaultRegistrationExistsWithCompletion:^(BOOL exists, NSError* error2) {
if (error2 == nil) {
if (!exists) {
[self.hub createDefaultRegistrationWithTags:nil completion:^(NSError* error3) {
if (error3 != nil) {
NSLog(@"Error creating default registration: %@", error3);
}
}];
}
} else {
NSLog(@"Error retrieving default registration: %@", error2);
}
}];
} else {
NSLog(@"Error refreshing device token: %@", error);
}
}];
}
デモアプリを起動してiOSアプリケーションを実行すると、効果的に読み取る方法がわからないダッシュボードが作成されます。
証明書が正しくないか、AzureとAPSの間で何かが失われたと考えて、APSサービスのトラブルシューティングを掘り下げて、次のことを見つけました:http: //developer.apple.com/library/ios/#technotes/tn2265/_index.htmlプッシュサービスへの接続の問題のセクションにジャンプしました
そして、このコマンドを実行しました:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile server-ca-cert.pem
しかし、私は.pemファイル(OSX)を持っていなかったので、それらを取得するために次のコマンドを見つけました:
openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes
ここで、keyStore.pfxは、プッシュ通知証明書用にキーチェーンからエクスポートされた.p12の名前が変更されたバージョンです。
コマンドは正常に実行されました。何が起こっている?