一、创建工程
设置Bundle identifier为 com.ali.push (自己可随意设置)
二、打开https://developer.apple.com网址,生成开发环境下的推送证书和描述文件。
进入Member Center后,点击Certificates, Identifiers & Profiles,点击Certificates。
1. 创建App ID(点击Identifiers下的App IDs,点+):
- 填写App ID Description
- Bundle ID:com.ali.push
- 勾选Push Notifications,然后Continue,Submit,Done。
2. 创建推送证书(点击Certificates下的Development,点+):
- 勾选Development下的Apple Push Notification SSL,然后Continue
- App ID: 然后Continue,Continue
- 生成CSR文件:打开钥匙串,点击钥匙串访问,选择证书助理,选择 从证书颁发机构请求证书...,填写用户电子邮件地址,勾选存储到磁盘,点击继续按钮
- 点击Choose File...:选择刚生成的CSR文件,然后Generate
- 点击Download,然后Done
- 双击推送证书,让其加入钥匙串,标识为 com.ali.push
3.创建描述文件(点击Provisioning Profiles下的Development,点+):
- 勾选Development下的iOS App Development,然后continue
- App ID: 然后Continue
- 勾选Select All: 然后Continue
- 勾选Select All: 然后Continue
- 填写Profile Name: 然后Generate
- 点击Download,然后Done
- 双击证书,让其加入Xcode工程
4.生成pem格式的证书
- 打开钥匙串,右键推送证书,导出为一个.p12的文件,存储在桌面,这时要设置证书密码
- 完成上述操作后,打开终端,进入到p12文件所在 cd DeskTop
- 执行命令openssl pkcs12 -in CertificationName.p12 -out CertificationName.pem -nodes,将俩个CertificationName替换为.p12的文件名。
- 输入之前导出证书时设置的证书密码,输入过程中,终端光标不会移动。提示MAC verified OK,文件已经生成,存放在桌面。
// Override point for customization after application launch.
// 注册推送通知
// 取到当前设备, 获取版本号并转货成浮点型
// 判断当前设备的系统版本号 (远程推送在iOS8.0之前和iOS8.0之后的注册方法不一样)
if ([[[UIDevice currentDevice]systemVersion] floatValue] >= 8.0) {
// 注册推送的设置, 可以设置是否有角标, 弹框, 声音
// UIUserNotificationTypeSound 声音
// UIUserNotificationTypeAlert 弹框
// UIUserNotificationTypeBadge 角标
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge| UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
// 给应用程序设置推送有哪些类型
[[UIApplication sharedApplication]registerUserNotificationSettings:setting];
// 给应用程序注册远程推送
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
// iOS8.0以前的注册方法
[[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
}
// 提交开发者的ID和Key 并在信鸽注册这个应用
// 应用程序集成信鸽SDK后解封
// [XGPush startApp:xxxxxxxx appKey:@"XXXXXXXX"];
return YES;
}
// 当应用程序注册远程推送失败以后, 系统会调用这个代理方法, 可以打印error来查看错误信息, 同时把Token值传给应用程序,模拟器不允许远程推送
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"error = %@", error);
}
// 当应用程序向APNS提交注册信息以后, 如果注册成功会执行这个代理方法, 同时把Token值传给应用程序
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSLog(@"token = %@", [deviceToken description]);
// 腾讯信鸽的一个自带方法, 可以把token转化成一段连续的字符串
// 应用程序集成信鸽SDK后解封
// NSLog(@"token = %@", [XGPush registerDevice:deviceToken]);
}
// 需要把Token上传服务器,这样服务器才能告诉APNS给哪些设备进行推送
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
application.applicationIconBadgeNumber = 0; // 角标置0
NSLog(@"userInfo %@", userInfo);
}
第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
推送通知的详细流程