突然某一天app 调用 apns 用户莫名其妙收不到,由于调用的是底层的统计接口,不知道是自己的问题还是水果的
问题,好吧,自己裸调水果接口。
用pip 搜索了一下 python 的包,撞了 pyapns 和 apns 发现 apns 貌似比较成熟一些,还包含了feedback的
调用,试这调用发现没有问题,虽然有些延迟但是,基本上不会失败。接着底层接口的同事过来调试。我发他debug。
发现每次调用都记录下来的,好吧那就是水果没给发了,看了好多网上的文档都感觉不靠谱,还是自己去读一遍水果
的官方文档吧,的吧的吧的看了一统,发现一些有用约定
我看了苹果关于 push 这块的文档,有用的就是这些
You should also retain connections with APNs across multiple notifications. APNs may consider connections that are rapidly and repeatedly established and torn down as a denial-of-service attack. Upon error, APNs closes the connection on which the error occurred.
As a provider, you are responsible for the following aspects of push notifications:
- You must compose the notification payload (see “The Notification Payload”).
- You are responsible for supplying the badge number to be displayed on the application icon.
- You should regularly connect with the feedback web server and fetch the current list of those devices that have repeatedly reported failed-delivery attempts. Then you should cease sending notifications to the devices associated with those applications. See “The Feedback Service” for more information.
苹果建议对多个notification 保持连接,反而对频繁的建立和断开,会被认为 dos 攻击。
看样子水果是让一次连接,多次发送的,那为什么我们批量发送push 会失败呢。找来3台ios设备,反复push。
最后发现,如果中间有一个非法的token,则之后的所有notification 都发送不出去。
这可能和水果的审核机制有关,一次连接,批量发送push,中间有非法的token,苹果就做强烈的处理,停止发送了。
分享到:
相关推荐
在Java中实现APNs推送,我们可以使用第三方库如`Java-APNS`或`Apns4j`,它们封装了与APNs交互的复杂过程,使代码更加简洁。不过,如果你选择自己实现,需要注意以下几点: - **错误处理**:APNs服务器对推送消息有...
APNs会在接收推送消息时返回一个反馈,如果设备Token无效或者推送失败,会返回相应的错误代码。服务端需要正确处理这些反馈,以便更新无效的设备Token或解决推送问题。 7. **批量推送**: 如果需要向大量设备推送...
要使用Java实现APNS,你需要以下几个步骤: 1. **获取推送证书**:在Apple Developer Portal上创建一个APNs证书,并下载.p12文件。这个证书包含了用于与APNS通信的公钥和私钥。 2. **导入证书到Java KeyStore**:...
要使用Java实现APNs推送,你需要以下组件: 1. **证书和密钥**:首先,你需要从Apple Developer Portal获取一个APNs证书和对应的私钥。这些文件通常以.p12格式提供,包含了你的开发者身份验证信息。 2. **Java ...
3. **连接到APNs**:C#后台服务器使用SSL/TLS连接到APNs服务器,然后发送包含payload和设备Token的推送消息。 4. **苹果设备接收**:当APNs收到消息后,会转发到相应的设备。如果设备在线,就会显示通知;如果设备...
在“sideshow-apns2”中,可能会有一个功能用于批量处理和发送推送通知。 5. **重试策略**:由于网络不稳定或服务器负载,推送请求可能会失败。项目需要有智能的重试策略,比如延迟重试、指数退避等,以确保通知...
利用socket 推送消息到 苹果的服务器。APNS 协议。支持失败重新发送。批量发送等。
5. **错误处理**:当APNs推送失败时,开发者需要有相应的错误处理机制,以便了解问题并采取措施。 6. **优化性能**:为了提高推送效率,开发者需要批量发送通知,并使用高效的编码格式,如JSON。 7. **本地推送...
Java APNS库支持批量发送,这可以通过创建多个PushManager实例或者使用单个实例的多线程处理来实现。 6. **反馈服务**:APNS还提供了一个反馈服务,该服务会列出那些不再接收推送的设备令牌。定期查询这个反馈服务...
这是一个基础的APNs推送实现,但实际应用可能需要处理更多细节,如错误重试、批量推送、自定义通知类型等。此外,APNs有两种模式:简单推送(Simple Notification)和增强推送(Enhanced Notification),后者允许...
5. **错误处理**:APNS会返回错误代码,帮助你识别推送失败的原因,如无效的设备令牌、证书问题等。你应该正确处理这些错误,确保推送系统的健壮性。 在Java中实现APNS推送,你可以使用开源库,例如`...
4. **批量推送**:如果需要向大量设备发送相同的推送,可以考虑使用`notnoop`的批量推送功能,以提高效率。 5. **优化推送性能**:为了防止因过多的推送请求导致服务器压力过大,可以设置合理的推送间隔和策略,...
- 为了使用APNs服务,开发者需要在Apple Developer Portal上创建并下载相应的推送证书。 - 请确保设备Token的正确获取和存储,避免无效或过期的Token导致推送失败。 - 调试时,可以开启`n-apns`的日志功能,以便排查...
APNs提供了两种模式:HTTP/2接口和Socket接口,本项目可能使用HTTP/2,因为它更高效且支持批量推送。 3. **证书与身份验证**:在使用APNs之前,开发者需要在Apple Developer Portal上创建并下载推送证书(p12文件)...
- APNs会返回错误代码,帮助开发者识别推送失败的原因。同时,APNs还提供反馈服务,定期提供失效的设备令牌,以便清理无效的订阅。 6. **批量推送**: - 为了提高效率,可以一次发送多条推送消息。Java程序需要...
标题 "Node.js-基于nodejs的苹果推送测试工具" 暗示了这是一个利用Node.js构建的...通过学习和使用这样的Node.js APNS测试工具,开发者可以有效地测试和优化其应用的推送通知功能,确保消息能够准确、及时地送达用户。
然后,你的服务器使用这个Token与APNs建立连接,发送推送消息。 1. **设置环境**:在开始编写Java后台之前,你需要确保有以下准备工作: - 注册Apple Developer账号并创建App ID,启用Push Notifications服务。 -...
这一过程通常涉及使用苹果的Push Notification Service (APNs)。 首先,了解APNs是关键。APNs是苹果提供的服务,它允许开发者向运行iOS、iPadOS、watchOS、tvOS等系统的设备发送即时推送通知。当应用在后台或完全...