2015-09-16 5 views
9

ユーザーがアプリを強制終了した場合、アプリを再起動するためのvoipプッシュキット通知を受け取ることができませんマルチタスクインターフェイス)と、デバイスが再起動されたかどうかを示します。強制終了してデバイスを再起動した場合、Voip Pushkit通知はアプリを再起動しません。

しかし、私は、VoIP pushkitの通知は、次のシナリオで動作するように取得することができます:

  • アプリが強制的に辞め、その後pushkit通知が到着しました。アプリはすぐにリニューアルされます。このようなシナリオでは、標準のプッシュ通知はアプリを起動することができません。

  • アプリがバックグラウンド/サスペンド状態にあり、デバイスが再起動されました。 Voipモードのおかげで、デバイスの再起動時にアプリケーションが再起動されます(Xcodeアクティビティモニタのプロセスがわかります)。これらの用語でhttp://blog.biokoda.com/post/114315188985/ios-and-pushkitで記載されて適切に処理するpushkit通知を取得するために、ここで必要なトリックがあり、「バックグラウンドタスクを開始PushKit初期化する前には、このタスクを完了PushKitトークンを受信したときに」

何とかときこれらの2つを組み合わせると(デバイスの再起動とアプリの強制終了)、プッシュキットの通知はアプリを再起動していないようです。また、Xcodeのデバイスログを見ると、通知がシステムによって処理されたというapsdからのログは得られません。

@implementation AppDelegate 
{ 
    UIBackgroundTaskIdentifier bgTask; 
} 
- (BOOL)application:(UIApplication *)application 
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    UIApplication* app = [UIApplication sharedApplication]; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{ 
     [app endBackgroundTask:bgTask]; 
     bgTask = UIBackgroundTaskInvalid; 
    }]; 
    dispatch_async(dispatch_get_global_queue(
    DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
     while (true) { 
      ; 
     } 
    }); 
    // Initialize pushkit 
    PKPushRegistry *pushRegistry = 
     [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; 
    pushRegistry.delegate = self; 
    pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];  
    return YES; 
} 

- (void)pushRegistry:(PKPushRegistry *)registry 
    didUpdatePushCredentials:(PKPushCredentials *)credentials 
    forType:(NSString *)type{ 
    UIApplication* app = [UIApplication sharedApplication]; 
    [app endBackgroundTask:bgTask]; 
    // ... more code to read the token ... 
} 

- (void)pushRegistry:(PKPushRegistry *)registry 
    didReceiveIncomingPushWithPayload:(PKPushPayload *)payload 
    forType:(NSString *)type { 
    // ... logging to check if notification is received ... 
} 

はまた、私は、「ボイスオーバーIP」と背景モードで有効になって「リモート通知」を持っている:

は、ここに私のコードです。

このシナリオでは、Whatsappのような他のアプリも再起動できるので、間違っているとは分かりません。

関連するメモでは、次のことを行うのに役立ちません。1)強制終了2)受信したプッシュキット通知を送信します。3)再起動します。アプリは再起動されず、新しいプッシュ通知はまだそれを再起動しません。

+0

@ sahara108と私自身もこの問題を抱えています。私はアップルに直接尋ねたので、他の誰かがそれを理解する前に彼らが答えたら私はここに答えを掲示するでしょう。 また、WhatsAppらは再起動できると言いますが、完全に再起動しますか?私たちの調査では、アプリケーションは再起動しますが、完全には起動しません。彼らのロギングは途中で切り詰められています(OS killのように見えます)。 – Pandalover

+0

私は、アクティビティモニターで起動されているプロセスを見て、アプリケーションが再開したと判断しました。 – mcaoun

答えて

3

AdHocプロビジョニングプロファイルでアプリをテストした後(iTunesからインストールした)、gateway.sandbox.push.apple.comの代わりにprod gateway.push.apple.comを介して配信されたVoipプッシュ通知が起動しました再起動後強制停止されたアプリ。

osは明らかに開発と生産を異なる方法で処理しています。

APSDログにさらに見ると、私は、次のプロファイルプロビジョニング開発を使用するときにプリントアウトされることが見出さ:

:XXXX-XXXX XX:XX:XX 0300 APSD [97]。
これら有効トピックが除去されている{( 「YOUR_BUNLE_IDENTIFIER」 )}

プロファイルをプロビジョニングアドホックを使用する場合は発生しません。

+0

appstoreプロビジョニングを意味しましたか?私のテストでは、電話機が再起動されても不完全なときに再起動することができます。 xmppソケット接続を開こうとするとスタックしません。現時点ではネットワークは利用できないようです。あなたのアプリは正常に再起動できますか? – sahara108

関連する問題