Tcash v4.1版本的 MD5 值为:54953883746c24854c9065ba91cea245
以下内容为反编译后的 OneSignalRestClient.java 源代码,内容仅作参考
package com.onesignal;
import android.net.TrafficStats;
import android.net.http.Headers;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.onesignal.OneSignal;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.Thread;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.Scanner;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;
public class OneSignalRestClient {
private static final String BASE_URL = "https://api.onesignal.com/";
static final String CACHE_KEY_GET_TAGS = "CACHE_KEY_GET_TAGS";
static final String CACHE_KEY_REMOTE_PARAMS = "CACHE_KEY_REMOTE_PARAMS";
private static final int GET_TIMEOUT = 60000;
private static final String OS_ACCEPT_HEADER = "application/vnd.onesignal.v1+json";
private static final String OS_API_VERSION = "1";
private static final int THREAD_ID = 10000;
private static final int TIMEOUT = 120000;
OneSignalRestClient() {
}
public static abstract class ResponseHandler {
void onSuccess(String response) {
}
void onFailure(int statusCode, String response, Throwable throwable) {
}
}
private static int getThreadTimeout(int timeout) {
return timeout + 5000;
}
public static void put(final String url, final JSONObject jsonBody, final ResponseHandler responseHandler) {
new Thread(new Runnable() {
@Override
public void run() {
OneSignalRestClient.makeRequest(url, HttpPut.METHOD_NAME, jsonBody, responseHandler, OneSignalRestClient.TIMEOUT, null);
}
}, "OS_REST_ASYNC_PUT").start();
}
public static void post(final String url, final JSONObject jsonBody, final ResponseHandler responseHandler) {
new Thread(new Runnable() {
@Override
public void run() {
OneSignalRestClient.makeRequest(url, "POST", jsonBody, responseHandler, OneSignalRestClient.TIMEOUT, null);
}
}, "OS_REST_ASYNC_POST").start();
}
public static void get(final String url, final ResponseHandler responseHandler, @NonNull final String cacheKey) {
new Thread(new Runnable() {
@Override
public void run() {
OneSignalRestClient.makeRequest(url, null, null, responseHandler, OneSignalRestClient.GET_TIMEOUT, cacheKey);
}
}, "OS_REST_ASYNC_GET").start();
}
public static void getSync(String url, ResponseHandler responseHandler, @NonNull String cacheKey) {
makeRequest(url, null, null, responseHandler, GET_TIMEOUT, cacheKey);
}
public static void putSync(String url, JSONObject jsonBody, ResponseHandler responseHandler) {
makeRequest(url, HttpPut.METHOD_NAME, jsonBody, responseHandler, TIMEOUT, null);
}
public static void postSync(String url, JSONObject jsonBody, ResponseHandler responseHandler) {
makeRequest(url, "POST", jsonBody, responseHandler, TIMEOUT, null);
}
public static void makeRequest(final String url, final String method, final JSONObject jsonBody, final ResponseHandler responseHandler, final int timeout, final String cacheKey) {
if (method == null || !OneSignal.shouldLogUserPrivacyConsentErrorMessageForMethodName(null)) {
final Thread[] callbackThread = new Thread[1];
Thread connectionThread = new Thread(new Runnable() {
@Override
public void run() {
callbackThread[0] = OneSignalRestClient.startHTTPConnection(url, method, jsonBody, responseHandler, timeout, cacheKey);
}
}, "OS_HTTPConnection");
connectionThread.start();
try {
connectionThread.join(getThreadTimeout(timeout));
if (connectionThread.getState() != Thread.State.TERMINATED) {
connectionThread.interrupt();
}
if (callbackThread[0] != null) {
callbackThread[0].join();
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static Thread startHTTPConnection(String url, String method, JSONObject jsonBody, ResponseHandler responseHandler, int timeout, @Nullable String cacheKey) {
Thread callbackThread;
String eTag;
String eTag2;
HttpURLConnection con = null;
if (Build.VERSION.SDK_INT >= 26) {
TrafficStats.setThreadStatsTag(THREAD_ID);
}
try {
try {
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: Making request to: https://api.onesignal.com/" + url);
con = newHttpURLConnection(url);
con.setUseCaches(false);
con.setConnectTimeout(timeout);
con.setReadTimeout(timeout);
con.setRequestProperty("SDK-Version", "onesignal/android/031400");
con.setRequestProperty("Accept", OS_ACCEPT_HEADER);
if (jsonBody != null) {
con.setDoInput(true);
}
if (method != null) {
con.setRequestProperty(HTTP.CONTENT_TYPE, "application/json; charset=UTF-8");
con.setRequestMethod(method);
con.setDoOutput(true);
}
if (jsonBody != null) {
String strJsonBody = jsonBody.toString();
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: " + method + " SEND JSON: " + strJsonBody);
byte[] sendBytes = strJsonBody.getBytes("UTF-8");
con.setFixedLengthStreamingMode(sendBytes.length);
OutputStream outputStream = con.getOutputStream();
outputStream.write(sendBytes);
}
if (cacheKey != null && (eTag2 = OneSignalPrefs.getString(OneSignalPrefs.PREFS_ONESIGNAL, OneSignalPrefs.PREFS_OS_ETAG_PREFIX + cacheKey, null)) != null) {
con.setRequestProperty("if-none-match", eTag2);
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: Adding header if-none-match: " + eTag2);
}
int httpResponse = con.getResponseCode();
OneSignal.Log(OneSignal.LOG_LEVEL.VERBOSE, "OneSignalRestClient: After con.getResponseCode to: https://api.onesignal.com/" + url);
switch (httpResponse) {
case 200:
case HttpStatus.SC_ACCEPTED:
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: Successfully finished request to: https://api.onesignal.com/" + url);
Scanner scanner = new Scanner(con.getInputStream(), "UTF-8");
String json = scanner.useDelimiter("\\A").hasNext() ? scanner.next() : "";
scanner.close();
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: " + (method == null ? "GET" : method) + " RECEIVED JSON: " + json);
if (cacheKey != null && (eTag = con.getHeaderField(Headers.ETAG)) != null) {
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: Response has etag of " + eTag + " so caching the response.");
OneSignalPrefs.saveString(OneSignalPrefs.PREFS_ONESIGNAL, OneSignalPrefs.PREFS_OS_ETAG_PREFIX + cacheKey, eTag);
OneSignalPrefs.saveString(OneSignalPrefs.PREFS_ONESIGNAL, OneSignalPrefs.PREFS_OS_HTTP_CACHE_PREFIX + cacheKey, json);
}
callbackThread = callResponseHandlerOnSuccess(responseHandler, json);
break;
case 304:
String cachedResponse = OneSignalPrefs.getString(OneSignalPrefs.PREFS_ONESIGNAL, OneSignalPrefs.PREFS_OS_HTTP_CACHE_PREFIX + cacheKey, null);
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: " + (method == null ? "GET" : method) + " - Using Cached response due to 304: " + cachedResponse);
callbackThread = callResponseHandlerOnSuccess(responseHandler, cachedResponse);
break;
default:
OneSignal.Log(OneSignal.LOG_LEVEL.DEBUG, "OneSignalRestClient: Failed request to: https://api.onesignal.com/" + url);
InputStream inputStream = con.getErrorStream();
if (inputStream == null) {
inputStream = con.getInputStream();
}
String jsonResponse = null;
if (inputStream != null) {
Scanner scanner2 = new Scanner(inputStream, "UTF-8");
jsonResponse = scanner2.useDelimiter("\\A").hasNext() ? scanner2.next() : "";
scanner2.close();
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "OneSignalRestClient: " + method + " RECEIVED JSON: " + jsonResponse);
} else {
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "OneSignalRestClient: " + method + " HTTP Code: " + httpResponse + " No response body!");
}
callbackThread = callResponseHandlerOnFailure(responseHandler, httpResponse, jsonResponse, null);
break;
}
} catch (Throwable t) {
if ((t instanceof ConnectException) || (t instanceof UnknownHostException)) {
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "OneSignalRestClient: Could not send last request, device is offline. Throwable: " + t.getClass().getName());
} else {
OneSignal.Log(OneSignal.LOG_LEVEL.WARN, "OneSignalRestClient: " + method + " Error thrown from network stack. ", t);
}
callbackThread = callResponseHandlerOnFailure(responseHandler, -1, null, t);
if (con != null) {
con.disconnect();
}
}
return callbackThread;
} finally {
if (con != null) {
con.disconnect();
}
}
}
private static Thread callResponseHandlerOnSuccess(final ResponseHandler handler, final String response) {
if (handler == null) {
return null;
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
ResponseHandler.this.onSuccess(response);
}
}, "OS_REST_SUCCESS_CALLBACK");
thread.start();
return thread;
}
private static Thread callResponseHandlerOnFailure(final ResponseHandler handler, final int statusCode, final String response, final Throwable throwable) {
if (handler == null) {
return null;
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
ResponseHandler.this.onFailure(statusCode, response, throwable);
}
}, "OS_REST_FAILURE_CALLBACK");
thread.start();
return thread;
}
private static HttpURLConnection newHttpURLConnection(String url) throws IOException {
return (HttpURLConnection) new URL(BASE_URL + url).openConnection();
}
}