140 lines
4.6 KiB
Kotlin
140 lines
4.6 KiB
Kotlin
package com.gh.common
|
||
|
||
import android.annotation.SuppressLint
|
||
import android.preference.PreferenceManager
|
||
import com.gh.base.GHUmengNotificationService
|
||
import com.gh.common.constant.Config
|
||
import com.gh.common.exposure.meta.MetaUtil
|
||
import com.gh.common.util.edit
|
||
import com.gh.common.util.toJson
|
||
import com.gh.common.util.toObject
|
||
import com.gh.gamecenter.BuildConfig
|
||
import com.gh.gamecenter.entity.AliasEntity
|
||
import com.gh.gamecenter.retrofit.RetrofitManager
|
||
import com.halo.assistant.HaloApp
|
||
import com.lightgame.utils.Utils
|
||
import com.umeng.commonsdk.UMConfigure
|
||
import com.umeng.message.IUmengRegisterCallback
|
||
import com.umeng.message.PushAgent
|
||
import io.reactivex.schedulers.Schedulers
|
||
import okhttp3.MediaType
|
||
import okhttp3.RequestBody
|
||
import org.android.agoo.huawei.HuaWeiRegister
|
||
import org.android.agoo.mezu.MeizuRegister
|
||
import org.android.agoo.xiaomi.MiPushRegistar
|
||
import org.json.JSONObject
|
||
|
||
object PushManager {
|
||
|
||
var deviceToken: String? = ""
|
||
|
||
private var mPreviousAlias: AliasEntity? = null
|
||
private var mApplication = HaloApp.getInstance().application
|
||
|
||
const val SP_PUSH_ALIAS = "push_alias"
|
||
|
||
@JvmStatic
|
||
fun init(channel: String) {
|
||
//初始化友盟推送
|
||
UMConfigure.init(mApplication,
|
||
Config.UMENG_APPKEY, channel,
|
||
UMConfigure.DEVICE_TYPE_PHONE,
|
||
Config.UMENG_MESSAGE_SECRET)
|
||
|
||
// 注册小米、华为和魅族通道
|
||
MiPushRegistar.register(mApplication, Config.MIPUSH_APPID, Config.MIPUSH_APPKEY)
|
||
HuaWeiRegister.register(mApplication)
|
||
MeizuRegister.register(mApplication, BuildConfig.MEIZUPUSH_APPID, BuildConfig.MEIZUPUSH_APPKEY)
|
||
|
||
//友盟推送
|
||
val pushAgent = PushAgent.getInstance(mApplication)
|
||
pushAgent.onAppStart() // 开启App统计
|
||
|
||
//注册推送服务,每次调用register方法都会回调该接口
|
||
registerDevice()
|
||
|
||
val aliasInSp = PreferenceManager.getDefaultSharedPreferences(mApplication).getString(SP_PUSH_ALIAS, "")
|
||
mPreviousAlias = aliasInSp?.toObject()
|
||
|
||
if (mPreviousAlias == null) {
|
||
getAndSetAlias()
|
||
}
|
||
|
||
// 完全自定义处理(透传)
|
||
pushAgent.setPushIntentServiceClass(GHUmengNotificationService::class.java)
|
||
}
|
||
|
||
private fun registerDevice() {
|
||
PushAgent.getInstance(mApplication).register(object : IUmengRegisterCallback {
|
||
override fun onSuccess(dToken: String) {
|
||
//注册成功会返回device token
|
||
deviceToken = dToken
|
||
getAndSetAlias()
|
||
Utils.log("deviceToken::$dToken")
|
||
}
|
||
|
||
override fun onFailure(s: String, s1: String) {
|
||
Utils.log("deviceToken::" + "注册失败")
|
||
}
|
||
})
|
||
}
|
||
|
||
@SuppressLint("CheckResult")
|
||
@JvmStatic
|
||
fun getAndSetAlias() {
|
||
if (deviceToken.isNullOrEmpty()) {
|
||
registerDevice()
|
||
return
|
||
}
|
||
|
||
val meta = MetaUtil.getMeta()
|
||
|
||
val jsonObject = JSONObject()
|
||
jsonObject.put("device_token", deviceToken)
|
||
jsonObject.put("imei", meta.imei)
|
||
jsonObject.put("android_id", meta.android_id)
|
||
jsonObject.put("model", meta.model)
|
||
jsonObject.put("manufacturer", meta.manufacturer)
|
||
jsonObject.put("os", meta.os)
|
||
jsonObject.put("os_version", meta.android_version)
|
||
jsonObject.put("mac", meta.mac)
|
||
|
||
val body = RequestBody.create(MediaType.parse("application/json"), jsonObject.toString())
|
||
|
||
RetrofitManager.getInstance(mApplication).api.getAlias(body)
|
||
.subscribeOn(Schedulers.io())
|
||
.subscribe(
|
||
{ setAlias(it) },
|
||
{ it.printStackTrace() }
|
||
)
|
||
}
|
||
|
||
@JvmStatic
|
||
fun setAlias(alias: AliasEntity) {
|
||
val pushAgent = PushAgent.getInstance(mApplication)
|
||
|
||
mPreviousAlias = alias
|
||
PreferenceManager.getDefaultSharedPreferences(mApplication).edit {
|
||
putString(SP_PUSH_ALIAS, mPreviousAlias?.toJson())
|
||
}
|
||
|
||
pushAgent.setAlias(alias.alias, alias.aliasType) { b, s ->
|
||
Utils.log("注册别名 $b + $s")
|
||
}
|
||
}
|
||
|
||
@JvmStatic
|
||
fun deleteAlias() {
|
||
val pushAgent = PushAgent.getInstance(mApplication)
|
||
|
||
mPreviousAlias?.let {
|
||
pushAgent.deleteAlias(it.alias, it.aliasType) { b, s ->
|
||
Utils.log("删除别名 $b + $s")
|
||
}
|
||
}
|
||
PreferenceManager.getDefaultSharedPreferences(mApplication).edit {
|
||
putString(SP_PUSH_ALIAS, "")
|
||
}
|
||
mPreviousAlias = null
|
||
}
|
||
} |