ios推送(友盟推送,百度推送,極光推送)

我先來講一下我對原理的理解:php

移動設備一聯網或者更換網絡,都會把該網絡的公網和路由的地址和端口,以及設備的信息請求到apns,這樣蘋果服務器apns就能夠根據設備id找到ip地址。java

那麼,在以上的基礎上,一旦咱們本身的服務器向apns發送消息,該消息攜帶指向目標設備和目標app等信息,apns接收到新消息準備推送,他就能夠跟據該消息指向的設備找到ip地址,給該地址推送消息。ios

手機接收到消息,會根據消息攜帶的信息判斷是屬於哪一個app的,因此在點擊推送消息的時候會啓動相應的app服務器

 

 

友盟推送:網絡

開發測試時推送(必須在真機上),這裏如下的操做,最好是在已經完成真機測試了,再進行如下操做:app

1,在蘋果開發者中心,添加app ids,而後添加APNS Development Cer,下載安裝,並導出.p12;建立developmentProfiles,運行。ide

2,用.p12在 http://message.umeng.com/appList 中添加應用,複製appkey(後面會用到)測試

3,下載sdk  http://dev.umeng.com/message/ios/sdk-download,導入sdk,在appDelegate.m中添加:ui

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"%@",token);
    [UMessage registerDeviceToken:deviceToken];
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    [UMessage didReceiveRemoteNotification:userInfo];
}

 

4,回到第2步,http://message.umeng.com/540aaa38fd98c5727c021ac9/device ,添加設備,把在控制檯打印的deviceToken複製過去。而後差很少就能夠了spa

 

以上有不少步驟省略了,大致意思應該能明白。

 

 

百度推送:

首先注意,百度推送是個坑,我建議使用友盟推送,可是爲了統一,我才使用百度推送。

爲何是坑呢,由於百度有兩種推送,有一種不是咱們用的,可是卻混淆在一塊兒。

請在:http://developer.baidu.com/console#app/project 建立工程;並拿到key,

並且開發文檔也有2套,注意是這一套:http://developer.baidu.com/wiki/index.php?title=docs/cplat/push/guideios

另外:文檔中要注意的是:

添加SDK到APP工程。

1. 將libBPush.a和BPush.h添加到Xcode工程

2. 添加JSONKit.m和JSONKit.h到Xcode工程,注意百度推送提供的JSONKit.m須要設置-fno-objc-arc,以兼容arc

3,添加CoreTelephony.framework到工程

 

草,如今還不能支持ios8,ios8都出來3個多月了

 

激光推送

也是個坑,總之有兩個地方坑了我。

1,我是用pods導入的JPush庫,會報錯

Undefined symbols for architecture armv7: "_OBJC_CLASS_$_UIUserNotificationSettings"

緣由,pods下好的一個libPushSDK-1.8.2.a庫文件須要手動導入。

2,我是用的多個開發者帳號同時開發,會報錯

Not get deviceToken yet. Maybe: your certificate not configured APNs

或者

did Fail To Register For Remote Notifications With Error: Error Domain=NSCocoaErrorDomain Code=3000 "未找到應用程序的「aps-environment」的權利字符串" UserInfo=0x1c55e000

官網解釋:http://docs.jpush.cn/pages/viewpage.action?pageId=7864782#iOS常見問題-爲何啓動的時候出現DidFailToRegisterForRemoteNotificationsWithError的錯誤

很系統,可是漏掉了我這種狀況。

還須要設置Code signing identity爲你如今使用的開發者帳號。

相關文章
相關標籤/搜索