在产品开发阶段,产品经理偶尔会要求即便应用关闭,也能接收到通知。这种要求在iOS系统上相对简单,但在安卓系统上却面临诸多挑战,这成了开发者的一大难题。尽管许多人尝试了各种方法,但问题仍未得到解决。
安卓通知接收之难
在安卓系统开发领域,通常来说,一旦应用被终止,它们便与通知功能脱钩。这现象与安卓系统的固有特性紧密相关。许多应用在关闭后,便无法再接收任何推送通知。面对这种情况,开发者常常承受来自产品经理的巨大压力,迫使他们寻找有效的解决方案。此外,不同品牌的安卓设备在处理通知功能上存在差异,这无疑增加了解决问题的难度。
产品经理或许对技术难题不太熟悉,他们更关注功能的实现。这情形让开发者陷入困境,既要满足需求,又受到技术的束缚。
常见尝试及其弊端
采用众多厂商的推送软件开发工具包是一种途径。然而,这个过程相当复杂。不同厂商的推送SDK各有其特定的要求和操作步骤。这无疑大大增加了开发者的工作量。比如,在华为平台上,必须遵守华为的规定;而在小米平台上,则面临小米的特定要求。
这款产品集成了知名品牌的推送软件开发工具包,应用间可以互相调用。然而,经过实际测试,发现并没有起到预期效果。这样一来,不仅浪费了开发的时间和资源,而且让开发者原本满怀希望的努力化为泡影,不得不另寻解决方案。
等待联盟方案的不确定性
众人都在期盼着统一推送联盟方案的出现。但这个等待的时间是未知的。产品经理是不会无限制地等待下去的。开发工作不能因为不确定的时间而停止。在等待期间,可能错失许多良机。比如,产品发布的机会可能会因此延误,进而可能导致潜在用户的大量流失。
阿里辅助渠道推送
这里有一个可以尝试的方法,那就是利用阿里提供的辅助渠道进行推送。即便关闭了应用,也能收到通知。不过,这需要做一些前期准备,比如申请各大开放平台的应用,这是必不可少的。比如小米、华为、OPPO、VIVO、魅族等平台。另外,需要注意的是,某些开放平台的推送功能是独立设置的,需要单独开通或激活。
还有文档涉及阿里推送SDK的集成工作。在阿里云的移动推送配置中,渠道平台的相关信息同样关键。必须对这些信息进行精细化的处理。
allprojects {
repositories {
//阿里推送需要
maven {
url 'http://maven.aliyun.com/nexus/content/repositories/releases'
}
}
}
后台服务器的配合
辅助渠道的推送需后台服务器协同。可参照移动推送辅助通道配置的7.3场景解析,如场景1普通推送后打开App并显示辅助弹窗,或场景2普通推送后打开并出现辅助弹窗。若后台服务器不支持,此方案将无法顺畅执行。后台服务器需妥善处理与阿里推送的对接,确保数据准确推送等事宜。
dependencies {
//阿里推送
api('com.aliyun.ams:alicloud-android-push:3.1.6') {
transitive true
}
//阿里移动推送辅助通道
api 'com.aliyun.ams:alicloud-android-third-push:3.0.9@aar'
//华为推送SDK依赖
api 'com.aliyun.ams:huawei-push:2.6.3.305'
api 'com.aliyun.ams:huawei-push-base:2.6.3.305'
}
集成实践与测试
按照文档指导,整合流程并不复杂。有些人只对部分设备进行了集成,比如小米、华为、OPPO和vivo。集成过程中,涉及到项目配置、app模块的.xml文件配置以及项目初始化等一系列步骤。在代码接收推送消息时,既要关注正常推送的代码编写,也要注意辅助渠道接收代码的规则。不过,在测试阶段,可能会遇到日志中无法显示初始化情况的问题,但不必过分担忧,可以直接进行推送测试。
在开发过程中,你是否遭遇过iOS与安卓功能实现上有较大差异的情况?若你觉得这篇内容对你有所帮助,不妨点个赞、转发一下、留下你的评论。
/**
* 初始化阿里云推送通道
*/
private void initCloudChannel() {
PushServiceFactory.init(this);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
pushService.setDebug(true);
pushService.register(this, new CommonCallback() {
@Override
public void onSuccess(String response) {
LogUtil.d("init cloudchannel success");
}
@Override
public void onFailed(String errorCode, String errorMessage) {
LogUtil.d("init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
}
});
}
/**
* 初始化辅助推送渠道
*/
private void initThirdPushChannel() {
// 注册方法会自动判断是否支持小米系统推送,如不支持会跳过注册。
MiPushRegister.register(this, AppConstant.XIAOMI_APP_ID, AppConstant.XIAOMI_APP_Key);
// 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。
HuaWeiRegister.register(this);
// OPPO通道注册
OppoRegister.register(this, AppConstant.OPPO_APP_KEY, AppConstant.OPPO_APP_SECRET); // appKey/appSecret在OPPO开发者平台获取
// // 魅族通道注册
// MeizuRegister.register(applicationContext, "appId", "appkey"); // appId/appkey在魅族开发者平台获取
// VIVO通道注册
VivoRegister.register(this);
}