直接給你代碼參考吧
成都創(chuàng)新互聯(lián)是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷策劃、成都微信小程序、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十余年以來(lái),已經(jīng)為千余家成都木屋各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)。現(xiàn)在,服務(wù)的千余家客戶與我們一路同行,見證我們的成長(zhǎng);未來(lái),我們一起分享成功的喜悅。
public?static?void?main(String[]?args)?throws?Exception?
{
try
{
//從客戶端獲取的deviceToken,在此為了測(cè)試簡(jiǎn)單,寫固定的一個(gè)測(cè)試設(shè)備標(biāo)識(shí)。
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);//消息推送標(biāo)記數(shù),小紅圈中顯示的數(shù)字。
payLoad.addSound("default");
//注冊(cè)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后臺(tái)連接APNS服務(wù)的*.p12文件位置
String?certificatePassword?=?"123456";//p12文件密碼。
pushManager.initializeConnection(host,?port,?certificatePath,?certificatePassword,?SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
//發(fā)送推送
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文件,雙擊,導(dǎo)入到xcode中,在build setting中code signing一欄里選擇這兩個(gè)文件的名稱,這樣就可以將支持push的app部署到真機(jī)中。
(2)處理推送消息
客戶端對(duì)推送消息的處理分兩種情況:
一. 在App沒有運(yùn)行的情況下,系統(tǒng)收到推送消息,用戶點(diǎn)擊推送消息,啟動(dòng)App。此時(shí),不會(huì)執(zhí)行前面提到的 didReceiveRemoteNotification函數(shù),而是在App的applicationDidFinishLaunching函數(shù)中處理推送,通過(guò)以下代碼可以獲取推送消息中的數(shù)據(jù): NSDictionary *userInfo =[launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
二 . 當(dāng)APP處于前臺(tái)時(shí),系統(tǒng)收到推送消息,此時(shí)系統(tǒng)不會(huì)彈出消息提示,會(huì)直接觸發(fā)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函數(shù),推送數(shù)據(jù)在userInfo字典中。
當(dāng)App處于后臺(tái)時(shí),如果系統(tǒng)收到推送消息,當(dāng)用戶點(diǎn)擊推送消息時(shí),會(huì)執(zhí)行application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函數(shù),
此時(shí)AppDelegate中函數(shù)執(zhí)行的順序?yàn)椋?/p>
applicationWillEnterForeground
application:didReceiveRemoteNotification
applicationDidBecomeActiveI
消息推送方式分為兩種:短連接和長(zhǎng)連接。也就是客戶端與服務(wù)器之間的數(shù)據(jù)傳輸交互方式不同。
1、短連接又稱為輪詢,方式為pull??蛻舳硕〞r(shí)向服務(wù)器發(fā)送請(qǐng)求,詢問(wèn)是否有數(shù)據(jù),時(shí)間頻次可以設(shè)置。這種的方式更適合web端使用,用在APP有很多弊端。
2、長(zhǎng)連接方式為push,服務(wù)器主動(dòng)向客戶端發(fā)送數(shù)據(jù)。市面上移動(dòng)端產(chǎn)品基本采用這種方式,但是ios和android系統(tǒng)有很大的區(qū)別。不論手機(jī)上安裝了多少個(gè)APP,也只有一條長(zhǎng)連接,消息最終由蘋果服務(wù)器進(jìn)行內(nèi)置分發(fā)。即使用戶關(guān)閉了APP,依然可以收到消息推送。
實(shí)現(xiàn)系統(tǒng)消息推送,就需要比較好的第三方軟件就行輔助,極光就是一個(gè)不錯(cuò)的選擇。極光JPush 是經(jīng)過(guò)考驗(yàn)的大規(guī)模 App 推送平臺(tái),每天推送消息量級(jí)為數(shù)百億條。JPush 提供可視化的 web 端控制臺(tái)發(fā)送通知,統(tǒng)計(jì)分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手機(jī)平臺(tái)。
如果只是彈出信息的那種UI的話,你應(yīng)該搞得定
而如果是類似App那樣彈出信息的功能的話,web搞不定,得App才行。開發(fā)App可以是Android的也可以是iOS的。如果是iOS的話,可以通過(guò)蘋果的消息推送服務(wù)進(jìn)行。而如果用Android的話,Google自己也有消息推送服務(wù)(貌似是Android 4.0以后才有),國(guó)內(nèi)的話,平臺(tái)就多了,有各大廠商自己的推送服務(wù),也有BAT的推送服務(wù),還有如訊飛等的其他商業(yè)推送服務(wù)。這些都要錢的
不會(huì)有這個(gè)現(xiàn)象,蘋果的推送不是服務(wù)器端發(fā)送的,而是蘋果服務(wù)器端發(fā)送的。看來(lái)還不熟悉蘋果APP推送流程。
用戶在初次使用APP時(shí),會(huì)被提示是否接受推送信息,如果接受,APP的服務(wù)器端會(huì)獲得一個(gè)APP傳回來(lái)的token;
APP服務(wù)器端再把這個(gè)token連同推送消息一起發(fā)送給蘋果服務(wù)器端;蘋果服務(wù)器端識(shí)別這個(gè)token后,就會(huì)向用戶的手機(jī)發(fā)送推送消息;當(dāng)APP卸載后,這個(gè)token也就失效了,也就無(wú)法推送了。
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功能,很是實(shí)用方便。
對(duì)于源碼,我整理成了工程,下載地址為:
文章標(biāo)題:蘋果推送服務(wù)java代碼 ios推送服務(wù)端代碼
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article0/dosedio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作、定制開發(fā)、企業(yè)建站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)