直接给你代码参考吧
成都创新互联是一家专注网站建设、网络营销策划、成都微信小程序、电子商务建设、网络推广、移动互联开发、研究、服务为一体的技术型公司。公司成立十余年以来,已经为千余家成都木屋各业的企业公司提供互联网服务。现在,服务的千余家客户与我们一路同行,见证我们的成长;未来,我们一起分享成功的喜悦。
public static void main(String[] args) throws Exception
{
try
{
//从客户端获取的deviceToken,在此为了测试简单,写固定的一个测试设备标识。
String deviceToken = "df779eda 73258894 5882ec78 3ac7b254 6ebc66fe fa295924 440d34ad 6505f8c4"
System.out.println("Push Start deviceToken:" + deviceToken);
//定义消息模式
PayLoad payLoad = new PayLoad();
payLoad.addAlert("this is test!");
payLoad.addBadge(1);//消息推送标记数,小红圈中显示的数字。
payLoad.addSound("default");
//注册deviceToken
PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", deviceToken);
//连接APNS
String host = "gateway.sandbox.push.apple.com";
//String host = "gateway.push.apple.com";
int port = 2195;
String certificatePath = "c:/PushTest.p12";//前面生成的用于JAVA后台连接APNS服务的*.p12文件位置
String certificatePassword = "123456";//p12文件密码。
pushManager.initializeConnection(host, port, certificatePath, certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
//发送推送
Device client = pushManager.getDevice("iPhone");
System.out.println("推送消息: " + client.getToken()+"\n"+payLoad.toString() +" ");
pushManager.sendNotification(client, payLoad);
//停止连接APNS
pushManager.stopConnection();
//删除deviceToken
pushManager.removeDevice("iPhone");
System.out.println("Push End");
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}
您好,(1)下载前面建立的cer文件和provisioning文件,双击,导入到xcode中,在build setting中code signing一栏里选择这两个文件的名称,这样就可以将支持push的app部署到真机中。
(2)处理推送消息
客户端对推送消息的处理分两种情况:
一. 在App没有运行的情况下,系统收到推送消息,用户点击推送消息,启动App。此时,不会执行前面提到的 didReceiveRemoteNotification函数,而是在App的applicationDidFinishLaunching函数中处理推送,通过以下代码可以获取推送消息中的数据: NSDictionary *userInfo =[launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
二 . 当APP处于前台时,系统收到推送消息,此时系统不会弹出消息提示,会直接触发application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函数,推送数据在userInfo字典中。
当App处于后台时,如果系统收到推送消息,当用户点击推送消息时,会执行application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函数,
此时AppDelegate中函数执行的顺序为:
applicationWillEnterForeground
application:didReceiveRemoteNotification
applicationDidBecomeActiveI
消息推送方式分为两种:短连接和长连接。也就是客户端与服务器之间的数据传输交互方式不同。
1、短连接又称为轮询,方式为pull。客户端定时向服务器发送请求,询问是否有数据,时间频次可以设置。这种的方式更适合web端使用,用在APP有很多弊端。
2、长连接方式为push,服务器主动向客户端发送数据。市面上移动端产品基本采用这种方式,但是ios和android系统有很大的区别。不论手机上安装了多少个APP,也只有一条长连接,消息最终由苹果服务器进行内置分发。即使用户关闭了APP,依然可以收到消息推送。
实现系统消息推送,就需要比较好的第三方软件就行辅助,极光就是一个不错的选择。极光JPush 是经过考验的大规模 App 推送平台,每天推送消息量级为数百亿条。JPush 提供可视化的 web 端控制台发送通知,统计分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手机平台。
如果只是弹出信息的那种UI的话,你应该搞得定
而如果是类似App那样弹出信息的功能的话,web搞不定,得App才行。开发App可以是Android的也可以是iOS的。如果是iOS的话,可以通过苹果的消息推送服务进行。而如果用Android的话,Google自己也有消息推送服务(貌似是Android 4.0以后才有),国内的话,平台就多了,有各大厂商自己的推送服务,也有BAT的推送服务,还有如讯飞等的其他商业推送服务。这些都要钱的
不会有这个现象,苹果的推送不是服务器端发送的,而是苹果服务器端发送的。看来还不熟悉苹果APP推送流程。
用户在初次使用APP时,会被提示是否接受推送信息,如果接受,APP的服务器端会获得一个APP传回来的token;
APP服务器端再把这个token连同推送消息一起发送给苹果服务器端;苹果服务器端识别这个token后,就会向用户的手机发送推送消息;当APP卸载后,这个token也就失效了,也就无法推送了。
import java.io.InputStream;
import 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
ListFeedback 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功能,很是实用方便。
对于源码,我整理成了工程,下载地址为: