iOS原⽣推送(APNS)的实现
1.前期准备⼯作留学申请
四六级报名官网入口这两个创建⼀个即可实现推送。这两个创建⼀个即可实现推
这两个创建⼀个即可实现推创建你的APNs keys 或者 创建推送证书,这两个创建⼀个即可实现推送。这两个创建⼀个即可实现推送。
创建你的APNs keys 或者 创建推送证书,这两个创建⼀个即可实现推送。
重要的事情说三遍,我看评论区有⼩伙伴误解。
送。重要的事情说三遍,我看评论区有⼩伙伴误解。
送。
phenomenon1. 创建你的APNs keys
⾸先来到你的开发者 Certificates, Identifiers & Profiles—>Keys—>点击+号,如下图
分别填写key的name,勾选⽤途,点击continue,如下图
然后点击confrim—> Download这⾥需要注意你下载好keys的.p8⽂件后⼀定要保存好,因为他只能下载⼀次。然后把keys的.p8交给后台⽤做
2013高考英语全国卷推送。如果你是通过创建APNS keys 的形式,⾄此准备⼯作结束。
2. 证书的创建
(1.)进⼊苹果Apple Developer -> Member Center -> Certificates, Identifiers & Profiles – >Identifiers - >App IDs–>Edit
如上图所⽰,勾选Push Notifications,然后点击下⾯的Create Certificate,分别创建测试环境与⽣产环境的SSL推送证书。
(2)⽤证书⽂件与私钥合成.pem⽂件给后台的同学
foreigner完成第(1)步后,然后在进⼊苹果Apple Developer -> Member Center -> Certificates, Identifiers & Profiles – >Certificates,找到刚才的推送证书然后下载->双击安装。在钥匙串中找到这两个证书(production&developerment)。分别导出.p12⽂件(证书的p12与密钥的p12),如下图。
得到证书的p12与密钥的p12后,打开命令⾏把p12⽂件转化为.pem⽂件
假设我的证书的p12与密钥的p12
分别命名为:apns-dev-cert.p12;apns-dev-key.p12
⾸先cd到这两个⽂件的⽬录下,使⽤下⾯的命令分别得到apns-dev-cert.pem; apns-dev-key.pem;
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12
然后再⽤apns-dev-cert.pem; apns-dev-key.pem;合成最终后台可以⽤来推送的apns-dev.pem⽂件。你把apns-dev.pem⽂件交给后台的⼩伙伴就可以了。
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem
production环境的.pem与developerment⼀样。
这篇⽂章 详细的介绍了.pem如何制作的。
2.实现推送
打开你的项⽬->capabilication打开push notifications与background Modes,勾选最后⼀个remote notifications。
abracadabra
如果是iOS10以上版本还需要引⼊UrNotifications.framework、UrNotificationsUI.framework这两个framework
然后再application引⼊头⽂件#import <UrNotifications/UrNotifications.h>
(1)注册推送
if (IOS_VERSION >= 10.0) {
UNUrNotificationCenter * center = [UNUrNotificationCenter currentNotificationCenter];
[center tDelegate:lf];
UNAuthorizationOptions type =
UNAuthorizationOptionBadge|UNAuthorizationOptionSound|UNAuthorizationOptionAlert;
i do 歌词[center requestAuthorizationWithOptions:type completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
DBLog(@"注册成功");
男人穿衣}el{
DBLog(@"注册失败");
}
}];wvga
}el if (IOS_VERSION >= 8.0){
UIUrNotificationType notificationTypes = UIUrNotificationTypeBadge |
UIUrNotificationTypeSound |
UIUrNotificationTypeAlert;
UIUrNotificationSettings *ttings = [UIUrNotificationSettings ttingsForTypes:notificationTypes categories:nil];
[application registerUrNotificationSettings:ttings];
}el{//ios8⼀下
UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
}
// 注册获得device Token
[application registerForRemoteNotifications];
在application⾥⾯的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {}
中添加上⾯的代码。
(2)获取Token
// 将得到的deviceToken传给SDKsavagegarden
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSString *deviceTokenStr = [[[[deviceToken description]
stringByReplacingOccurrencesOfString:@"<" withString:@""]
stringByReplacingOccurrencesOfString:@">" withString:@""]
stringByReplacingOccurrencesOfString:@" " withString:@""];
NSLog(@"deviceTokenStr:\n%@",deviceTokenStr);
}
// 注册deviceToken失败
-
(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
NSLog(@"error -- %@",error);
}
在application⾥⾯的添加上⾯两个⽅法。然后再获取设备token成功的⽅法⾥⾯,我们需要把获取到的设备的token发送给后台,然后后台拿token去推送。
(3)处理推送过来的消息
1.iOS10以上版本的处理
//在前台
- (void)urNotificationCenter:(UNUrNotificationCenter *)center willPrentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPrentationOptions))completionHandler{
// 需要执⾏这个⽅法,选择是否提醒⽤户,有Badge、Sound、Alert三种类型可以设置