iOS远程推送原理

一.推送原理概要(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);
}

你可能感兴趣的:(iOS远程推送原理)