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);
        }
    }
}