IOS消息定時推送(JAVAWEB) -开发者知识库

IOS消息定時推送(JAVAWEB) -开发者知识库,第1张

在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("已保存本次推送結果..."); //任務結束
}
}

最佳答案:

本文经用户投稿或网站收集转载,如有侵权请联系本站。

发表评论

0条回复