证书过期 如何更新IOS消息推送证书?

IOS端消息推送需要使用Apple Push Service,以前叫APNS。使用之前需要在Apple Developer端配置App,然后生成一个P12的证书,服务器端推送会用到这个P12证书。

证书过期 如何更新IOS消息推送证书?

这里要说的是这个推送证书的有效期是1年,如果到期没有及时更新,会导致消息推送失败。那么下面就说下如何更新IOS消息推送证书:

1. 首先需要一个MAC电脑,然后打开钥匙链(Keychain),选择 证书助理/从证书颁发机构请求证书,电子邮件就填写Apple Developer的apple id,最后会生成一个CertificateSigningRequest.certSigningRequest文件,这个文件后面会用到。

2. 打开:https://developer.apple.com/account/ios/identifier/bundle 然后选择你的App ID,点击会展开一个功能列表,点击下方的Edit按钮,在Push Notifications下面会看到:Development SSL Certificate和Production SSL Certificate,如果你之前已经有推送证书,在这里也会看到有效期什么的。

3. 在Development或者Production下面点击 Create Certificate 按钮,会出现一个确认页面,点击Continue/继续,会需要上传第一步生成的文件(Select .certSigningRequest file saved on your Mac.)选择文件之后,点击下面的Continue/继续按钮,会提示创建证书成功,这个时候我们可以点击download下载一个扩展名为cer的文件(aps.cer)。

4. 在Mac机器上双击下载的aps.cer文件,会在钥匙链(Keychain)中打开,然后选中该证书,导出为一个p12证书文件,这个p12文件就是服务器端推送消息需要使用的。在导出过程中需要设置证书密码,这个密码一定要牢记,后面服务器推送也需要这个密码。

5. 拿着生成好的p12文件,然后在服务器端做好测试,确实可以用新证书推送消息到设备,我们就可以把证书更新到服务器了,把老的证书覆盖即可。

6. Apple Developer里面老的证书,这个时候可以移除了,或者就放在那里也可以,等它自动过期即可。

总结&注意:

前面的几步虽然也重要,但就算有一步做错了也无所谓,大不了重新再来,但是第5步测试确认新证书非常关键,一定要要确认好,不然更新一个无效的证书,服务器无法推送就会造成故障了。如果自己做消息推送,后端不用自己去写推送代码,在这里推荐一个:APNS4j,比较好用:https://github.com/RamosLi/dbay-apns-for-java

package test; import com.dbay.apns4j.impl.ApnsServiceImpl; import com.dbay.apns4j.IApnsService; import com.dbay.apns4j.model.*; import java.io.InputStream; public class ApnsPush { private static IApnsService apnsService; private static IApnsService getApnsService() { if (apnsService == null) { ApnsConfig config = new ApnsConfig(); InputStream is = ApnsPush.class.getClassLoader().getResourceAsStream("Certificates_Pro.p12"); config.setKeyStore(is); config.setDevEnv(false); config.setPassword("xxxxx"); config.setPoolSize(5); apnsService = ApnsServiceImpl.createInstance(config); } return apnsService; } public static void main(String args[]){ try { String token = "01e983ed 662d7184 1454dbc4 35bd2a49 f5966ada 967f7b3f c0f68f03 09d454b8"; Payload payload = new Payload(); payload.setAlert("Hello, how are you?"); payload.setBadge(3); payload.setSound("default-sound"); getApnsService().sendNotification(token, payload); } catch (Exception ex) { ex.printStackTrace(); } } }

相关阅读