導航:首頁 > 編程語言 > ios推送java

ios推送java

發布時間:2023-12-07 15:17:32

『壹』 java 如何實現系統消息推送

消息推送方式分為兩種:短連接和長連接。也就是客戶端與伺服器之間的數據傳輸交互方式不同。
1、短連接又稱為輪詢,方式為pull。客戶端定時向伺服器發送請求,詢問是否有數據,時間頻次可以設置。這種的方式更適合web端使用,用在APP有很多弊端。
2、長連接方式為push,伺服器主動向客戶端發送數據。市面上移動端產品基本採用這種方式,但是ios和android系統有很大的區別。不論手機上安裝了多少個APP,也只有一條長連接,消息最終由蘋果伺服器進行內置分發。即使用戶關閉了APP,依然可以收到消息推送。
實現系統消息推送,就需要比較好的第三方軟體就行輔助,極光就是一個不錯的選擇。極光JPush 是經過考驗的大規模 App 推送平台,每天推送消息量級為數百億條。JPush 提供可視化的 web 端控制台發送通知,統計分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手機平台。

『貳』 蘋果官方有沒有關於 java 推送到 apns文檔

直接給你代碼參考吧

publicstaticvoidmain(String[]args)throwsException
{
try
{
//從客戶端獲取的deviceToken,在此為了測試簡單,寫固定的一個測試設備標識。
StringdeviceToken=""
System.out.println("PushStartdeviceToken:"+deviceToken);
//定義消息模式
PayLoadpayLoad=newPayLoad();
payLoad.addAlert("thisistest!");
payLoad.addBadge(1);//消息推送標記數,小紅圈中顯示的數字。
payLoad.addSound("default");
//注冊deviceToken
=PushNotificationManager.getInstance();
pushManager.addDevice("iPhone",deviceToken);
//連接APNS
Stringhost="gateway.sandbox.push.apple.com";
//Stringhost="gateway.push.apple.com";
intport=2195;
StringcertificatePath="c:/PushTest.p12";//前面生成的用於JAVA後台連接APNS服務的*.p12文件位置
StringcertificatePassword="123456";//p12文件密碼
pushManager.initializeConnection(host,port,certificatePath,certificatePassword,SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
//發送推送
Deviceclient=pushManager.getDevice("iPhone");
System.out.println("推送消息:"+client.getToken()+" "+payLoad.toString()+"");
pushManager.sendNotification(client,payLoad);
//停止連接APNS
pushManager.stopConnection();
//刪除deviceToken
pushManager.removeDevice("iPhone");
System.out.println("PushEnd");
}
catch(Exceptionex)
{
ex.printStackTrace();
}
}
}

『叄』 如何利用Java語言實現消息推送到手機app

首先APP後台就得有這樣的輪詢程序,比如每次打開app時觸發,比如每隔10分鍾觸發,每次觸發就調用下伺服器端的服務,服務端去拉取要推送的信息,或者知道對方的手機號或微信號,那就直接調用簡訊介面或直接發送微信信息了。
極光推送服務是一款免費的第三方推送消息的平台。極光推送從整體來說還不錯,具有以下優勢:
1、開放注冊,免費向所有的開發者開放使用。
2、極光推送 - JPush SDK
JPush 是經過考驗的大規模 App 推送平台,每天推送消息量級為數百億條。 開發者集成 SDK 後,可以通過調用 API 推送消息。同時,JPush 提供可視化的 web 端控制台發送通知,統計分析推送效果。
3、開發者可以輕松地通過極光發送各個移動平台的系統通知,還可以在控制台編輯多種富文本展示模板; 極光還提供自定義消息的透傳,客戶端接到消息內容後根據自己的邏輯自由處理。
4、7*24小時專人專線服務:專屬安全團隊支持,24 小時隨時響應,免除後顧之憂。
極光是一個不錯的選擇,深圳市和訊華谷信息技術有限公司(極光 Aurora Mobile,納斯達克股票代碼:JG)成立於2011年,是中國領先的開發者服務提供商,專注於為開發者提供穩定高效的消息推送、一鍵認證以及流量變現等服務,助力開發者的運營、增長與變現。
同時,極光的行業應用已經拓展至市場洞察、金融風控與商業地理服務,助力各行各業優化決策、提升效率。

