テンセントのプッシュ——ハトのテスト
5916 ワード
サーバー側に情報をプッシュする必要があるので、ハトを使いました.ここに記録しておきます.ついでに私が出会った問題をいくつかお話しします.今回のテストは単一口座のプッシュしか使いませんでした.前提はハトのaccessid、secret_keyと関連する設定はすでに設定済みです.これは省略して、直接サーバー側をテストします.タイムスタンプの問題 sign署名の問題ハトSDK説明ドキュメント内の単一アカウントのプッシュurlパスhttp://インタフェースドメイン名/v 2/push/single_Account?paramsリクエストパラメータ:汎用パラメータに加えて、次のパラメータパラメータ名タイプ必須デフォルト値記述 も含まれます.
Account stringはあるアカウントに対してプッシュして、アカウントはqq番号、メールボックス番号、openid、携帯電話番号などの各種タイプのmessage_type uintメッセージタイプ:1:通知2:透過メッセージmessagestringは1.4、1.5の2節expire_を参照していないtime uint日メッセージオフラインストレージ時間(秒単位)、最長ストレージ時間は3日間です.0に設定すると、デフォルト値(3日間)send_が使用されます.time stringは、year-mon-day hour:min:secがサーバの現在の時間より小さい場合、multi_をすぐにプッシュするプッシュ時間を指定します.pkg uintは、登録時に提供されたパケット名でメッセージを配信することを示す.1はaccess idによってメッセージを配布することを示し、このaccess idでプッシュに成功したすべてのappはメッセージenvironment uintを受信することができ、iOSのみがiOSデバイスにプッシュする必要がない場合に必ず記入し、1はプッシュ生産環境を表す.2開発環境をプッシュすることを示す.Androidプラットフォームをプッシュして0応答結果を入力しないか、入力しない:汎用戻り結果パラメータではresultフィールドのjsonが空です.このインタフェースはpush id例を返さない:MD 5暗号化前urlはsignを生成するために使用され、RestApi Urlは最終要求のurl(以下androidプッシュ例であり、汎用パラメータを置き換えて使用する必要がある)MD 5暗号化前:GETopenapi.xg.qq.com/v 2/push/single_accountaccess_id=210240957 account=easonshipushtestaccountmessage={"title":"テストメッセージ","content":"restapiからの単一アカウントインタフェーステストメッセージ"}message_type=1timestamp=1502361241f255184d160bad51b88c31627bbd9530
RestApi Url: http://openapi.xg.qq.com/v2/push/single_account?access_id=210240957&account=easonshipushtestaccount&message={"title":"テストメッセージ","content":"restapiからの単一アカウントインタフェーステストメッセージ"}&message_type=1×tamp=1502361241&sign=0d7bee840e87801e8a90b831ee87eefb
私はいくつかの重要なパラメータしか設定していません.他の空のパラメータは設定されていません.
ここで注意したのは、タイムスタンプの問題に戻ります.ここでのタイムスタンプはunixのタイムスタンプlong longDate=System.currentTimeMillis()/1000です.
署名の問題は、署名暗号化前の文字列フォーマットに注意する必要があります.タイムスタンプの後ろに鍵を付けます.例:String get_skj = “GETopenapi.xg.qq.com/v2/push/single_accountaccess_id=”+access_id+”account=”+account+”message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}message_type=1timestamp=” +unix_timestamp+secret_key;
ここで鍵を直接暗号化しmd 5で暗号化する
String sign = MD5Kit.MD5(get_skj);
またハトのgetURLをお願いします
String get_url = “http://openapi.xg.qq.com/v2/push/single_account“; String sr = okGet(get_url+”?access_id=”+access_id+”&account=”+account+” ×tamp=”+unix_timestamp+”&message_type=1&message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}&sign=”+sign);
ここではOKhttpを使ってgetリクエストをしましたが、Apacheより使いやすく、コードも簡単であることがわかりました.コード:
Account stringはあるアカウントに対してプッシュして、アカウントはqq番号、メールボックス番号、openid、携帯電話番号などの各種タイプのmessage_type uintメッセージタイプ:1:通知2:透過メッセージmessagestringは1.4、1.5の2節expire_を参照していないtime uint日メッセージオフラインストレージ時間(秒単位)、最長ストレージ時間は3日間です.0に設定すると、デフォルト値(3日間)send_が使用されます.time stringは、year-mon-day hour:min:secがサーバの現在の時間より小さい場合、multi_をすぐにプッシュするプッシュ時間を指定します.pkg uintは、登録時に提供されたパケット名でメッセージを配信することを示す.1はaccess idによってメッセージを配布することを示し、このaccess idでプッシュに成功したすべてのappはメッセージenvironment uintを受信することができ、iOSのみがiOSデバイスにプッシュする必要がない場合に必ず記入し、1はプッシュ生産環境を表す.2開発環境をプッシュすることを示す.Androidプラットフォームをプッシュして0応答結果を入力しないか、入力しない:汎用戻り結果パラメータではresultフィールドのjsonが空です.このインタフェースはpush id例を返さない:MD 5暗号化前urlはsignを生成するために使用され、RestApi Urlは最終要求のurl(以下androidプッシュ例であり、汎用パラメータを置き換えて使用する必要がある)MD 5暗号化前:GETopenapi.xg.qq.com/v 2/push/single_accountaccess_id=210240957 account=easonshipushtestaccountmessage={"title":"テストメッセージ","content":"restapiからの単一アカウントインタフェーステストメッセージ"}message_type=1timestamp=1502361241f255184d160bad51b88c31627bbd9530
RestApi Url: http://openapi.xg.qq.com/v2/push/single_account?access_id=210240957&account=easonshipushtestaccount&message={"title":"テストメッセージ","content":"restapiからの単一アカウントインタフェーステストメッセージ"}&message_type=1×tamp=1502361241&sign=0d7bee840e87801e8a90b831ee87eefb
私はいくつかの重要なパラメータしか設定していません.他の空のパラメータは設定されていません.
ここで注意したのは、タイムスタンプの問題に戻ります.ここでのタイムスタンプはunixのタイムスタンプlong longDate=System.currentTimeMillis()/1000です.
署名の問題は、署名暗号化前の文字列フォーマットに注意する必要があります.タイムスタンプの後ろに鍵を付けます.例:String get_skj = “GETopenapi.xg.qq.com/v2/push/single_accountaccess_id=”+access_id+”account=”+account+”message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}message_type=1timestamp=” +unix_timestamp+secret_key;
ここで鍵を直接暗号化しmd 5で暗号化する
String sign = MD5Kit.MD5(get_skj);
またハトのgetURLをお願いします
String get_url = “http://openapi.xg.qq.com/v2/push/single_account“; String sr = okGet(get_url+”?access_id=”+access_id+”&account=”+account+” ×tamp=”+unix_timestamp+”&message_type=1&message={‘content’:’”+message_content+”’,’title’:’”+message_title+”’}&sign=”+sign);
ここではOKhttpを使ってgetリクエストをしましたが、Apacheより使いやすく、コードも簡単であることがわかりました.コード:
@Controller
public class HttpController {
@RequestMapping(value="userTest",method=RequestMethod.GET)
public @ResponseBody String userTest(){
// GET
// unix long
long longDate = System.currentTimeMillis()/1000;
String account = "easonshipushtestaccount";
String access_id = "2100240957";
String unix_timestamp = String.valueOf(longDate);//long string
String message_content = "okhttp !!";
String message_title = " ";
String secret_key = "255184d160bad51b88c31627bbd9530";
String get_skj = "GETopenapi.xg.qq.com/v2/push/single_accountaccess_id="+access_id+"account="+account+"message={'content':'"+message_content+"','title':'"+message_title+"'}message_type=1timestamp="+unix_timestamp
+secret_key;
// md5
String sign = MD5Kit.MD5(get_skj);
String get_url = "http://openapi.xg.qq.com/v2/push/single_account";
String sr = okGet(get_url+"?access_id="+access_id+"&account="+account+"×tamp="+unix_timestamp+"&message_type=1&message={'content':'"+message_content+"','title':'"+message_title+"'}&sign="+sign);
System.out.println(sr);
return sr;
}
/**
* OKHttp
*/
private static String okGet(String url){
try {
OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
Response reponse = httpClient.newCall(request).execute();
return reponse.body().string();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}