IOS消息推送。

ios消息推送


本来ios开发工程师说要使用个推,但是我们是做金融的,可能需要给用户推送订单状态等等。这样的话用起来就会很不方便,于是在网上找了找资料自己动手写了一个。就是简易基础的,希望大家看了能够有用。

原理就是将消息发给苹果服务器,然后服务器根据设备的序列号将消息推送给每个iphone手机,这也就是有些app判断是否是同一个设备登陆的。


需要引入几个jar包:
import com.notnoop.apns.APNS;
import com.notnoop.apns.ApnsService;
import com.notnoop.apns.ApnsServiceBuilder;
import com.notnoop.apns.PayloadBuilder;
import com.notnoop.exceptions.NetworkIOException;

jar包之前在github上下载的,过段时间再补上。

需要ios给你生成一份p12的文件然后你放到本地的文件夹中,地址需要传给推送的类。

我写了一个push.properties文件,方便以后进行拓展,

iosCertPath=D:/apache7/apnscert.p12
iosCertPassword=123456
badgeNum=1
pushSoundName=default


推送的消息实体类:

public abstract class Message {

    //推送消息的properties文件名字
    public static final String PUSH_MESSAGE_PROPERTIES_NAME = "messagepusher.properties";
    //    推送的证书文件地址
    protected static String iosCertPath = "";
    //    推送的证书密码
    protected static String iosCertPassword = "";
    //    推送消息的提示数字  app上面的红色小圆点
    protected static int badgeNum;
    //    推送消息的音乐名字
    protected static String pushSoundName = "";

    /**
     * app推送消息
     */
    public abstract void pushMessage(MessagePusherVO messagePusherVO);

推送消息的实体类:

public class IosPushMessage extends Message {

    protected final Log logger = LogFactory.getLog(getClass());

    static {
        //    推送的证书文件地址
        iosCertPath = PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("iosCertPath");
        //    推送的证书密码
        iosCertPassword = PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("iosCertPassword");
        //    推送消息的提示数字  app上面的红色小圆点
        badgeNum = Integer.parseInt(PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("badgeNum"));
        //    推送消息的音乐名字
        pushSoundName = PropertiesUtil.loadProperties(PUSH_MESSAGE_PROPERTIES_NAME).getProperty("pushSoundName");
        //    添加推送类型的id 例如推送新闻 根据新闻id跳转到哪个新闻
    }

    @Override
    public void pushMessage(MessagePusherVO messagePusherVO) {

        /**APNS推送需要的证书、密码、和设备的Token**/

        // 创建和苹果APNS服务器的连接connection对象
        ApnsServiceBuilder serviceBuilder = APNS.newService();
        // 通过类加载器加载ios证书
        serviceBuilder.withCert(iosCertPath, iosCertPassword);
        // 设定为推送正式产品环境
//        serviceBuilder.withProductionDestination();

          /*沙河测试************************************/
        serviceBuilder.withSandboxDestination();
            /*沙河测试************************************/

        // 从builder到service对象
        ApnsService service = serviceBuilder.build();
        PayloadBuilder payloadBuilder = APNS.newPayload();
        payloadBuilder.badge(badgeNum);
        payloadBuilder.sound(pushSoundName);
//       要推送的消息类型
        payloadBuilder.customField("type", "需要推送的消息类型");
        //  ****添加推送类型的id 例如推送新闻 根据新闻id跳转到哪个新闻
        //  ****payloadBuilder.customField("typeId", "推送的消息id");
        try {
            String payload = payloadBuilder.alertBody("消息内容").build();
//          推送消息
            service.push("推送的设备号", payload);
            System.out.println("推送信息已发送" +"推送的设备号");
        } catch (NetworkIOException e) {
            logger.error("推送消息到苹果APNS服务器遇到网络异常", e);
            System.err.println("推送消息到苹果APNS服务器遇到网络异常");
        } catch (Exception ex) {
            logger.error("推送消息到苹果APNS服务器错误", ex);
            System.err.println("推送消息到苹果APNS服务器错误");
        } finally {
        }
        service.stop();
    }

其中IOS和Objective-c的交互
参考博文:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值