在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. LSI MegaCl i命令使用1

    MegaCli命令使用:cd /opt/MegaRAID/MegaCli/MegaCli -AdpAllInfo -aAll     [显示所有适配器信息]MegaCli -LDInfo -Lall ...

  2. C#App.config的使用

    为什么使用App.config, 在连接数据的时候将连接字符串写在了类中,如果更换数据库地址,则需要修改这个类,然后重新编译才可以重新连接数据库.在这个时候我们就可以将连接信息放到配置文件App.co ...

  3. 使程序能够引入.json文件, 为网站添加 MIME 映射

    确认启用了 MIME 映射,或使用命令行工具 appcmd.exe 为网站添加 MIME 映射. 若要设置 MIME 类型,请在 IIS Express 安装目录中运行以下命令: appcmd set ...

  4. SpringBoot入门系列:第一篇 Hello World

    跟随SpringBoot的文档(http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-d ...

  5. HTML <center> 标签

    浏览器支持 定义和用法所有浏览器都支持 <center> 标签. 对其所包括的文本进行水平居中. HTML 与 XHTML 之间的差异 在 HTML 4.01 中,center 元素不被赞 ...

  6. Python文件之----CSV

    # -*- coding:utf-8 -*- ''' Created on 2015年4月20日 @author: liuxue ''' import csv import sys reload(sy ...

  7. [转]机器学习——C4.5 决策树算法学习

    1. 算法背景介绍 分类树(决策树)是一种十分常用的分类方法.它是一种监管学习,所谓监管学习说白了很简单,就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分 ...

  8. 函数递归时,递归次数到900多时,就是抛出异常exception RuntimeError('maximum recursion depth exceeded',)

    import subprocess import multiprocessing import urllib import sys import os import pymongo import si ...

  9. python 多层装饰器

    25.多层装饰器:      1.原理:执行顺序从上往下,#2和#3组成一个函数假设为nf1,#1和nf1组成一个函数nnf1           f1成为ck_ty_of_us的inner函数即nf ...

  10. unity中的[xxxxxx]特性(Attributes)

    [SerializeField] 在Inspector版面中显示非public属性,并且序列化:若写在public前面,等于没写. [Obsolete("调用提示信息")] [No ...