2015-08-31 21:59:29 qq_18505715 阅读数 1831

苹果手机开发中的信息提示推送方式,一类是远程服务器推送(APNS)与UILocalNotification本地通知的,设计这两种通知的目的都是为了提醒用户,现在有些什么新鲜的事情发生了,吸引用户重新打开应用。
一、本地推送
这里写图片描述
这里写图片描述
1.1注册本地推送
这里写图片描述
代理方法
这里写图片描述
1.2本地推送内容
这里写图片描述
1.3接受推送消息方法
这里写图片描述
二、远程推送(java后台,php后台这里不写了,制作pem文件麻烦)远程推送也有很多第三方的:例如极光推送、友盟推送都可以。
这里写图片描述
这张图都不陌生了,大概的原理就是:注册设备得到token,将token和p12和导出文件密码+host(测试环境和真实环境不一样)给java,服务器将(感兴趣的内容+token)给APNS,当感兴趣内容发生,APNS推送到客户端。
2.1生成.CSR文件,保存到桌面上
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
2.2登录http://developer.apple.com/制作.cer文件(上传CSR文件)
这里写图片描述
双击证书安装到钥匙串
这里写图片描述
2.3制作profile文件
这里写图片描述
这里写图片描述
双击profile安装到x-code
2.4 制作p12文件(从钥匙串导出.cer文件)
这里写图片描述
输入证书密码
这里写图片描述
证书制作流程完毕,桌面上总共有4个文件。
这里写图片描述

注意: Development Push SSL Certificate ,与Production Push SSL Certificate 区别在于一个是用于开发的推送证书,一个是用于发布产品的推送证书。两个证书获取到的终端deviceToken是不一样的,用两个证书生成的P12证书用于JAVA后台连接APNS的服务器地址也是不同的,Development Push SSL Certificate 对应连接的服务器地址是:gateway.sandbox.push.apple.com。Production Push SSL Certificate 对应连接的服务器地址是:gateway.push.apple.com。

2.5 开始ios的代码
在AppDelegate.m的(BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions方法中加入注册消息通知推送能力;加入当应用程序处于未启动状态时,判断是否由远程消息通知触发;加入清除消息推送通知标记。
这里写图片描述
注册设备的代理方法,一个注册成功,一个注册失败
这里写图片描述
接受推送消息
这里写图片描述
2.6 java后端的代码(给其.p12和文件密码)
这里写图片描述

2015-10-21 17:59:53 grl18840839630 阅读数 222

 //推送流程:

     //1.创建AppID 创建推送证书.cer

    //2.钥匙串中导出p12文件  pem  上传到服务器

    //3.更新描述文件(生成一下)

    //4.SDK 初始化信鸽 token 发给服务器

    //5.真机测试,服务器发送信息


//在信鸽推送上下载SDK 

//引用  CFNetwork.framework , SystemConfiguration.framework, CoreTelephony.framework , libz.dylib , libXG-SDK.a,Security.framework



//APPdelegete 中写:




//初始化信鸽服务器:

    [XGPush startApp:2200156333 appKey:@"I957TW73YTMN"];

//获取版本信息

    CGFloat verson = [[[UIDevice currentDevice] systemVersion] floatValue];

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


 if (verson > 7.9) {

         //设置settings

        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];

        [application registerUserNotificationSettings:settings];

        //1.注册推送

        [application registerForRemoteNotifications];

    }

    else{

        [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

    }

    application.applicationIconBadgeNumber = 0;



//实现协议方法:

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

{

       //接收到APNS发出的deviceToken

    NSLog(@"deviceToken:%@",deviceToken);

    //向app的服务器发送deviceToken

       [XGPush registerDevice:deviceToken];

}


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

{

    //注册失败

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

}


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

{

    //接收到推送消息    userInfo 字典

    NSLog(@"%@",userInfo);

}



2015-07-16 11:17:59 jiang314 阅读数 416
1、注册
    #pragma  mark - 注册远程消息通知
    -(void)registerAPNs:(UIApplication *)application
    {
        /*
            __IPHONE_8_0 :代表编译器的SDK版本在IOS8以上
     
            [[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 :
                是判断运行时的SDK版本在IOS8以上
         */
    
    #ifdef __IPHONE_8_0
        //在IOS8下
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        
            UIUserNotificationSettings *uns = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound) categories:nil];
            [[UIApplication sharedApplication] registerForRemoteNotifications];
            [[UIApplication sharedApplication] registerUserNotificationSettings:uns];
        }
        else {
            UIRemoteNotificationType apn_type = (UIRemoteNotificationType)(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge);
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:apn_type];
        }
    
    #else
        UIRemoteNotificationType apn_type = (UIRemoteNotificationType)(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge);
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:apn_type];
    #endif
    
    }


