284 lines
13 KiB
Java
284 lines
13 KiB
Java
package com.adjust.sdk;
|
|
|
|
import android.content.Context;
|
|
import com.adjust.sdk.scheduler.TimerOnce;
|
|
import java.lang.reflect.InvocationHandler;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
import java.lang.reflect.Proxy;
|
|
import java.util.concurrent.atomic.AtomicBoolean;
|
|
public class InstallReferrer implements InvocationHandler {
|
|
private static final String PACKAGE_BASE_NAME = "com.android.installreferrer.";
|
|
private static final int STATUS_DEVELOPER_ERROR = 3;
|
|
private static final int STATUS_FEATURE_NOT_SUPPORTED = 2;
|
|
private static final int STATUS_OK = 0;
|
|
private static final int STATUS_SERVICE_DISCONNECTED = -1;
|
|
private static final int STATUS_SERVICE_UNAVAILABLE = 1;
|
|
private Context context;
|
|
private ILogger logger;
|
|
private Object playInstallReferrer;
|
|
private final InstallReferrerReadListener referrerCallback;
|
|
private Object referrerClient;
|
|
private int retries;
|
|
private TimerOnce retryTimer;
|
|
private int retryWaitTime = 3000;
|
|
private final AtomicBoolean shouldTryToRead;
|
|
|
|
/* renamed from: com.adjust.sdk.InstallReferrer$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements Runnable {
|
|
public AnonymousClass1() {
|
|
}
|
|
|
|
@Override // java.lang.Runnable
|
|
public void run() {
|
|
InstallReferrer.this.startConnection();
|
|
}
|
|
}
|
|
|
|
public InstallReferrer(Context context, InstallReferrerReadListener installReferrerReadListener) {
|
|
ILogger logger = AdjustFactory.getLogger();
|
|
this.logger = logger;
|
|
this.playInstallReferrer = createInstallReferrer(context, installReferrerReadListener, logger);
|
|
this.context = context;
|
|
this.shouldTryToRead = new AtomicBoolean(true);
|
|
this.retries = 0;
|
|
this.retryTimer = new TimerOnce(new AnonymousClass1(), "InstallReferrer");
|
|
this.referrerCallback = installReferrerReadListener;
|
|
}
|
|
|
|
private void closeReferrerClient() {
|
|
Object obj = this.referrerClient;
|
|
if (obj != null) {
|
|
try {
|
|
Reflection.invokeInstanceMethod(obj, "endConnection", null, new Object[0]);
|
|
this.logger.debug("Install Referrer API connection closed", new Object[0]);
|
|
} catch (Exception e) {
|
|
this.logger.error("closeReferrerClient error (%s) thrown by (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
}
|
|
this.referrerClient = null;
|
|
}
|
|
}
|
|
|
|
private Object createInstallReferrer(Context context, InstallReferrerReadListener installReferrerReadListener, ILogger iLogger) {
|
|
return Reflection.createInstance("com.adjust.sdk.play.InstallReferrer", new Class[]{Context.class, InstallReferrerReadListener.class, ILogger.class}, context, installReferrerReadListener, iLogger);
|
|
}
|
|
|
|
private Object createInstallReferrerClient(Context context) {
|
|
try {
|
|
return Reflection.invokeInstanceMethod(Reflection.invokeStaticMethod("com.android.installreferrer.api.InstallReferrerClient", "newBuilder", new Class[]{Context.class}, context), "build", null, new Object[0]);
|
|
} catch (ClassNotFoundException e) {
|
|
this.logger.warn("InstallReferrer not integrated in project (%s) thrown by (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
return null;
|
|
} catch (Exception e2) {
|
|
this.logger.error("createInstallReferrerClient error (%s) from (%s)", e2.getMessage(), e2.getClass().getCanonicalName());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private Object createProxyInstallReferrerStateListener(Class cls) {
|
|
try {
|
|
return Proxy.newProxyInstance(cls.getClassLoader(), new Class[]{cls}, this);
|
|
} catch (IllegalArgumentException unused) {
|
|
this.logger.error("InstallReferrer proxy violating parameter restrictions", new Object[0]);
|
|
} catch (NullPointerException unused2) {
|
|
this.logger.error("Null argument passed to InstallReferrer proxy", new Object[0]);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private long getInstallBeginTimestampSeconds(Object obj) {
|
|
if (obj == null) {
|
|
return -1;
|
|
}
|
|
try {
|
|
return ((Long) Reflection.invokeInstanceMethod(obj, "getInstallBeginTimestampSeconds", null, new Object[0])).longValue();
|
|
} catch (Exception e) {
|
|
this.logger.error("getInstallBeginTimestampSeconds error (%s) thrown by (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
private Object getInstallReferrer() {
|
|
Object obj = this.referrerClient;
|
|
if (obj == null) {
|
|
return null;
|
|
}
|
|
try {
|
|
return Reflection.invokeInstanceMethod(obj, "getInstallReferrer", null, new Object[0]);
|
|
} catch (Exception e) {
|
|
this.logger.error("getInstallReferrer error (%s) thrown by (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private Class getInstallReferrerStateListenerClass() {
|
|
try {
|
|
return Class.forName("com.android.installreferrer.api.InstallReferrerStateListener");
|
|
} catch (Exception e) {
|
|
this.logger.error("getInstallReferrerStateListenerClass error (%s) from (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private long getReferrerClickTimestampSeconds(Object obj) {
|
|
if (obj == null) {
|
|
return -1;
|
|
}
|
|
try {
|
|
return ((Long) Reflection.invokeInstanceMethod(obj, "getReferrerClickTimestampSeconds", null, new Object[0])).longValue();
|
|
} catch (Exception e) {
|
|
this.logger.error("getReferrerClickTimestampSeconds error (%s) thrown by (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
private String getStringInstallReferrer(Object obj) {
|
|
if (obj == null) {
|
|
return null;
|
|
}
|
|
try {
|
|
return (String) Reflection.invokeInstanceMethod(obj, "getInstallReferrer", null, new Object[0]);
|
|
} catch (Exception e) {
|
|
this.logger.error("getStringInstallReferrer error (%s) thrown by (%s)", e.getMessage(), e.getClass().getCanonicalName());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private void onInstallReferrerSetupFinishedInt(int i) {
|
|
boolean z2 = true;
|
|
if (i != -1) {
|
|
if (i == 0) {
|
|
try {
|
|
Object installReferrer = getInstallReferrer();
|
|
String stringInstallReferrer = getStringInstallReferrer(installReferrer);
|
|
long referrerClickTimestampSeconds = getReferrerClickTimestampSeconds(installReferrer);
|
|
long installBeginTimestampSeconds = getInstallBeginTimestampSeconds(installReferrer);
|
|
this.logger.debug("installReferrer: %s, clickTime: %d, installBeginTime: %d", stringInstallReferrer, Long.valueOf(referrerClickTimestampSeconds), Long.valueOf(installBeginTimestampSeconds));
|
|
this.logger.debug("Install Referrer read successfully. Closing connection", new Object[0]);
|
|
this.referrerCallback.onInstallReferrerRead(stringInstallReferrer, referrerClickTimestampSeconds, installBeginTimestampSeconds);
|
|
} catch (Exception e) {
|
|
this.logger.warn("Couldn't get install referrer from client (%s). Retrying...", e.getMessage());
|
|
}
|
|
} else if (i == 1) {
|
|
this.logger.debug("Could not initiate connection to the Install Referrer service. Retrying...", new Object[0]);
|
|
} else if (i == 2) {
|
|
this.logger.debug("Install Referrer API not supported by the installed Play Store app. Closing connection", new Object[0]);
|
|
} else if (i != 3) {
|
|
this.logger.debug("Unexpected response code of install referrer response: %d. Closing connection", Integer.valueOf(i));
|
|
} else {
|
|
this.logger.debug("Install Referrer API general errors caused by incorrect usage. Retrying...", new Object[0]);
|
|
}
|
|
z2 = false;
|
|
} else {
|
|
this.logger.debug("Play Store service is not connected now. Retrying...", new Object[0]);
|
|
}
|
|
if (z2) {
|
|
retry();
|
|
return;
|
|
}
|
|
this.shouldTryToRead.set(false);
|
|
closeReferrerClient();
|
|
}
|
|
|
|
private void retry() {
|
|
if (!this.shouldTryToRead.get()) {
|
|
this.logger.debug("Should not try to read Install referrer", new Object[0]);
|
|
closeReferrerClient();
|
|
} else if (this.retries + 1 > 2) {
|
|
this.logger.debug("Limit number of retry of %d for install referrer surpassed", 2);
|
|
} else {
|
|
long fireIn = this.retryTimer.getFireIn();
|
|
if (fireIn > 0) {
|
|
this.logger.debug("Already waiting to retry to read install referrer in %d milliseconds", Long.valueOf(fireIn));
|
|
return;
|
|
}
|
|
int i = this.retries + 1;
|
|
this.retries = i;
|
|
this.logger.debug("Retry number %d to connect to install referrer API", Integer.valueOf(i));
|
|
this.retryTimer.startIn((long) this.retryWaitTime);
|
|
}
|
|
}
|
|
|
|
private void startConnection(Class cls, Object obj) {
|
|
try {
|
|
Reflection.invokeInstanceMethod(this.referrerClient, "startConnection", new Class[]{cls}, obj);
|
|
} catch (InvocationTargetException e) {
|
|
if (Util.hasRootCause(e)) {
|
|
this.logger.error("InstallReferrer encountered an InvocationTargetException %s", Util.getRootCause(e));
|
|
}
|
|
} catch (Exception e2) {
|
|
this.logger.error("startConnection error (%s) thrown by (%s)", e2.getMessage(), e2.getClass().getCanonicalName());
|
|
}
|
|
}
|
|
|
|
@Override // java.lang.reflect.InvocationHandler
|
|
public Object invoke(Object obj, Method method, Object[] objArr) throws Throwable {
|
|
if (method == null) {
|
|
this.logger.error("InstallReferrer invoke method null", new Object[0]);
|
|
return null;
|
|
}
|
|
String name = method.getName();
|
|
if (name == null) {
|
|
this.logger.error("InstallReferrer invoke method name null", new Object[0]);
|
|
return null;
|
|
}
|
|
this.logger.debug("InstallReferrer invoke method name: %s", name);
|
|
if (objArr == null) {
|
|
this.logger.warn("InstallReferrer invoke args null", new Object[0]);
|
|
objArr = new Object[0];
|
|
}
|
|
for (Object obj2 : objArr) {
|
|
this.logger.debug("InstallReferrer invoke arg: %s", obj2);
|
|
}
|
|
if (name.equals("onInstallReferrerSetupFinished")) {
|
|
if (objArr.length != 1) {
|
|
this.logger.error("InstallReferrer invoke onInstallReferrerSetupFinished args lenght not 1: %d", Integer.valueOf(objArr.length));
|
|
return null;
|
|
}
|
|
Object obj3 = objArr[0];
|
|
if (!(obj3 instanceof Integer)) {
|
|
this.logger.error("InstallReferrer invoke onInstallReferrerSetupFinished arg not int", new Object[0]);
|
|
return null;
|
|
}
|
|
Integer num = (Integer) obj3;
|
|
if (num == null) {
|
|
this.logger.error("InstallReferrer invoke onInstallReferrerSetupFinished responseCode arg is null", new Object[0]);
|
|
return null;
|
|
}
|
|
onInstallReferrerSetupFinishedInt(num.intValue());
|
|
} else if (name.equals("onInstallReferrerServiceDisconnected")) {
|
|
this.logger.debug("Connection to install referrer service was lost. Retrying ...", new Object[0]);
|
|
retry();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void startConnection() {
|
|
Class installReferrerStateListenerClass;
|
|
Object createProxyInstallReferrerStateListener;
|
|
Object obj = this.playInstallReferrer;
|
|
if (obj != null) {
|
|
try {
|
|
Reflection.invokeInstanceMethod(obj, "startConnection", null, new Object[0]);
|
|
return;
|
|
} catch (Exception e) {
|
|
this.logger.error("Call to Play startConnection error: %s", e.getMessage());
|
|
}
|
|
}
|
|
if (AdjustFactory.getTryInstallReferrer()) {
|
|
closeReferrerClient();
|
|
if (!this.shouldTryToRead.get()) {
|
|
this.logger.debug("Should not try to read Install referrer", new Object[0]);
|
|
return;
|
|
}
|
|
Context context = this.context;
|
|
if (context != null) {
|
|
Object createInstallReferrerClient = createInstallReferrerClient(context);
|
|
this.referrerClient = createInstallReferrerClient;
|
|
if (createInstallReferrerClient != null && (installReferrerStateListenerClass = getInstallReferrerStateListenerClass()) != null && (createProxyInstallReferrerStateListener = createProxyInstallReferrerStateListener(installReferrerStateListenerClass)) != null) {
|
|
startConnection(installReferrerStateListenerClass, createProxyInstallReferrerStateListener);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|