APNS问题总结

做过几个app的apns,从一知半解,但现在熟练掌握,经历了好几次失败之旅.

现在抽空整理下apns遇到的一些问题.


1,两套apns流程:以下东东都是两套,切莫弄错.


   开发:开发证书,debug版token,gateway.sandbox.push.apple.com(feedback.sandbox.push.apple.com) 2195

   发布:发布证书,ad hoc版token(和appstore上获得token一致),gateway.push.apple.com(feedback.push.apple.com) 2195


2,一些问题:

  1)低级问题

    develop证书推送ok,但dis证书推送失败:可能情况->证书用错,token用错,ssl地址用错.

    发送apns失败:可能情况->证书有问题,密码不对,apple dev center内appid配置push了?

  2)高级一点的问题:

   apns消息体不能超过256字节,超过的话,可能会有后台发送成功,但设备收不到通知.

   java后台,p12文件必须有密码,否则,也可能有后台发送成功,但设备收不到通知,php后台,则需要将p12转为pem.(网上有教程)

   网上有本地php文件模拟ssl发送apns请求的demo,注意其中ssl地址的区别,建议弄两个php文件,以防弄错.

   如果提示失败,请检查证书是否正确,密码是否正确(好像各个版本之间,密码不能变,有次推送证书过期,以前的同事用abcabc做密码,我改了严谨一些点的密码,但推送总不成功,后来改成abcacb,success了).

   .mobileprovision,里面有apns字段,可以用vim打开查看,有些文章介绍说,如果dis版本的证书里面没apns,则也有可能是发送成功,但设备收不到通知.

  遇到过字符比较长,用feedback.gateway~ok,但gateway.~发送成功,设备收不到,猜测是feedback限制的长度大于256字节,也许是这样.



3,一些疑惑问题:

1,产品发布证书和产品推送证书是两套,发布app后再搞推送证书也不迟.

2,dev版推送ok,不放心dis版的话,也可以用adhoc版测试,adhoc版token和dis版token完全一致.(经过测试,删除app重装,token不变)

下面代码放在didRegisterForRemoteNotificationsWithDeviceToken内,方便获取token测试

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSString *_deviceToken = [[[[deviceToken description]
                                   stringByReplacingOccurrencesOfString:@"<"withString:@""]
                                  stringByReplacingOccurrencesOfString:@">" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];
 
    
#if(1)//dis版本去掉以下代码
    _apnsTestView = [[UITextView alloc] initWithFrame:CGRectMake(10, 60, 280, 80)];
    _apnsTestView.text = _deviceToken;
    _apnsTestView.backgroundColor = [UIColor blackColor];
    [self.window addSubview:_apnsTestView];
    [_apnsTestView release];
    [_apnsTestView becomeFirstResponder];
 #endif
 //push token to your server

}

3,badge累加,需要和your server数据相联;

推送内容点击打开特定页面,建议类似cms处理;

判断token是dev还是dis,想的美,想知道问apple吧(测试环境和产品环境,token要分开放,不要放一起,否则容易混)

根据feedback返回类型,获取这无用的device tokens信息后进行对本地数据库中的tokens进行更新,保证数据库存储的都是有用的数据.

批量push  token to apns,创建SSL的链接,跟APNS服务器保持通信状态,再往APNS发送数据。就不会发送多次HTTP连接跟APNS交互,这样子会快很多。苹果建议对多个notification 保持连接,反而对频繁的建立和断开,会被认为 dos 攻击。但如果中间有一个非法的token,则之后的所有notification 都发送不出去.



模拟apns的应用,easy apns provider,国人写的.很好用,下载地址:https://itunes.apple.com/cn/app/easy-apns-provider/id989622350?mt=12









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值