2016-11-27 4 views
0

私は、プッシュ通知がデバイスに到着したときにサイレントプッシュ通知を使用しており、didReceiveRemoteNotificationを呼び出すことを管理しています。しかし、私はデリゲートが実行されたときに私のコードを実行することができません。以下のコードに基づいて、私はNSLogの "Print progress 1"を見ることができますが、 "Print progress 2"は表示されません。didReceiveRemoteNotification内でコードを実行できませんfetchCompletionHandler

以下の使用法が不正確かどうかをアドバイスできますか?私はバックグラウンドで仕事の期間を延ばそうとしています。 beginBackgroundTaskWithExpirationHeaderを削除しようとしましたが、コードは実行されません。

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result)) handler { 
    NSLog(@"Print progress 1"); 

    UIApplication *app = [UIApplication sharedApplication]; 
    UIBackgroundTaskIdentifier bgTask; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler:^ { 

     ///..... Background thread codes.... 

     NSLog(@"Print progress 2"); 

     [app endBackgroundTask:bgTask]; 
     handler(UIBackgroundFetchResultNoData); 
    }]; 
} 

答えて

0

あなたのバックグラウンド化が多分アプリが伐採"Print Progress 2"のポイントに到達する前に殺され、多くの時間を要するかどうかをチェックする必要がありますバックグラウンドタスクを実行している

アプリは時間の有限量を持っていますそれは に実行します。 backgroundTimeRemainingプロパティを使用すると、使用可能な時間がわかります。時間が経過する前に各タスクに endBackgroundTask:をコールしないと、システムは を殺します。

および/または正しくデバッグし、あなたのコードが実行されていることを確認する必要があります:

トラブルあなたのバックグラウンドタスクのコードをデバッグしている場合は、あなた 本の代わりにbeginBackgroundTaskWithName:expirationHandler: 方法を使用してみてください1。このメソッドは と同じ動作を提供しますが、デバッガが表示するという名前をタスクに指定することができます。

関連する問題