• iOS开发之远程推送


      说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号,好咸蛋也差不多了,主要内容走起。

      一、准备阶段

        1.在苹果开发官网上申请推送证书之前需要一个名字叫做certSigningRequest文件。该文件在MAC系统中生成,用于在Apple网站上申请推送证书文件,下面是利用钥匙串生成该文件的步骤:

          (1).打开Mac下的钥匙串-》钥匙串访问-》证书助理-》从证书颁发机构请求证书,如下图所示:

          (2).经过上一步会出现下面的对话框,邮箱和名称随便填写,然后选择保存到磁盘,就可以在本地生成一个CertificateSigningRequest.certSigningRequest文件。如下图:

        2.去苹果开发者的网站上申请推送证书,步骤如下:

          (1)、用开发者账号登陆后,进入Member Center,入下图所示:

          (2)、进入member Center后点击下面截图的链接:

          (3)、注册一个支持推送的AppId,在identifiers下面的App IDs选项中点击添加按钮,添加一个新的AppIDs,入下图:

          (4)、填写你的AppId的名字

          (5)、绑定你应用的Bundle ID

          (6)、选中Push Notifications,使本AppID支持消息推送:

     

        3、用上面的AppID申请推送证书

         (1)、点击证书,选中开发模式,然后单选推送服务

          (2)、选中我们刚才创建的AppID,如下:

          (3)、上传我们刚才在本地用钥匙串创建的文件:

          (4)、接下来就可以下载并使用我们的推送证书了

        4、用我们的AppID创建一个Provisioning Profiles文件,如下:

        5.由上面的证书,生成php用的pem文件过程如下:

          (1).由钥匙串打开上面我们生成的CSR文件,单击右键导出p12文件,如下图:

          (2).设置访问密码:

          (3)、在终端下切换到存有刚才我们导出的p12文件夹下,进行命令行生成pem文件,命令行如下,合并的时候会让输入密码,密码就是我们上面设置的密码:

    1 openssl pkcs12 -clcerts -nokeys -out a.pem -in aps_test_cer.p12
    2 openssl pkcs12 -nocerts -out b.pem -in aps_test_key.p12
    3 cat a.pem b.pem > end.pem

        6、将生成的end.pem文件上传到SAE上的云推送服务上即可,我们在SAE上可以通过文件的id进行访问:

        

      二、服务器端代码编写:

        SAE上云推送所用到的PHP代码如下:

     1 <?php
     2 
     3 $cert_id =你的证书序号;
     4 $device_token = 你的deviceToken;
     5 $message = "hello world";
     6 
     7 //这个是简单的例子,更复杂的消息格式请查看苹果官方文档
     8 $body = array(
     9     'aps' => array( 'alert' => $message)
    10 );
    11 $apns = new SaeAPNS();
    12 //push消息到SAE推送服务器
    13 $result = $apns->push( $cert_id , $body , $device_token );
    14 
    15 if( $result && is_array($result) ){
    16     echo '发送成功';
    17     var_dump( $result );
    18 } else {
    19     echo '发送失败';
    20     var_dump($apns->errno(), $apns->errmsg());
    21 }
    22 
    23 //查看消息发送的汇总信息,返回值包括当天发送成功的消息数,以及因各类原因发送失败的消息数。
    24 $result = $apns->getInfo($cert_id);
    25 if ($result === false) {
    26     echo "getInfo失败";
    27     var_dump($apns->errno(), $apns->errmsg());
    28 } else {
    29     echo "getInfo成功";
    30     var_dump($result);
    31 }
    32 
    33 ?>

      三、客户端代码如下:

        1.在Appdelegate中注册推送:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Override point for customization after application launch.
        //注册远程通知
        [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];
        [application registerForRemoteNotifications];
        return YES;
    }

      

        2.获取设备令牌的回调方法

    1 //注册远程推送后获取设备令牌
    2 
    3 -(void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    4 {
    5     
    6     NSLog(@"%@",deviceToken);
    7 }

        3.注册错误回调的方法:

    -(void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
    {
        NSLog(@"%@",[error localizedDescription]);
    }

        4.在Build Settings中的Code Signing中中我们的推送证书和描述文件

      到这儿,调用服务器上的php文件就可以给我们的设备发送通知了。

  • 相关阅读:
    Linux块设备IO子系统(二) _页高速缓存
    Linux块设备IO子系统(一) _驱动模型
    Linux usb子系统(二) _usb-skeleton.c精析
    Linux usb子系统(一) _写一个usb鼠标驱动
    Linux i2c子系统(四) _从i2c-s3c24xx.c看i2c控制器驱动的编写
    Linux i2c子系统(三) _解决probe无法执行
    Linux i2c子系统(二) _通过i2c-dev.c访问设备的方法
    Linux i2c子系统(一) _动手写一个i2c设备驱动
    从0移植uboot(六) _实现网络功能
    从0移植uboot(五) _实现串口输出
  • 原文地址:https://www.cnblogs.com/ludashi/p/4093454.html
Copyright © 2020-2023  润新知