|
/

友盟push sdk初始化崩溃

Ddon***@xueqiu.com
发布于 5 年前
659
消息推送 U-Push

val channelId = when {
SystemHelper.isDebug() -> "debug"
SystemHelper.isDevBuild() -> "dev"
SystemHelper.isBetaBuild() -> "beta"
else -> ChannelHelper.getChannelID()
}
这是我们的channelid获取逻辑

UMConfigure.init(App.INSTANCE, AppKeyManager.getUmengKey(), channelId, UMConfigure.DEVICE_TYPE_PHONE, AppKeyManager.getUmengMassageSecret())
这是Umeng初始化逻辑,随后调用获取token方法,调用之后出现崩溃,且无法获取堆栈信息,通过有限的日志分析应该是友盟推送的so库崩溃了,但不知是什么原因
PushAgent.getInstance(App.INSTANCE).register(object : IUmengRegisterCallback {
override fun onSuccess(deviceToken: String?) {
DLog.d("deviceToken = $deviceToken")
SnowballDefaultStorage.getStorage().putString(KEY_UM_PUSH, deviceToken)
}

override fun onFailure(s1: String?, s2: String?) {
DLog.d("onFailure() s1 = $s1, s2 = $s2")
}
})

该崩溃只有在非release包,传入了appKey与MassageSecret之后会有崩溃

Android平台,push版本6.3.3

6个回答
 
5 年前

您好,为保证您的在集成【友盟+】统计SDK之后,能够满足工信部相关合规要求,

1.您应确保在App安装后首次冷启动时,在Applicaiton.onCreate函数中调用预初始化函数UMConfigure.preInit(),并弹出隐私授权弹窗给您的App用户。预初始化函数不会采集设备信息,也不会向友盟后台上报数据,同时preInit耗时极少,不会影响冷启动体验。所以务必在Applicaiton.onCreate函数中调用,否则统计日活是不准确的!预初始化方法请参考https://developer.umeng.com/docs/119267/detail/118588#title-hm8-22f-6pc。

2.确保App首次冷启动时,在用户阅读您的《隐私政策》并取得用户授权之后,才调用正式初始化函数UMConfigure.init()初始化统计SDK,此时SDK才会真正采集设备信息并上报数据。反之,如果用户不同意《隐私政策》授权,则不能调用UMConfigure.init()初始化函数。SDK初始化方案请参考https://developer.umeng.com/docs/119267/detail/118588#title-yb4-p8i-jdc

 
5 年前

为保证在集成【友盟+】统计SDK之后,能够满足工信部相关合规要求,您应确保在App安装后首次冷启动时,在Applicaiton.onCreate函数中调用预初始化函数UMConfigure.preInit(),并弹出隐私授权弹窗给您的App用户。

预初始化函数不会采集设备信息,也不会向友盟后台上报数据,同时preInit耗时极少,不会影响冷启动体验。所以务必在Applicaiton.onCreate函数中调用,否则统计日活是不准确的

 
5 年前

现在应用对于隐私协议这块管的比较严,友盟官方有这样的提示,需要你在隐私协议勾选同意之后的按钮事件里面调用初始化方法,这样能够满足工信部相关合规要求,也能正常的使用友盟的相关功能,具体的方式还是要参考官方文档:https://developer.umeng.com/docs/119267/detail/118588#title-hm8-22f-6pc

 
5 年前

楼楼,可以预初始化,然后获取网络等授权后再初始化

 
5 年前

请附崩溃日志。

初始化接口:


/**
* 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
* 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
* UMConfigure.init调用中appkey和channel参数请置为null)。
*/

UMConfigure.init(Context context,String appkey,String channel,int deviceType,String pushSecret);

或者


/**
* 注意:如果您已经在AndroidManifest.xml中配置过appkey和channel值,可以调用此版本初始化函数。
*/

UMConfigure.init(Context context,int deviceType,String pushSecret);

示例:


UMConfigure.init(this,"您的appkey","您的渠道",UMConfigure.DEVICE_TYPE_PHONE, "");

参数解释:

  1. appkey和channl必须保持和预初始化一致!!!
  2. deviceType:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子
  3. pushSecret:Push推送业务的secret

程序退出时,用于保存统计数据的API。

如果开发者调用kill或者exit之类的方法杀死进程,或者双击back键会杀死进程,请务必在此之前调用onKillProcess方法,用来保存统计数据。


public static void onKillProcess(Context context);

参数

含义

context

当前宿主进程的ApplicationContext上下文。

完整代码示例

详细可见友盟+SDK集成Demo


public class App extends Application {

SharedPreferencesHelper sharedPreferencesHelper;

@Override
public void onCreate() {
super.onCreate();
sharedPreferencesHelper=new SharedPreferencesHelper(this,"umeng");

//设置LOG开关,默认为false
UMConfigure.setLogEnabled(true);

//友盟预初始化
UMConfigure.preInit(getApplicationContext(),"59892f08310c9307b60023d0","Umeng");

/**
* 打开app首次隐私协议授权,以及sdk初始化,判断逻辑请查看SplashTestActivity
*/

//判断是否同意隐私协议,uminit为1时为已经同意,直接初始化umsdk
if(sharedPreferencesHelper.getSharedPreference("uminit","").equals("1")){
//友盟正式初始化
UmInitConfig umInitConfig=new UmInitConfig();
umInitConfig.UMinit(getApplicationContext());
}
}
}

 
5 年前

help!!!啊啊啊

Loading ...
登录社区,分享你的经验