これが私に本当の頭痛の種を与えている問題です。プッシュ通知が必要なクロスプラットフォームアプリケーションを開発しています。すべてのアプリを同期するサーバーがあり、アプリが1つのデバイスで実行されていない場合は、必要に応じて後者に通知します。プッシュは他のプラットフォームで正常に機能しています。
奇妙なことに、アプリが最近開かれた場合、通知はうまく機能します。しかし、数時間後、デバイスで通知を受信する前に、サーバーは少なくとも2つの通知を送信する必要があります(それ以上でない場合)。アプリが最近開かれた場合は、すべて問題ありません。
問題は次の原因で発生する可能性があり
ます。-サーバー側。サーバーAPIはC#であり、「APNSSharp」を使用してAppleのサーバーに通知を送信します。
-Apple側(おそらく私は推測しません)
-iphoneアプリ。しかし、なぜ私は時々それを受け取るのでしょうか?また、通知を受け取ることもありますが、画面に表示される青いバブルが数秒後に消え、場合によってはすぐに消えることもあります。これが私のAppDelegateのコードのスニペットです:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSLog(@"Registering for remote notifications");
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
return YES;
}
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken {
NSString * tokenAsString = [[[[devToken description]
stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]
stringByReplacingOccurrencesOfString:@" " withString:@""] retain];
[self sendToken:tokenAsString];
NSLog(@"enregistré");
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
NSLog(@"Error in registration. Error: %@", err);
}
次の関数は、デバイストークンをサーバーに送信するための独自の関数です。これを表示する必要はありません。
[自己sendToken:tokenAsString];
誰かがそのような問題について聞いたことがありますか?コードスニペットに基づいて、アプリまたはAppleのサーバーから取得できると思いますか?検索をサーバー側に向けるべきでしょうか?
どうもありがとう。
ピエール
編集
サーバーの問題であることが判明しました。Appleは、接続/切断要求の量を制限するために、サーバーへの接続を開いたままにしておくことをお勧めします。毎回開こうとしましたが、正常に動作しています。