最近弄了下推送,在測(cè)試時(shí)遇到了些問(wèn)題,在此整理匯總了些推送測(cè)試相關(guān)的方案,并添加了一些補(bǔ)充信息。下方鏈接是相關(guān)文章,感謝各位作者的分享。
注意
debug包和build切換為release直接在手機(jī)上跑生成的device token都是開(kāi)發(fā)token。release打包后注冊(cè)生成的token是生產(chǎn)的。
1、極光、個(gè)推等三方推送平臺(tái)
向證書(shū)制作者要推送證書(shū)的 p12文件。 雙擊輸入密碼。在鑰匙串中找到如下。

證書(shū)有下方密鑰,沒(méi)有的話證書(shū)不可用。
將p12上傳的三方平臺(tái)并填寫密碼即可。測(cè)試推送在這些推送平臺(tái)填寫 設(shè)備token等信息即可。
2、公司自己開(kāi)發(fā)推送服務(wù)
給中臺(tái)p12文件和密碼,協(xié)商好消息格式、提供對(duì)應(yīng)環(huán)境的token,由中臺(tái)觸發(fā)即可。
注意證書(shū)分為三種。測(cè)試(sanbox)、生產(chǎn)、 測(cè)試和生產(chǎn)合并。
如果發(fā)送成功,核對(duì) token、證書(shū)、中臺(tái)鏈接蘋果服務(wù)器息的地址。是否為統(tǒng)一環(huán)境。(蘋果的推送服務(wù)器也是區(qū)分測(cè)試和生產(chǎn)的,域名不同,下方腳本中可以看到)
3、模擬器推送
在Xcode11.4之后,模擬器也支持推送測(cè)試
3.1、創(chuàng)建推送文件
{
"aps":{
"alert":{
"title":"標(biāo)題",
"body":"內(nèi)容內(nèi)容內(nèi)容"
},
"content-available" : 1,
"mutable-content" : 1
}}
具體格式根據(jù)你們的產(chǎn)品要求,接入極光或者個(gè)推的可以在控制臺(tái)發(fā)一條推送打印出具體格式內(nèi)容查看,將文件保存后綴為apns,待會(huì)要用到
3.2、執(zhí)行如下命令進(jìn)行測(cè)試
a、查看已啟動(dòng)模擬器
xcrun simctl list devices | grep Booted
會(huì)看到類似下面信息,如果沒(méi)有請(qǐng)先啟動(dòng)模擬器
iPhone 12 Pro (1BEE4182-C934-431E-BCBF-F7676C4C2BFC) (Booted)
b、運(yùn)行項(xiàng)目在模擬器上后執(zhí)行相應(yīng)命令simctl push <device> [<bundle identifier>] (<json file> | -)
示例如下
xcrun simctl push Booted com.app.test /Users/lazyloading/Desktop/payload.apns
3.3方式二直接拖入推送文件到模擬題
將第一步創(chuàng)建的json文件內(nèi)容稍加修改,具體就是添加了"Simulator Target Bundle": "com.app.test"你項(xiàng)目的包名
{
"Simulator Target Bundle": "com.app.test",
"aps":{
"alert":{
"title":"標(biāo)題",
"body":"內(nèi)容辱與共產(chǎn)主義不容辭"
},
"content-available" : 1,
"mutable-content" : 1
}}
然后直接拖動(dòng)文件到模擬器上,出現(xiàn)綠色?后松手,這樣也可以進(jìn)行推送測(cè)試
4、推送腳本
參考蘋果官方文檔
Sending Push Notifications Using Command-Line Tools
這里只講一種方式
1、在終端新建 shell 文件,這里命名為 push-remote-notification
touch push-remote-notification.sh
vim push-remote-notification.sh
2、編輯 shell 腳本,這里需要 der 和 pem 證書(shū),如果已經(jīng)有了 p12 證書(shū),可以通過(guò) openssl 進(jìn)行轉(zhuǎn)換
# 下面的變量需要根據(jù)實(shí)際情況修改
CERTIFICATE_FILE_NAME={DER 證書(shū)路徑}
CERTIFICATE_KEY_FILE_NAME={PEM 證書(shū)路徑}
# bundle id
TOPIC={appid}
DEVICE_TOKEN={device-token}
# 生產(chǎn)環(huán)境
# APNS_HOST_NAME=api.push.apple.com
# 開(kāi)發(fā)環(huán)境
APNS_HOST_NAME=api.sandbox.push.apple.com
curl -v --header "apns-topic: ${TOPIC}" --header "apns-push-type: alert" --cert "${CERTIFICATE_FILE_NAME}" --cert-type DER --key "${CERTIFICATE_KEY_FILE_NAME}" --key-type PEM --data '{"aps":{"alert":"test"}}' --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}
運(yùn)行 shell 腳本
sh push-remote-notification.sh
推送成功截圖:
真實(shí)腳本事例:
# 下面的變量需要根據(jù)實(shí)際情況修改
CERTIFICATE_FILE_NAME=/Users/ume/Desktop/shellApns/xxxapns.der
CERTIFICATE_KEY_FILE_NAME=/Users/ume/Desktop/shellApns/xxxapns.pem
# bundle id
TOPIC=com.xxxx.xx.xxx
DEVICE_TOKEN=xxxxa47e0e41626165aa1c4baa510fed4114b2c60afc82e001e1e9075d96978e
# 生產(chǎn)環(huán)境
APNS_HOST_NAME=api.push.apple.com
# 開(kāi)發(fā)環(huán)境
# APNS_HOST_NAME=api.sandbox.push.apple.com
curl -v --header "apns-topic: ${TOPIC}" --header "apns-push-type: alert" --cert "${CERTIFICATE_FILE_NAME}" --cert-type DER --key "${CERTIFICATE_KEY_FILE_NAME}" --key-type PEM --data '{"aps":{"alert":"test"},"badge":3,}' --http2 [<u>https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}</u>](https://${apns_host_name}/3/device/$%7BDEVICE_TOKEN%7D)
5、.pem 文件和 .der文件生成
a、p12轉(zhuǎn)der需要先轉(zhuǎn)為pem格式,再?gòu)膒em轉(zhuǎn)到der格式
openssl pkcs12 -in disPush.p12 -out disPush.pem -nodes
b、pem轉(zhuǎn)der
openssl x509 -outform der -in certificate.pem -out certificate.der
6、推送工具
Smart push
git地址:https://github.com/shaojiankui/SmartPush

如果報(bào)錯(cuò)
SSL端點(diǎn)域名不能被設(shè)置 -25300
Keychain中不能找到證書(shū) -25300
說(shuō)明鑰匙串中沒(méi)有密鑰,要新的p12文件并雙擊
7、其他在線推送測(cè)試工具
不推薦,所以不例舉,網(wǎng)站風(fēng)險(xiǎn)無(wú)法判斷。
8、相關(guān)鏈接
<u>http://www.itdecent.cn/p/15d58b1ada5b</u> 證書(shū)轉(zhuǎn)換
<u>https://blog.csdn.net/u013250412/article/details/78729828</u> 證書(shū)轉(zhuǎn)換
<u>http://www.itdecent.cn/p/9d7aece4a88d</u> 證書(shū)轉(zhuǎn)換
<u>https://blog.csdn.net/berryreload/article/details/52205397</u>
<u>http://www.itdecent.cn/p/87168eecc395</u> 腳本
<u>https://developer.aliyun.com/article/116088?spm=a2c6h.13813017.content3.2.6bc0590ePir0NF</u>