生成相应的证书和APPid
证书是做什么用的呢,就是后面我们给苹果的APNS发送推送的时候,需要告诉苹果我们到底是谁,这个是作为一个身份认证的作用。生成相应的证书和APPid之后。我会在我的电脑上去模拟一个push的测试环境,那么我们需要将证书导入出来。接下来我们需要在我们的工程中 完成push的注册。完成注册之后,我们才可以在我们的电脑上面搭建的测试环境向我们的手机去推送push,接下来我们回到我们的工程去完成push的注册流程。我们一般将push的注册代码写在APPdelegate,因为他需要在启动的时候就完成注册,因为这个是一个非常优先的过程,因为可能在你执行其他业务模块之前我们就需要启用这个push的功能,所以注册的流程必须要尽快的启动,我们一般把他的调用放在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这样一个回调里面。我们建立一个函数调用,取名为registerAPN,在启动的回调里面,我们就调用这个APP
关于怎么去注册APNS的话在不同的系统版本下面行为表现并不一样,主要是以ios7ios8为分界线,先用ios8的注册的方式作为讲解。后面我们会有专门的课程教大家怎么去设置push这样一个交互的流程。
ios8环境下面如果要注册APN的话,我们先需要生成一个notification的一个setting,也就是说像用户询问push的权限。
UIUserNotificationSettings* setting =
[UIUserNotificationSettings settingsForTypes:
(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
categories:nil]
settingsForTypes就是我们需要申请的一个push的一个权限的类型。接下来是像我们的用户申请权限,我们调用对应的api
[[UIApplication shareApplication]registerUserNotificationSettings:setting]在我们调用这行api之后我们会收到一个registerficationSettings的一个回调,如果用户点了允许我们的push权限我们就会收到这个回调。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
到这里的时候就表示用户已经允许了我们的push权限的申请。那么接下来的话就是获取token,之前我们的流程图当中也讲解到了这一步。我们调用相应的api来获取这样一个token。
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
[application registerForRemoteNotifications];
}调用这行api之后,我们就会像苹果的APNS服务器去申请一个APP的token,也就是我们的devicetoken,那我们看一下的devicetoken的回调是怎么样的。
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
这个回调表示我们拿到了正确的devicetoken,需要转化成服务器识别的string,并把它传递给我们的服务器,进行数据类型的转换。我们需要调试一下来看一下tokenstr到底是一个什么样的格式,因为苹果的push不支持模拟器调试的,所以我们需要启动设备去调试。
48 申请权限 在真机点击好
60像服务器申请token
67拿到tokenstr
打印一下看一下具体的内容。
去掉空格和尖括号,将tokenstr传给我们的服务器。因为我们并没有搭建真正的服务器,我们就不去详细的阐述了。我们的目标是在本地建立一个测试环境,推荐一个APP可以将苹果的设备搭建成一个push服务器去向苹果的APNS服务器去推送push,