8

作成中のテスト アプリの APNs プロバイダーとして parse.com を使用しています。アプリをフォアグラウンドにすると正常にアラートを受け取ることができたので、プッシュ通知が機能していることを確認しました。また、plist で指定されremote-notificationたキーの値があります。UIBackgroundModes

私のアプリでは、プッシュ通知を受信したときに、ユーザーの現在の位置データをアプリ固有の parse.com データベースに送り返したいと考えています。通知は小さな情報を取得する手段にすぎないため、通知ペイロード自体は実際には気にしません。アプリは常にバックグラウンドでデータを収集し、永続的な に保存していNSDictionaryます。

メソッドに位置送信コードを入れましたapplication:didReceiveRemoteNotification:。通知を受け取ったときにアプリがフォアグラウンドにある場合、メソッドが呼び出されます。アプリがバックグラウンドにある場合、メソッドは呼び出されません。

  • 私は何か間違ったことをしていますか?
  • application:didReceiveRemoteNotification:アプリがバックグラウンドにあり、ユーザーが通知を操作していないときにAPI リクエストを実行することはできますか?**

編集:を使用しても問題は解決しませんapplication:didReceiveRemoteNotification:fetchCompletionHandler:

注:位置データでいっぱいの NSDictionary は空ではありません。また、バックグラウンドで UI 操作を行うつもりはありません。API リクエストを実行しようとしているだけです。

4

4 に答える 4

0

Alex Lの答えはほとんどうまくいきました。

content-availableの値が文字列「1」ではなく、1 (数字) であることを確認してください。

{
  "alert":"",
  "content-available":1,
  "sound":""
}

badgeパラメータはオプションです。

(APNs の解析サーバーを使用)

于 2016-10-28T03:47:02.530 に答える
0

UIApplicationDelegate -application:didReceiveRemoteNotificationのドキュメントは、このメソッドについて非常に明確です:

プッシュ通知が届いたときにアプリが実行されていない場合、このメソッドはアプリを起動し、起動オプション ディクショナリに適切な情報を提供します。アプリは、そのプッシュ通知を処理するためにこのメソッドを呼び出しません。代わりに、application:willFinishLaunchingWithOptions: または application:didFinishLaunchingWithOptions: メソッドの実装で、プッシュ通知ペイロード データを取得し、適切に応答する必要があります。

アプリがバックグラウンドとフォアグラウンドにあるときに応答できるようにするには、両方の方法で通知を処理する必要があります。

于 2013-10-15T21:00:06.043 に答える
0

代わりにこれを使用することができます

application:didReceiveRemoteNotification

バックグラウンド モードでプッシュをフェッチする必要があるため、アプリがバックグラウンド モードのときにこれが機能します。ただし、メッセージを表示するためにアプリがフォアグラウンドにある場合は、カスタム通知または UIAlertView を追加する必要がある場合があります。手遅れではないことを願っています。

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

    NSLog(@"Remote Notification Received: %@", userInfo);

    UILocalNotification *notification = [[UILocalNotification alloc] init];
    notification.alertBody = @"message to be displayed";
    notification.applicationIconBadgeNumber = 1;


    [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
    completionHandler(UIBackgroundFetchResultNewData);

}
于 2014-06-18T06:22:29.660 に答える