推送平台的选择
现在单个平台的推送的到达率已经很低了,建议采用 小米+华为+ 第三方推送来完成推送工作。即在小米手机上采用小米推送,在华为手机上采用华为推送,其他机型采用第三方推送
判断手机的代码
public class SystemUtil {
private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level";
private static final String KEY_EMUI_VERSION = "ro.build.version.emui";
private static final String KEY_EMUI_CONFIG_HW_SYS_VERSION = "ro.confg.hw_systemversion";
private static final String PRODUCT_MANUFACTURER = "ro.product.manufacturer";
//ro.product.manufacturer=Huawei 华为制造
public static SysType getSystem(){
String SYS = null;
try {
Properties prop = new Properties();
prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));
if(prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null){
//小米系统
return SysType.XiaoMi;
}else if(prop.getProperty(KEY_EMUI_API_LEVEL, null) != null
||prop.getProperty(KEY_EMUI_VERSION, null) != null
||prop.getProperty(KEY_EMUI_CONFIG_HW_SYS_VERSION, null) != null
||prop.getProperty(PRODUCT_MANUFACTURER, " ").equalsIgnoreCase("Huawei")
){
//华为系统 或者华为制造
return SysType.HuaWei;
}
} catch (IOException e){
e.printStackTrace();
return SysType.Other;
}
return SysType.Other;
}
public enum SysType {
XiaoMi,//小米
HuaWei,//华为
Other
}
}
集成的方式
- 小米手机使用小米推送
- 华为手机采用透传推送+第三方推送,华为的透传用于激活第三方推送服务
- 其他手机采用第三方推送(如极光、友盟这些。。。)
注:这是目前我使用的集成方式,大家可以按照自己的项目情况而定。
说说遇到的坑吧
写这个也是为了记录少找弯路
- 华为推送有两个版本,新版本需要下载一个叫”华为移动平台”的app才能用,并且功能还在完善中,建议使用旧的
- 华为的推送给所有人是不能用的,可能以后会修复,目前我测试还是有这个问题
- 小米手机:在app进程被杀掉后,小米的透传是不能唤醒server的,可能没推送到,如果有使用到透传功能记得测试下这种情况