一全陨、證書
? ? ? 一、證書的獲取
? ? ? ? 1.創(chuàng)建項(xiàng)目衷掷,配置bundleId
? ? ? ? 2.在AppleDeveloper網(wǎng)站綁定bundleId辱姨,開啟推送服務(wù),生成App IDs
? ? ? ? 3.從鑰匙串生成一個(gè)CSR(Certificate Signing Request)文件
? ? ? ? 4.創(chuàng)建aps_development.cer和aps_producation.cer證書戚嗅,綁定App IDs和CSR文件
? ? 二炮叶、證書的導(dǎo)出
? ? ? ? 1.下載證書,雙擊.cer文件將其導(dǎo)入到鑰匙串
? ? ? ? 2.打開鑰匙串渡处,在登錄選項(xiàng)中找到Apple Development/Producation Mac/iOS Push Services證書
? ? ? ? 3.將證書和證書專用密鑰導(dǎo)出為p12文件,分別保存為apns_dev_cert.p12,apns_dev_privateKey.p12
? ? 三祟辟、證書格式的轉(zhuǎn)換與合成
? ? ? ? 1.打開終端医瘫,執(zhí)行openssl pkcs12 -clcerts -nokeys -out apns_dev_cert.pem -in apns_dev_cert.p12 命令生成apns_dev_cert.pem文件
? ? ? ? 2.執(zhí)行openssl pkcs12 -nocerts -out apns_dev_privateKey.pem -in apns_dev_privateKey.p12 命令生成apns_dev_privateKey文件
? ? 注意點(diǎn):1.第一個(gè)命令 pkcs12參數(shù)與第二個(gè)的區(qū)別, -nocerts(不是.cer證書) -nokeys(含義是不設(shè)置密碼);
? ? ? ? ? ? ? ? ? ? 2.提示Enter Import? ? ? Password:的時(shí)候輸入您導(dǎo)出p12設(shè)置的密碼旧困,提示Enter PEM pass phrase:和Verifying - Enter PEM? ? ? ? ? ? ? ? ? pass phrase:的時(shí)候醇份,要輸入兩次一樣的密碼稼锅,這個(gè)密碼要提供給服務(wù)器
? ? ? ? 3.執(zhí)行cat apns_dev_cert.pem apns_dev_privateKey> apns-dev.pem 命令生成apns_dev.pem文件,此文件鏈接Apns時(shí)使用
? ? 四僚纷、證書驗(yàn)證
? ? ? ? ? 1.執(zhí)行openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns_dev.pem命令矩距,如果出現(xiàn)大片字符
則驗(yàn)證成功,如果提示unable to load client certificate private key file怖竭,則您的pem生成有問(wèn)題(有可能是您生成apns_dev_privateKey.pem的命令參數(shù)有問(wèn)題)
二锥债、獲取deviceToken
1.在applicationDidFinishLaunching中注冊(cè)遠(yuǎn)程通知
2.在didRegisterForRemoteNotificationsWithDeviceToken解析deviceToken
三痊臭、node.js
?????1.安裝node.js
????????????1. 下載地址:https://nodejs.org;
????2.安裝apn
? ????????? 1.終端執(zhí)行 sudo npm install apn
? ? ? ? ? ?2. 可能出現(xiàn)的錯(cuò)誤哮肚,及解決方法
? ? ? ? ? ? ? 1. no such file or directory, open '~/package.json' 找不到package.json文件;執(zhí)行npm init命令
? ? ? ? ? ? ? 2.npm WARN ls@1.0.0 No description? npm WARN ls@1.0.0 No repository field.打開package.json,添加兩個(gè)key
????3.配置node_modules環(huán)境變量
? ? ? ? 1.進(jìn)入當(dāng)前用戶目錄終端執(zhí)行:$ touch ~/.bash_profile創(chuàng)建.bash_profile文件
? ? ? ? 2.打開.bash_profile文件广匙,添加以下內(nèi)容并保存export NODE_PATH=/usr/local/lib/node_modules/
? ? ?4.創(chuàng)建編輯js文件
? ? ? ? ? ? ?"use strict";
????????????const apn = require("apn");
????????????// token 數(shù)組
????????????let tokens = ["d4e356af1b3b4624fb0cde4bf6c6ff5264b4a0506161df1b95c6825ea17b4150"]; //獲取的token
????????????let service = new apn.Provider({
????????????cert: "/你電腦上的絕對(duì)路徑/apns-dev-cert.pem",
????????????key: "/你電腦上的絕對(duì)路徑/apns-dev-key.pem",
????????????gateway: "gateway.sandbox.push.apple.com",
????????????// gateway: "gateway.push.apple.com"; 線上地址? port: 2195, 端口
????????????passphrase: "123456" //pem證書密碼 });
????????????let note = new apn.Notification({
? ????????????? alert:? "Breaking News: I just sent my first Push Notification",
????????????});
????????????// 主題 一般取應(yīng)用標(biāo)識(shí)符(bundle identifier)
????????????note.topic = "testApns.com"
????????????console.log(`Sending: ${note.compile()} to ${tokens}`);
????????????service.send(note, tokens).then( result => {
? ? ????????console.log("sent:", result.sent.length);
? ????????? console.log("failed:", result.failed.length);
? ? ????????console.log(result.failed);
????????????});
????????????service.shutdown();
? ? 5.執(zhí)行js文件
1.在終端執(zhí)行? node APNS.js允趟,等待幾秒,通知就發(fā)送到您的應(yīng)用程序了
更多關(guān)于apn的介紹看這里:https://github.com/node-apn/node-apn