任何知道苹果应用程序是不是收到推送通知的选项?

Posted

技术标签:

【中文标题】任何知道苹果应用程序是不是收到推送通知的选项?【英文标题】:any option to know if apple app get the push notification?任何知道苹果应用程序是否收到推送通知的选项? 【发布时间】:2012-03-16 04:18:23 【问题描述】:

我构建了获取推送通知的 xcode 应用程序,主要问题是推送通知对我来说非常关键。 所以我想检查推送通知是否已发送到安装了应用程序的设备,我知道如果 iphone 没有互联网连接/3G,则推送通知不会发送到设备。

如何检查设备是否收到通知? 如何检查 APNS 是否成功发送推送通知?

如果推送通知没有发送到设备,我想发送短信,所以我想在推送通知打开通知事件时获取通知事件,并向我的服务器发送请求,这样我就可以知道推送通知是否成功发送。主要问题是用户每次收到通知时都需要打开应用程序,而在晚上这是一个问题。所以这个选项对我不好。

我检查了反馈服务器推送通知,但如果推送通知是否已发送,我找不到任何可以获取的信息

有什么想法吗??

【问题讨论】:

完全不保证推送通知的传递。 是的,我知道正因为如此,我想看看它是如何 posibale(以及它是否是 posibale)来检查推送通知是否正在传递......永远不要说永远:) 【参考方案1】:

ios7 中,您有一个名为的新方法 应用程序:didReceiveRemoteNotification:fetchCompletionHandler: 您可能可以将其用于您的任务。来自Apple's Docs:

如果您的应用支持远程通知后台模式,请实现此方法。 ... 当推送通知到达时,系统将通知显示给用户并 在后台启动应用程序(如果需要),以便它可以调用此方法。用这个 方法来下载与推送通知相关的任何数据。当你的方法完成后, 在 handler 参数中调用块。

与 application:didReceiveRemoteNotification: 方法不同,该方法仅在 您的应用程序正在运行,无论您的应用程序的状态如何,系统都会调用此方法。

【讨论】:

【参考方案2】:

简短的回答是,您不能,因为 APNS 是一种方式。但是,由于应用程序可以在收到通知后执行任意代码,因此您可以使用它来表示,在收到通知时向您自己的服务器发送 http 请求。

【讨论】:

yaa 但是如果我在晚上睡觉并收到推送通知?当我收到推送通知时,我需要打开应用程序......任何选项都可以在前台获取事件(没有越狱)并且没有用户使用推送通知打开应用程序?【参考方案3】:

推送通知可能无法发送给您的用户或可能无法及时发送的原因有很多。 Apple 没有为您提供任何机制来查询您已发送的推送通知的状态。

如果您的应用当前正在用户的设备上运行并且用户正在接受您的应用的通知,您可以在您的应用委托中实现以下方法。每当收到推送通知时都会调用它,在这种方法中,您可以将请求发送回您的服务器以指示已收到消息。 但这仅在用户运行您的应用时才有效。

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

不过,总的来说,听起来您不应该依赖推送通知。来自 Apple 的Local and Push Notification Programming Guide:

重要因为无法保证交付,您不应该依赖 远程通知工具,用于将关键数据传送到 通过有效载荷应用程序。并且永远不要将敏感数据包含在 有效载荷。您应该只使用它来通知用户有新数据 可用。

【讨论】:

我知道,主要问题是当应用程序关闭/前台或 iphone 没有互联网/3g 时。并且用户没有通过推送通知打开应用程序....我已经做了 didReceiveRemoteNotification....【参考方案4】:

无法确定通知是否已发送到设备。 APNS 是一种单向服务。如果设备上没有互联网连接,则 APNS 服务器将在 Apple 未指定的一段时间内保留最后一次通知。如果将新通知发送到 APNS 进行传递,则旧的通知数据将丢失,如果未传递,则由新数据替换。如果通知已发送,那么旧的通知数据也会在 APNS 服务器上被删除。

请通过以下链接:Apple Push Notification

希望对你有帮助...........

【讨论】:

yaa 但是如果我在晚上睡觉并收到推送通知?当我收到推送通知时,我需要打开应用程序......任何选项都可以在前台获取事件(没有越狱)并且没有用户使用推送通知打开应用程序? 我发现了一些有趣的东西....我用 WhatsApp 带了 2 部 Iphone 我在第一部 iphone 中打开 WhatsApp 并退出应用程序(WhatsApp 在后台),现在使用第二部 iphone 我向第一部 iPhone 发送 watsapp 按摩。 现在,当 WahtsApp 的推送通知到达第一部 Iphone 时,我看到按摩附近有两个“V”(符号)(并且我没有打开推送通知),之后我关闭了第一个 Iphone 中的实习生和 3G 并再次将第二个 iphone 的 WhatsApp 按摩发送到第一个 Iphone,我在按摩附近只看到一个“V”(未读),现在在我在第一个 iphone 上启用互联网之后我收到推送通知我看到两个“V”(我没有打开推送通知)它是如何工作的? WhatsApp 如何知道 iphone 是否收到推送通知? 这是由 WhatsApp 服务器处理的。当用户使用推送通知打开应用程序时,应用程序可能已经向服务器发送了一个请求,说明用户已阅读该消息。因此,服务器会使用此信息进行更新。 & 下次当使用 APNS 发送新的消息时,服务器知道用户读取了之前的消息。【参考方案5】:

如果您使用 JAVAPNS 发送 APNS 通知,您可以使用以下:

List<PushedNotification> notifications = 
Push.combined("alert", badge, "default", "cert.p12", "certpassword", true, deviceToken);

for (PushedNotification notification : notifications) 
    if (notification.isSuccessful())  
       //Push is successful. Do your thing...
    
    else 
       //Push is not successful. Do your thing...
    
  

【讨论】:

这是检查通知是否成功发送,但这并不能确保通知传递给最终用户。不保证会送达通知。 @danielbeard 是否保证通知已经到达苹果服务器?? @Shahzad 取决于该特定库的实现。但这没关系,因为无论如何苹果都不保证交货。

以上是关于任何知道苹果应用程序是不是收到推送通知的选项?的主要内容,如果未能解决你的问题,请参考以下文章

接收苹果推送通知的问题

苹果推送通知不再到达

苹果推送通知声音

苹果推送通知是不是有任何负担得起的主机服务? [关闭]

苹果手机如何阻止app的推送通知?

苹果推送通知令牌是不是会随着 iOS 更新而改变?