『肆』 手機消息推送怎麼實現java

主要介紹其中的五種實現方式:短輪詢、Comet、Flash XMLSocket、Server-sent、WebSocket
1、短輪詢
指在特定的的時間間隔(如每10秒),由瀏覽器對伺服器發出HTTP request,然後由伺服器返回最新的數據給客戶端的瀏覽器。瀏覽器做處理後進行顯示。無論後端此時是否有新的消息產生,都會進行響應
2、Comet
包括了長輪詢和長連接,長輪詢是客戶端向伺服器發送Ajax請求,伺服器接到請求後hold住連接,直到有新消息才返回響應信息並關閉連接,客戶端處理完響應信息後再向伺服器發送新的請求;長連接是在頁面中的iframe發送請求到服務端,服務端hold住請求並不斷將需要返回前端的數據封裝成調用javascript函數的形式響應到前端,前端不斷收到響應並處理
3、Flash XMLSocket
在 HTML 頁面中內嵌入一個使用了 XMLSocket 類的 Flash 程序。JavaScript 通過調用此 Flash 程序提供的socket介面與伺服器端的socket進行通信。JavaScript 在收到伺服器端以 XML 格式傳送的信息後可以很容易地控制 HTML 頁面的內容顯示
4、Server-sent
伺服器推指的是HTML5規范中提供的服務端事件EventSource,瀏覽器在實現了該規范的前提下創建一個EventSource連接後,便可收到服務端的發送的消息,實現一個單向通信。客戶端進行監聽,並對響應的信息處理顯示
5、WebSocket
WebSocket是HTML5下一種新的協議,是基於TCP的應用層協議,只需要一次連接,便可以實現全雙工通信,客戶端和服務端可以相互主動發送消息。客戶端進行監聽,並對響應的消息處理顯示
針對自己系統的應用場景選擇合適的推送方案才是合理的,因此最後簡單說一下實現個性化推送的兩種方式。第一種很簡單,直接使用第三方實現的推送,無需復雜的開發運維,直接可以使用。第二種就是自己封裝,可以選擇如今較為火熱的WebSocket來實現系統的推送。
關於第三方推送平台,極光推送,操作簡單,穩定性高,送達率快

『伍』 如何實現消息推送功能

在開發Android和iPhone應用程序時,我們往往需要從伺服器不定的向手機客戶端即時推送各種通知消息,iPhone上已經有了比較簡單的
和完美的推送通知解決方案,可是Android平台上實現起來卻相對比較麻煩,最近利用幾天的時間對Android的推送通知服務進行初步的研究。

在Android手機平台上,Google提供了C2DM(Cloudto Device Messaging)服務,起初我就是准備採用這個服務來實現自己手機上的推送功能。

Android Cloud to Device Messaging
(C2DM)是一個用來幫助開發者從伺服器向Android應用程序發送數據的服務。該服務提供了一個簡單的、輕量級的機制,允許伺服器可以通知移動應用

程序直接與伺服器進行通信,以便於從伺服器獲取應用程序更新和用戶數據。C2DM服務負責處理諸如消息排隊等事務並向運行於目標設備上的應用程序分發這些
消息。

但是經過一番研究發現,這個服務存在很大的問題:

1)C2DM內置於Android的2.2系統上,無法兼容老的1.6到2.1系統;

2)C2DM需要依賴於Google官方提供的C2DM伺服器,由於國內的網路環境,這個服務經常不可用,如果想要很好的使用,我們的App Server必須也在國外,這個恐怕不是每個開發者都能夠實現的;

有了上述兩個使用上的制約,導致我最終放棄了這個方案,不過我想利用另外一篇文章來詳細的介紹C2DM的框架以及客戶端和App Server的相應設置方法,可以作為學習與參考之用。

即然C2DM無法滿足我們的要求,那麼我們就需要自己來實現Android手機客戶端與App Server之間的通信協議,保證在App Server想向指定的Android設備發送消息時,Android設備能夠及時的收到。下面我來介紹幾種常見的方案:

