Android集成Freshchat SDK时LocalBroadcastManager的替代方案

我正在尝试将自己的Android项目与Freshchat SDK集成,该SDK依赖LocalBroadcastManager,但该类目前已被废弃,请问此场景下应当使用什么方案替代LocalBroadcastManager?相关实现代码如下:
@Override public void onCreate() { super.onCreate(); initialiseFreshchat(); registerBroadcastReceiver(); } private void registerBroadcastReceiver() { IntentFilter intentFilterRestoreID = new IntentFilter(Freshchat.FRESHCHAT_USER_RESTORE_ID_GENERATED); getLocalBroadcastManager().registerReceiver(restoreIdReceiver, intentFilterRestoreID); } public LocalBroadcastManager getLocalBroadcastManager() { return LocalBroadcastManager.getInstance(getApplicationContext()); } @Override public void onTerminate() { super.onTerminate(); getLocalBroadcastManager().unregisterReceiver(restoreIdReceiver); } BroadcastReceiver restoreIdReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String restoreId = Freshchat.getInstance(getApplicationContext()).getUser().getRestoreId(); Toast.makeText(context, "Restore id: " + restoreId, Toast.LENGTH_SHORT).show(); } };
解决方案
LocalBroadcastManager 从AndroidX Core 1.1.0版本开始被标记为废弃,针对当前集成Freshchat SDK的场景,按优先级选择以下替代方案即可:
- 优先使用SDK自带的回调监听
目前新版本的Freshchat SDK已经适配了LocalBroadcastManager废弃的变更,原生提供了恢复ID的监听接口,不需要自己实现广播注册逻辑,直接替换原有广播相关代码即可,不存在兼容问题。
实现代码如下:
这种写法不需要手动注册、注销接收器,不会出现生命周期泄漏问题,是官方推荐的对接方式。// 在initialiseFreshchat()方法完成SDK初始化后添加以下代码即可 Freshchat.getInstance(getApplicationContext()).setRestoreIdListener(restoreId -> { Toast.makeText(getApplicationContext(), "Restore id: " + restoreId, Toast.LENGTH_SHORT).show(); }); - 若当前使用的SDK版本较低,未提供上述回调接口
短期可以继续保留LocalBroadcastManager相关代码:废弃仅代表官方不再对这个类做功能更新,不会从依赖库中移除,现有功能可以正常运行。后续可以通过升级SDK版本替换为官方回调,也可以选择Jetpack组件中的LiveData/SharedFlow实现应用内本地事件分发,替代本地广播的能力。
注意:不要用全局广播替换
LocalBroadcastManager,全局广播支持跨应用接收/发送,存在数据泄漏、被恶意应用干扰逻辑的安全风险。
内容的提问来源于stack exchange,提问作者Omar Abdelazeem
相关产品推荐
相关产品推荐

