大家好,如果您还对本地与远程通知集成教程(九):苹果推送通知服务APNs编程指南不太了解,没有关系,今天就由本站为大家分享本地与远程通知集成教程(九):苹果推送通知服务APNs编程指南的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
Creating the Remote Notification Payload - 创建远程通知有效负载
提供商服务器发送到Apple 推送通知服务(APN) 的每个通知都包含有效负载。有效负载包含您想要发送到应用程序的任何自定义数据,并包含有关系统应如何通知用户的信息。您可以将此有效负载构建为JSON 字典,并将其作为HTTP/2 消息的正文内容发送。最大负载大小取决于您发送的通知:
对于常规远程通知,最大大小为4KB(4096 字节)。对于Internet 协议语音(VoIP) 通知,最大大小为5KB(5120 字节)。注意:如果您使用旧版APNs 二进制接口发送通知而不是HTTP/2 请求,则最大负载大小为2KB(2048 字节)
APNs 拒绝负载超过允许的最大大小的通知。
由于无法保证远程通知的传送,因此请勿在负载中包含敏感数据或可通过其他方式检索的数据。相反,使用通知来提醒用户新信息,或者作为应用程序有数据等待的信号。例如,电子邮件应用程序可以使用远程通知来标记应用程序的图标或提醒用户特定帐户中有新电子邮件可用,而不是直接发送电子邮件内容。收到通知后,应用程序应打开与您的电子邮件服务器的直接连接以检索电子邮件。
Creating the JSON Dictionary - 创建JSON字典
以下示例说明了JSON 字典的结构以及可包含在通知中的键。有效负载中最重要的部分是aps 字典,其中包含Apple 定义的键,用于确定接收通知的系统应如何提醒用户(如果有的话)。这些示例还包括名称包含字符串acme 的键,该字符串表示虚构应用程序包含的自定义数据。尽管这些示例包含空格和换行符以提高可读性,但实际上您应该省略空格和换行符以减少有效负载大小。
示例1. 以下有效负载包含带有简单警报消息的aps 字典。 acme2 密钥包含一组特定于应用程序的数据。
{
"aps" : { "alert" : "收到鲍勃发来的消息" },
"acme2" : [ "砰", "嗖" ]
}示例2。以下有效负载要求系统显示带有“关闭”按钮和单个操作按钮的警报。标题和正文键提供警报的内容。 PLAY 字符串用于从应用程序相应的Localized.strings 文件中检索本地化字符串。警报使用生成的字符串作为操作按钮的标题。此有效负载还要求系统用数字5 标记应用程序的图标。
{
"aps" : {
"警报": {
"title" : "游戏请求",
"body" : "鲍勃想玩扑克",
"动作锁定键" : "玩"
},
‘徽章’ : 5
},
"acme1" : "酒吧",
"acme2" : [ "砰", "嗖" ]
}示例3。以下有效负载指定设备应显示警报消息、播放声音并标记应用程序的图标。
{
"aps" : {
"alert" : "您已收到电子邮件。",
‘徽章’: 9,
"声音" : "bingbong.aiff"
},
"acme1" : "酒吧",
‘acme2’: 42
}示例4。以下有效负载使用loc-key 在应用程序的Localized.strings 文件中指定本地化字符串。该字符串显示为警报消息。 loc-args 包含显示前用字符串替换的值。有效负载还指定与警报一起播放的自定义声音。
{
"aps" : {
"警报": {
"loc-key" : "GAME_PLAY_REQUEST_FORMAT",
"loc-args" : ["珍娜","弗兰克"]
},
"声音" : "chime.aiff"
},
‘acme’:‘foo’
}有关可包含在通知有效负载中的Apple 特定密钥的完整列表,请参阅有效负载密钥参考。
Configuring a Background Update Notification - 配置后台更新通知
后台更新通知为您提供一种定期唤醒应用程序以便其可以在后台刷新数据的方法,从而改善用户体验。当应用程序长时间不运行时,其数据可能会变得陈旧。当用户最终再次启动应用程序时,必须替换过时的数据,这可能会导致应用程序的使用延迟。后台更新通知可以提醒用户,也可以静默发生。
重要提示:后台更新通知并不意味着让您的应用程序在后台保持唤醒状态以进行快速刷新操作,也不是用于高优先级更新。 APN 将后台更新通知视为低优先级,如果总数过高,可能会完全限制其到达。实际限制是动态的,可以根据条件发生变化,但尽量不要每小时发送多个通知。
要支持后台更新通知,请确保有效内容的aps 字典包含值为1 的内容可用键。如果后台更新提供了用户可见的更新,则aps 字典中的警报、声音和徽章可以放。
当后台更新通知发送到用户的设备时,iOS 会在后台唤醒您的应用程序并运行它最多30 秒。在iOS中,系统通过调用应用程序委托的application:didReceiveRemoteNotification:fetchCompletionHandler:方法来提供后台更新通知。使用此方法启动获取新数据所需的任何下载操作。在后台处理远程通知需要您向应用程序添加适当的后台模式。
To configure your app to process background update notification - 配置应用以处理后台更新通知1) 在项目导航器中,选择您的项目。 2) 在编辑器中,选择您的iOS 应用程序目标。 3) 选择“功能”选项卡。 4) 启用后台模式功能。 5) 启用远程通知后台模式。清单7-1 显示了后台更新通知的示例JSON 负载。
//清单7-1 配置后台更新通知
{
"aps" : {
“内容可用”: 1
},
"acme1" : "酒吧",
‘acme2’: 42
}有关如何处理远程通知的更多信息,请参阅处理远程通知。
Assigning Custom Actions to a Remote Notification - 将自定义操作分配给远程通知
要使用远程通知显示自定义操作,请将类别键包含在通知负载的aps 字典中。发布时,应用程序可以注册包含自定义操作的类别。当通知包含类别键时,系统会在警报界面中将该类别的操作显示为横幅或按钮。当用户选择该按钮时,您的应用程序会收到通知,以便它可以执行任何相关任务。配置了类别的通知还必须配置为显示警报。
清单7-2 显示了通知的示例有效负载,该通知显示警报并包含带有自定义操作的类别。 NEW_MESSAGE_CATEGORY 字符串对应于应用程序已注册的类别的名称。在本例中,该类别包括用于响应消息的自定义操作。
//清单7-2 在有效负载中包含一个类别
{
"aps" : {
"类别" : "NEW_MESSAGE_CATEGORY"
"警报": {
: "从Johnny Appleseed 收到Acme 消息",
},
“徽章”: 3,
‘声音’ : “chime.aiff”
},
"acme-account" : "jane.appleseed@apple.com",
"acme-消息":"message123456"
}有关如何注册应用程序支持的类别和自定义操作的信息,请参阅配置类别和可操作通知。有关如何在应用程序中处理自定义操作选择的信息,请参阅响应自定义操作的选择。
Localizing the Content of Your Remote Notifications - 本地化远程通知的内容
有两种方法可以本地化远程通知的内容:
从提供商服务器提供本地化内容。将本地化的消息字符串存储在应用程序包中。两种本地化方法都有优点和缺点,您应该选择最适合您需求的技术。通过服务器提供本地化内容允许您指定所需的任何文本,但您还需要发现和跟踪用户当前的语言首选项,并可能动态翻译内容。在应用程序包中存储本地化字符串更简单,但要求您提前定义所有通知消息并将它们包含在应用程序的Localizable.strings 资源文件中。
1. Supplying the User’s Language Preference to Your Server - 向服务器提供用户的语言首选项
如果您的提供商服务器处理通知消息的本地化,您的应用程序应将用户的语言首选项传达给该服务器。用户在设备本地设置语言首选项,应用程序可以使用NSLocale 的preferredLanguages 属性检索这些首选项。
清单7-3 说明了获取当前选择的语言并将其传递到提供者服务器的技术。此示例获取用户的第一首选语言并将其编码为UTF8 字符串。然后,它使用自定义方法将该字符串发送给其提供者。如果用户的第一语言不是您支持的语言之一,您还可以考虑从preferredLanguages属性发送前几种语言。如果您不支持任何用户首选的语言,请考虑使用广泛使用的语言(例如英语或西班牙语)作为备用语言。
//清单7-3 获取当前支持的语言并将其发送给提供者
NSString *preferredLang=[[NSLocale PreferredLanguages] objectAtIndex:0];
const char *langStr=[preferredLang UTF8String];
[self sendProviderCurrentLanguage:langStr]; //自定义方法
由于用户可以更改其首选语言设置,因此应用程序应遵守NSCurrentLocaleDidChangeNotification 通知。使用此通知将任何与语言相关的更改发送到您的服务器。
2. Storing Localized Content in Your App Bundle - 在您的应用程序包中存储本地化内容
如果您使用一组一致的通知消息,则可以在应用程序包中存储消息文本的本地化版本,并使用负载中的loc-key 和loc-args 键指定要显示的消息。 loc-key 和loc-args 键定义通知的消息内容。如果存在,本地系统会在应用程序的Localized.strings 文件中搜索与loc-key 中的值匹配的键字符串。然后,它使用字符串文件中的相应值作为消息文本的基础,用loc-args 键指定的字符串替换任何占位符值。 (您还可以使用title-loc-key 和title-loc-args 键指定通知的标题字符串。)
为了说明如何使用这些密钥,请考虑一个游戏应用程序的示例,该应用程序的提供商服务器在邀请用户玩游戏时发送通知。由于邀请文本永远不会更改,因此使用以下条目将文本包含在应用程序的Localized.strings 文件中:
"GAME_PLAY_REQUEST_FORMAT"="%@ 和%@ 邀请您玩大富翁";当提供者服务器想要发送有关游戏请求的通知时,它使用loc-key 和loc-args 键来构建有效负载。它将loc-key 的值设置为字符串GAME_PLAY_REQUEST_FORMAT,并将loc-args 的值设置为发起游戏请求的参与者的名称。例如,如果名为Jenna 和Frank 的两个用户发起请求,则提供商服务器将发送包含以下内容的有效负载:
{
"aps" : {
"警报": {
"loc-key" : "GAME_PLAY_REQUEST_FORMAT",
"loc-args" : ["珍娜","弗兰克"]
}
}
收到带有先前有效负载的远程通知后,设备从应用程序相应的Localized.strings 文件中提取GAME_PLAY_REQUEST_FORMAT 字符串,并合并提供的玩家名称。对于首选语言是英语的用户,生成的消息字符串将成为Jenna and Frank 邀请您玩大富翁,对于其他语言,该字符串将是包含所提供名称的消息的正确翻译版本。
为Localized.strings 文件创建消息字符串时,您可以使用与任何本地化内容相同的格式说明符。例如,您可以使用%n$@ 形式的位置说明符来允许重新排列参数,并且可以使用%% 说明符创建百分号字符。
有关可包含在通知负载中的密钥的其他信息,请参阅负载密钥参考。有关国际化和为您的应用程序提供本地化内容的更多信息,请参阅国际化和本地化指南。
后记
本文主要讨论创建远程通知负载。有兴趣的话就点个赞或者关注吧~~~
本地与远程通知集成教程(九):苹果推送通知服务APNs编程指南的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、本地与远程通知集成教程(九):苹果推送通知服务APNs编程指南的信息别忘了在本站进行查找哦。
【本地与远程通知集成教程(九):苹果推送通知服务APNs编程指南】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
这篇文章终于来了!一直在找关于苹果推送通知服务的资料,尤其是本地和远程通知的编程指南。
有16位网友表示赞同!
苹果推送通知服务(APNs)一直是个令人头疼的问题,希望这篇文章能给我一些解决办法!
有15位网友表示赞同!
看了标题里“集成(九)”就知道这系列文章越来越高级了,期待学习新的知识!
有8位网友表示赞同!
我一直想在自己的App中添加推送功能,这个指南看起来很实用。
有18位网友表示赞同!
本地和远程通知区别还挺大的嘛,期待 artigos 可以详细讲解这些方面!
有18位网友表示赞同!
之前用过 APNs ,但还是希望能从这篇文章里学到更多技巧。
有14位网友表示赞同!
系统推送的集成系列文章都很有价值,特别是这个关于APNs 的,很想去深入了解!
有8位网友表示赞同!
现在做应用开发确实离不开推送功能,看这个指南来增强我的App!
有11位网友表示赞同!
苹果的推送通知服务机制的确有些复杂,希望能通过这篇文章轻松掌握。
有17位网友表示赞同!
最近在开发一款iOSApp ,打算添加推送功能,这个指南就非常适合我。
有7位网友表示赞同!
学习编程一直都是一个不断探索的过程,这次从“本地和远程通知编程指南”开始吧!
有6位网友表示赞同!
相信这篇文章能够帮我更好地理解苹果推送通知服务的运作方式!
有13位网友表示赞同!
希望文章能提供详细的代码示例,这样更容易上手。
有13位网友表示赞同!
对于新手来说,学习 APNs 很不容易,希望能有更直观的解释和示例。
有10位网友表示赞同!
我期待文章能够涵盖APNs 的各个方面,包括常见问题以及解决方案。
有5位网友表示赞同!
苹果推送通知服务是 iOS 应用开发中必不可少的工具,必须认真学习一下!
有9位网友表示赞同!
最近想研究一下移动应用的开发,这个 APNs 指南是一个很好的起点!
有9位网友表示赞同!
期待从这篇文章中学习到如何实现高效而精准的推送通知!
有5位网友表示赞同!
我相信阅读这份指南能够让我更好地理解并运用 APNs 来增强我的 App 功能!
有6位网友表示赞同!