hubilder打包+C#服務端個推服務實現

nd發表於2017-03-13

 

關於推送鼓搗了好長時間,這裡不再寫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# 推送模板,截圖如下:

好了就這麼多,各位大神如果看到那裡有不對的地方希望指出來。謝謝!

 

相關文章