在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. 线段树---HDU2795Billboard

    这道题跟第二个题差不多,求单点的最大值. 题目大意:有个高和宽分别为h, w的广告牌, 这个广告牌分成高为 1 的长条, 每条分别能贴长度为wi长度的广告, 输入的n为广告的条数,广告优先贴在最上边和 ...

  2. 帧动画 AnimationDrawable

    Drawable Animation(Frame Animation):帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果. 首先,在res/drawable中定义动画 < ...

  3. spring03autowire属性

    1.创建需要的实体类 public class Student { //学生实体类 private String name; //姓名 private Integer age; //年龄 privat ...

  4. 设计模式之—简单工厂模式<Simple Factory Pattern >

    简单工厂模式结构图: 简单工厂模式以简单的加减乘除运算为例: 运算符类(Operation): namespace CalcTest.Simple_Factory_patterns { class O ...

  5. 使用__doPostBack函数来达到使用客户端的控件来调用服务器端的函数的--小结

    类比LinkButton按钮 LinkButton前台生成代码: JS代码: //<![CDATA[ var theForm = document.forms['form1']; if (!th ...

  6. android之GridView实现九宫格布局

    效果图: 代码如下: MyGridView.java /** * 自定义GridView 解决在scrollview中只显示第一行数据的问题 * Created by Spring on 2015/1 ...

  7. Windows7电脑上不去网,ipconfig查询时默认网关会出现0.0.0.0问题的解决

    用ipconfig查看网络配置,发现其他都正确,唯独默认网关上多了一条0.0.0.0的记录,.禁用网络连接再启用也不能恢复.网上找了一下有说改注册表的,打开注册表找到 HKEY_LOCAL_MACHI ...

  8. 武汉科技大学ACM :1004: 华科版C语言程序设计教程(第二版)课后习题3.7

    Problem Description 输入无符号短整数k[hex.]和p[oct.],将k的高字节作为结果的低字节,p的高字节作为结果的高字节组成一个新的整数. Input k[hex.]和p[oc ...

  9. 详解CSS选择器、优先级与匹配原理

    原文链接:http://polaris1119.javaeye.com/blog/764428 作为一个Web开发者,掌握必要的前台技术也是很重要的,特别是在遇到一些实际问题的时候.这里给大家列举一个 ...

  10. linux笔记2.25

    解决vsftpd用root登录不了的问题 把/etc/pam.d/vsftpd文件中的 auth       required    pam_listfile.so item=user sense=d ...