如果您在桌面上阅读过Facebook Messenger,Facebook Messenger如何清除锁定屏幕上的推送通知?

时间:2014-02-24 11:48:43

标签: ios notifications push-notification apple-push-notifications

当我在Facebook上收到消息时,我会在锁定屏幕(iOS)上收到推送通知。然后我在桌面上阅读此消息。在此之后,此推送通知消失,而不与电话进行任何交互。如何自行删除过时的通知?

第二种用法可能是将通知拼接在一起。例如,当有人喜欢你的照片时,Instagram会向你发送信息。 20次之后,您的通知屏幕已损坏且无法读取。但是使用与Facebook相同的原则似乎可以删除相同类型的先前通知并使用增加的计数器创建新的。没有“用户A喜欢照片X,用户B喜欢照片Y等”,但“20位用户喜欢照片Z”而不是。

我在这里看过几个关于类似话题的问题,但到目前为止仍然没有答案。谢谢!

4 个答案:

答案 0 :(得分:22)

特别参见Multitasking Enhancements和无声推送通知。使用静音推送,您可以通知您的应用程序新内容可用,并下载该内容和/或设置徽章编号,例如,不在“通知中心”中显示通知。您必须使用远程通知值设置UIBackgroundModes才能使其正常工作。

如果用户在其他平台上看过内容并清除iOS应用上的徽章编号,则可以发送无声推送。

答案 1 :(得分:4)

实现此效果的一种简单方法是使用仅包含徽章计数0的有效负载向您的设备发送正常推送通知。

在Facebook的示例中,他们显然拥有足够的服务器功能,只需检测您何时阅读桌面上的消息并向设备发送推送以确保通知不再存在。

我不是说这就是FB如何做到这一点,但它是一条更简单的路径,可能适合您的需求,也可能不适合您。请记住,背景任务会显着消耗用户的电池,应尽可能避免使用。

答案 2 :(得分:3)

这是iOS 7上的一项名为“静音推送通知”的新功能,它是一项多任务处理功能。

您需要什么:

1 - 在didFinishLaunchingWithOptions中注册远程通知:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIRemoteNotificationTypeNewsstandContentAvailability|
      UIRemoteNotificationTypeBadge |
      UIRemoteNotificationTypeSound |
      UIRemoteNotificationTypeAlert)];

}

2 - 在ApplicationDelegate中实现以下方法:

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


    // Possibl Results:
//    typedef enum {
//        UIBackgroundFetchResultNewData, //Download success with new data
//        UIBackgroundFetchResultNoData,  //No data to download
//        UIBackgroundFetchResultFailed   //Downlod Failed
//    } UIBackgroundFetchResult;
}

3 - 在Application info.plist中设置UIBackgroundModes:

> <key>UIBackgroundModes</key> <array>
>     <string>remote-notification</string> </array>

答案 3 :(得分:2)

警告:我没试过这个,这只是一个想法!

在iOS 7中,您可以尝试向用户发送无提示的“内容可用”通知。这会在后台唤醒应用程序并允许您运行一些代码。然后你可以在后台做

[[UIApplication sharedApplication] setApplicationBadgeNumber:0];
[[UIApplication sharedApplication] setApplicationBadgeNumber:newBadgeNumber];

这应该清除通知中心内的所有通知。然后,您可以发布本地通知,其中包含您在userInfo字典中显示的数据,并且看起来好像旧的替换为新的![/ p>

再次,只是一个想法...