1.创建应用
在友盟有账号的情况下(没有的请自行创建),创建应用之前需要去苹果开发者网站申请一个App ID和配置一个用于推送的APNs证书,下载并安装APNs推送证书后,打开钥匙串从这个证书导出一个.P12的证书文件并保存下来用于创建应用。对APNs证书不了解的可以参考宏创学院提供的证书设置指南:
证书配置 友盟官网
首先在友盟消息推送功能中创建一个应用,上传我们的证书:
![7507C623-A227-40A6-99BE-910F558EC8BC](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/7507C623-A227-40A6-99BE-910F558EC8BC.jpg)
创建好应用后进入应用详情页面,点击应用信息,可以看到我们的AppKey和App Master Secret,证书也可以在这里进行修改。
![46D786E4-77F6-4B63-8971-8210C728A586](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/46D786E4-77F6-4B63-8971-8210C728A586.jpg)
2.下载iOS SDK
友盟iOS SDK文档
![1AB4F6CC-8BE0-434D-B070-60DEE6E90020](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/1AB4F6CC-8BE0-434D-B070-60DEE6E90020-1024x430.jpg)
选择合适版本的SDK,下载下来之后解压压缩包,找到UMessage_Sdk_1.2.3(1.2.3为版本号,本文以1.2.3示例) 文件夹,里面就是我们需要的文件了(一个.a的库文件,一个.h头文件)。
![5145DFCB-A91A-46A6-BB86-2258AFFD7DE9](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/5145DFCB-A91A-46A6-BB86-2258AFFD7DE9.jpg)
3.SDK基本功能集成
将上述的UMessage_Sdk_1.2.3文件夹拖入工程,若工程的Other Linker Flag中设置了-all_load,则需要添加libz.dylib(iOS 9为lib.tbd)库
- 在AppDelegate类中引入头文件Message.h,在AppDelegate.m的application:didFinishLaunchingWithOptions方法中初始化并注册友盟推送
- //初始化友盟推送
- [UMessage startWithAppkey:@"568cd65be0f55ac5610017ea" launchOptions:launchOptions];
-
- #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
- //iOS 8之后使用此种方法注册
- if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
- //远程消息注册类型
- UIMutableUserNotificationAction *action1 = [[UIMutableUserNotificationAction alloc] init];
- action1.identifier = @"action1_identifier";
- action1.title=@"Accept";
- action1.activationMode = UIUserNotificationActivationModeForeground;// 当点击的时候启动程序
-
- // 第二按钮
- UIMutableUserNotificationAction *action2 = [[UIMutableUserNotificationAction alloc] init];
- action2.identifier = @"action2_identifier";
- action2.title = @"Reject";
- // 当点击的时候不启动程序,在后台处理
- action2.activationMode = UIUserNotificationActivationModeBackground;
-
- // 需要解锁才能处理,如果action.activationMode = UIUserNotificationActivationModeForeground;则下面这个属性被忽略
- action2.authenticationRequired = YES;
- action2.destructive = YES;
-
- UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
- // 这组动作的唯一标示
- categorys.identifier = @"category1";
- [categorys setActions:@[action1,action2] forContext:(UIUserNotificationActionContextDefault)];
-
- UIUserNotificationType types = UIUserNotificationTypeBadge
- | UIUserNotificationTypeSound
- | UIUserNotificationTypeAlert;
- UIUserNotificationSettings *userSettings = [UIUserNotificationSettings settingsForTypes:types
- categories:[NSSet setWithObject:categorys]];
-
- [UMessage registerRemoteNotificationAndUserNotificationSettings:userSettings];
- } else {
- // 远程消息注册类型
- UIRemoteNotificationType types = UIRemoteNotificationTypeBadge
- | UIRemoteNotificationTypeSound
- | UIRemoteNotificationTypeAlert;
-
- [UMessage registerForRemoteNotificationTypes:types];
- }
-
- #else
- // iOS8.0之前使用此注册
- // 远程消息注册类型
- UIRemoteNotificationType types = UIRemoteNotificationTypeBadge
- | UIRemoteNotificationTypeSound
- | UIRemoteNotificationTypeAlert;
-
- [UMessage registerForRemoteNotificationTypes:types];
-
- #endif
- //打开调试日志
- [UMessage setLogEnabled:YES];
- //不自动清空角标
- [UMessage setBadgeClear:NO];
- //app发送渠道,默认为APP Store
- [UMessage setChannel:nil];
- //向友盟注册deviceToken
- - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
- //打印deviceToken
- NSLog(@"%@",[[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""]
- stringByReplacingOccurrencesOfString: @" " withString: @""]);
- //注册deviceToken
- [UMessage registerDeviceToken:deviceToken];
- }
-
- //注册远程通知失败
- - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
- NSLog(@"注册推送失败,具体错误:%@", error);
- }
-
- //收到推送消息时调用
- - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
- [UMessage didReceiveRemoteNotification:userInfo];
- }
- 如果需要关闭推送,使用[UMessage unregisterForRemoteNotifications]
4.测试与调试
由于使用的是开发环境,所以推送的时候,需要在友盟注册的应用中添加一个测试设备用来测试。将前面的代码集成到项目里以后,使用真机运行项目,提示注册成功后可以在debug信息中看到获取的DeviceToken,将DeviceToken拷贝下来备用。
![7747EA44-ADE2-4614-BEB6-57A94F11B0D1](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/7747EA44-ADE2-4614-BEB6-57A94F11B0D1.jpg)
得到DeviceToken后进入友盟网站,依次执行下面的操作:
消息推送->立即使用->(你的应用)->开发环境->测试设备->添加测试设备
![8A1D48AD-F008-4F53-B67F-10B4351A6054](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/8A1D48AD-F008-4F53-B67F-10B4351A6054.jpg)
设备添加完成后就可以进行推送调试了,在测试消息中点击新建测试消息:
![F6C97491-37A3-4BF5-8DD4-E244E6F700E8](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/F6C97491-37A3-4BF5-8DD4-E244E6F700E8.jpg)
参数和提醒方式自行设置,发送方式选择单播,输入设备的DeviceToken,完成后提交即可:
![6B620FCC-75C0-441B-A079-B3D568685812](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/6B620FCC-75C0-441B-A079-B3D568685812.jpg)
![B6044F72-F50F-4C96-8A16-9F040B9DD7EB](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/B6044F72-F50F-4C96-8A16-9F040B9DD7EB.jpg)
确认后等待推送消息发送即可
![IMG_2882](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/IMG_2882-200x300.png)
![33BC504E1950F86B40240BD393C45E3E](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/33BC504E1950F86B40240BD393C45E3E-200x300.png)
![IMG_2884](http://7xow65.com1.z0.glb.clouddn.com/wp-content/uploads/2016/01/IMG_2884-200x300.png)
至此,消息推送功能基本完成,更多功能请移步友盟iOS SDK集成指南。