2017-09-14 2 views
0

通知が受信され、アプリケーションがユーザーによって閉じられ/強制終了されたときにローカルのsqliteデータベースを更新しようとしています。アプリがバックグラウンドモードまたはアクティブモードの場合はすべて正常に動作します。プッシュ通知からのsqlite dbの更新アプリケーションが閉じていて、バックグラウンドで実行されていないiOS

参考:

-(void)application:(UIApplication)application didReceiveRemoteNotification:(NSDictionary)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{ 



NSLog(@"App Background :%@",userInfo); 



    if(application.applicationState == UIApplicationStateInactive) { 

    NSLog(@"Inactive"); 

    //Show the view with the content of the push 

    [self BackgrounCall:userInfo]; 

    completionHandler(UIBackgroundFetchResultNewData); 

    } else if (application.applicationState == UIApplicationStateBackground) { 

    NSLog(@"Background"); 

    //Refresh the local model 
    [self BackgrounCall:userInfo]; 
    completionHandler(UIBackgroundFetchResultNewData); 

    } else { 

    NSLog(@"Active"); 

    //Show an in-app banner 
    [self BackgrounCall:userInfo]; 
    completionHandler(UIBackgroundFetchResultNewData); 

     } 
    } 

質問:なぜそれがアプリケーションINACTIVE状態で動作していないがREFERENCE STACK LINK 1

REFERENCE STACK LINK 2

ここでは、私がしようとしているコードです。この問題の解決法はありますか?

- (BOOL)application:(UIApplication)application didFinishLaunchingWithOptions:(NSDictionary)launchOptions { 
// Override point for customization after application launch. 
[[Database shareDatabase] createEditableCopyOfDatabaseIfNeeded]; 


if(launchOptions != nil) 

{ 
    // opened from a push notification when the app is closed 
    NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

    if (userInfo != nil) 
    { 
     NSLog(@"userInfo->%@", [userInfo objectForKey:@"aps"]); 
     [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]]; 
    } 
} 
else 
{ 
} 
} 

答えて

1

- (無効)アプリケーション:(のUIApplication)アプリケーションdidReceiveRemoteNotification:

方法は、ユーザーがあなたのアプリがバックグラウンドで動作している場合にのみ通知バナーをタップします場合にのみ呼び出されます。あなたのアプリが殺されているなら、あなたは

didFinishLaunchWithOptions

にバナーのタップを処理する必要がmethod.Youは、あなたのバナーをタップするとアプリが殺されているかどうかを知るために、次のコードを使用することができます。

// Push Notification Handling 
[UIApplication sharedApplication].applicationIconBadgeNumber = 0; 

NSDictionary *pushDic = [[NSDictionary alloc]init]; 
pushDic = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]; 

if (pushDic) 
{ 
    NSLog(@"got push when app killed->%@",pushDic);  
} 
+0

ユーザーがアプリのクリック通知を開くと機能しています。アプリが殺された、通知が受け取られた、ユーザーがアプリケーションアイコンを使用してアプリを開き、通知がない場合、sqliteの更新はありません –

+0

didFinishLaunchWithOptionsメソッドで上記のコードを使用していますか? –

+0

はい...上記の更新された質問を確認してください。私が何か悪いことをしているなら、私を修正してください。 –

関連する問題