注:部分信息需要用到上篇文章里面的字段
附属的信息大致有:
1.渠道名称
2.APP的build号(app的版本会自动读取,不用自己上报)
3.接口地址使用的是正式服还是测试服
4.APP的编译是debug还是release
5.登录后用户的id
6.登录后用户的手机号(方便联系用户解决bug)
7.上报自定义的异常或者统计
import android.app.Application
import android.text.TextUtils
import com.aimymusic.midamusic.application.App
import com.aimymusic.midamusic.application.BuildConfigApp
import com.aimymusic.midamusic.repository.UserRepository
import com.blankj.utilcode.util.AppUtils
import com.blankj.utilcode.util.Utils
import com.tencent.bugly.crashreport.CrashReport
object BuglyManager {
/**
* 初始化bugly
*/
fun initBugly(application: Application, id: String) { //bugly异常检测
//初始化key
CrashReport.initCrashReport(application, id, BuildConfigApp.DEBUG)
//上报渠道信息
if (BuildConfigApp.isDeveloper(application)) {
//开发人员自己运行的异常渠道收集
CrashReport.setAppChannel(
application,
"开发人员AS运行-${if (BuildConfigApp.DEBUG) "Debug" else "Release"}"
)
} else {
//正常打包的异常渠道收集
CrashReport.setAppChannel(application, BuildConfigApp.getChannelName(application))
}
//上报build信息
CrashReport.putUserData(application, "build", AppUtils.getAppVersionCode().toString())
//上报地址使用的是正式服还是测试服
CrashReport.putUserData(
application,
"httpType",
if (BuildConfigApp.DEBUG) "Debug" else "Release"
)
//上报APP运行使用的是Release包还是Debug包
CrashReport.putUserData(
application,
"appType",
if (BuildConfigApp.DEBUG) "Debug" else "Release"
)
setBuglyUserInfo()
}
/**
* 给bugly设置用户信息
*/
private fun setBuglyUserInfo() {
UserRepository.userInfo?.let { user ->
CrashReport.setUserId(user.uid?.toString())
//上报用户id
CrashReport.putUserData(App.INSTANCE, "userId", user.uid?.toString() ?: "")
//上报用户手机号
CrashReport.putUserData(App.INSTANCE, "phoneNumber", user.phone ?: "")
}
}
/**
* 上报指定的异常信息
*/
fun reportException(msg: String?, code: Int) {
val message = if (TextUtils.isEmpty(msg)) "message == null" else msg
CrashReport.setUserSceneTag(Utils.getApp(), code)
CrashReport.postCatchedException(Throwable(message))
}
}
附:上报自定义的异常,需要在后台设置TAG(最好定义一个常量类,里面全部放对应的Bugly的TAG对应id),调用reportException的时候将TAG的id一并传入(原本setUserSceneTag是设置异常上报的使用场景的,但是这里用他来方便筛选自定义的异常)
网友评论