博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)在SAE使用Apple Push Notification Service服务开发iOS应用, 实现消息推送
阅读量:6239 次
发布时间:2019-06-22

本文共 3364 字,大约阅读时间需要 11 分钟。

在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文档:
     
    *
     
    * @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 #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://blog.csdn.net/wave_1102/article/details/7669152

转载于:https://www.cnblogs.com/greywolf/p/3470099.html

你可能感兴趣的文章
金恒威10口M12车载工业交换机
查看>>
OSPF
查看>>
selenium登陆QQ邮箱出现appid is invalid
查看>>
重放***之无线门铃
查看>>
url地址栏编码
查看>>
loadrunner analysis graph settings
查看>>
animationFromTop
查看>>
Java多线程运行时序问题
查看>>
SEM如何做数据分析?
查看>>
Word文档怎么在线压缩变小?
查看>>
语音转文字如何在线转换的?
查看>>
区块链教程Fabric1.0源代码分析policy(背书策略
查看>>
平台化,中台化
查看>>
比你优秀的人都在努力,你还有什么理由浑浑噩噩
查看>>
无线传输更安全也更稳定
查看>>
ABB焊接机器人伺服电机维修常见故障
查看>>
oracle使用plsql插入数据中文乱码问题
查看>>
ssh各种异常登陆
查看>>
nginx域名配置方法
查看>>
Java 基本问题
查看>>