1)輪詢:應用程序應當階段性的與伺服器進行連接並查詢是否有新的消息到達,你必須自己實現與伺服器之間的通信,例如消息排隊等。而且你還要考慮輪詢的頻率,如果太慢可能導致某些消息的延遲,如果太快,則會大量消耗網路帶寬和電池。

2)SMS:在Android平台上,你可以通過攔截SMS消息並且解析消息內容來了解伺服器的意圖。這是一個不錯的想法,我就見過採用這個方案的

應用程序。這個方案的好處是,可以實現完全的實時操作。但是問題是這個方案的成本相對比較高,你很難找到免費的短消息發送網關,關於這個方案的實現,可以
參考如下鏈接:https://labs.ericsson.com/apis/mobile-java-push/。

3)持久連接:這個方案可以解決由輪詢帶來的性能問題,但是還是會消耗手機的電池。Apple的推送服務之所以工作的很好,是因為每一台手機僅僅保

持一個與伺服器之間的連接,事實上C2DM也是這么工作的。不過這個方案也存在不足,就是我們很難在手機上實現一個可靠的服務。Android操作系統允
許在低內存情況下殺死系統服務,所以你的通知服務很可能被操作系統Kill掉了。

前兩個方案存在明顯的不足,第三個方案也有不足,不過我們可以通過良好的設計來彌補,以便於讓該方案可以有效的工作。畢竟,我們要知道GMail,GTalk以及GoogleVoice都可以實現實時更新的。

Ø 採用MQTT協議實現Android推送

MQTT是一個輕量級的消息發布/訂閱協議,它是實現基於手機客戶端的消息推送伺服器的理想解決方案。

我們可以從這里下載該項目的實例代碼,並且可以找到一個採用PHP書寫的伺服器端實現。

架構如下所示:

wmqtt.jar 是IBM提供的MQTT協議的實現。你可以從如下站點下載它。你可以將該jar包加入你自己的Android應用程序中。

Really Small Message Broker (RSMB) ,他是一個簡單的MQTT代理,同樣由IBM提供。預設打開1883埠,應用程序當中,它負責接收來自伺服器的消息並將其轉發給指定的移動設備。

SAM是一個針對MQTT寫的PHP庫。你可以從這個下載它.

send_mqtt.php是一個通過POST接收消息並且通過SAM將消息發送給RSMB的PHP腳本。

實例代碼:

可以從GitHub上下載實例應用。運行該應用以後,通過手機瀏覽器訪問http://toku.com/demo/android-push/,在第一個輸入框輸入設備ID,在第二個輸入框輸入想要發送的消息內容,按下「Send Push Message」按鈕,你就應該可以看到手機上收到了通知了。你也可以從這個GitHub地址上下載android-push源代碼,它包含了send_mqtt.php腳本。

Ø 採用XMPP協議實現Android推送

這是我在項目中採用的方案。事實上Google官方的C2DM伺服器底層也是採用XMPP協議進行的封裝。

