iOS远程推送

来源:互联网 发布:北大青鸟java培训 编辑:程序博客网 时间:2024/06/01 15:54

一、创建工程

设置Bundle identifier为 com.ali.push (自己可随意设置)


二、打开https://developer.apple.com网址,生成开发环境下的推送证书和描述文件。

进入Member Center后,点击Certificates, Identifiers & Profiles,点击Certificates。

1. 创建App ID(点击Identifiers下的App IDs,点+):

  • 填写App ID Description
  •  Bundle ID:com.ali.push
  • 勾选Push Notifications,然后Continue,Submit,Done。

  2. 创建推送证书(点击Certificates下的Development,点+):

  • 勾选Development下的Apple Push Notification SSL,然后Continue
  • App ID: 然后Continue,Continue
  • 生成CSR文件:打开钥匙串,点击钥匙串访问,选择证书助理,选择 从证书颁发机构请求证书...,填写用户电子邮件地址,勾选存储到磁盘,点击继续按钮
  • 点击Choose File...:选择刚生成的CSR文件,然后Generate
  • 点击Download,然后Done
  • 双击推送证书,让其加入钥匙串,标识为 com.ali.push

3.创建描述文件(点击Provisioning Profiles下的Development,点+):

  • 勾选Development下的iOS App Development,然后continue
  • App ID: 然后Continue
  • 勾选Select All: 然后Continue
  • 勾选Select All: 然后Continue
  • 填写Profile Name: 然后Generate
  • 点击Download,然后Done
  • 双击证书,让其加入Xcode工程

4.生成pem格式的证书

  • 打开钥匙串,右键推送证书,导出为一个.p12的文件,存储在桌面,这时要设置证书密码
  • 完成上述操作后,打开终端,进入到p12文件所在 cd DeskTop
  • 执行命令openssl pkcs12 -in CertificationName.p12 -out CertificationName.pem -nodes,将俩个CertificationName替换为.p12的文件名。
  •  输入之前导出证书时设置的证书密码,输入过程中,终端光标不会移动。提示MAC verified OK,文件已经生成,存放在桌面。

三、程序环境配置

Build Settings中,收索Code Signing,Provisioning Profile选择生成的描述文件,Code Signing Identity选择自己的开发证书。



四、代码编写

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    // Override point for customization after application launch.

    // 注册推送通知

//  取到当前设备,获取版本号并转货成浮点型

    //  判断当前设备的系统版本号(远程推送在iOS8.0之前和iOS8.0之后的注册方法不一样)

    if ([[[UIDevicecurrentDevice]systemVersion]floatValue] >= 8.0) {

        // 注册推送的设置,可以设置是否有角标, 弹框,声音

        // UIUserNotificationTypeSound声音

        // UIUserNotificationTypeAlert弹框

        // UIUserNotificationTypeBadge角标

        UIUserNotificationSettings *setting = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

        // 给应用程序设置推送有哪些类型

        [[UIApplicationsharedApplication]registerUserNotificationSettings:setting];

        // 给应用程序注册远程推送

        [[UIApplicationsharedApplication] registerForRemoteNotifications];

    } else {

        // iOS8.0以前的注册方法

        [[UIApplicationsharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

    }

// 提交开发者的IDKey并在信鸽注册这个应用

// 应用程序集成信鸽SDK后解封

    // [XGPush startApp:xxxxxxxx appKey:@"XXXXXXXX"];

    returnYES;

}


// 当应用程序注册远程推送失败以后,系统会调用这个代理方法, 可以打印error来查看错误信息同时把Token值传给应用程序,模拟器不允许远程推送

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

    NSLog(@"error = %@", error);

}

// 运行程序,允许远程推送,应用程序会向APNS进行注册,获取一个令牌,这个令牌唯一标识当前设备和正在运行的应用程序。

// 当应用程序向APNS提交注册信息以后,如果注册成功会执行这个代理方法, 同时把Token值传给应用程序

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

    NSLog(@"token = %@", [deviceTokendescription]);

    // 腾讯信鸽的一个自带方法,可以把token转化成一段连续的字符串

    // 应用程序集成信鸽SDK后解封

    // NSLog(@"token = %@"[XGPushregisterDevice:deviceToken]);

}

// 需要把Token上传服务器,这样服务器才能告诉APNS给哪些设备进行推送


五、使用腾讯信鸽的推送服务器

1. 打开 http://xg.qq.com,登陆,接入应用,应用配置,下载信鸽SDK,选择平台iOS,下载最新的SDK,解压,将sdk文件夹拖入工程。

2. 添加系统库支持,包括SystemConfiguration.framework,CoreTelephony.framework,AdSupport.framework,libz.dylib,libsqlite3.dylib。

3. 在AppDelegate.m里,#import"XGPush.h"。
4. 提交开发者的IDKey并在信鸽注册这个应用[XGPushstartApp:xxxxxxxxappKey:@"XXXXXXXX"]; IDKey分别为信鸽配置信息页面的ACCESS ID和ACESS KEY。

5. 通过[XGPush registerDevice:deviceToken]获取Token值。
6. Build Settings,收索Architectures,Build Active Architecture Only改为No,Valid Architectures把arm64删除。


7. 运行应用程序,复制Token值,打开信鸽配置信息页面,测试设备,+新增一台测试设备,粘贴Token值,并填写设备名称。上传开发证书(pem格式的证书)。

8. 创建通知,填写标题,内容,调整角标,确认推送。


// 当应用程序接收到远程推送以后会执行此代理方法, userInfo里面存储了推送的一些信息

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

   application.applicationIconBadgeNumber =0;    // 角标置0

   NSLog(@"userInfo %@", userInfo);

}





六、官方的推送过程简介


第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。


推送通知的详细流程








0 0
原创粉丝点击