首页 文章

iOS 7 - 静默推送通知

提问于
浏览
1

我已经设置了静音推送通知,当app在前台或后台时,一切正常 .

问题是当应用程序未激活/被杀死时(如果我理解得很好,任何应用程序在后台运行30秒后会自动终止) .

我的有效载荷是这样的

{"aps":{"alert":"test","sound":"bingbong.aiff","badge":33,"content-available":1}}

一切正常,但是当我收到此推送时,徽章图标不会更新(应用程序图标旁边没有33) . 这是第一个问题 .

第二个问题是我不知道如何在应用程序被杀时获取通知 .

我的想法是,如果徽章图标大于1,则调用该服务,这样我就知道有一些通知要下载,我可以联系服务器来获取它们 .

1 回答

  • 2

    静音推送通知不需要警报,要么指定声音,因为它没有呈现给用户 .

    您将通过应用程序获得的无提示通知:didReceiveRemoteNotification:fetchCompletionHandler ::

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
         //load the new available content and call the completionhandler.
    }
    

    如果应用具有正确的权限,则应显示徽章 . 您可以注册您的应用以显示徽章,如下所示:

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge];
    

    无论如何,您无需检查徽章编号即可下载新内容 . 您只需将自己的键值对附加到通知中即可:

    {
        "aps": {
             "badge": 33,
             "content-available":1
        },
        "load-data": 1,
        "load-data-id": 12
    }
    

    当您在应用程序中收到通知时,只需在userInfo字典中检查您的参数:

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
        int loadData = [[userInfo objectForKey:@"load-data"] intValue];
        int loadDataId = [[userInfo objectForKey:@"load-data-id"] intValue];
    }
    

    所有这些都记录在iOS文档中的Local and Push Notification Programming Guide中 .

相关问题