APNs 推送通知

一、CSR文件

1、生成Certificate Signing Request(CSR)

2、填写你的邮箱和常用名称,并选择保存到硬盘。

二、SSL certificate文件

1、通过刚生成的 .certSigningRequest添加测试推送证书(发布推送证书同理)

2、下载下来双击安装

3、打开钥匙串-》我的证书,右击选择导出该证书(若没有该选项 点击他处再右击),给证书创建一个密码

注:JAVA后台用这个.p12证书就好,需要.pem证书的还需要如下步骤:

APNS证书导出pem

openssl x509 -in aps_development.cer -inform der -out yourCertName.pem

APNS证书密钥导出

先在"钥匙串"中导出apns证书下的密钥,别导错了.

生成.p12格式.

从p12导出pem.

需要输入密码的.

openssl pkcs12 -nocerts -out MobileCAPKey.pem -in MobileCAPKey.p12

导出不需要输入密码的

openssl pkcs12 -nodes -out MobileCAPKey.pem -in MobileCAPKey.p12

主要是参数不同.

合并cer.pem和key.pem

cat yourCertName.pem MobileCAPKey.pem > apns-dev.pem

五、IOS端代码:

1、首先在项目的AppDelegate.m中加入以下两个代理方法

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 
    NSString *token = [NSString stringWithFormat:@"%@", [deviceToken

substringWithRange:NSMakeRange(1, tokenStr.length - 2)]

]; //去掉首尾

//获取终端设备标识,这个标识需要通过接口发送到服务器端,服务器端推送消息到APNS时需要知道终端的标识,APNS通过注册的终端标识找到终端设备。
    NSLog(@"My token is:%@", token);   
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {   
    NSString *error_str = [NSString stringWithFormat: @"%@", error];   
    NSLog(@"Failed to get token, error:%@", error_str);   
}

2、在AppDelegate.m的(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中加入注册消息通知推送能力;加入当应用程序处于未启动状态时,判断是否由远程消息通知触发;加入清除消息推送通知标记。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

//判断是否由远程消息通知触发应用程序启动

if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]!=nil) {

//获取应用程序消息通知标记数(即小红圈中的数字)

int badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
        if (badge>0) {

//如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。

badge--;

//清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。
            [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
        }
    }

//消息推送注册
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge];

}

- (void)applicationDidBecomeActive:(UIApplication *)application

{

//点击通知进入

//一般在整个应用程序加载时执行,挂起进入后也会执行,所以很多时候都会使用到,将小红圈清空

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

}
3、在项目AppDelegate.m中加入消息接收处理代理方法。

//处理收到的消息推送
- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo
{

//在此处理接收到的消息。
    NSLog(@"Receive remote notification : %@",userInfo);
}
六、JAVA后台代码:

public static void main(String[] args) throws Exception 
 {
        try
        {
            //从客户端获取的deviceToken,在此为了测试简单,写固定的一个测试设备标识。
           String deviceToken = "df779eda 73258894 5882ec78 3ac7b254 6ebc66fe fa295924 440d34ad 6505f8c4"

System.out.println("Push Start deviceToken:" + deviceToken);
            //定义消息模式
            PayLoad payLoad = new PayLoad();
            payLoad.addAlert("this is test!");
            payLoad.addBadge(1);//消息推送标记数,小红圈中显示的数字。
            payLoad.addSound("default");
            //注册deviceToken
            PushNotificationManager pushManager = PushNotificationManager.getInstance();
            pushManager.addDevice("iPhone", deviceToken);
            //连接APNS
            String host = "gateway.sandbox.push.apple.com";
            //String host = "gateway.push.apple.com";
            int port = 2195;

String certificatePath = "c:/PushTest.p12";//前面生成的用于JAVA后台连接APNS服务的*.p12文件位置
            String certificatePassword = "123456";//p12文件密码。
            pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
            //发送推送
            Device client = pushManager.getDevice("iPhone");
            System.out.println("推送消息: " + client.getToken()+"\n"+payLoad.toString() +" ");
            pushManager.sendNotification(client, payLoad);
            //停止连接APNS
            pushManager.stopConnection();
            //删除deviceToken
            pushManager.removeDevice("iPhone");
            System.out.println("Push End");
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
 }
}

注意:

