Apple Push Notification service SSL (Sandbox & Production)
- 开发测试用的macos app
- 开发推送工具
apns的go语言实现: https://github.com/sideshow/apns2
apple官方文档 https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html
http://www.skyfox.org/apple-push-with-auth-key-token.html
太详细 https://juejin.im/post/5d328687f265da1bcd3812c0#heading-2
通知的官方文档 https://developer.apple.com/documentation/usernotifications/
(腾讯)HTTP2 Server Push 的研究
{
"aps" : {
"alert" : {
"title" : "Game Request",
"body" : "Bob wants to play poker",
"action-loc-key" : "PLAY"
},
"badge" : 5
},
"acme1" : "bar",
"acme2" : [ "bang", "whiz" ]
}
其中action-loc-key
会从应用程序的适当 Localizable.strings 文件中检索本地化的字符串,实现推送按钮的本地化。
{
"aps" : {
"alert" : {
"loc-key" : "GAME_PLAY_REQUEST_FORMAT",
"loc-args" : [ "Jenna", "Frank"]
},
"sound" : "chime.aiff"
},
"acme" : "foo"
}
下面的有效负载使用 loc-key 在应用程序的 Localizable.strings 文件中指定本地化的字符串。 该字符串显示为警报的消息。 Loc-args 包含在显示字符串之前要替换为字符串的值。 有效负载还指定一个自定义的声音播放警报。
jwt网站,提供各个语言的仓库收集,以及在线工具 https://jwt.io
swift的一个实现 https://github.com/kylef/JSONWebToken.swift
jwt组成
{
"alg": "ES256",
"kid": "352669YN9W"
}
{
"iss": "TZ7K4V4C72",
"iat": 1437179036
}
-
创建令牌后需要用私钥进行签名。需要使用带有 P-256曲线和 SHA-256哈希算法的 ECDSA 椭圆曲线数字签名算法对令牌进行加密(using the Elliptic Curve Digital Signature Algorithm (ECDSA) with the P-256 curve and the SHA-256 hash algorithm)。 同时jwt的token中设置alg为ES256
。具体可参考.
-
为了保证安全性,需要定期生成新的令牌,如果发出令牌的时间戳不在最后一个小时内,apn 将拒绝后续推送消息,返回一个 ExpiredProviderToken (403)错误