XMPP(可擴展通訊和表示協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線探測。這個協議可能最終允許網際網路用戶向網際網路上的其他任何人發送即時消息。

androidpn是一個基於XMPP協議的java開源Android push notification實現。它包含了完整的客戶端和伺服器端。經過源代碼研究我發現,該伺服器端基本是在另外一個開源工程openfire基礎上修改實現的,不過比較郁悶的是androidpn的文檔是由韓語寫的,所以整個研究過程基本都是讀源碼。它的實現示意圖如下:

androidpn客戶端需要用到一個基於java的開源XMPP協議包asmack,這個包同樣也是基於openfire下的另外一個開源項目smack,
不過我們不需要自己編譯,可以直接把androidpn客戶端裡面的asmack.jar拿來使用。客戶端利用asmack中提供的
XMPPConnection類與伺服器建立持久連接,並通過該連接進行用戶注冊和登錄認證,同樣也是通過這條連接,接收伺服器發送的通知。

androidpn伺服器端也是java語言實現的,基於openfire開源工程,不過它的Web部分採用的是spring框架,這一點與
openfire是不同的。Androidpn伺服器包含兩個部分,一個是偵聽在5222埠上的XMPP服務,負責與客戶端的
XMPPConnection類進行通信,作用是用戶注冊和身份認證,並發送推送通知消息。另外一部分是Web伺服器,採用一個輕量級的HTTP伺服器,
負責接收用戶的Web請求。伺服器架構如下:

最上層包含四個組成部分,分別是SessionManager,Auth
Manager,PresenceManager以及Notification
Manager。SessionManager負責管理客戶端與伺服器之間的會話,Auth Manager負責客戶端用戶認證管理,Presence
Manager負責管理客戶端用戶的登錄狀態,NotificationManager負責實現伺服器向客戶端推送消息功能。

伺服器端界面如下,分別對應了上述的幾個功能模塊:

發送以後,我們可以在手機端看到接收的消息:

這個解決方案的最大優勢就是簡單,我們不需要象C2DM那樣依賴操作系統版本,也不會擔心某一天Google伺服器不可用。利用XMPP協議我們還可以進一步的對協議進行擴展,實現更為完善的功能。
採用這個方案,我們目前只能發送文字消息,不過對於推送來說一般足夠了,因為我們不能指望通過推送得到所有的數據,一般情況下,利用推送只是告訴手機端伺服器發生了某些改變,當客戶端收到通知以後,應該主動到伺服器獲取最新的數據,這樣才是推送服務的完整實現。

『陸』 Java伺服器端如何接收IOS遠程推送傳遞來的devicetoken

您好,(1)下載前面建立的cer文件和provisioning文件,雙擊,導入到xcode中,在build setting中code signing一欄里選擇這兩個文件的名稱,這樣就可以將支持push的app部署到真機中。
(2)處理推送消息
客戶端對推送消息的處理分兩種情況:
一. 在App沒有運行的情況下,系統收到推送消息,用戶點擊推送消息,啟動App。此時,不會執行前面提到的 didReceiveRemoteNotification函數,而是在App的applicationDidFinishLaunching函數中處理推送,通過以下代碼可以獲取推送消息中的數據: NSDictionary *userInfo =[launchOptionsobjectForKey:];
二 . 當APP處於前台時,系統收到推送消息,此時系統不會彈出消息提示,會直接觸發application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函數,推送數據在userInfo字典中。
當App處於後台時,如果系統收到推送消息,當用戶點擊推送消息時,會執行application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo函數,
此時AppDelegate中函數執行的順序為:

application:didReceiveRemoteNotification

applicationDidBecomeActiveI

『柒』 java以及相關技術如何實現app的消息推送需要那些技術

主要是網路編程的
各種協議
心跳鏈接
長連接
自動重連
進程保活
還要伺服器配合

『捌』 jpush推送java後台怎麼調用

開發的時候需要引用appache的包commons-httpclient.jar 、commons-codec.jar、commons-logging.jar這些包可以到官網上下載,如果有需要的話也我也可以發給你。
引入上述這些包之後,就可以進行開發了。
這里需要特別說明的兩點是:
1、通過 HttpClient client = new DefaultHttpClient(); 獲得HttpClient對象不支持https,需要自己重寫。
2、我們的MD5編碼要和伺服器那邊的一樣。(我用我自己寫的MD5編碼驗證的時候,總是驗證失敗,後來跟他們的技術人員要了他們的md5的實現方式就通過驗證了)

好了,廢話不多說了,接下來是貼代碼的時候了:
類MySSLSocketFactory用來實現對https的支持

[java] view plain
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ssl.SSLSocketFactory;

public class MySSLSocketFactory extends SSLSocketFactory {

SSLContext sslContext = SSLContext.getInstance("TLS");

public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
super(truststore);

TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
return null;
}
};

sslContext.init(null, new TrustManager[] { tm }, null);
}

@Override
public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
}

@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}

}

類ClientUtil 獲取可以支持https的HttpClient對象,調用MySSLSocketFactory 來取得

[java] view plain
import java.security.KeyStore;

