diff --git a/app/build.gradle b/app/build.gradle index bff880bb5..857590638 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,7 +144,7 @@ android { } staging { - buildConfigField "String", "BASE_URL", "\"https://preview.qxjiaoyou.com/\"" + buildConfigField "String", "BASE_URL", "\"https://api.zhongjialx.com/\"" buildConfigField "String", "BASE_URL_DEBUG", "BASE_URL" buildConfigField "String", "BASE_URL_STAGING", "BASE_URL" buildConfigField "String", "BASE_URL_RELEASE", "BASE_URL" @@ -286,6 +286,8 @@ dependencies { implementation(name: 'CTAccount_sdk_api_v3.7.0_all', ext: 'aar') implementation 'com.github.fodroid:XRadioGroup:v1.5' + implementation files('libs/miit_mdid_1.0.10.aar') + } repositories { diff --git a/app/libs/miit_mdid_1.0.10.aar b/app/libs/miit_mdid_1.0.10.aar new file mode 100644 index 000000000..22131484c Binary files /dev/null and b/app/libs/miit_mdid_1.0.10.aar differ diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 453c07c45..a179ed865 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -341,6 +341,7 @@ public ; public ; } +-keep class com.bun.miitmdid.core.** {*;} -dontwarn com.sdk.** -keep class com.sdk.** { *;} -dontwarn io.realm.** diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b5c3db1fd..21b82e5ba 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,9 +22,7 @@ - + diff --git a/app/src/main/assets/supplierconfig.json b/app/src/main/assets/supplierconfig.json new file mode 100644 index 000000000..5588565c1 --- /dev/null +++ b/app/src/main/assets/supplierconfig.json @@ -0,0 +1,17 @@ +{ + "supplier":{ + "vivo":{ + "appid":"100215079" + }, + "xiaomi":{ + + }, + "huawei":{ + + }, + "oppo":{ + + } + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java index 9530a96a7..07ba91668 100644 --- a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java +++ b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java @@ -16,12 +16,14 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; +import androidx.annotation.NonNull; import androidx.multidex.MultiDex; import com.alibaba.security.rp.RPSDK; import com.alipay.sdk.app.EnvUtils; import com.baidu.mobstat.StatService; import com.bumptech.glide.request.target.ViewTarget; +import com.bun.miitmdid.core.JLibrary; import com.coorchice.library.utils.LogUtils; import com.ishumei.smantifraud.SmAntiFraud; import com.llew.huawei.verifier.LoadedApkHuaWei; @@ -55,6 +57,7 @@ import com.yizhuan.erban.R; import com.yizhuan.erban.module_hall.HallDataManager; import com.yizhuan.erban.radish.wallet.RadishWalletManager; import com.yizhuan.erban.reciever.ConnectiveChangedReceiver; +import com.yizhuan.erban.utils.MiitHelper; import com.yizhuan.erban.utils.PushMessageHandler; import com.yizhuan.xchat_android_constants.XChatConstants; import com.yizhuan.xchat_android_core.Constants; @@ -114,7 +117,30 @@ public class XChatApplication extends Application { public static final String TAG = "XChatApplication"; private static XChatApplication instance; private RefWatcher mRefWatcher; + private static String oaid; + + private static boolean isSupportOaid=true; + private static int errorCode; + + public static String getOaid() { + return oaid; + } + public static String getErrorCode() { + return String.valueOf(errorCode); + } + + public static boolean isSupportOaid() { + return isSupportOaid; + } + + public static void setIsSupportOaid(boolean isSupportOaid) { + XChatApplication.isSupportOaid = isSupportOaid; + } + public static void setIsSupportOaid(boolean isSupportOaid,int ErrorCode) { + XChatApplication.isSupportOaid = isSupportOaid; + XChatApplication.errorCode=ErrorCode; + } public static XChatApplication instance() { return instance; } @@ -204,9 +230,19 @@ public class XChatApplication extends Application { } dealHuaWeiCrash(); - + //获取OAID等设备标识符 + MiitHelper miitHelper = new MiitHelper(appIdsUpdater); + miitHelper.getDeviceIds(getApplicationContext()); } + private MiitHelper.AppIdsUpdater appIdsUpdater = new MiitHelper.AppIdsUpdater() { + @Override + public void OnIdsAvalid(@NonNull String ids) { + Log.e("++++++ids: ", ids); + oaid = ids; + } + }; + /** * 初始化linkedMe */ @@ -257,6 +293,7 @@ public class XChatApplication extends Application { super.attachBaseContext(base); // you must install multiDex whatever tinker is installed! MultiDex.install(base); + JLibrary.InitEntry(base); } diff --git a/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java b/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java index 4cb24f7bd..6d2c1baf4 100644 --- a/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/decoration/adapter/MyCarAdapter.java @@ -52,10 +52,10 @@ public class MyCarAdapter extends BaseAdapter { // 时间 if (remainingDay >= 0 && status == CarInfo.STATUS_USER_CAN_USE) { String days; - if (item.getExpireDays() > 99){ - days = item.getExpireDays()+"+"; + if (item.getRemainingDay() > 99){ + days = item.getRemainingDay()+"+"; }else { - days = item.getExpireDays()+""; + days = item.getRemainingDay()+""; } binding.tvCounters.setText(String.format(binding.tvCounters.getResources().getString(R.string.decoration_status_wrapper), binding.tvCounters.getResources().getString(R.string.decoration_remainder) + days + "天")); diff --git a/app/src/main/java/com/yizhuan/erban/utils/MiitHelper.java b/app/src/main/java/com/yizhuan/erban/utils/MiitHelper.java new file mode 100644 index 000000000..0bf1a3baf --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/MiitHelper.java @@ -0,0 +1,100 @@ +package com.yizhuan.erban.utils; + +import android.content.Context; +import android.util.Log; + +import androidx.annotation.NonNull; + +import com.bun.miitmdid.core.ErrorCode; +import com.bun.miitmdid.core.IIdentifierListener; +import com.bun.miitmdid.core.MdidSdk; +import com.bun.miitmdid.core.MdidSdkHelper; +import com.bun.miitmdid.supplier.IdSupplier; +import com.yizhuan.erban.application.XChatApplication; + +/** + * Created by zheng on 2019/8/22. + */ + +public class MiitHelper implements IIdentifierListener { + + private AppIdsUpdater _listener; + + public MiitHelper(AppIdsUpdater callback) { + _listener = callback; + } + + + public void getDeviceIds(Context cxt) { + long timeb = System.currentTimeMillis(); + int nres = CallFromReflect(cxt); + // int nres=DirectCall(cxt); + long timee = System.currentTimeMillis(); + long offset = timee - timeb; + if (nres == ErrorCode.INIT_ERROR_DEVICE_NOSUPPORT) {//1008612 不支持的设备 + XChatApplication.setIsSupportOaid(false, nres); + } else if (nres == ErrorCode.INIT_ERROR_LOAD_CONFIGFILE) {//1008613 加载配置文件出错 + XChatApplication.setIsSupportOaid(false, nres); + } else if (nres == ErrorCode.INIT_ERROR_MANUFACTURER_NOSUPPORT) {//1008611 不支持的设备厂商 + XChatApplication.setIsSupportOaid(false, nres); + } else if (nres == ErrorCode.INIT_ERROR_RESULT_DELAY) {//1008614 获取接口是异步的,结果会在回调中返回,回调执行的回调可能在工作线程 + //TODO 这种情况,还不清楚怎么解决呢。暂且先返false + XChatApplication.setIsSupportOaid(false, nres); + } else if (nres == ErrorCode.INIT_HELPER_CALL_ERROR) {//1008615 反射调用出错 + XChatApplication.setIsSupportOaid(false, nres); + } + Log.d(getClass().getSimpleName(), "return value: " + String.valueOf(nres)); + + } + + + /* + * 通过反射调用,解决android 9以后的类加载升级,导至找不到so中的方法 + * + * */ + private int CallFromReflect(Context cxt) { + return MdidSdkHelper.InitSdk(cxt, true, this); + } + + /* + * 直接java调用,如果这样调用,在android 9以前没有题,在android 9以后会抛找不到so方法的异常 + * 解决办法是和JLibrary.InitEntry(cxt),分开调用,比如在A类中调用JLibrary.InitEntry(cxt),在B类中调用MdidSdk的方法 + * A和B不能存在直接和间接依赖关系,否则也会报错 + * + * */ + private int DirectCall(Context cxt) { + MdidSdk sdk = new MdidSdk(); + return sdk.InitSdk(cxt, this); + } + + @Override + public void OnSupport(boolean isSupport, IdSupplier _supplier) { + if (_supplier == null) { + return; + } + /* String oaid=_supplier.getOaid(); + String vaid=_supplier.getVAID(); + String aaid=_supplier.getAAID(); + String udid=_supplier.getUDID(); + StringBuilder builder=new StringBuilder(); + builder.append("support: ").append(isSupport?"true":"false").append("\n"); + builder.append("UDID: ").append(udid).append("\n"); + builder.append("OAID: ").append(oaid).append("\n"); + builder.append("VAID: ").append(vaid).append("\n"); + builder.append("AAID: ").append(aaid).append("\n"); + String idstext=builder.toString();*/ + + XChatApplication.setIsSupportOaid(isSupport); + + String oaid = _supplier.getOAID(); + _supplier.shutDown(); //关闭接口 + if (_listener != null) { + _listener.OnIdsAvalid(oaid); + } + } + + public interface AppIdsUpdater { + void OnIdsAvalid(@NonNull String ids); + } + +} diff --git a/app/src/main/java/com/yizhuan/erban/utils/OAIDUtil.java b/app/src/main/java/com/yizhuan/erban/utils/OAIDUtil.java new file mode 100644 index 000000000..f3f805768 --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/OAIDUtil.java @@ -0,0 +1,36 @@ +package com.yizhuan.erban.utils; + +import com.yizhuan.erban.application.XChatApplication; + +/** + * @author: hgb + * @createTime: 2019/9/27 + * @description: + * @changed by: + */ +public class OAIDUtil { + + + /** + * 获取唯一标识idfa + * + * @return + */ + /** + * 获取Oaid + * + * @return oaid或错误码 + */ + public static String getOaid() { + String idfa; + if (XChatApplication.isSupportOaid()) { + idfa = XChatApplication.getOaid(); + } else { +// idfa = ""; + idfa = "获取失败,ErrorCode: " + XChatApplication.getErrorCode(); + } + return idfa; + } + + +} diff --git a/app/src/main/res/layout/fragment_me.xml b/app/src/main/res/layout/fragment_me.xml index 6d79213f1..54a72e507 100644 --- a/app/src/main/res/layout/fragment_me.xml +++ b/app/src/main/res/layout/fragment_me.xml @@ -112,8 +112,8 @@ { - InitialModel.get().reportBaiduAdv().subscribe(); + String type = "bilibili"; + String oaid = OAIDUtil.getOaid(); + + InitialModel.get().reportAdv(oaid).subscribe(); }, R.string.ask_again, BASIC_PERMISSIONS); diff --git a/core/build.gradle b/core/build.gradle index b251ddfec..81afbf087 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -66,8 +66,8 @@ def loggerVersion = "2.2.0" def BaiduMtjVersion = "3.8.2.1" def Lombok = "1.16.20" def room_version = "1.1.1" -def umeng_common = "2.1.8" -def umeng_analytics = "8.1.4" +def umeng_common = "2.2.5" +def umeng_analytics = "8.1.6" dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) @@ -119,6 +119,7 @@ dependencies { api 'androidx.room:room-rxjava2:2.2.5' + api project(':nim_uikit') api project(':library') api project(':agora-ktv-kit-release') diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java index d8fbe4dd4..81aa74b04 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/IInitialModel.java @@ -42,7 +42,8 @@ public interface IInitialModel extends IModel { * * @return */ - Single reportBaiduAdv(); + + Single reportAdv(String oaid); int getTeenagerMode(); diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java index cc1dd09b7..8513a5ceb 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/initial/InitialModel.java @@ -34,6 +34,7 @@ import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import java.io.File; + import io.reactivex.Single; import io.reactivex.SingleOnSubscribe; import io.reactivex.SingleSource; @@ -439,14 +440,16 @@ public class InitialModel extends BaseModel implements IInitialModel { * * @return */ + @Override - public Single reportBaiduAdv() { + public Single reportAdv(String oaid) { String imei = TelephonyUtils.getImei(BasicConfig.INSTANCE.getAppContext()); String imeiMd5 = null; if (!TextUtils.isEmpty(imei)) { imeiMd5 = MD5Utils.getMD5String(imei); } - return api.reportBaiduAdv(imeiMd5) + + return api.reportAdv(imeiMd5,oaid) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } @@ -487,8 +490,8 @@ public class InitialModel extends BaseModel implements IInitialModel { * @param imeiMD5 * @return */ - @POST("/observe/baidu/callback") + @POST("/observe/callback") @FormUrlEncoded - Single reportBaiduAdv(@Field("id") String imeiMD5); + Single reportAdv(@Field("imei") String imeiMD5,@Field("oaid") String oaidMD5); } } diff --git a/gradle.properties b/gradle.properties index 6b78a0ea7..906c3db22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,5 +21,5 @@ with_jenkins=false #\u6253\u652F\u6301x86\u7684\u6A21\u62DF\u5668\u5305\u4F7F\u7528 ndk_abi_filters=arm -version_name=1.0.3 -version_code=103 \ No newline at end of file +version_name=1.0.4 +version_code=104 \ No newline at end of file diff --git a/library/src/main/java/com/yizhuan/xchat_android_library/utils/DeviceUuidFactory.java b/library/src/main/java/com/yizhuan/xchat_android_library/utils/DeviceUuidFactory.java index 743d613b8..d7ad7c920 100644 --- a/library/src/main/java/com/yizhuan/xchat_android_library/utils/DeviceUuidFactory.java +++ b/library/src/main/java/com/yizhuan/xchat_android_library/utils/DeviceUuidFactory.java @@ -10,6 +10,7 @@ import android.util.Log; import android.widget.Toast; import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import java.util.UUID; /** @@ -17,8 +18,37 @@ import java.util.UUID; */ public class DeviceUuidFactory { - protected static final String PREFS_FILE = "device_id.xml"; - protected static final String PREFS_DEVICE_ID = "device_id"; + private static final String PREFS_FILE = "device_id.xml"; + private static final String PREFS_DEVICE_ID = "device_id"; + + public static String getDeviceId(Context context) { + UUID uuid; + synchronized (DeviceUuidFactory.class) { + final SharedPreferences prefs = context.getSharedPreferences(PREFS_FILE, 0); + final String id = prefs.getString(PREFS_DEVICE_ID, null); + if (id != null) { + // Use the ids previously computed and stored in the prefs file + uuid = UUID.fromString(id); + } else { + final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); + // Use the Android ID unless it's broken, in which case fallback on deviceId, + // unless it's not available, then fallback on a random number which we store + // to a prefs file + if (!"9774d56d682e549c".equals(androidId)) { + uuid = UUID.nameUUIDFromBytes(androidId.getBytes(StandardCharsets.UTF_8)); + } else { + uuid = UUID.randomUUID(); + } + // Write the value out to the prefs file + prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).apply(); + } + } + if (uuid == null) { + return ""; + } else { + return uuid.toString(); + } + } /** * Returns a unique UUID for the current android device. As with all UUIDs, this unique ID is "very highly likely" @@ -43,38 +73,5 @@ public class DeviceUuidFactory { * * @return a UUID that may be used to uniquely identify your device for most purposes. */ - public static String getDeviceId(Context context) { - UUID uuid = null; - synchronized (DeviceUuidFactory.class) { - final SharedPreferences prefs = context.getSharedPreferences(PREFS_FILE, 0); - final String id = prefs.getString(PREFS_DEVICE_ID, null); - if (id != null) { - // Use the ids previously computed and stored in the prefs file - uuid = UUID.fromString(id); - } else { - final String androidId = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID); - // Use the Android ID unless it's broken, in which case fallback on deviceId, - // unless it's not available, then fallback on a random number which we store - // to a prefs file - try { - if (!"9774d56d682e549c".equals(androidId)) { - uuid = UUID.nameUUIDFromBytes(androidId.getBytes("utf8")); - } else { - final String deviceId = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId(); - uuid = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes("utf8")) : UUID.randomUUID(); - } - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - // Write the value out to the prefs file - prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit(); - } - } - if (uuid == null) { - return ""; - } else { - return uuid.toString(); - } - } }