创建 SendResult.java
parent
74369d6875
commit
997805f7a2
|
|
@ -0,0 +1,339 @@
|
|||
package iku.os.net;
|
||||
|
||||
import android.content.Context;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Iterator;
|
||||
|
||||
import okhttp3.FormBody;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
|
||||
public class SendResult {
|
||||
|
||||
private Connection _dbConn;
|
||||
private final Context _context;
|
||||
private final String _appid;
|
||||
private final String _downloadUrl;
|
||||
|
||||
|
||||
|
||||
public TTTask(Context context, String appid, String downloadUrl) throws Throwable {
|
||||
_context = context;
|
||||
_appid = appid;
|
||||
_downloadUrl = downloadUrl;
|
||||
}
|
||||
|
||||
private void saveInfoOfApkADInfo(String packageName, String fileVer, String adVer){
|
||||
try {
|
||||
File fApp = new File("/data/data/com.bytedance.ttcollector/" + packageName, "ADAPP.txt");
|
||||
if (fApp.exists()){
|
||||
BufferedReader readerApp = new BufferedReader(new InputStreamReader(new FileInputStream(fApp)));
|
||||
String dataContent = readerApp.readLine();
|
||||
readerApp.close();
|
||||
|
||||
String sql = "INSERT INTO apkprotocprop (PackageName, Prop, appVer, thirdParty, thirdVer) VALUES(?, ?, ?, ?, ?);";
|
||||
// PreparedStatement ps = _dbConn.prepareStatement(sql);
|
||||
// ps.setString(1, packageName);
|
||||
// ps.setString(2, dataContent);
|
||||
// ps.setString(3, fileVer);
|
||||
// ps.setString(4, "ADJUST");
|
||||
// ps.setString(5, adVer);
|
||||
// ps.executeUpdate();
|
||||
// Log.e("AFTask", "apkprotocprop update ok");
|
||||
// String url = String.format("http://123.56.44.45/tt/manage/apkInfo!addApkProtocPropOp.do?apkProtocProp.packageName=%s&apkProtocProp.appVer=%s&apkProtocProp.thirdParty=%s&apkProtocProp.thirdVer=%s&apkProtocProp.prop=%s", packageName, fileVer, "ADJUST", adVer, dataContent);
|
||||
// System.out.println(url);
|
||||
OkHttpClient client = new OkHttpClient();
|
||||
FormBody formBody = null;
|
||||
JSONObject jsonObject = new JSONObject(dataContent);
|
||||
formBody = new FormBody.Builder()
|
||||
.add("apkProtocProp.packageName", packageName)
|
||||
.add("apkProtocProp.appVer", fileVer)
|
||||
.add("apkProtocProp.thirdParty", "ADJUST")
|
||||
.add("apkProtocProp.thirdVer", adVer)
|
||||
.add("apkProtocProp.prop", jsonObject.toString())
|
||||
.build();
|
||||
Request request = new Request.Builder()
|
||||
.url("http://123.56.44.45/tt/manage/apkInfo!addApkProtocPropOp.do?")
|
||||
.addHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||
.method("POST", formBody)
|
||||
.build();
|
||||
Response response = client.newCall(request).execute();
|
||||
if(response.code() == 200) {
|
||||
System.out.println("UpdateOK");
|
||||
}
|
||||
else {
|
||||
System.out.println("UpdateError");
|
||||
}
|
||||
}
|
||||
}catch (IOException | JSONException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void saveInfoOfApkAFInfo(String packageName, String fileVer, String afVer){
|
||||
try {
|
||||
File fApp = new File("/data/data/com.bytedance.ttcollector/" + packageName, "AFAPP.txt");
|
||||
File fPostT = new File("/data/data/com.bytedance.ttcollector/" + packageName, "AFT.txt");
|
||||
File fPostC = new File("/data/data/com.bytedance.ttcollector/" + packageName, "AFCONVERSIONS.txt");
|
||||
if (fApp.exists()){
|
||||
BufferedReader readerApp = new BufferedReader(new InputStreamReader(new FileInputStream(fApp)));
|
||||
String dataContent = readerApp.readLine();
|
||||
readerApp.close();
|
||||
if (fPostT.exists() || fPostC.exists()){
|
||||
//从服务器读取参数
|
||||
String latestVerOption = queryLatestProp(packageName);
|
||||
dataContent = addAFOption(packageName, latestVerOption, dataContent, fPostC.exists() ? fPostC.getPath() : fPostT.getPath());
|
||||
}
|
||||
String sql = "INSERT INTO apkprotocprop (PackageName, Prop, appVer, thirdParty, thirdVer) VALUES(?, ?, ?, ?, ?);";
|
||||
// PreparedStatement ps = _dbConn.prepareStatement(sql);
|
||||
// ps.setString(1, packageName);
|
||||
// ps.setString(2, dataContent);
|
||||
// ps.setString(3, fileVer);
|
||||
// ps.setString(4, "AF");
|
||||
// ps.setString(5, afVer);
|
||||
// ps.executeUpdate();
|
||||
// Log.e("AFTask", "apkprotocprop update ok");
|
||||
// String url = String.format("http://123.56.44.45/tt/manage/apkInfo!addApkProtocPropOp.do?apkProtocProp.packageName=%s&apkProtocProp.appVer=%s&apkProtocProp.thirdParty=%s&apkProtocProp.thirdVer=%s&apkProtocProp.prop=%s", packageName, fileVer, "AF", afVer, dataContent);
|
||||
// System.out.println(url);
|
||||
OkHttpClient client = new OkHttpClient();
|
||||
FormBody formBody = null;
|
||||
JSONObject jsonObject = new JSONObject(dataContent);
|
||||
formBody = new FormBody.Builder()
|
||||
.add("apkProtocProp.packageName", packageName)
|
||||
.add("apkProtocProp.appVer", fileVer)
|
||||
.add("apkProtocProp.thirdParty", "AF")
|
||||
.add("apkProtocProp.thirdVer", afVer)
|
||||
.add("apkProtocProp.prop", jsonObject.toString())
|
||||
.build();
|
||||
Request request = new Request.Builder()
|
||||
.url("http://123.56.44.45/tt/manage/apkInfo!addApkProtocPropOp.do?")
|
||||
.addHeader("Content-Type", "application/x-www-form-urlencoded")
|
||||
.method("POST", formBody)
|
||||
.build();
|
||||
Response response = client.newCall(request).execute();
|
||||
if(response.code() == 200) {
|
||||
System.out.println("UpdateOK");
|
||||
}
|
||||
else {
|
||||
System.out.println("UpdateError");
|
||||
}
|
||||
}
|
||||
}catch (IOException | JSONException e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String addAFOption(String packageName, String latestVerOption, String json, String postFile){
|
||||
String result = "";
|
||||
try {
|
||||
JSONObject target = new JSONObject(json);
|
||||
FileReader fileReader = new FileReader(postFile);
|
||||
BufferedReader reader = new BufferedReader(fileReader);
|
||||
JSONObject option = new JSONObject();
|
||||
|
||||
JSONObject post = new JSONObject(reader.readLine());
|
||||
if (post.has("android_id")){
|
||||
String android_id = "", current_value = post.getString("android_id");
|
||||
try { android_id = Settings.Secure.getString(_context.getContentResolver(), Settings.Secure.ANDROID_ID); }catch (Throwable ex){}
|
||||
if (android_id != null && !android_id.isEmpty()) {
|
||||
current_value = current_value.replace(android_id, "{android_id}");
|
||||
}
|
||||
if (post.has("advertiserId")){
|
||||
String advertiserId = post.getString("advertiserId");
|
||||
current_value = current_value.replace(advertiserId, "{gaid}");
|
||||
}
|
||||
if (post.has("uid")){
|
||||
String uid = post.getString("uid");
|
||||
current_value = current_value.replace(uid, "{uid}");
|
||||
}
|
||||
if(!current_value.contains("{")){
|
||||
option.put("manualhandle", true);
|
||||
}
|
||||
option.put("android_id", current_value);
|
||||
}
|
||||
if (post.has("appUserId")){
|
||||
String android_id = "", current_value = post.getString("appUserId");
|
||||
try { android_id = Settings.Secure.getString(_context.getContentResolver(), Settings.Secure.ANDROID_ID); }catch (Throwable ex){}
|
||||
if (android_id != null && !android_id.isEmpty()) {
|
||||
current_value = current_value.replace(android_id, "{android_id}");
|
||||
}
|
||||
if (post.has("advertiserId")){
|
||||
String advertiserId = post.getString("advertiserId");
|
||||
current_value = current_value.replace(advertiserId, "{gaid}");
|
||||
}
|
||||
if (post.has("uid")){
|
||||
String uid = post.getString("uid");
|
||||
current_value = current_value.replace(uid, "{uid}");
|
||||
}
|
||||
if(!current_value.contains("{")){
|
||||
option.put("manualhandle", true);
|
||||
}
|
||||
option.put("appUserId", current_value);
|
||||
}
|
||||
if (post.has("customData")){
|
||||
String android_id = "", current_value = post.getString("customData");
|
||||
try { android_id = Settings.Secure.getString(_context.getContentResolver(), Settings.Secure.ANDROID_ID); }catch (Throwable ex){}
|
||||
if (android_id != null && !android_id.isEmpty()) {
|
||||
current_value = current_value.replace(android_id, "{android_id}");
|
||||
}
|
||||
if (post.has("advertiserId")){
|
||||
String advertiserId = post.getString("advertiserId");
|
||||
current_value = current_value.replace(advertiserId, "{gaid}");
|
||||
}
|
||||
if(!current_value.contains("{")){
|
||||
option.put("manualhandle", true);
|
||||
}
|
||||
option.put("customData", current_value);
|
||||
}
|
||||
if (post.has("currency")){
|
||||
option.put("currency", post.getString("currency"));
|
||||
}
|
||||
if (post.has("onelink_id")){
|
||||
option.put("onelink_id", post.getString("onelink_id"));
|
||||
}
|
||||
if (post.has("af_currentstore")){
|
||||
option.put("api_store_value", post.getString("af_currentstore"));
|
||||
}
|
||||
// if (post.has("channel")){
|
||||
// option.put("channel", post.getString("channel"));
|
||||
// }
|
||||
// if (post.has("imei")){
|
||||
// option.put("imei", post.getString("imei"));
|
||||
// }
|
||||
// if (post.has("lvl")){
|
||||
// option.put("lvl", true);
|
||||
// }
|
||||
|
||||
//比对
|
||||
if (latestVerOption != null && latestVerOption.length() != 0) {
|
||||
JSONObject latestVerOptionJson = new JSONObject(latestVerOption);
|
||||
Iterator<String> it = latestVerOptionJson.keys();
|
||||
while (it.hasNext()) {
|
||||
String key = it.next();
|
||||
// Log.d(TAG, "propCorrection: key " + key);
|
||||
// Log.d(TAG, "propCorrection: value " + prop4ServerJson.getString(key));
|
||||
|
||||
//信任服务器旧版数据模式
|
||||
// if ((!option.has(key)) || option.getString(key).equals("")) {
|
||||
// //propJson.put(key, prop4ServerJson.getString(key));
|
||||
// option.put(key, latestVerOptionJson.get(key));
|
||||
// }
|
||||
|
||||
//信任自己取到的数据模式
|
||||
if ((option.has(key))) {
|
||||
option.remove(key);
|
||||
option.put(key, latestVerOptionJson.get(key));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (option.length() > 0) {
|
||||
//替换uuid android_id gaid
|
||||
String optionStr = option.toString();
|
||||
optionStr = optionStr.replaceAll("[0-9a-f]{8}(-[0-9a-f]{4}){3}-[0-9a-f]{12}", "{uuid36}");
|
||||
optionStr = optionStr.replaceAll("[0-9A-F]{8}(-[0-9A-F]{4}){3}-[0-9A-F]{12}", "{uuid36U}");
|
||||
optionStr = optionStr.replaceAll("[0-9a-f]{32}", "{uuid32}");
|
||||
optionStr = optionStr.replaceAll("[0-9A-F]{32}", "{uuid32U}");
|
||||
optionStr = optionStr.replaceAll("[0-9a-fA-F]{16}", "{android_id}");
|
||||
|
||||
//额外需要修改参数的apk判断
|
||||
optionStr = specOption(packageName, optionStr);
|
||||
option = new JSONObject(optionStr);
|
||||
//prop.put("option", option);
|
||||
target.put("option", option);
|
||||
}
|
||||
|
||||
result = target.toString();
|
||||
reader.close();
|
||||
fileReader.close();
|
||||
}catch (Throwable e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
//特殊APP的option处理
|
||||
public static String specOption(String packageName, String optionStr) {
|
||||
String specPackageNames = "com.eterno.shortvideos|com.fiverr.fiverr";
|
||||
if (specPackageNames.contains(packageName)) {
|
||||
JSONObject prop = null;
|
||||
try {
|
||||
prop = new JSONObject(optionStr);
|
||||
if (prop == null) return optionStr;
|
||||
|
||||
switch (packageName) {
|
||||
case "com.eterno.shortvideos":
|
||||
if (prop.has("appUserId")) {
|
||||
prop.put("appUserId", "j.{2}{0}{2}{1}{2}{1}{1}{1}{2}{1}{1}{1}{2}{2}{2}{1}{1}{1}{2}{1}{2}{1}{2}{2}{2}{0}{2}{2}{2}{1}09A");
|
||||
}
|
||||
break;
|
||||
case "com.fiverr.fiverr":
|
||||
if (prop.has("appUserId")) {
|
||||
prop.put("appUserId", "{timestamp13}{0}{0}{0}{0}{0}{0}{0}{0}{0}{0}");
|
||||
}
|
||||
break;
|
||||
case "com.neptune.domino":
|
||||
if (prop.has("appUserId")) {
|
||||
prop.put("appUserId", "{4}{4}:{4}{4}:{4}{4}:{4}{4}:{4}{4}:{4}{4}");
|
||||
}
|
||||
break;
|
||||
}
|
||||
} catch (JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
optionStr = prop.toString();
|
||||
}
|
||||
return optionStr;
|
||||
}
|
||||
|
||||
|
||||
private String queryLatestProp(String packageName) {
|
||||
String propString = null;
|
||||
int latestVersionCode = 0;
|
||||
String optionString = null;
|
||||
|
||||
String sql = "SELECT * FROM apkprotocprop WHERE PackageName = ?;";
|
||||
try {
|
||||
PreparedStatement ps = _dbConn.prepareStatement(sql);
|
||||
ps.setString(1, packageName);
|
||||
ResultSet rs = ps.executeQuery();
|
||||
while (rs.next()){
|
||||
propString = rs.getString("Prop");
|
||||
JSONObject jsonObject = new JSONObject(propString);
|
||||
if (jsonObject.has("versionCode")){
|
||||
if (jsonObject.getInt("versionCode") > latestVersionCode){
|
||||
latestVersionCode = jsonObject.getInt("versionCode");
|
||||
if (jsonObject.has("option")){
|
||||
optionString = jsonObject.getString("option");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Log.d("AFTask", "queryLatestProp: " + propString);
|
||||
} catch (SQLException | JSONException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Log.e("AFTask", "latestVersionCode: " + latestVersionCode + " option: " + optionString);
|
||||
return optionString;
|
||||
}
|
||||
}
|
||||
Reference in New Issue