關于推送鼓搗了好長時間,這裡不再寫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# 推送模闆,截圖如下:
好了就這麼多,各位大神如果看到那裡有不對的地方希望指出來。謝謝!
作者:
Tyler Ning出處:
http://www.cnblogs.com/tylerdonet/本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,如有問題,可以通過以下郵箱位址
[email protected]聯系我,非常感謝。