第一次使用友盟的推送,简单的整理一下集成及使用的过程。

集成之前, 请在http://push.umeng.com/申请开通【友盟+】消息推送服务,创建应用获得AppKey和AppSecret,并且将配置好的.p12推送证书(开发、生产)上传。

1.下载SDK http://dev.umeng.com/push/ios/sdk-download

2.把SDK文件夹UMessage_Sdk_1.5.0a拖入工程目录结构中,在弹出的界面中记得勾选Copy items if needed

3.点击项目-> TARGET-> Build Phases-> Link Binary With Libraries->左下方的+号->搜索UserNotifications->选中UserNotifications.framework->点击Add

4.点击项目-> TARGET-> Capabilities,打开Push Notification的开关,编译下项目如果没有错继续下面

5.来到AppDelegate.m,导入头文件#import"UMessage.h",#import<UserNotifications/UserNotifications.h>

6.设置代理<UNUserNotificationCenterDelegate>

7.didFinishLaunchingWithOptions:方法里设置代码如下:

[UMessage startWithAppkey:@"你自己申请的Appkey "launchOptions:launchOptions];


[UMessage registerForRemoteNotifications];


//iOS10必须加下面这段代码。


UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];


center.delegate=self;


UNAuthorizationOptions types10 = UNAuthorizationOptionBadge|UNAuthorizationOptionAlert|UNAuthorizationOptionSound;


[center requestAuthorizationWithOptions:types10 completionHandler:^(BOOLgranted,NSError*_Nullableerror) {


if(granted) {


//点击允许


}else{


//点击不允许


}


 }];


//打开日志,方便调试


[UMessage setLogEnabled:YES];



8.didRegisterForRemoteNotificationsWithDeviceToken:方法中获取deviceToken,代码如下

- (void)application:(UIApplication*)application


didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{


NSString*token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"<"withString:@""] stringByReplacingOccurrencesOfString:@">"withString:@""] stringByReplacingOccurrencesOfString:@" "withString:@""];
//保存token登录时传给后台
NSLog(@"token==%@",token);


}




9.iOS10以下接收通知的代码

- (void)application:(UIApplication*)application


didReceiveRemoteNotification:(NSDictionary*)userInfo{


//关闭友盟自带的弹出框


[UMessage setAutoAlert:NO];


[UMessage didReceiveRemoteNotification:userInfo];


NSString *body =@"";


NSString *title =@"";


if([[[userInfo objectForKey:@"aps"] objectForKey:@"alert"] isKindOfClass:[NSDictionary class]]) {


NSDictionary *pushName = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];


body = pushName[@"body"];


title = pushName[@"title"];


}


在前台定制自定的的弹出框(看需求)


if([UIApplication sharedApplication].applicationState == UIApplicationStateActive)


{


//可以发送通知做自己需要的事情


[[NSNotificationCenter defaultCenter] postNotificationName:@"userInfoNotification"object:self userInfo:userInfo];


UIAlertView*alertView = [[UIAlertView alloc] initWithTitle:title message:body delegate:self cancelButtonTitle:@"稍后" otherButtonTitles:@"立即查看",nil];


//点击立即查看可以处理跳转到指定需求界面的逻辑


[alertView show];


return;


}else if(application.applicationState == UIApplicationStateInactive){


//从后台点击进来处理跳转界面的逻辑(看需求)


}


}


10.iOS10以上接收通知的代码

//iOS10新增:处理前台收到通知的代理方法


- (void)userNotificationCenter:(UNUserNotificationCenter*)center willPresentNotification:(UNNotification*)notification withCompletionHandler:(void(^)(UNNotificationPresentationOptions))completionHandler{


NSDictionary* userInfo = notification.request.content.userInfo;


if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {


//应用处于前台时的远程推送接受,可以发送通知来刷新新订单等,看自己需求。不需要可以什么都不做


[[NSNotificationCenter defaultCenter] postNotificationName:@"userInfoNotification" object:self userInfo:userInfo];


//关闭U-Push自带的弹出框


[UMessage setAutoAlert:NO];


//必须加这句代码


[UMessage didReceiveRemoteNotification:userInfo];


}else{


//应用处于前台时的本地推送接受


}


//当应用处于前台时提示设置,需要哪个可以设置哪一个


completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);


}


//iOS10新增:处理后台点击通知的代理方法


- (void)userNotificationCenter:(UNUserNotificationCenter*)center didReceiveNotificationResponse:(UNNotificationResponse*)response withCompletionHandler:(void(^)(void))completionHandler{


NSDictionary* userInfo = response.notification.request.content.userInfo;


if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {


//应用处于后台时的远程推送接受


if(!self.remoteNotification) {//应用没有杀死时调用下面发送通知消息做事


[[NSNotificationCenter defaultCenter] postNotificationName:@"userInfoNotification" object:self userInfo:userInfo];


//在这可以处理界面跳转


}


//必须加这句代码


[UMessage didReceiveRemoteNotification:userInfo];


}else{


//应用处于后台时的本地推送接受


}


}




最后在友盟控制台添加测试设备,在测试模式下发消息就可以调试了。