The jpush API has been called in detail on the official website. Here we mainly describe the problems I encountered during the call process,
For example
My httpclient does not support HTTPS requests,
Parameter configuration error and verification error.
When the development needs to reference appache package commons-httpclient.jar, commons-codec.jar, commons-logging.jar these packages can be downloaded on the official website, if you need, I can also send to you.
After these packages are introduced, you can develop them.
Here, we need to note the following two points:
1. Use httpclient client = new defaulthttpclient (); obtain httpclient objects that do not support HTTPS and must be rewritten by yourself.
2. Our MD5 code is the same as that on the server. (When I used my own MD5 code for verification, the verification always failed. Later I asked their technical staff for their MD5 implementation method and passed the verification)
Well, I don't need to talk much about it. The next step is to paste the Code:
Use mysslsocketfactory to support https
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(); } }
Class clientutil to obtain httpclient objects that support https, and call mysslsocketfactory to obtain
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(); } }}
Next, call the jpush API to push messages.
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;/*** call Remote API to implement push * @ author naiyu **/Public C Lass pushmsgutil {// public static final string push_url = "https://api.jpush.cn: 443/sendmsg"; public static final string push_url = "http://api.jpush.cn: 8800/sendmsg "; public static void pushmsg (string MSG) {basicnamevaluepair name = new basicnamevaluepair ("username", "test"); // username basicnamevaluepair sendno = new principal ("sendno ", "3621"); // The sender id. Maintained by the developer, it identifies one send request basicnamevaluepair appkeys = new basicnamevaluepair ("appkeys", "Your appkeys"); // The application to be sent (appkey), which can only be filled in. Basicnamevaluepair receiver_type = new basicnamevaluepair ("receiver_type", "4"); // verification string, used to verify the validity of the sent message. Required verification_code = new response ("verification_code", getverificationcode (); // message sending type: 1 Notification 2 custom basicnamevaluepair msg_type = new basicnamevaluepair ("msg_type ", "1"); basicnamevaluepair msg_content = new basicnamevaluepair ("msg_content", MSG); // platform type of the target user's terminal mobile phone, such as Android and iOS. Use commas to separate multiple platforms. 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.exe cute (post); httpentity resentity = reponse. getentity (); system. out. println (entityutils. tostring (resentity);} catch (exception ex) {ex. printstacktrace () ;}} Private Static string getverificationcode () {string username = "test"; // username is the Logon account name of the developer portal account string Password = "pasword "; int sendno= 3621; int receivertype = 4; string md5password = stringutils. tomd5 (password); // password is the logon password of the developer portal account string input = username + sendno + receivertype + md5password; string verificationcode = stringutils. tomd5 (input); Return verificationcode;} public static void main (string [] ARGs) {string MSG = "{\" n_title \ ": \" order takeout \", \ "n_content \": \ "Hello \"} "; system. out. println (MSG); pushmsgutil. pushmsg (MSG );}}
Run successfully:
Attached stringutils, Java
import java.security.MessageDigest;public class StringUtils {private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };private static String byteArrayToHexString(byte[] b) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++) {resultSb.append(byteToHexString(b[i]));}return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0)n = 256 + n;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}public static String toMD5(String origin) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");resultString = byteArrayToHexString(md.digest(resultString.getBytes()));} catch (Exception ex) {ex.printStackTrace();}return resultString;}}