2、获取deviceToken
3、将deviceToken发送给后台服务器
    #pragma  mark - 回调方法 成功注册远程消息通知
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
    
        NSString *deviceToken = [NSString stringWithFormat:@"%@", pToken];
        NSLog(@"deviceToken:%@", deviceToken);
        // deviceToken:<15f18a2b ea039e1a e51584f9 09597d79 4337c61a b74524cc b74a12a0 c10a972a>
         //发送后台服务器之前,要把空格去掉,<>去掉

        //将deviceToken发送到自己的后台服务器

        if (deviceToken) {
            [self postDeviceToken:deviceToken];
        }
    }

    #pragma  mark - 回调方法 注册远程消息通知失败
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
    {
        NSLog(@"Register fail%@",error);
    }

    #pragma  mark - 将deviceToken发送到自己的后台服务器
    -(void)postDeviceToken:(NSString *)deviceToken
    {
       NSLog(@"在这里 把deviceToken 发送给后台服务器, 让后台服务器保存deviceToken");
    }

4、后台服务器向APNs服务器发送推送消息
5、接收推送消息
    #pragma  mark - 回调方法 成功接收推送消息
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    {
        //处理推送消息
        NSLog(@"userInfo == %@", userInfo);
        /*
        推送过来接收到得信息,其中aps中,alert,badge,sound是苹果固定的格式,不能修改,但是苹果推送消息,不能超过256字节也就是128个汉字,输入超过,推送失败
        {
          aps =  {
                alert = "hello";
                badge = 1;
                sound = default;
           };
        }
        */

        //处理推送过来的消息
        [self DealNotification:userInfo];
    }


    #pragma  mark - 处理推送过来的消息
    -(void)DealNotification:(NSDictionary *)userInfo
    {
            NSLog(@"在这里 处理推送过来的数据");
    }

2017-06-08 15:11:32 shihuboke 阅读数 356

//联系人:石虎  QQ: 1224614774 昵称:嗡嘛呢叭咪哄


远程推送应用配置过程


1. 创建支持远程推送功能的App ID

2. 申请开发者证书,并选中刚刚创建的App ID

3. 下载CER文件,并导入钥匙串管理

4. 申请发布证书,并选中刚刚创建的App ID

5. 下载CER文件,并导入钥匙串管理

6. 检查App ID,确认证书已经指定


远程推送应用程序开发过程

1. 新建应用程序

2. 指定AppID,在developer.apple.com上设置的AppID


#ifdef __IPHONE_8_0

    // 注册接收通知的类型

    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];

    [application registerUserNotificationSettings:settings];

    

    // 注册允许接收远程推送通知

    [application registerForRemoteNotifications];

#else

    // 如果是iOS7.0,使用以下方法注册

    [application registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];

#endif



// 当得到苹果的APNs服务器返回的DeviceToken就会被调用

// 7040f7d5 5a974598 c5cf31b5 3e340b39 68affd25 122f0ce1 3f315226 396c2e5b

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

    NSLog(@"deviceToken是:%@", deviceToken);

}


// 接收到远程通知,触发方法和本地通知一致

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

    NSLog(@"%@", userInfo);

}



*** 使用后台的远程消息推送


1> Capabilities中打开远程推送通知

2> 实现代理方法

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler


远程消息数据格式:

{"aps" : {"content-available" : 1},"content-id" : 42}


执行completionHandler有两个目的

1> 系统会估量App消耗的电量,并根据传递的UIBackgroundFetchResult 参数记录新数据是否可用

2> 调用完成的处理代码时,应用的界面缩略图会自动更新


注意:接收到远程通知到执行完网络请求之间的时间不能超过30


if (userInfo) {

    int contentId = [userInfo[@"content-id"] intValue];

    

    ViewController *vc = (ViewController *)application.keyWindow.rootViewController;

    [vc loadDataWithContentID:contentId completion:^(NSArray *dataList) {

        vc.dataList = dataList;

    

        NSLog(@"刷新数据结束");

        

        completionHandler(UIBackgroundFetchResultNewData);

    }];

} else {

    completionHandler(UIBackgroundFetchResultNoData);

}


2015-09-07 16:35:41 sinat_14879371 阅读数 372

一、创建工程

设置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 ([[[UIDevice currentDevice]systemVersion] floatValue] >= 8.0) {

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

        // UIUserNotificationTypeSound 声音

        // UIUserNotificationTypeAlert 弹框

        // UIUserNotificationTypeBadge 角标

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

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

        [[UIApplication sharedApplication]registerUserNotificationSettings:setting];

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

        [[UIApplication sharedApplication] registerForRemoteNotifications];

    } else {

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

        [[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];

    }

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

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

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

    return YES;

}


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

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

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

}

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

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

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

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

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

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

    // NSLog(@"token = %@"[XGPush registerDevice: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 并在信鸽注册这个应用[XGPush startApp:xxxxxxxx appKey:@"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通知。


推送通知的详细流程








iOS_远程推送(官方)

阅读数 253

iOS_远程推送

博文 来自: u012400600
没有更多推荐了,返回首页