当应用程序未运行时处理 JSON 推送通知解析

Posted

技术标签:

【中文标题】当应用程序未运行时处理 JSON 推送通知解析【英文标题】:Handle JSON push notification parse when app is not running 【发布时间】:2015-01-20 10:59:47 【问题描述】:

我在处理使用 parse.com 发送的推送消息时遇到问题,当应用程序运行时,我可以处理 json 并构造消息:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

但是当应用程序处于后台或被杀死时,此消息会被处理并直接发送到通知栏。我试图在这个函数中处理:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
....
 UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (localNotif) 

        [[UIApplication sharedApplication] setApplicationIconBadgeNumber: 99];
        UIAlertView *BOOM = [[UIAlertView alloc] initWithTitle:@"BOOM"
                                                       message:@"app was INACTIVE"
                                                      delegate:self
                                             cancelButtonTitle:@"a-ha!"
                                             otherButtonTitles:nil];
        [BOOM show];
        NSLog(@"App was NOT ACTIVE");
    
.....

est 这个响应,但我无法处理推送消息:

Handling Push Notifications when App is NOT running

Can't handle push notifications when app is running background

Handling push notifications when app is not running (App is Killed)

how can I handle push notification when my app is not running

有什么帮助吗?谢谢。

【问题讨论】:

【参考方案1】:

当应用程序未运行或在后台时,我无法处理通知,我改变了分辨率的焦点,我正在像 android 应用程序那样做,但我 ios 用“消息控制”处理消息,我没有找到“方法"来处理这个。

我开始根据用户设置使用推送通知的频道 来订阅消息。我使用频道和应用订阅频道发送到 Parse 消息。

您可以通过 POST 发送通知:

  curl -X POST \
  -H "X-Parse-Application-Id: APP-KEY" \
  -H "X-Parse-REST-API-Key:   REST-API-KEY" \
  -H "Content-Type: application/json" \
  -d '
        "channels": [
          "valencia",
          "sevilla"
        ],
        "data": 
          "alert": "Fin del partido Betis - Valencia 0-2",
          "sound": "gol.mp3"
        
      ' \
  https://api.parse.com/1/push

在 App 中您可以订阅 AppDelegate 中的频道:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)newDeviceToken 
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:newDeviceToken];

    NSArray * channels = @[@"channel1", @"channel2"];
    NSLog(@"Channels : %@", channels);
    currentInstallation.channels = channels;
    [currentInstallation saveInBackground];

您可以在任何地方更改频道,如下所示:

PFInstallation *currentInstallation = [PFInstallation currentInstallation];
currentInstallation.channels = @[@"channel3"];

[currentInstallation saveInBackground];

也许这可以帮助某人。

【讨论】:

【参考方案2】:

将您的代码添加到此函数中,当应用程序被终止并且您收到推送通知时 - 它会调用此函数,以便您可以根据此通知重新启动您的应用程序并相应地在应用程序中显示警报。

(void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo

【讨论】:

我在应用程序运行时使用此功能,我可以获取 JSON 并创建消息。我的问题是当应用程序没有运行时,谢谢。 当应用没有运行时,这个函数仍然会被调用,但是要激活你的本地通知并在应用中显示警报,你需要重新启动你的应用,否则当应用处于终止状态时,你不能显示警报使用应用程序代码。 我尝试删除应用程序,然后重新安装,但我有同样的问题,我重写消息以显示但它没有执行此功能

以上是关于当应用程序未运行时处理 JSON 推送通知解析的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序未运行时,使用推送通知的内容更新 SQLite

在应用程序未运行时处理推送通知(应用程序被杀死)

应用程序处于前台时未收到 Firebase 推送通知

ios 应用未运行时推送通知单击处理程序

当应用程序未运行/注销时禁用苹果推送通知

当应用程序未运行时,GCM 推送通知未在某些设备中显示