[iOS] APNS: 如何check valid device token

本文应该有很多不对的地方,仅供参考 :)


一不小心,把sandbox和production的device token都放到同一个db table里了,大件事!因为sandbox的device token对于production是invalid的,反之亦然。


由于用的是c#的open source lib APNS-Sharp (https://github.com/Redth/APNS-Sharp) 来batch send notification。它的问题在于: 当你用它时,如果你要发送的device token list里有invalid的,那么在发送过程中,轮到这个token时就会close connection,之后的所有device tokens (即使是valid的)都不会收到notification。我觉得这是APNS-Sharp的bug。 解决方法是在每个与apns的connection都只发送notification给一个device token,这样就不用担心是否存在。或者寻找其他的open source lib??

我试过java版本的apns lib " javapns" (http://code.google.com/p/javapns/), 比apns sharp好多了,而且batch send notificaiton时,即使中间有invalid token,也不会影响valid token device收到notification。

那么, 有没有一个办法能从混合了sandbox and production device tokens的table里把production and sandbox的区分开来??
有! 用javapns就可以区分。原理就是用javapns + dev apns cert and password来batch send notification to device token in db table,对于那些invalid token,返回的notification object的isSuccessful是false,而且exception message为"invalide token"。
注意:不能使用javapns + production apns cert and password来做,因为这样会发送notification给production device,这样绝不能允许!

具体代码是:

	String certFilePath="/Users/issliao/tomson/certs/dev/dev_cert.p12";
		String certPassword="xxx";
		boolean isSendingProductionNotification=false;
        
		try {
			//create payload
			PushNotificationPayload payLoad= new PushNotificationPayload();
			payLoad.addAlert("test");
			payLoad.addSound("default");
			
			//add device token list
			List<Device> devices = new ArrayList<Device>();
			devices.add(new BasicDevice("12345abcde12345abcde12345abcde12345abcde12345abcde12345abcde1112")); //wrong token
			devices.add(new BasicDevice("02a2fca6e3ec1ea62aa4b6a344fb9ad7f31f491b7099c0ddf7761cea6c563980")); //iphone pro
			devices.add(new BasicDevice("43fcc3cff12965bc45bf842bf9166fa60e8240c575d0aeb0bf395fb7ff86b466")); //ipod dev
			devices.add(new BasicDevice("e23411a04b4851c36efbdcd3f260df3acc1820b5ca6a4270ecb43b654cb8c022")); //ipod pro
			devices.add(new Ba
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值