iOS 友盟推送通知使用教程
作者:AustinKuture
摘要: 应用中由于系统消息或者即时通讯等功能,经常会用到推送通知,
本篇文章主要讲解如何使用友盟第三方配置到项目中,
最终实现从后台服务器或者友盟服务端进行消息的推送通知.
iOS项目中如果要加入推送通知的功能,首先得在开发者中心创建App IDs的时候勾选Push Notifications 的Development 与 Distribution 两个选项开通推送通知的功能,目前网络上有很多关于在开发者中心创建项目证书的博文,对于证书的申请及配置本篇文章不再做过多的介绍。
一,友盟上创建项目并导入开发证书与生产证书
进入友盟官网http://push.umeng.com申请账号并登陆,进入消息推送模块创建应用,根据需要填入相应信息。开发者证书与生产证书创建完成后,需要下载到本地并双击打开,进入钥匙串,找到开发证书与生产证书分别右击导出,输入密码后保存起来。在友盟已经创建的项目中分别上传之前保存的开发证书与生产证书,并输入密码,两个顺序不要弄错,完成后点保存即可。如下图所示:
二,下载并导入SDK
1,下载友盟最新的SDKhttp://dev.umeng.com/push/ios/sdk-download找到SDK文件夹UMessagesdkxx导入到项目中,导入完成后添加库文件UserNotification.framwork
2,打开推送开关:
target->Capbilities->Push Notifications
需要后台静默通知的话,可以打开以下运程推送:
3,添加代码
打开AppDelegate.m导入以下头文件:
#import "UMessage.h"
#import "UserNotifications/UserNotifications.h"
在didFinishLaunchingWithOptions方法中添加以下方法:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[UMessage startWithAppkey:@"5850f2d0310c9364a80018a8" launchOptions:launchOptions httpsenable:YES ];
//注册通知
[UMessage registerForRemoteNotifications];
//iOS10必须加下面这段代码。
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate=self;
UNAuthorizationOptions types10=UNAuthorizationOptionBadge| UNAuthorizationOptionAlert|UNAuthorizationOptionSound;
[center requestAuthorizationWithOptions:types10 completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
//点击允许
//这里可以添加一些自己的逻辑
MyLog(@"One");
} else {
//点击不允许
//这里可以添加一些自己的逻辑
MyLog(@"Two");
}
}];
//打开日志,方便调试
[UMessage setLogEnabled:YES];
}
4,处理运程,前台及后台通知的方法:
//远程推送通知的接收
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
MyLog(@"后台远程推送通知:%@",userInfo);
//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]]) {
//应用处于前台时的远程推送接受
//关闭友盟自带的弹出框
[UMessage setAutoAlert:NO];
//必须加这句代码
[UMessage didReceiveRemoteNotification:userInfo];
MyLog(@"前台远程推送通知:%@",userInfo);
}else{
//应用处于前台时的本地推送接受
MyLog(@"Four");
}
//当应用处于前台时提示设置,需要哪个可以设置哪一个
completionHandler(UNNotificationPresentationOptionSound|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionAlert);
}
//iOS10新增:处理后台点击通知的代理方法
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler{
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
//应用处于后台时的远程推送接受
//必须加这句代码
[UMessage didReceiveRemoteNotification:userInfo];
MyLog(@"后台推送通知:%@",userInfo);
MyLog(@"Six");
}
}