13Poker by gametower unlimited gems v0.4版本的 MD5 值为:51324fc0f195c34821074948ab266846
以下内容为反编译后的 SupersonicAdsAdvertiserAgent.java 源代码,内容仅作参考
package com.supersonicads.sdk.android;
import android.content.Context;
import android.content.SharedPreferences;
import com.flurry.org.apache.http.entity.mime.MIME;
import com.flurry.org.codehaus.jackson.util.MinimalPrettyPrinter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Calendar;
public class SupersonicAdsAdvertiserAgent {
private static final String DOMAIN_SERVICE_REPORT_APP_STARTED = "/api/v1/mobileApplicationOnLoad.php?";
private static final String PREFERENCES_FILE = "com.supersonicads.sdk.android.supersonicadsadvertiseragent";
private static final String PREFERENCES_KEY_REPORT_COUNTER = "preferences_key_report_counter";
private static final String PREFERENCES_KEY_REPORT_TIMESTEMP = "preferences_key_report_timestemp";
private static final int REPORT_FLAG_NOW = 0;
private static final int REPORT_FLAG_SUCCEED = -1;
private static final String TAG = "SupersonicAdsAdvertiserAgent";
public static SupersonicAdsAdvertiserAgent sInstance;
private static String SERVICE_PROTOCOL = "http";
private static String SERVICE_HOST_NAME = "www.supersonicads.com";
private static int SERVICE_PORT = 80;
private SupersonicAdsAdvertiserAgent() {
}
public void setDomain(String protocol, String host, int port) {
SERVICE_PROTOCOL = protocol;
SERVICE_HOST_NAME = host;
SERVICE_PORT = port;
}
public static SupersonicAdsAdvertiserAgent getInstance() {
if (sInstance == null) {
sInstance = new SupersonicAdsAdvertiserAgent();
}
return sInstance;
}
public void reportAppStarted(Context context, final String advertiserId, final String password, final String campaignId) {
final Context lContext = context.getApplicationContext();
new Thread(new Runnable() {
@Override
public void run() {
Logger.i(SupersonicAdsAdvertiserAgent.TAG, "Starting to report.");
DeviceProperties deviceProperties = DeviceProperties.getInstance(lContext);
int counter = SupersonicAdsAdvertiserAgent.this.getCounter(lContext);
StringBuilder sb = new StringBuilder().append(counter).append(campaignId);
for (String deviceId : deviceProperties.getDeviceIds().values()) {
sb.append(deviceId);
}
sb.append(password);
String advertiserSignature = SupersonicAdsAdvertiserAgent.this.toMD5(sb.toString());
try {
URL urlRequest = SupersonicAdsAdvertiserAgent.this.buildRequestWithParamters(lContext, SupersonicAdsAdvertiserAgent.DOMAIN_SERVICE_REPORT_APP_STARTED, advertiserId, campaignId, counter, advertiserSignature);
if (SupersonicAdsAdvertiserAgent.this.hasToReport(lContext)) {
int reportFlag = SupersonicAdsAdvertiserAgent.this.report(urlRequest);
SupersonicAdsAdvertiserAgent.this.storeNextTimeToReport(lContext, reportFlag);
Logger.i(SupersonicAdsAdvertiserAgent.TAG, "Done reporting.");
} else {
Logger.i(SupersonicAdsAdvertiserAgent.TAG, "Failed reporting - time has not come");
}
SupersonicAdsAdvertiserAgent.this.setCounter(lContext, counter + 1);
} catch (SuperSonicAdsAdvertiserException e) {
Logger.e(SupersonicAdsAdvertiserAgent.TAG, "Failed reporting", e);
}
}
}).start();
}
public int report(URL urlRequest) throws SuperSonicAdsAdvertiserException {
Logger.i("Report App Started request", urlRequest.toString());
try {
HttpURLConnection urlConnection = (HttpURLConnection) urlRequest.openConnection();
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setUseCaches(false);
urlConnection.setRequestMethod("GET");
urlConnection.setRequestProperty(MIME.CONTENT_TYPE, "multipart/form-data");
InputStream is = urlConnection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
while (true) {
String line = br.readLine();
if (line == null) {
break;
}
builder.append(line);
}
String response = builder.toString();
if (response == null || response.length() <= 0) {
return 0;
}
Logger.i("Report App Started response", response);
return Integer.parseInt(response);
} catch (IOException e) {
throw new SuperSonicAdsAdvertiserException(e);
}
}
public URL buildRequestWithParamters(Context context, String domainServicePath, String advertiserId, String campaignId, int counter, String advertiserSignature) throws SuperSonicAdsAdvertiserException {
DeviceProperties deviceProperties = DeviceProperties.getInstance(context);
StringBuilder requestParameters = new StringBuilder();
requestParameters.append("advertiserId=").append(advertiserId);
requestParameters.append("&campaignId=").append(campaignId);
requestParameters.append("&counter=").append(Integer.toString(counter));
requestParameters.append("&advertiserSignature=").append(advertiserSignature);
requestParameters.append("&deviceOEM=").append(deviceProperties.getDeviceOem());
requestParameters.append("&deviceModel=").append(deviceProperties.getDeviceModel());
for (String deviceIdType : deviceProperties.getDeviceIds().keySet()) {
requestParameters.append("&deviceIds[").append(deviceIdType).append("]=").append(deviceProperties.getDeviceIds().get(deviceIdType));
}
requestParameters.append("&deviceOs=").append(deviceProperties.getDeviceOsType());
requestParameters.append("&deviceOSVersion=").append(Integer.toString(deviceProperties.getDeviceOsVersion()));
requestParameters.append("&SDKVersion=").append(deviceProperties.getSupersonicSdkVersion());
if (deviceProperties.getDeviceCarrier() != null && deviceProperties.getDeviceCarrier().length() > 0) {
requestParameters.append("&mobileCarrier=").append(deviceProperties.getDeviceCarrier());
}
String file = (domainServicePath + requestParameters.toString()).replace(MinimalPrettyPrinter.DEFAULT_ROOT_VALUE_SEPARATOR, "%20");
try {
return new URL(SERVICE_PROTOCOL, SERVICE_HOST_NAME, SERVICE_PORT, file);
} catch (MalformedURLException e) {
throw new SuperSonicAdsAdvertiserException(e);
}
}
public void storeNextTimeToReport(Context context, int days) {
long nextTime = days;
if (days > 0) {
Calendar timeToReport = Calendar.getInstance();
timeToReport.add(5, days);
nextTime = timeToReport.getTimeInMillis();
Logger.i(TAG, "Next time to report: " + timeToReport.getTime().toString() + " - " + Long.toString(nextTime));
}
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCES_FILE, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putLong(PREFERENCES_KEY_REPORT_TIMESTEMP, nextTime);
editor.commit();
}
public boolean hasToReport(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCES_FILE, 0);
long lastTime = sharedPreferences.getLong(PREFERENCES_KEY_REPORT_TIMESTEMP, 0L);
if (lastTime == -1) {
return false;
}
if (lastTime == 0) {
return true;
}
long now = System.currentTimeMillis();
return now >= lastTime;
}
public void enableLogging(boolean enableLogging) {
Logger.enableLogging(true);
}
public int getCounter(Context context) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCES_FILE, 0);
return sharedPreferences.getInt(PREFERENCES_KEY_REPORT_COUNTER, 1);
}
public void setCounter(Context context, int counter) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREFERENCES_FILE, 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putInt(PREFERENCES_KEY_REPORT_COUNTER, counter);
editor.commit();
}
public String toMD5(String signature) {
try {
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(signature.getBytes());
byte[] messageDigest = digest.digest();
StringBuffer hexString = new StringBuffer();
for (byte b : messageDigest) {
String h = Integer.toHexString(b & com.flurry.android.Constants.UNKNOWN);
while (h.length() < 2) {
h = "0" + h;
}
hexString.append(h);
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
public static final class SuperSonicAdsAdvertiserException extends RuntimeException {
private static final long serialVersionUID = 8169178234844720921L;
public SuperSonicAdsAdvertiserException(Throwable t) {
super(t);
}
}
}