1、短连接又称为轮询,方式为pull。客户端定时向服务器发送请求,询问是否有数据,时间频次可以设置。这种的方式更适合web端使用,用在APP有很多弊端。
2、长连接方式为push,服务器主动向客户端发送数据。市面上移动端产品基本采用这种方式,但是ios和android系统有很大的区别。不论手机上安装了多少个APP,也只有一条长连接,消息最终由苹果服务器进行内置分发。即使用户关闭了APP,依然可以收到消息推送。
实现系统消息推送,就需要比较好的第三方软件就行辅助,极光就是一个不错的选择。极光JPush 是经过考验的大规模 App 推送平台,每天推送消息量级为数百亿条。JPush 提供可视化的 web 端控制台发送通知,统计分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手机平台。
import java.io.InputStreamimport java.util.List
import com.dbay.apns4j.IApnsService
import com.dbay.apns4j.impl.ApnsServiceImpl
import com.dbay.apns4j.model.ApnsConfig
import com.dbay.apns4j.model.Feedback
import com.dbay.apns4j.model.Payload
/**
* @author RamosLi
*
*/
public class Apns4jDemo {
private static IApnsService apnsService
private static IApnsService getApnsService() {
if (apnsService == null) {
ApnsConfig config = new ApnsConfig()
InputStream is = Apns4jDemo.class.getClassLoader().getResourceAsStream("Certificate.p12")
config.setKeyStore(is)
config.setDevEnv(false)
config.setPassword("123123")
config.setPoolSize(5)
apnsService = ApnsServiceImpl.createInstance(config)
}
return apnsService
}
public static void main(String[] args) {
IApnsService service = getApnsService()
// send notification
String token = "94c4764e4645f42a7b2052692c8b5b41f9d5c925876e11fec5721e9045ee4e5b"
Payload payload = new Payload()
payload.setAlert("How are you?")
// If this property is absent, the badge is not changed. To remove the badge, set the value of this property to 0
payload.setBadge(1)
// set sound null, the music won't be played
// payload.setSound(null)
payload.setSound("msg.mp3")
payload.addParam("uid", 123456)
payload.addParam("type", 12)
service.sendNotification(token, payload)
// payload, use loc string
Payload payload2 = new Payload()
payload2.setBadge(1)
payload2.setAlertLocKey("GAME_PLAY_REQUEST_FORMAT")
payload2.setAlertLocArgs(new String[]{"Jenna", "Frank"})
service.sendNotification(token, payload2)
// get feedback
List<Feedback>list = service.getFeedbacks()
if (list != null &&list.size() >0) {
for (Feedback feedback : list) {
System.out.println(feedback.getDate() + " " + feedback.getToken())
}
}
try {
// sleep 5s.
Thread.sleep(5000)
} catch (Exception e) {
e.printStackTrace()
}
// It's a good habit to shutdown what you never use
service.shutdown()
// System.exit(0)
}
}
包含推送功能、苹果的feedback功能,很是实用方便。
对于源码,我整理成了工程,下载地址为:http://download.csdn.net/detail/linyu19872008/6934361