diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 9e91709fc..9297d56b2 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -488,4 +488,4 @@ -keep public class com.adjust.sdk.**{ *; } -keep public class com.android.installreferrer.**{ *; } -keep class com.sec.android.app.samsungapps.installreferrer.**{ *; } --keep class com.miui.referrer:homereferrer.** { *; } \ No newline at end of file +-keep class com.miui.referrer.** {*;} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt index 43c130ea2..04d4f59bc 100644 --- a/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/home/fragment/MeFragment.kt @@ -165,7 +165,7 @@ class MeFragment : BaseFragment(), View.OnClickListener { mBinding.flVipSeek.isVisible = true mBinding.ivVipIcon.load(it.vipIcon) mBinding.tvVipDesc.text = - "${getString(R.string.me_short)}${RoomRankDialogUtils.getRoomRankValueText(it.levelUpScore)}${ + "${getString(R.string.me_short)}${RoomRankDialogUtils.getRoomRankValueText(it.levelUpScore - it.currScore)}${ getString(R.string.me_power_value_escalation) }" mBinding.tvVipName.text = it.vipName diff --git a/app/src/main/java/com/yizhuan/erban/ui/login/fragment/AddUserInfoFragment.java b/app/src/main/java/com/yizhuan/erban/ui/login/fragment/AddUserInfoFragment.java index c9c5124a8..7ef7a0722 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/login/fragment/AddUserInfoFragment.java +++ b/app/src/main/java/com/yizhuan/erban/ui/login/fragment/AddUserInfoFragment.java @@ -11,6 +11,7 @@ import android.widget.RadioButton; import androidx.annotation.Nullable; +import com.adjust.sdk.Adjust; import com.google.android.material.textfield.TextInputEditText; import com.google.firebase.analytics.FirebaseAnalytics; import com.sleepbot.datetimepicker.time.RadialPickerLayout; @@ -208,7 +209,8 @@ public class AddUserInfoFragment extends BaseFragment } INVITE_USER_CODE = shareCode; String finalChannel = channel; - UserModel.get().requestCompleteUserInfo(userInfo, channel, uid, roomUid, shareCode) + String adid = Adjust.getAdid(); + UserModel.get().requestCompleteUserInfo(userInfo, channel, uid, roomUid, shareCode, adid) .compose(bindUntilEvent(FragmentEvent.DESTROY)) .subscribe(new SingleObserver() { @Override diff --git a/app/src/main/java/com/yizhuan/erban/utils/DeviceUtil.kt b/app/src/main/java/com/yizhuan/erban/utils/DeviceUtil.kt new file mode 100644 index 000000000..0e629bc1a --- /dev/null +++ b/app/src/main/java/com/yizhuan/erban/utils/DeviceUtil.kt @@ -0,0 +1,118 @@ +package com.yizhuan.erban.utils + +import android.annotation.SuppressLint +import android.os.Looper +import android.provider.Settings +import android.text.TextUtils +import androidx.annotation.WorkerThread +import com.google.android.gms.ads.identifier.AdvertisingIdClient +import com.yizhuan.xchat_android_library.common.application.BaseApp +import com.yizhuan.xchat_android_library.common.util.Logger +import com.yizhuan.xchat_android_library.common.util.SPUtils +import java.io.IOException + +/** + * create by wushaocheng 2023/2/15 + * 获取设备id + */ +object DeviceUtil { + + private const val TAG = "DeviceManager" + private const val ANDROID_ID_KEY = "android_id" + + @Volatile + private var ANDROID_ID = "" + + @Volatile + private var GAID = "" + + /** + * @return 获取系统id + */ + @SuppressLint("HardwareIds") + fun getAndroidID(): String { + if (!TextUtils.isEmpty(ANDROID_ID)) { + Logger.info(TAG, "getAndroidID from cache, ANDROID_ID=$ANDROID_ID") + return ANDROID_ID + } + ANDROID_ID = SPUtils.getString(ANDROID_ID_KEY, "") + if (!TextUtils.isEmpty(ANDROID_ID)) { + Logger.info(TAG, "getAndroidID from SP, ANDROID_ID=$ANDROID_ID") + return ANDROID_ID + } + ANDROID_ID = Settings.Secure.getString( + BaseApp.getContext().contentResolver, + Settings.Secure.ANDROID_ID + ) + Logger.info(TAG, "getAndroidID from system, ANDROID_ID=$ANDROID_ID") + SPUtils.putString(ANDROID_ID_KEY, ANDROID_ID) + return ANDROID_ID + } + + /** + * 请求广告id,注意调用该方法时只能运行在子线程中不能够用在UI线程中,跟设备是否有Google Play Service有关。 + */ + @WorkerThread + fun requestGAID() { + if (Looper.myLooper() == Looper.getMainLooper()) { + //避免在主线程中操作引起ANR问题 + Logger.warn( + TAG, + "requestGAID method must called on work thread instead of UI thread!!!" + ) + return + } + try { + //以下代码会阻塞当前线程,所以不能在UI线程中使用,避免出现ANR问题,参考:https://developers.google.com/android/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient#public-static-advertisingidclient.info-getadvertisingidinfo-context-context + val info: AdvertisingIdClient.Info = + AdvertisingIdClient.getAdvertisingIdInfo( + BaseApp.getContext() + ) + val isLimitAdTrackingEnabled: Boolean = info.isLimitAdTrackingEnabled + Logger.info( + TAG, + "requestGAID isLimitAdTrackingEnabled=$isLimitAdTrackingEnabled" + ) + if (!isLimitAdTrackingEnabled) { + GAID = info.id.toString() + Logger.info(TAG, "requestGAID from system, GAID=$GAID") + } + } catch (e: IOException) { + Logger.error( + TAG, + "requestGAID IOException", + e + ) + } catch (e: IllegalStateException) { + Logger.error( + TAG, + "requestGAID IllegalStateException", + e + ) + } catch (e: com.google.android.gms.common.GooglePlayServicesNotAvailableException) { + Logger.error( + TAG, + "requestGAID GooglePlayServicesNotAvailableException", + e + ) + } catch (e: com.google.android.gms.common.GooglePlayServicesRepairableException) { + Logger.error( + TAG, + "requestGAID GooglePlayServicesRepairableException", + e + ) + } + } + + /** + * @return 获取广告id + */ + fun getGAID(): String { + Logger.info( + TAG, + "getGAID from cache, GAID=$GAID" + ) + return GAID + } + +} \ No newline at end of file diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java index ed197dc93..469f687a2 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/IUserModel.java @@ -27,19 +27,12 @@ import io.reactivex.Single; public interface IUserModel extends IModel { - /** - * 信息不全登录后调 - * - * @param userInfo - */ - public void requestCompleteUserInfo(UserInfo userInfo, String shareChannel, String shareUid, String roomUid); - /** * 信息不全登录,增加了邀请码 * * @param userInfo */ - public Single requestCompleteUserInfo(UserInfo userInfo, String shareChannel, String shareUid, String roomUid, String shareCode); + public Single requestCompleteUserInfo(UserInfo userInfo, String shareChannel, String shareUid, String roomUid, String shareCode, String adid); /** diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java index bf40147e7..b3122706a 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/UserModel.java @@ -346,13 +346,6 @@ public final class UserModel extends BaseModel implements IUserModel { .compose(RxHelper.handleSchedulers()); } - - //此方法兼容其他端,其他端最好改为 return Single的同名方法 - @Override - public void requestCompleteUserInfo(final UserInfo userInfo, String shareChannel, String shareUid, String roomUid) { - requestCompleteUserInfo(userInfo, shareChannel, shareUid, roomUid, null).subscribe(); - } - /** * 用户补全资料 * @@ -362,7 +355,7 @@ public final class UserModel extends BaseModel implements IUserModel { * @param roomUid */ @Override - public Single requestCompleteUserInfo(final UserInfo userInfo, String shareChannel, String shareUid, String roomUid, String inviteCode) { + public Single requestCompleteUserInfo(final UserInfo userInfo, String shareChannel, String shareUid, String roomUid, String inviteCode, String adid) { if (StringUtils.isEmpty(String.valueOf(userInfo.getUid()))) { return Single.error(new Throwable(ResUtil.getString(R.string.xchat_android_core_user_usermodel_08))); @@ -416,7 +409,8 @@ public final class UserModel extends BaseModel implements IUserModel { null, null, null, - inviteCode + inviteCode, + adid ) .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()) @@ -502,7 +496,8 @@ public final class UserModel extends BaseModel implements IUserModel { region, userDesc, null, - null + null, + "" ) .compose(RxHelper.handleBeanData()) .compose(RxHelper.handleSchedulers()) @@ -910,23 +905,8 @@ public final class UserModel extends BaseModel implements IUserModel { @Field("region") String region, @Field("userDesc") String userDesc, @Field("shareCode") String shareCode, - @Field("inviteCode") String inviteCode); - - /** - * @param ticket - * @param uid - * @param nick - * @param avatar - * @param gender - * @return - */ - @FormUrlEncoded - @POST("user/v2/update") - Single> updateUserInfo(@Field("ticket") String ticket, - @Field("uid") long uid, - @Field("nick") String nick, - @Field("avatar") String avatar, - @Field("gender") int gender); + @Field("inviteCode") String inviteCode, + @Field("adid") String adid); /**