import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;
public class ClientUtil {

public static HttpClient getNewHttpClient() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
trustStore.load(null, null);

SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));

ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
e.printStackTrace();
return new DefaultHttpClient();
}
}

}

接下來就是調用JPush的api來推送消息了

[java] view plain
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
* 調用遠程api實現推送
* @author naiyu
*
*/
public class PushMsgUtil {

// public static final String PUSH_URL = "https://api.jpush.cn:443/sendmsg/sendmsg";
public static final String PUSH_URL = "http://api.jpush.cn:8800/sendmsg/sendmsg";

public static void pushMsg(String msg) {
BasicNameValuePair name = new BasicNameValuePair("username", "test"); //用戶名
BasicNameValuePair sendno = new BasicNameValuePair("sendno", "3621"); // 發送編號。由開發者自己維護,標識一次發送請求
BasicNameValuePair appkeys = new BasicNameValuePair("appkeys", "your appkeys"); // 待發送的應用程序(appKey),只能填一個。
BasicNameValuePair receiver_type = new BasicNameValuePair("receiver_type", "4");
//驗證串,用於校驗發送的合法性。
BasicNameValuePair verification_code = new BasicNameValuePair("verification_code", getVerificationCode());
//發送消息的類型:1 通知 2 自定義
BasicNameValuePair msg_type = new BasicNameValuePair("msg_type", "1");
BasicNameValuePair msg_content = new BasicNameValuePair("msg_content", msg);
//目標用戶終端手機的平台類型,如: android, ios 多個請使用逗號分隔。
BasicNameValuePair platform = new BasicNameValuePair("platform", "android");
List<BasicNameValuePair> datas = new ArrayList<BasicNameValuePair>();
datas.add(name);
datas.add(sendno);
datas.add(appkeys);
datas.add(receiver_type);
datas.add(verification_code);
datas.add(msg_type);
datas.add(msg_content);
datas.add(platform);
try {
HttpEntity entity = new UrlEncodedFormEntity(datas, "utf-8");
HttpPost post = new HttpPost(PUSH_URL);
post.setEntity(entity);
HttpClient client = ClientUtil.getNewHttpClient();
HttpResponse reponse = client.execute(post);
HttpEntity resEntity = reponse.getEntity();
System.out.println(EntityUtils.toString(resEntity));
} catch (Exception ex) {
ex.printStackTrace();
}

}

private static String getVerificationCode() {

String username = "test"; //username 是開發者Portal帳戶的登錄帳戶名
String password = "pasword";
int sendno = 3621;
int receiverType = 4;
String md5Password = StringUtils.toMD5(password);; //password 是開發者Portal帳戶的登錄密碼

String input = username + sendno + receiverType + md5Password;
String verificationCode = StringUtils.toMD5(input);
return verificationCode;
}

public static void main(String[] args) {
String msg = "{\"n_title\":\"來點外賣\",\"n_content\":\"你好\"}";
System.out.println(msg);
PushMsgUtil.pushMsg(msg);
}

}

閱讀全文

與ios推送java相關的資料

熱點內容
電腦沒聯網怎麼拷貝文件 瀏覽:224
wps工具欄怎麼換成中文 瀏覽:338
win7和xp共享文件 瀏覽:883
蘋果4代音量鍵沒反應 瀏覽:827
怎樣打開tif文件 瀏覽:153
java下載文件zip 瀏覽:440
qq瀏覽器壓縮文件怎麼設密碼 瀏覽:526
黃埔數控編程哪裡好 瀏覽:406
mac109升級1010 瀏覽:691
在java的菜單如何導入文件 瀏覽:982
現在什麼網站銷量最高 瀏覽:760
angularjsclass定義 瀏覽:157
ug數控編程怎麼導出程序 瀏覽:466
cmdb文件 瀏覽:710
鵯文件夾 瀏覽:763
網路輿情應對的基本理念是什麼 瀏覽:433
word2007層次結構 瀏覽:456
去掉文件名的數字 瀏覽:713
word公司 瀏覽:710
淘寶店數據包怎麼上傳 瀏覽:341

友情鏈接