技术文章分类(180)

技术随笔(11)

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

我先来说一下我对原理的理解:

移动设备一联网或者更换网络,都会把该网络的公网和路由的地址和端口,以及设备的信息请求到apns,这样苹果服务器apns就可以根据设备id找到ip地址。

那么,在以上的基础上,一旦我们自己的服务器向apns发送消息,该消息携带指向目标设备和目标app等信息,apns接收到新消息准备推送,他就可以跟据该消息指向的设备找到ip地址,给该地址推送消息。

手机接收到消息,会根据消息携带的信息判断是属于哪个app的,所以在点击推送消息的时候会启动相应的app

 

 

友盟推送:

开发测试时推送(必须在真机上),这里以下的操作,最好是在已经完成真机测试了,再进行以下操作:

1,在苹果开发者中心,添加app ids,然后添加APNS Development Cer,下载安装,并导出.p12;创建developmentProfiles,运行。

2,用.p12在 http://message.umeng.com/appList 中添加应用,复制appkey(后面会用到)

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

- (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复制过去。然后差不多就可以了

 

以上有很多步骤省略了,大体意思应该能明白。

 

 

百度推送:

首先注意,百度推送是个坑,我建议使用友盟推送,但是为了统一,我才使用百度推送。

为什么是坑呢,因为百度有两种推送,有一种不是我们用的,但是却混淆在一起。

请在: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为你现在使用的开发者账号。

posted @ 2014-09-06 15:17  坤哥MartinLi  阅读(2532)  评论(0编辑  收藏  举报