极光推送接收消息注解
1、应用已经加载完成
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//在此方法最开头写下
if (launchOptions!=nil) {
NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
NSLog(@"usinf%@",userInfo);
}
userInfo 就是 在程序完全杀死的情况下所接受到的推送消息(用户一定要点击推送通知后进入应用才能获取userInfo里面的内容,且是一个字典形式的)
2、程序进入后台
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
在此方法写下
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
再接收userInfo
(userInfo 就是 在程序进入后台的情况下所接受到的推送消息)
3、userInfo 就是 在程序运行的情况下所接受到的推送消息
程序正在运行时接受推送消息
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
NSDictionary * userInfo = notification.request.content.userInfo;
UNNotificationRequest *request = notification.request; // 收到推送的请求
UNNotificationContent *content = request.content; // 收到推送的消息内容
NSNumber *badge = content.badge; // 推送消息的角标
NSString *body = content.body; // 推送消息体
UNNotificationSound *sound = content.sound; // 推送消息的声音
NSString *subtitle = content.subtitle; // 推送消息的副标题
NSString *title = content.title; // 推送消息的标题
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
NSLog(@"iOS10 前台收到远程通知:%@", userInfo);
}
else {
// 判断为本地通知
NSLog(@"iOS10 前台收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
}
completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert); // 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以设置
}
4、userInfo 就是 在程序运行的情况且用户点击推送通知的情况下所接受到的推送消息,此方法和开头第一个解释的方法虽然都是用户点击接受消息,但是系统会自行判断app运行状态,所以两个方法只会执行其中一个)
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
NSDictionary * userInfo = response.notification.request.content.userInfo;
UNNotificationRequest *request = response.notification.request; // 收到推送的请求
UNNotificationContent *content = request.content; // 收到推送的消息内容
NSNumber *badge = content.badge; // 推送消息的角标
NSString *body = content.body; // 推送消息体
UNNotificationSound *sound = content.sound; // 推送消息的声音
NSString *subtitle = content.subtitle; // 推送消息的副标题
NSString *title = content.title; // 推送消息的标题
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
NSLog(@"iOS10 收到远程通知:%@", [self logDic:userInfo]);
// [rootViewController addNotificationCount];
}
else {
// 判断为本地通知
NSLog(@"iOS10 收到本地通知:{\nbody:%@,\ntitle:%@,\nsubtitle:%@,\nbadge:%@,\nsound:%@,\nuserInfo:%@\n}",body,title,subtitle,badge,sound,userInfo);
}
completionHandler(); // 系统要求执行这个方法
}
5、接收自定义消息 要添加观察者
- (void)networkDidReceiveMessage:(NSNotification *)notification
{
此方法为接受自定义消息(系统只能接受不会自动跳出推送框,如果要跳出推送框需要程序员手动给自己发极光本地推送,并且此方法只能app运行时才能接受,程序杀死的情况下是接受不到的,有需要用户下一次运行app时才能接受到自定义消息)
NSDictionary * userInfo = [notification userInfo];
NSString * title = [userInfo valueForKey:@"title"];
NSString * content = [userInfo valueForKey:@"content"];
NSLog(@"%@",userInfo);
上面为自定义消息的 标题,文本内容。
下面是用户接受到自定义消息后自己给自己发本地推送的具体代码(如果有需要就写,不用就不要写)
//创建 content2 为自己给自己发的文本内容
JPushNotificationContent *content2 = [[JPushNotificationContent alloc] init];
content2.body = content;
//给content2赋值(自己给自己发文本内容,就是上面自定义的content)
content2.badge = @(1);
content2.action = @"a";
content2.userInfo=userInfo; userInfo也是自定义消息的userinfo
JPushNotificationTrigger *trigger = [[JPushNotificationTrigger alloc] init];
NSDate * datea =[[NSDate alloc]init];
NSDate *lastDay = [NSDate dateWithTimeInterval:5 sinceDate:datea];
!!!!//这边设置自己给自己发推送的时间,一定要设置延迟(不然获取当前时间是不可以接受到的,我这里延迟五秒)
trigger.timeInterval=[lastDay timeIntervalSinceNow];
下面为本地推送内容设置requset
JPushNotificationRequest *request = [[JPushNotificationRequest alloc] init];
request.content = content2;
request.trigger = trigger;
NSUserDefaults * dft =[NSUserDefaults standardUserDefaults];
request.requestIdentifier = [NSString stringWithFormat:@"user_id_%@",[dft objectForKey:@"user_id”]];//我自己的requestIdentifier就是自己项目部的user_id
request.completionHandler = ^(id result) {
// iOS10以上成功则result为UNNotificationRequest对象,失败则result为nil;iOS10以下成功result为UILocalNotification对象,失败则result为nil
_notification = result;
if (result) {
void (^block)() = ^() {
};
if ([NSThread isMainThread]) {
block();
}
else {
dispatch_async(dispatch_get_main_queue(), block);
}
}
};
[JPUSHService addNotification:request];
}
注意:在接受自定义消息的时候,需要添加观察者,如下:
NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(networkDidReceiveMessage:)
name:kJPFNetworkDidReceiveMessageNotification
object:nil];
这句话要写在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 里面