IOS消息定时推送(JAVAWEB)

该博客介绍了如何在JAVA WEB环境中实现对IOS设备的定时消息推送。通过使用apns-0.1.5-jar-with-dependencies.jar库,配合定时任务,在Web应用启动后每15秒检查并推送待发送的消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在web应用中,对存储在数据库中的待推送消息取出并推送到对应的IOS设备。

环境以及开发包:
  • JDK - 1.7
  • apns-0.1.5-jar-with-dependencies.jar(ios推送用)

定时任务

在Web应用启动后,开启一条线程,每隔15s执行一次查询,取出待推送的消息。

  • 设置定时器
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;


public class TimerPush implements ServletContextListener {

     public static final long PERIOD_MIN = 1 * 15000; //间隔15s
     public static final long DELAY = 1 * 5000; //延迟执行5s
     private Timer timer;

///************* 在Web应用启动时初始化任务 ******************/  
     public void contextInitialized(ServletContextEvent event) {   
         timer = new Timer("****启动推送任务****",true);  //定义定时器   
         timer.schedule(new PushTask(),DELAY, PERIOD_MIN);  //启动PushTask任务,每15s执行一次,延迟执行5s

     }

///************** 在Web应用结束时停止任务 *******************/  
     public void contextDestroyed(ServletContextEvent event) {   
         timer.cancel(); // 定时器销毁   
     }   

}
  • 启动定时任务
import java.util.TimerTask;

public class PushTask extends TimerTask {
    private static boolean isRunning = false;

    public void run() {    
        if (!isRunning) {    
            isRunning = true;    
            System.out.println("开始执行任务...");
        ///********** 开线程查询是否有待推送任务并进行推送 *******************/
        /**
        若使用run线程,查询事务会在web应用结束后才结束,那么推送成功之后,推送结果就无法保存到数据库(已经避免了不可重复读取)。
        **/  
            SqlThreadForPush sqlThread = new SqlThreadForPush();//查询以及推送
            Thread thread = new Thread(sqlThread);
            thread.start();
            isRunning = false;
            thread.interrupt();
            try{
                thread.join();
            }catch (InterruptedException e){
                e.printStackTrace();
            }
        ///********** 结束查询线程 *******************/  
            System.out.println("本次任务已结束..."); //任务结束
        }else {    
            System.out.println("上一次任务执行还未结束..."); //上一次任务未结束   
        }
    } 
}

IOS推送

此处为简单的推送情况


import com.notnoop.apns.APNS;
import com.notnoop.apns.ApnsService;

/*
 * 查询当前待推送任务
 */
public class SqlThreadForPush extends PushTask implements Runnable{

    public void run(){
        ApnsService service =
                APNS.newService()
                .withCert("/tools/apns/123.p12", "123456") ///证书位置,证书密码
                .withSandboxDestination() //测试和发布地址不同
                .build();

        try {
            service.testConnection();

            String payload = APNS.newPayload().alertBody("有无收到,我系Mjay").badge(1).sound("default").build();//body放推送内容,badge就是应用上显示的数字
            String token = "00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000";//ios设备号
            service.push(token, payload);
        } catch (Exception e) {
            e.printStackTrace();
            return ;
        }
        System.out.println("已保存本次推送结果..."); //任务结束
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值