一.推送原理概要(iOS3.0以后引入的功能)
当程序不在前台时,服务器推送消息给客户端
image.png从图中可以看的出来推送原理的主要步骤如下
1.App向iOS设备注册通知,用户需要同意系统的推送通知;
2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UDID;
3.APNs根据设备的UDID和APP的Bundle Id生成deviceToken再发回给App;
4.App再将deviceToken发送给远程推送服务器(自己的服务器),由服务器保存在数据库中;
5.当自己的服务器想发送推送时,在远程推送服务器中输入要发送的消息并选择发给哪些用户的
deviceToken,由远程推送服务器发送给APNs;
6.APNs根据deviceToken发送给对应的用户。
APNs服务器就是苹果专门做远程推送服务器
deviceToken是由APNs生成的一个专门找到你某个手机上的App的一个标识码
deviceToken可能会变,如果你更改了你的项目bundle Identifier或者APNs服务器更新了可能会变
以下说明一下实现,首先配置好证书(发布证书和调试证书),和项目中的相关推送设置
image.png代码实现部分
1.必须先进行注册,得到用户授权
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 1.获取推送通知的权限
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge categories:nil];
[application registerUserNotificationSettings:settings];
// 2.注册远程推送
[application registerForRemoteNotifications];
return YES;
}
2.注册成功,接收从苹果服务器返回的唯一的设备token
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSMutableString * devices_token = [NSMutableString stringWithFormat:@"%@",deviceToken];
}
3.收到通知(处理相关项目的业务逻辑处理)
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
NSLog(@"%@", userInfo);
}
4.注册推送失败原因
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Registfail,注册推送失败原因%@",error);
}
网友评论