在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送

From: http://saeapns.sinaapp.com/doc.html

1,在iOS开发者中心: iOS Provisioning Portal 创建一个AppID,如图:

2,生成iOS Push Service证书,如图:

  • 按照上述提示操作:

  • 回到iOS Provisioning Portal:

  • 点击“Download”下载iOS Push Service证书文件,如图:

3,导入证书文件到keychain:双击即可

4,生成ck.pem

  • 导出cert.p12:

  • 导出key.p12:

  • 得到这样两个文件:

  • 接下来打开终端:

  • 输入命令:openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12

  • 然后输入命令:openssl pkcs12 -nocerts -out key.pem -in key.p12

  • 最后合并成一个ck.pem文件:

  • 输入命令:cat cert.pem key.pem > ck.pem

  • 得到一个ck.pem文件:

5, 生成并安装Profile文件:

6, 上传ck.pem到SAE, 如图:

7, 客户端程序:

  • 设置profile:

  • 在info.plist中设置Bundle identifier:

  • 在合适的位置加入下面代码,将你的应用注册到消息中心:

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                 
                 
    - (IBAction)action:(id)sender {
     
        //注册到消息中心:
         
        [[UIApplication sharedApplication]
         registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                             UIRemoteNotificationTypeSound |
                                             UIRemoteNotificationTypeAlert |
                                             UIRemoteNotificationTypeNewsstandContentAvailability)];
    }
     
                    
  • 在AppDelegate中加入下面代码:

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #pragma mark -
    #pragma mark APNS
     
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
         
        //获得 device token
        NSLog(@"deviceToken: %@", deviceToken);
         
         
        /*
          
         . . . . . .
          
         在这里把deviceToken和用户信息发送到服务器端
          
         . . . . . .
          
         */
         
         
        //获得 唯一标示
        NSLog(@"uniqueIdentifier: %@", [[UIDevice currentDevice] uniqueIdentifier]);
    }
     
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
         
        NSLog(@"Error in registration. Error: %@", error);
    }
     
     
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
         
        /*
          
         收到消息自定义事件
          
         */
         
        if ([[userInfo objectForKey:@"aps"] objectForKey:@"alert"] != nil) {
             
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"通知"
                                                            message:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]
                                                           delegate:self
                                                  cancelButtonTitle:@"确定"
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
        }
    }
                 
                 
                 
                     
                

8, 服务器端程序:

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    /**
     *
     * 实例代码
     *
     * SaeAPNS调用方法详见API文档:http://apidoc.sinaapp.com/sae/SaeAPNS.html
     *
     * @author Bruce Chen
     *
     */
     
    header("Content-Type: text/html;charset=utf-8");
     
    include_once("saeapns.class.php");
     
     
    /* int $cert_id  许可证序号(1-10)*/
    $cert_id = 1;
     
    /* string $device_token 设备令牌 */
    $device_token = 'xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx';
     
    /* string $message 消息内容 */                         
    $message = date('Y-m-d H:i:s') . ": \n" . '测试消息 from SAE';
     
     
    /*
     
    array $body 消息体(包括消息、提醒声音等等),格式请参考示例和{@link http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW1 Apple官方文档}
     
    */
     
    $body = array(
         
        'aps' => array('alert' => $message, 'badge' => 1, 'sound' => 'in.caf'),
        'others' => array()
    );
     
    //实例化SaeAPNS
     
    $apns = new SaeAPNS();
     
    //推送消息
     
    $result = $apns->push($cert_id, $body, $device_token);
     
    if ($result !== false) {
     
        echo '发送成功';
         
    } else {
      
        echo '发送失败';
        var_dump($apns->errno(), $apns->errmsg());   
    }          
     
                     
                

9, 手机收到通知效果:

源码实例下载地址:  http://vdisk.weibo.com/s/SbY2

转自:http://blog.csdn.net/wave_1102/article/details/7669152

(转)在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送的更多相关文章

  1. Provider Communication with Apple Push Notification Service

    This chapter describes the interfaces that providers use for communication with Apple Push Notificat ...

  2. 陌陌架构分享 – Apple Push Notification Service

    http://blog.latermoon.com/?p=878 先描述下基本概念,标准的iPhone应用是没有后台运行的,要实现实时推送消息到手机,需要借助Apple提供的APNS服务. iPhon ...

  3. (转)How to build an Apple Push Notification provider server (tutorial)

    转自:https://blog.serverdensity.com/how-to-build-an-apple-push-notification-provider-server-tutorial/ ...

  4. (转)Apple Push Notification Services in iOS 6 Tutorial: Part 2/2

    转自:http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2 Upda ...

  5. (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2

    转自:http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 Upda ...

  6. (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial

    本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...

  7. [Erlang 0106] Erlang实现Apple Push Notifications消息推送

        我们的IOS移动应用要实现消息推送,告诉用户有多少条消息未读,类似下图的效果(笑果),特把APNS和Erlang相关解决方案笔记于此备忘.          上面图片中是Apple Notif ...

  8. Push:iOS基于APNS的消息推送

    1. Push的三个步骤,如下图所示: (1)Push服务应用程序把要发送的消息.目的iPhone的标识打包,发给APNS: (2)APNS在自身的已注册Push服务的iPhone列表中,查找有相应标 ...

  9. [置顶] 手把手教你iOS消息推送证书生成以及Push消息

    iOS推送消息是许多iOS应用都具备的功能,今天在给应用加推送功能,在生成证书的过程中,发生了各种令人蛋痛的事.下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provi ...

随机推荐

  1. vim命令---存阅

    命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...

  2. 小学生之Java中迭代器实现的原理

    一. 引言 迭代这个名词对于熟悉Java的人来说绝对不陌生.我们常常使用JDK提供的迭代接口进行java collection的遍历: Iterator it = list.iterator();wh ...

  3. Linux 所有命令都用不了,只有cd exit能用

    原因: 在设置 java环境变量时,编辑profile文件没有写正确,导致在命令行下 ls等命令不能够识别.在命令行下打入下面这段就可以了export PATH=/usr/local/sbin:/us ...

  4. 使用AFNetworking时, 控制器点击返回销毁了, 但还是会执行请求成功或失败的block, 导致野指针异常

    原本我以为是我程序框架有问题...后来才知道, 无知真可怕... __unsafe_unretained __block typeof(self) weakSelf = self; AFHTTPSes ...

  5. oracle 中 group by 加强

    group by rollup(a,b) = group by a,b + group by a + group by null SQL> select deptno,job,sum(sal) ...

  6. 调整cell的间距

    -(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier ...

  7. PowerShell: 如何解决File **.ps1 cannot be loaded because the execution of scripts is disabled on this sy

    PowerShell 默认不允许执行*.ps1脚本文件.运行ps1文件会得到下面的错误: File C:\Temp\Test.ps1 cannot be loaded because the exec ...

  8. python MySQLdb、socket与进线程

    1 centos下 安装MySQLdb模块 a 首先需要先安装 setuptool b yum install -y mysql_devel 头文件 c yum install -y python_d ...

  9. 用C实现一个简单的对拍器——致每个曾经为求AC披星戴月的程序员们

    大一新生,首次创作,虚心受教. 实现思路: 一.需要一个输入文件(input.txt),两个对拍程序(main1.exe,main2.exe) 二.将标准输入重定向为input.txt.将标准输出分别 ...

  10. Dapper试用简例

    1.选择3.5以上框架在新建项目中引用Dapper.dll. 2.在后台写代码,代码写出来后感觉以前学的都白学了. 3. using Dapper; using System; using Syste ...