天天看點

iOS內建極光推送 生産環境收不到推送消息

最近項目需要完善使用者賬号登入的唯一性,于是極光推送就又要被內建了(根據推送來的消息判斷賬号在其他裝置登入)。內建過程自然很輕松參照:https://docs.jiguang.cn/jpush/client/iOS/ios_sdk/

但是! 怎麼會那麼順利嘛,問題接踵而至!由于要給裝置發送自定義消息來通知使用者在其他裝置登入,這裡就需要一個唯一的辨別符,可以用tags(NSeet類型标簽)、或者a’lias。

[JPUSHService setTags:nil alias:str callbackSelector:@selector(tagsAliasCallback:tags:alias:) object:self];//我們用的alias别名!

//下面這個是回調,可以看到你的别名是否設定成功,如果成功code傳回為0,最常見的錯誤是6002 和6005 ,即标簽或别名内容不合格或者設定逾時,反正按照标準來改就好啦。

- (void)tagsAliasCallback:(int)iResCode

tags:(NSSet *)tags

alias:(NSString *)alias {

NSString *callbackString =

[NSString stringWithFormat:@”%d, \ntags: %@, \nalias: %@\n”, iResCode,

[self logSet:tags], alias];

NSLog(@”TagsAlias回調main:%@”, callbackString);

}

- (NSString )logSet:(NSSet )dic {

if (![dic count]) {

return nil;

}

NSString *tempStr1 =

[[dic description] stringByReplacingOccurrencesOfString:@”\u”

withString:@”\U”];

NSString *tempStr2 =

[tempStr1 stringByReplacingOccurrencesOfString:@”\”” withString:@”\\”“];

NSString *tempStr3 =

[[@”\”” stringByAppendingString:tempStr2] stringByAppendingString:@”\”“];

NSData *tempData = [tempStr3 dataUsingEncoding:NSUTF8StringEncoding];

NSString *str =

[NSPropertyListSerialization propertyListFromData:tempData

mutabilityOption:NSPropertyListImmutable

format:NULL

errorDescription:NULL];

return str;

}

OK! 别名也設定了,極光也內建了,下面就是見證奇迹的時刻!于是我興高采烈的拿兩部iPhone輪流登入同一賬号,But!推送收不到!收不到!于是我隻有去極光背景自己發消息驗證一下。選擇通知-生産環境-别名-發送! OK 發送成功,but等了好久,手機還是沒收到消息,打開推送記錄一看,目标位0,這是什麼鬼,此刻内心一萬匹草泥馬奔騰而過!然後就準備掄起代碼操一頓!無意一看發現問題所在!

在最初極光內建注冊的原始代碼中 有一個注冊AppKey的方法

[JPUSHService setupWithOption:launchOptions appKey:@”4xxxxxxxxxx3c4c9b1a9”

channel:@””

apsForProduction:0

advertisingIdentifier:advertisingId];

注意看,這個方法中apsForProduction在官方API是這麼解釋的

* @param isProduction 是否生産環境. 如果為開發狀态,設定為 NO; 如果為生産狀态,應改為 YES.

由于最開始直接拷貝粘貼的開發文檔中的代碼,是以導緻預設為内部測試的開發環境ios-dev,但是我們背景給開的使生産環境ios-product,我自己發的也是生産環境,難怪發送目标位0,沒有對應平台他往哪裡發嘛,跟背景溝通之後我将自己注冊極光時候的apsForProduction改為YES!再次嘗試!ok大功告成!

*

在網上也看到很多類似問題和極光的一些文章,這裡貼出幾個個相對詳細的供大家參考

http://www.jianshu.com/p/0d382c4d98ff(生産環境收不到消息)

http://www.jianshu.com/p/c2592540a335(生産證書和開發證書的生成 【推送】)

http://www.jianshu.com/p/eaf07c4372a8(點選推送消息跳轉至相應界面)

http://www.cnblogs.com/zk1947/p/6080722.html(收到消息後對消息的處理小結)

6月8日補充:

今天發現另一種情況,現在基本上都用的xcode8以上版本,xcode8以上都有一個新特性,就是自動選擇證書,不貼圖想必大家也知道我說的是什麼。

這裡就要說明,再未使用到極光之前,我們為了真機調試,用到PP(Provisioning Profile)檔案可能大都是開發證書,但是一個包在一個裝置上隻可能對應一種環境,如果你的應用裝到手機上是開發環境,那說明對應的就是開發環境的證書打包的應用,當然就不可能收到生産環境的推送了。

這裡我們需要管道蘋果開發者中心https://developer.apple.com在該項目對應的APPID下建立一個生産環境的PP證書(俗話說齒輪檔案),然後down下來,輕按兩下打開。到這裡基本上就替換成功可以了。

補充一點:可能在使用真機調試的時候還是無法收到,這是因為之前打包過開發證書對應的應用,我們可以打包API,打包的時候選第二個Ad Hoc,然後通過iTunes安裝到手機,在調試,OK消息穩穩的接收!