任何知道苹果应用程序是否获得推送通知的选项?

时间:2012-03-16 04:18:24

标签: iphone objective-c xcode apple-push-notifications

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

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

如果推送通知未送达设备,我想发送短信,所以我想到通过推送通知打开通知事件的想法,并将请求发送到我的服务器,以便我知道是否推送通知是否成功交付。主要问题是用户每次收到通知都需要打开应用程序,而在夜晚则出现问题。所以这个选项对我不好。

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

任何想法?

5 个答案:

答案 0 :(得分:6)

使用iOS7,你有一个名为的新方法     应用:didReceiveRemoteNotification:fetchCompletionHandler: 你可能会用它来完成你的任务。来自Apple's Docs

  

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

     

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

答案 1 :(得分:1)

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

请浏览以下链接:Apple Push Notification

希望这有助于你............

答案 2 :(得分:1)

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

答案 3 :(得分:1)

推送通知可能无法传递给您的用户,或者可能无法及时发送,有多种原因。 Apple不提供任何机制来查询您已发送的推送通知的状态。

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

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

一般来说,听起来你依赖推送通知来做你不应该做的事情。来自Apple的Local and Push Notification Programming Guide

  

重要因为无法保证交货,所以您不应该依赖   远程通知工具,用于向客户提供关键数据   通过有效载荷申请。永远不要包含敏感数据   有效载荷。您应该仅使用它来通知用户新数据   可用。

答案 4 :(得分:-1)

如果您使用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...
    }
 }