apple push notification service badge 怎么获取

如题所述

一.前期准备

1.从Keychain中选择Keychain Access > Certificate Assistant > Request a Certificate From a Certificate Authority...
填写User email(apple开发者帐号)/Common name(key的名字),选择Save to Disk,保存到Desktop,一定要有个复选框出来的!完成后会在钥匙串种加入2个密钥
2.做完上一步,Keychain会增加一个key,在Keychain中找到Key栏,将1中生成的private key导出为.p12文件,比如Test_Push_Notifier_PrivateKey.p12

3.登录developer.apple.com的iOS portal,申请AppID,需要具体到com.XXX.XXX,即不允许最后一个字段为模糊匹配
随后对该AppID进行配置,选中Push Notification,上传前面生成的CSR文件,Portal会自动生成aps_development.cer,下载aps_development.cer
4.在Portal上生成新的Provision,将AppID选中为com.XXX.XXX,并下载新的test.mobileprovision文件,并导入到Xcode之中
5.现在我们有两个文件:Test_Push_Notifier_PrivateKey.p12/aps_development.cer。打开终端,使用openssl对两个文件进行加密:
加密aps_development.cer:
openssl x509 -in aps_development.cer -inform der -out cer_dev.pem
加密Test_Push_Notifier_PrivateKey.p12
openssl pkcs12 -nocerts -in Test_Push_Notifier_PrivateKey.p12 -out key.pem
PHP服务端则将两者合并:
cat cer_dev.pem key.pem > Push_Notifier.pem
java服务端要转化为p12格式,用以下命令转化:

openssl pkcs12 -export -in cer_dev.pem -inkey key.pem -out cred_dev.p12
6.测试ApplePushServer正常:
telnet gateway.sandbox.push.apple.com 2195
7.测试加密证书工作正常:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert cer_dev.pem -key key.pem
二.客户端开发
需要实现的代码和覆盖的方法

1.在AppDelegate.m中修改-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
函数体中添加:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert)];
2.在AppDelegate.m中添加下列函数:
-(void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
NSLog(@"我的设备ID: %@", deviceToken);
}
-(void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
NSLog(@"注册失败,无法获取设备ID, 具体错误: %@", error);
}
3.连接设备,运行一次程序,获得deviceToken号码,应该是64个16进制的数,记下来。
4.启动方式和调用方法
程序开启 --> 前台运行-->notification --> didReceiveRemoteNotification
不更改Application的badge Number
程序开启 --> 后台运行 -->notification --> App出提示,并更改application的badge Number --> 点应用程序图标 --> applicationDidBecomeActive
程序开启 --> 后台运行 -->notification --> App出提示,并更改application的badge Number --> 点上面出现的提示,或者下拉菜单提示,或者点击alert框的确定--> didReceiveRemoteNotification --> applicationDidBecomeActive

程序关闭 -->notification --> App出提示,并更改application的badge Number --> 点上面出现的提示,或者下拉菜单提示,或者点击alert框的确定--> didFinishLaunchingWithOptions --> applicationDidBecomeActive
可以在didFinishLaunchingWithOptions中判断是否是apns来启动的

[cpp] view plain copy print?
NSDictionary* pushInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];
//获取推送详情
NSString *pushInfo = [[NSString stringWithFormat:@"%@",[pushInfo objectForKey:@"aps"]];

在程序中如果要根据apns信息来做修改,就需要注意这样的流程,每个启动方式所调用的方法是不同的。
三.服务器端开发
服务器端 java第三方开发
https://github.com/notnoop/java-apns
四.注意事项
1.production和developer的token是不一样的,需要用ad hoc来beta测试下
2.要将token上传给服务器,服务器要用,此外苹果也不能保证token会保证不变,所以最好将保留过长的token删除再同步次服务器。
3.发布前要将push地址改掉
测试用:gateway.sandbox.push.apple.com 2195
发布用:gateway.push.apple.com 2195
4.不要迷信APNS,苹果不是快递公司保证每个用户签收。
5.接受2196的端口是苹果每次push后会记录下用户收到状况,如果用户已经没有安装这个应用了,则会在服务器保留信息,等服务端访问2196端口,会将这些设备TOKEN传送过来,这样服务端可以将这些设备给disable掉
温馨提示:答案为网友推荐,仅供参考
相似回答