1、device token跟app无关,测试证书和发布证书获取到的不一样;

2、当机器被刷时token会变动;

3、证书有效期为1年,快要过期时应及时更换,更换不会影响老证书的运行;

4、格式:

{
"aps" : 
{
"alert" : "Message received from Bob",
"badge" : 5,
"sound" : "bingbong.aiff"
},
"otherData" : @""
}

APNs 推送通知

时间: 2024-08-10 14:56:23

APNs 推送通知的相关文章

推送通知(二)远程通知

远程通知 从远程服务器推送给客户端的通知(需要联网),远程推送服务,又称为APNs(Apple Push Notification Services) 为什么需要远程推送通知? 1. 传统获取数据的局限性:只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容. 2. 远程推送通知可以解决以上问题:不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通,所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接.  长连接作用:时间校准.系统升级.查找我

APNS 远程推送通知 PUSH deviceToken

服务器向客户端推送消息: 当应用程序推到后台,或者根本就没有运行(我们的代码无能为力)      如果这种情况之下,应用程序想和用户交互(传统的做法 不可能) 推送 APNS:Apple Push Notification Service deviceToken:标示某一台iPhone上的某一个应用程序 1.(用户必须确认需要收到推送消息)注册远程通知中心向APNS获取64位的字符串deviceToken 注册远程通知中心 [[UIApplication sharedApplication] r

苹果iOS APNS消息推送通知

参考链接: http://www.tairan.com/archives/194 http://www.tairan.com/archives/240 https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ProvisioningDevelopment.html#//apple_ref/doc/uid/TP40008194

制作苹果推送通知APNS服务器证书文件

1.准备证书申请文件 打开苹果电脑实用工具里的钥匙串访问程序 选择钥匙串访问—>证书助理—>从证书颁发机构申请证书 输入邮件地址,常用名词随便命名,在这里命名为APNS 选择存储到磁盘,将生成的APNS.certSigningRequest文件保存到本地磁盘 此时,在钥匙串访问程序的密钥(Keys)分类里应该可以找到APNS的专用密钥,右键点击导出“APNS”将专用密钥导出为p12文件,保存时会提示输入口令,输入后生成APNS.p12文件 2.准备App ID和SSL证书 登陆苹果开发者门户,

苹果推送通知服务APNs编程(转)

add by zhj: 下面的几篇文章也非常好, http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2 http://blog.csdn.net/chenglibin1988/art

APNS 服务推送通知

本文作者为CocoaChina会员“marshluca”,帖子地址 http://www.cocoachina.com/bbs/read.php?tid-20723.html 1. 将app注册notification里面, 并从APNS上获取测试机的deviceToken. 1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Clojure:两步发送iOS推送通知(apns)

首先在project.clj中,添加对notnoop 类库的引用:[com.notnoop.apns/apns "0.2.3"] 然后使用如下方法就可以发送推送消息了: 1 (ns demo.apns 2 (:import (com.notnoop.apns APNS))) 3 4 (defn send-push-notification 5 [device-tokens message] 6 (loop [rest-device-tokens device-tokens 7 sent

本地通知和推送通知

关于本地通知: 在使用通知之前必须注册通知类型,如果用户不允许应用程序发送通知,则以后就无法发送通知,除非用户手动到iOS设置中打开通知. 本地通知是有操作系统统一调度的,只有在应用退出到后台或者关闭才能收到通知.(注意:这一点对于后面的推送通知也是完全适用的. ) 通知的声音是由iOS系统播放的,格式必须是Linear PCM.MA4(IMA/ADPCM).µLaw.aLaw中的一种,并且播放时间必须在30s内,否则将被系统声音替换,同时自定义声音文件必须放到main boundle中. 本地

手把手教你配置苹果APNS推送服务|钿畑的博客 | 钿畑的博客

http://www.360doc.com/content/15/0118/17/1073512_441822850.shtml# 钿畑的文章索引 1. 什么是推送通知 2. 什么是APNS? 3. 推送流程 3.1 获取设备device_token阶段 3.2 消息推送过程 3.3 完整流程介绍 4. Push机制类型 5. 正式开工 5.1 准备工作 5.2 证书生成 6. 客户端制作 7. php服务器端配置 8. 测试 8. 附录: 8.1 JSON示例 8.2 检验证书是否正确的方法: