首页 > 代码库 > iOS远程通知详解

iOS远程通知详解

一、创建证书

1         点击钥匙图标

技术分享

2         在菜单栏中依次选择:钥匙串访问?偏好设置?证书选项卡,下面两项全部选关闭

技术分享

3         生成证书请求:钥匙串访问?证书助理?从证书颁发机构请求证书


技术分享

4         输入两个电子邮件地址和常用名称。电子邮件地址是你注册AppleID。

a)   常用名称输入你在苹果网站注册的名称,其它名称没试过,不知道行不行。

b)   选择“存储到磁盘”。保存后的名称应该为:CertificateSigningRequest.certSigningRequest

技术分享

c)   保存到磁盘后在你的钥匙串访问窗口应该会出两个密钥,一个公钥密钥,一个专用密钥,红色部分就是你在上面输入的常用名。

技术分享

二、生成证书

1,在苹果开发者官网进入到下面这个页面,是Certificates,Identifiers&Profiles块,后面有链接(https://developer.apple.com/account/ios/certificate/certificateList.action)

技术分享

后面点击添加,选择IOS Development,然后还会让你选择一个.certSigningRequest文件(就是刚才生成的机构证书)。完成后会生成开发者证书.cer文件,下载到mac电脑,双击安装。

openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes

三,在开发者官网申请APP IDS

1,上面那个搞定了,这个就更容易了。注意一点Bundle ID的设置最后是要跟你app工程的Bundle Identifiler一致,命名规范“com.团队名.app名”。

下面我选择了wildcard App ID,Explicit App ID应该也是可以的

技术分享

原理:这就是对应着你现在开发的app应用,有多少个应用,就该需要多少个app id

 

四,在开发者官网申请Devices授权

1,name就是你设备主人的名字,随便命名。

2,UDID就是你设备的id,很长。教你一个方法,用数据线插在mac上,打开xcode,进入到Window/Devices中,你就可以看到Identifier,复制,然后粘贴过去。

技术分享

技术分享

原理:就是添加可测试设备,有几台设备,就要添加多少次

 

五,在开发者官网生成描述配置文件 .mobileprovision文件

1,前面完成了,这个也不多说了,操作类似。就是要选择 cer,选择app id,选择devices。也就是这一步就是把你的mac,app,iphone连接起来的操作。

完成后,下载,双击安装。

 

六,开始配置xcode(3个地方)

1,配置Bundle Identifier,跟刚才在开发者官网设置的app IDS的identifier一致(刚才已经说过一次了)

2,配置Code Signing Identity,设置Debug为Iphone Developer

3,在左上角把模拟器换成真机,然后运行,就可以看到结果了

技术分享

技术分享

上面是创建证书的方法。参考:http://www.cnblogs.com/MartinLi841538513/articles/3831726.html/http://blog.csdn.net/quanqinyang/article/details/21695323

下面就开始我们的推送之路吧

1、首先到developer.apple.com上去下载自己创建的推送证书,certificate栏中。下载apns的证书(分为开发和生产),下载开发的证书可以了,app上线后把服务端的证书换成生产的就可以了。点击下载的证书就会出现在钥匙串中。

生成.p12文件如下图

技术分享

生成pem格式的证书

打开终端,进入到你保存.p12文件的目录

openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes

这样你就会看一个.pem文件,开发和生产一样的方法

2、到xcode中设置证书,Code Signing中设置成开发证书,这样是为了能接收到服务器发来的通知消息。

3、在Appdelegate.m文件中配置客户端的代码:

注册远程通知类型

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings
                                                                             settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge)
                                                                             categories:nil]];
        [[UIApplication sharedApplication] registerForRemoteNotifications];
    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
    }


}

实现委托方法

<span style="color:#333333;">- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSString *tokenString = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];
    // 向自己的服务器注册deviceToken
    
}</span>

失败回调方法

<span style="color:#333333;">- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
    NSLog(@"Failed to get device token, error: %@", error);
}</span>

处理接收到远程通知的方法

<span style="color:#333333;">- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    //这里可以根据userInfo中的内容作一些页面的跳转,最大256个字节
    
}</span>
清除通知的方法:

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

[[UIApplication sharedApplication] cancelAllLocalNotifications];

根据项目要求放到不同的方法中。

applicationDidBecomeActive和didFinishLaunchingWithOptions

ios8以下远程通知不支持在通知栏中单条清除,本地通知支持单条的清除

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification
{
    [[UIApplication sharedApplication] cancelLocalNotification:notification];
    
}

ios8中新增不少功能,后面会在介绍。









iOS远程通知详解