iOS 消息推送(UserNotifications)

iOS 消息推送 

之前没怎么关注 这块 今天要做消息推送  就做个记录 也算是知识的总结啦 

理一理头绪  我们要做这件事 要哪些东西 

1.请求证书 

2.Xcode 打开 接受通知机制 (下面会配图的)

3.NWPusher (测试用的)

其他的兴趣 你们自己了解 我只介绍如何实现消息推送

一 开始下载配置证书

https://developer.apple.com/account/ios/certificate/  (直接进入 证书界面)

上面写的明白 检查一下自己要开发的App ID 在不在里面 

如果没有 自己添加一个



这里也是填写你要用到的id
必须勾选上

创建完成之后  回到刚才的页面 点击刚才创建的 ID 

没有配置证书都是 黄色的  点击edit 进入 
勾选上

我们开始请求证书  首先要打开钥匙串🔑

钥匙串访问 -> 证书助理 -> 从证书颁发机构请求证书..


邮箱我瞎写的 忽略
知道放到哪里去了 直接保存就好了

好了 我们继续生成开发环境下的证书

一直点击下一步 你会看到
选择你刚才创建的文件 
生成后 直接下载 双击安装就好了 可以在钥匙串里面找到 

相同的方法 请求发布版的证书 这里我就不多重复了

在Keychain Access.app里选定这个新证书(Apple Development Push Services*),导出到桌面,保存为Certificates.p12.

终端上执行 打包证书

openssl pkcs12 -clcerts -nokeys -out cert.pem -in Certificates.p12

openssl pkcs12 -nocerts -out key.pem -in Certificates.p12

openssl rsa -in key.pem -out key.unencrypted.pem

cat cert.pem key.unencrypted.pem > ck.pem


下载 NWPusher 


使用界面就是这样的 很简单,但是对应的正式不要搞错了 下面的token 是苹果返回的 

看代码

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(nonnull NSData *)deviceToken

{

NSLog(@"deviceToken:%@",deviceToken);

NSString *deviceTokenStr = [[[[deviceToken description]

stringByReplacingOccurrencesOfString:@"<" withString:@""]

stringByReplacingOccurrencesOfString:@">" withString:@""]

stringByReplacingOccurrencesOfString:@" " withString:@""];

NSLog(@"deviceTokenStr:%@",deviceTokenStr);

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{

NSLog(@"didFailToRegisterForRemoteNotificationsWithError:%@",error);

}

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

NSLog(@"willPresentNotification:%@",notification.request.content.title);

// 这里真实需要处理交互的地方

// 获取通知所带的数据

NSString *apsContent = [notification.request.content.userInfo objectForKey:@"aps"];

NSLog(@"%@",apsContent);

}

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

//在没有启动本App时,收到服务器推送消息,下拉消息会有快捷回复的按钮,点击按钮后调用的方法,根据identifier来判断点击的哪个按钮

NSString *apsContent = [response.notification.request.content.userInfo objectForKey:@"aps"];

NSLog(@"didReceiveNotificationResponse:%@",response.notification.request.content.title);

NSLog(@"%@",apsContent);

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}

//远程推送APP在前台

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{

NSLog(@"didReceiveRemoteNotification:%@",userInfo);

}

- (void)setUpCategory

{

UNNotificationAction *action1 = [UNNotificationAction actionWithIdentifier:@"enterApp" title:@"进入应用" options:UNNotificationActionOptionForeground];

UNNotificationAction *action2 = [UNNotificationAction actionWithIdentifier:@"destructive" title:@"忽略" options:UNNotificationActionOptionDestructive];

//UNNotificationCategory *category = [UNNotificationCategory categoryWithIdentifier:@"helloIdentifier" actions:@[action1,action2] minimalActions:@[action1,action2] intentIdentifiers:@[] options:UNNotificationCategoryOptionNone];

UNNotificationCategory *caregory = [UNNotificationCategory categoryWithIdentifier:@"helloIdentifier" actions:@[action1,action2] intentIdentifiers:@[action1,action2] options:UNNotificationCategoryOptionNone];

[[UNUserNotificationCenter currentNotificationCenter] setNotificationCategories:[NSSet setWithObjects:caregory, nil]];

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

// iOS10 下需要使用新的 API

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) {

#ifdef NSFoundationVersionNumber_iOS_9_x_Max

UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];

[center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge)

completionHandler:^(BOOL granted, NSError * _Nullable error) {

// Enable or disable features based on authorization.

if (granted) {

[application registerForRemoteNotifications];

}

}];

center.delegate = self;

#endif

}

else if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {

UIUserNotificationType myTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;

UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:myTypes categories:nil];

[[UIApplication sharedApplication] registerUserNotificationSettings:settings];

}

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if (userInfo) {

NSLog(@"从消息启动:%@",userInfo);

//        [BPush handleNotification:userInfo];

}

//角标清0

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

return YES;

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

NSLog(@"didReceiveRemoteNotification : %@",userInfo);

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{

NSLog(@"notification : %@",notification);

}


- (void)applicationDidBecomeActive:(UIApplication *)application //后台切换到前台的 或者应用激活的时候调用

{

// 清除图标数字

application.applicationIconBadgeNumber = 0;

}


下面开始 Xcode 里面的设置


后台设置 


关于消息推送和服务器的交互 还有角标的清除 我会在下篇文章里面介绍 谢谢
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容