1、客户端app需要将用户的UDID和应用程序的bundleID发送给APNS服务器进行注册,APNS服务器将加密后的device Token发送给客户端
2、app获取到device Token后上传给自己的服务器
3、当需要发送推送通知时,公司服务器将device Token和需要推送的内容发送给苹果的APNS服务器
4、APNS再将相应的内容发送到客户端上
远程推送需要创建证书,创建证书的流程如下:
1、打开钥匙串,生成CertificateSigningRequest.certSigningRequest文件
2、将CertificationSigningRequest.certSigningRequest上传到developer,导出.cer文件
3、利用CSR导出P12文件
4、准备设备值
5、使用OpenSSL服务器使用的推送证书
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//中注册远程通知
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}
//获取deviceToken令牌
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
//获取设备的deviceToken唯一编号
NSLog(@
"deviceToken=%@"
,deviceToken);
NSString *realDeviceToken=[NSString stringWithFormat:@
"%@"
,deviceToken];
//去除<>
realDeviceToken = [realDeviceToken stringByReplacingOccurrencesOfString:@
"<"
withString:@
""
];
realDeviceToken = [realDeviceToken stringByReplacingOccurrencesOfString:@
">"
withString:@
""
];
NSLog(@
"realDeviceToken=%@"
,realDeviceToken);
[[NSUserDefaults standardUserDefaults] setValue:realDeviceToken forKey:@
"DeviceToken"
];
//要发送给服务器
}
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
//注册远程通知设备出错
NSLog(@
"RegisterForRemoteNotification error=%@"
,error);
}
//在应用在前台时受到消息调用
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//打印推送的消息
NSLog(@
"%@"
,[[userInfo objectForKey:@
"aps"
] objectForKey:@
"alert"
]):
}
一般我们使用开发版本的Provisioning做推送测试,如果没有问题再使用发布证书推送一般也是没有问题的,以防万一,我们可以使用越狱的手机安装ipa(最好使用debug版本,并打印获取device token),可以在Xcode-》window-》Orgnazer找到对应设备查看console找到对应的信息