第一次使用友盟的推送,简单的整理一下集成及使用的过程。
集成之前, 请在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{
//应用处于后台时的本地推送接受
}
}
最后在友盟控制台添加测试设备,在测试模式下发消息就可以调试了。