當服務端遠程向APNS推送至一臺離線的設備時,蘋果服務器Qos組件會自動保留一份最新的通知,等設備上線后,Qos將把推送發送到目標設備上
遠程推送的基本過程
1、客戶端的app需要將用戶的UDID和app的bundleID發送給apns服務器,進行注冊,apns將加密后的device Token返回給app
2、app獲得device Token后,上傳到公司服務器
3、當需要推送通知時,公司服務器會將推送內容和device Token一起發給apns服務器
4、apns再將推送內容送到客戶端上
創建證書的流程:
1、打開鑰匙串,生成CertificateSigningRequest.certSigningRequest文件
2、將CertificateSigningRequest.certSigningRequest上傳進developer,導出.cer文件
3、利用CSR導出P12文件
4、需要準備下設備token值(無空格)
5、使用OpenSSL合成服務器所使用的推送證書
本地app代碼參考
1、注冊遠程通知
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions//中注冊遠程通知
{
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}
2、實現幾個代理方法:
zterForRemoteNotificationsWithDeviceToken:(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"]):
}