极光推送java调用_java远程调用JPush极光推送Api

调用JPush推送的api,官网上已经有很详细的说明了。这里主要描述一下我在调用过程中遇到的问题,

比如

我的HttpClient不支持https的请求、

参数配置错误 和 验证错误等等。

开发的时候需要引用appache的包commons-httpclient.jar 、commons-codec.jar、commons-logging.jar这些包可以到官网上下载,如果有需要的话也我也可以发给你。

引入上述这些包之后,就可以进行开发了。

这里需要特别说明的两点是:

1、通过 HttpClient client = new DefaultHttpClient(); 获得HttpClient对象不支持https,需要自己重写。

2、我们的MD5编码要和服务器那边的一样。(我用我自己写的MD5编码验证的时候,总是验证失败,后来跟他们的技术人员要了他们的md5的实现方式就通过验证了)

好了,废话不多说了,接下来是贴代码的时候了:

类MySSLSocketFactory用来实现对https的支持

importjava.io.IOException;

importjava.net.Socket;

importjava.net.UnknownHostException;

importjava.security.KeyManagementException;

importjava.security.KeyStore;

importjava.security.KeyStoreException;

importjava.security.NoSuchAlgorithmException;

importjava.security.UnrecoverableKeyException;

importjava.security.cert.CertificateException;

importjava.security.cert.X509Certificate;

importjavax.net.ssl.SSLContext;

importjavax.net.ssl.TrustManager;

importjavax.net.ssl.X509TrustManager;

importorg.apache.http.conn.ssl.SSLSocketFactory;

public classMySSLSocketFactoryextendsSSLSocketFactory {

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

publicMySSLSocketFactory(KeyStore truststore)throwsNoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {

super(truststore);

TrustManager tm = newX509TrustManager() {

public voidcheckClientTrusted(X509Certificate[] chain, String authType)throwsCertificateException {

}

public voidcheckServerTrusted(X509Certificate[] chain, String authType)throwsCertificateException {

}

publicX509Certificate[] getAcceptedIssuers() {

return null;

}

};

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

}

@Override

publicSocket createSocket(Socket socket, String host,intport,booleanautoClose)throwsIOException, UnknownHostException {

returnsslContext.getSocketFactory().createSocket(socket, host, port, autoClose);

}

@Override

publicSocket createSocket()throwsIOException {

returnsslContext.getSocketFactory().createSocket();

}

}

类ClientUtil 获取可以支持https的HttpClient对象,调用MySSLSocketFactory 来取得

importjava.security.KeyStore;

importorg.apache.http.HttpVersion;

importorg.apache.http.client.HttpClient;

importorg.apache.http.conn.ClientConnectionManager;

importorg.apache.http.conn.scheme.PlainSocketFactory;

importorg.apache.http.conn.scheme.Scheme;

importorg.apache.http.conn.scheme.SchemeRegistry;

importorg.apache.http.conn.ssl.SSLSocketFactory;

importorg.apache.http.impl.client.DefaultHttpClient;

importorg.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;

importorg.apache.http.params.BasicHttpParams;

importorg.apache.http.params.HttpParams;

importorg.apache.http.params.HttpProtocolParams;

importorg.apache.http.protocol.HTTP;

public classClientUtil {

public staticHttpClient getNewHttpClient() {

try{

KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());

trustStore.load(null,null);

SSLSocketFactory sf = newMySSLSocketFactory(trustStore);

sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

HttpParams params = newBasicHttpParams();

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);

HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

SchemeRegistry registry = newSchemeRegistry();

registry.register(newScheme("http", PlainSocketFactory.getSocketFactory(),80));

registry.register(newScheme("https", sf,443));

ClientConnectionManager ccm = newThreadSafeClientConnManager(params, registry);

return newDefaultHttpClient(ccm, params);

} catch(Exception e) {

e.printStackTrace();

return newDefaultHttpClient();

}

}

}

接下来就是调用JPush的api来推送消息了

importjava.util.ArrayList;

importjava.util.List;

importorg.apache.http.HttpEntity;

importorg.apache.http.HttpResponse;

importorg.apache.http.client.HttpClient;

importorg.apache.http.client.entity.UrlEncodedFormEntity;

importorg.apache.http.client.methods.HttpPost;

importorg.apache.http.message.BasicNameValuePair;

importorg.apache.http.util.EntityUtils;

/**

* 调用远程api实现推送

* @author naiyu

*

*/

public classPushMsgUtil {

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

public static finalString PUSH_URL ="http://api.jpush.cn:8800/sendmsg/sendmsg";

public static voidpushMsg(String msg) {

BasicNameValuePair name = newBasicNameValuePair("username","test");//用户名

BasicNameValuePair sendno = newBasicNameValuePair("sendno","3621");// 发送编号。由开发者自己维护,标识一次发送请求

BasicNameValuePair appkeys = newBasicNameValuePair("appkeys","your appkeys");// 待发送的应用程序(appKey),只能填一个。

BasicNameValuePair receiver_type = newBasicNameValuePair("receiver_type","4");

//验证串,用于校验发送的合法性。

BasicNameValuePair verification_code = newBasicNameValuePair("verification_code", getVerificationCode());

//发送消息的类型:1 通知 2 自定义

BasicNameValuePair msg_type = newBasicNameValuePair("msg_type","1");

BasicNameValuePair msg_content = newBasicNameValuePair("msg_content", msg);

//目标用户终端手机的平台类型,如: android, ios 多个请使用逗号分隔。

BasicNameValuePair platform = newBasicNameValuePair("platform","android");

List datas = newArrayList();

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 = newUrlEncodedFormEntity(datas,"utf-8");

HttpPost post = newHttpPost(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 staticString getVerificationCode() {

String username = "test";//username 是开发者Portal帐户的登录帐户名

String password = "pasword";

intsendno =3621;

intreceiverType =4;

String md5Password = StringUtils.toMD5(password);; //password 是开发者Portal帐户的登录密码

String input = username + sendno + receiverType + md5Password;

String verificationCode = StringUtils.toMD5(input);

returnverificationCode;

}

public static voidmain(String[] args) {

String msg = "{\"n_title\":\"来点外卖\",\"n_content\":\"你好\"}";

System.out.println(msg);

PushMsgUtil.pushMsg(msg);

}

}

运行成功:

1351827393_8729.png

附上StringUtils,java

importjava.security.MessageDigest;

public classStringUtils {

private final staticString[] hexDigits = {"0","1","2","3","4","5",

"6","7","8","9","A","B","C","D","E","F"};

private staticString byteArrayToHexString(byte[] b) {

StringBuffer resultSb = newStringBuffer();

for(inti =0; i 

resultSb.append(byteToHexString(b[i]));

}

returnresultSb.toString();

}

private staticString byteToHexString(byteb) {

intn = b;

if(n <0)

n = 256+ n;

intd1 = n /16;

intd2 = n %16;

returnhexDigits[d1] + hexDigits[d2];

}

public staticString toMD5(String origin) {

String resultString = null;

try{

resultString = newString(origin);

MessageDigest md = MessageDigest.getInstance("MD5");

resultString = byteArrayToHexString(md.digest(resultString

.getBytes()));

} catch(Exception ex) {

ex.printStackTrace();

}

returnresultString;

}

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值