關於推送鼓搗了好長時間,這裡不再寫helloworld了,只講裡面遇到的問題。
1.關於蘋果開發者平臺上的註冊
網上很多的教程,只要按照步驟來設定就行了,在 iOS證書(.p12)和描述檔案(.mobileprovision)申請 這篇文章裡面講的很清楚,文章中也說明了,如果要使用推送功能,那麼在申請AppID的時候要選擇“Push Notifications”這個選項。這篇文章說的很詳細,總結下來有下面幾點內容
1.申請蘋果AppID,一個App裡的證書都基於這個AppID
2.生成證書請求檔案,這個檔案必須在蘋果電腦上生成,檔案的字尾是.certSigningRequest,後面要用它來生成證書檔案,就是用CertificateSigningRequest.certSigningRequest檔案生成ios_development.cer檔案
3.生成開發證書,這裡就是要生成ios_development.cer檔案,然後再那這個檔案在蘋果電腦上Kenchain Access中匯出.p12證書檔案
4.新增除錯裝置,這個主要是把測試收集到UUID新增到開發者平臺的Devices列表裡面,後面生成證書描述檔案的時候用到這些裝置
5.申請開發(Development)描述檔案,這裡要選擇前面的AppID,選擇新增的裝置,最後生成了一個development.mobileprovision檔案
6.生成釋出證書,這個主要是為了上架,和步驟3唯一區別是選擇的型別不一樣,前者是Development下面的IOS App Development,後者是Production下的App Store and Ad Hot,同樣要選擇步驟1生成的AppID,但是這裡不用選擇裝置,都上架了,還選擇裝置就不對了。
需要說明的是這篇文章寫的不嚴謹,在建立appid的時候“在“Explicit App ID”欄下的“Bundle ID”項中輸入App ID(使用反向域名格式字串,如“io.dcloud.HBuilderApp”):”在“申請開發(Development)證書和描述檔案”和“申請釋出(Distribution)證書和描述文”的時候樓主寫到:“點選“Continue”按鈕,開啟“App ID”選擇頁面,選擇要使用的“App ID”(如之前建立的“io.dcloud.HBuildApp”),點選“Continue”:” io.dcloud.HBuilderApp 和 io.dcloud.HBuildApp明顯不一樣,他們是一回事,不要受它蠱惑。
需要說明的是這篇文章隻字不提如何生成推送證書,雖然在步驟1生成AppID的時候提示你選擇推送功能,但是還需要生成一個推送證書上傳到個推平臺上,通篇文章都沒有提到。
2.生成推送證書
上面的問題可以在個推開發者平臺上找到答案,蘋果 APNs 配置, 這裡也講到了建立蘋果App ID,這個和上面第一布生成的那個App ID是一回事,不要重複生成,也說了要選中Push Notifications,在第二個環節裡面講到了要建立APNs Push證書,這個很關鍵,他和上面生成釋出證書類似,它也要用到CertificateSigningRequest.certSigningRequest檔案生成ios_push_development.cer這個檔案,再用這個檔案匯出ios_push_development.p12證書檔案,最後把這個證書上傳到個推應用平臺上。如下圖:
注意這篇文章第三個步驟“Provisioning Profile檔案的建立”很有蠱惑性,上來就來一句“建立一個 com.igexin.getui.demo AppID,併為此AppID配置 Push Notifications”,不要被它迷惑就是上面的步驟1,剩下的步驟和上面的步驟5:“申請開發(Development)描述檔案”沒啥區別。總之對一個app來說只要用到AppID,都是同一個。
3.關於平臺配置
這裡沒啥說的,在個推平臺上配置一個應用之後把個推的appid,appkey,appsecret填到hbuilder的manifest.json檔案中即可。
4.關於clientid
剩下的時候就是去個推平臺下載了一個服務端的Demo,我用的是C#版本的,當你實驗第一個例子的時候有pushMessageToApp()這麼一個方法,這個是傳送給某個app,ClientID,注意一定要打包之後獲取這個ClientID,不能在除錯狀態下獲取,也就是不能在hbuilder裡面這樣,然後用console.log列印出來在hbuilder裡面複製。
一定要打包出來用alert彈出來,然後一個一個的敲出來放在C#demo程式裡。如下:
5.關於傳送給特定使用者組
在demo的第一個例子中,手賤把pushMessageToApp()方法體中的
這一句註釋給開啟了,結果死活收不到,注意這個是需要首先用push.setClientTag這個方法設定之後才能按照使用者tags來傳送,如果使用者沒有這個tags是不會收到推送的。把這一句註釋掉就好了。
6.關於透傳訊息+apns
ios系統好像只能使用transmissiontemplate模板+apns推送,所以在構建透傳訊息模板的時候要加上如下一段:
//APN高階推送 開始 APNPayload apnpayload = new APNPayload(); DictionaryAlertMsg alertMsg = new DictionaryAlertMsg(); alertMsg.Body = "Body"; alertMsg.ActionLocKey = "ActionLocKey"; alertMsg.LocKey = "LocKey"; alertMsg.addLocArg("LocArg"); alertMsg.LaunchImage = "LaunchImage"; //iOS8.2支援欄位 alertMsg.Title = "Title"; alertMsg.TitleLocKey = "TitleLocKey"; alertMsg.addTitleLocArg("TitleLocArg"); apnpayload.AlertMsg = alertMsg; apnpayload.Badge = 10; apnpayload.ContentAvailable = 1; //apnpayload.Category = ""; apnpayload.Sound = "test1.wav"; apnpayload.addCustomMsg("payload", "payload"); template.setAPNInfo(apnpayload); //APN高階推送 結束
加好之後整個方法長這樣子:
//透傳模板動作內容 public static TransmissionTemplate TransmissionTemplateDemo() { TransmissionTemplate template = new TransmissionTemplate(); template.AppId = APPID; template.AppKey = APPKEY; //應用啟動型別,1:強制應用啟動 2:等待應用啟動 template.TransmissionType = "1"; //透傳內容 template.TransmissionContent = "透傳內容"; //設定通知定時展示時間,結束時間與開始時間相差需大於6分鐘,訊息推送後,客戶端將在指定時間差內展示訊息(誤差6分鐘) //String begin = "2017-03-13 00:36:10"; //String end = "2017-03-13 23:46:20"; //template.setDuration(begin, end); //APN高階推送 開始 APNPayload apnpayload = new APNPayload(); DictionaryAlertMsg alertMsg = new DictionaryAlertMsg(); alertMsg.Body = "Body"; alertMsg.ActionLocKey = "ActionLocKey"; alertMsg.LocKey = "LocKey"; alertMsg.addLocArg("LocArg"); alertMsg.LaunchImage = "LaunchImage"; //iOS8.2支援欄位 alertMsg.Title = "Title"; alertMsg.TitleLocKey = "TitleLocKey"; alertMsg.addTitleLocArg("TitleLocArg"); apnpayload.AlertMsg = alertMsg; apnpayload.Badge = 10; apnpayload.ContentAvailable = 1; //apnpayload.Category = ""; apnpayload.Sound = "test1.wav"; apnpayload.addCustomMsg("payload", "payload"); template.setAPNInfo(apnpayload); //APN高階推送 結束 return template; }
這一點在個推平臺上有介紹,但是有點隱祕 C# 推送模板,截圖如下:
好了就這麼多,各位大神如果看到那裡有不對的地方希望指出來。謝謝!