华为手机 APP被杀也能收到消息
在华为官网获取相应的参数然后去云巴官网配置
华为参数
签名文件生成的sha256
jar包的获取
云巴的jar包
AndroidManifest.xml配置详情见demo
- 权限
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- for location only -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- 参数配置
<!-- YUNBA_APPKEY 值来自 Portal 上应用程序对应的 AppKey-->
<meta-data
android:name="YUNBA_APPKEY"
android:value="参数" />
<!-- YUNBA_SECRETKEY 值来自 Portal 上应用程序对应的 SecretKey-->
<meta-data
android:name="YUNBA_SECRETKEY"
android:value="参数" />
<!--配置华为的appid-->
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="参数" />
- 其它
<service
android:name="io.yunba.android.core.YunBaService"
android:exported="true" />
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的 YunBa服务相互拉起的功能。 -->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service
android:name="io.yunba.android.core.YunBaDaemonService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.android.intent.daemon.pullup" />
<category android:name="你的applicationId xxxxxx" />
</intent-filter>
</service>
//自己定一个广播接收
<receiver android:name="io.yunba.thirdpart.receiver.DemoReceiver">
<intent-filter>
<action android:name="io.yunba.android.MESSAGE_RECEIVED_ACTION" />
<action android:name="io.yunba.android.PRESENCE_RECEIVED_ACTION" />
<action android:name="io.yunba.android.MESSAGE_CONNECTED_ACTION" />
<action android:name="io.yunba.android.MESSAGE_DISCONNECTED_ACTION" />
<action android:name="io.yunba.android.MESSAGE_THIRD_PART_REGISTER_RESULT_ACTION"/>
<category android:name="你的applicationId xxxxxx" />
</intent-filter>
</receiver>
<receiver android:name="io.yunba.android.core.YunBaReceiver">
<intent-filter>
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<!-- 第三方相关 :接收Push消息(注册、Push消息、Push连接状态、标签,LBS上报结果)广播 -->
<receiver android:name="io.yunba.android.thirdparty.receiver.ThirdPartyHWReceiver">
<intent-filter>
<!-- 必须,用于接收token-->
<action android:name="com.huawei.android.push.intent.REGISTRATION" />
<!-- 必须,用于接收消息-->
<action android:name="com.huawei.android.push.intent.RECEIVE" />
<!-- 可选,用于点击通知栏或通知栏上的按钮后触发onEvent回调-->
<action android:name="com.huawei.android.push.intent.CLICK" />
<!-- 可选,查看push通道是否连接,不查看则不需要-->
<action android:name="com.huawei.intent.action.PUSH_STATE" />
<!-- 可选,标签、地理位置上报回应,不上报则不需要 -->
<action android:name="com.huawei.android.push.plugin.RESPONSE" />
</intent-filter>
</receiver>
<receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver">
<intent-filter>
<!-- 接收通道发来的通知栏消息,兼容老版本PUSH -->
<action android:name="com.huawei.intent.action.PUSH" />
</intent-filter>
</receiver>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
看返回值
- 混淆配置
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.hms.support.api.**{*;}
-keep class com.xiaomi.**{*;}
-keep class org.apache.thrift.**{*;}
-dontwarn org.eclipse.paho.client.mqttv3.**
-keep class org.eclipse.paho.client.mqttv3.** { *; }
-keep class io.yunba.android.** { *; }
-dontnote io.yunba.android.**
-dontnote org.eclipse.paho.client.mqttv3.**
参数配置正确在华为官网发消息就能收到了
发消息
重要的注意事项
- 在华为官网SHA256一定要配置正确
- 云巴官网一定要配置appid这些参数
- app测试得时候一定要用正式版的签名文件,debug是不行的,这里容易忽略
- 通过云巴api发消息notification_content这个json参数不能为空,为空收不到 , 我就被后端坑了
-
华为移动服务更新一下
最好配置一下签名文件,都引用正式签名文件
- 去华为官网看看流程
接入流程
- 关于华为的自定义动作
-
和我们使用Intent一样,显示意图隐式意图都可以,贴一下官方例子
麻烦
-
腹肌撕裂者
上面配置完成就Ok了
自定义广播可以收到透传消息(可以不再通知栏显示,然后处理消息)
- 这是在app内处理消息,被杀收不到
import com.huawei.hms.support.api.push.PushReceiver;
/**
* Created by Administrator on 2018/3/30.
*/
public class MHwPushReceiver extends PushReceiver {
@Override
public void onToken(Context context, String token, Bundle extras) {
System.out.println("push 收到消息token");
}
@Override
public boolean onPushMsg(Context context, byte[] msg, Bundle bundle) {
System.out.println("push onPushMsg " + new String(msg));
return true;//这里我是返回的true
}
public void onEvent(Context context, Event event, Bundle extras) {
System.out.println("push onEvent");
}
@Override
public void onPushState(Context context, boolean pushState) {
System.out.println("push onPushState");
}
}
- 没去研究是哪一个action
<receiver
android:name="文件路径.MHwPushReceiver"
android:process=":pushservice">
<intent-filter>
<action android:name="com.huawei.android.push.intent.REFRESH_PUSH_CHANNEL"/>
<action android:name="com.huawei.intent.action.PUSH"/>
<action android:name="com.huawei.intent.action.PUSH_ON"/>
<action android:name="com.huawei.android.push.PLUGIN"/>
<action android:name="com.huawei.android.push.intent.RECEIVE"/>
</intent-filter>
</receiver>
- 用于看日志的
@Override
public void onReceive(Context context, Intent intent) {
//调试华为推送
if (YunBaManager.MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {
String status = "Yunba - Connected";
String topicORalias = intent.getStringExtra(YunBaManager.MQTT_TOPIC);
String message = intent.getStringExtra(YunBaManager.MQTT_MSG);
YunBaManager.report(context, "1001", topicORalias);
StringBuilder msgsb = new StringBuilder();
msgsb.append("receive message from server: ")
.append("topic/alias").append(" = ").append(topicORalias).append(" ,")
.append(YunBaManager.MQTT_MSG).append(" = ").append(message);
System.out.println("pointercnPush MESSAGE_RECEIVED_ACTION 1 " + msgsb.toString());
} else if (YunBaManager.PRESENCE_RECEIVED_ACTION.equals(intent.getAction())) {
String status = "Yunba - Connected";
String topic = intent.getStringExtra(YunBaManager.MQTT_TOPIC);
String message = intent.getStringExtra(YunBaManager.MQTT_MSG);
StringBuilder msgsb = new StringBuilder();
msgsb.append("receive message from presence: ")
.append(YunBaManager.MQTT_TOPIC).append(" = ").append(topic).append(" ,")
.append(YunBaManager.MQTT_MSG).append(" = ").append(message);
System.out.println("pointercnPush PRESENCE_RECEIVED_ACTION 2 " + msgsb.toString());
} else if (YunBaManager.MESSAGE_CONNECTED_ACTION.equals(intent.getAction())) {
String status = "Yunba - Connected";
System.out.println("pointercnPush PRESENCE_RECEIVED_ACTION 3 connection success.");
} else if (YunBaManager.MESSAGE_DISCONNECTED_ACTION.equals(intent.getAction())) {
String status = "Yunba - DisConnected";
System.out.println("pointercnPush MESSAGE_DISCONNECTED_ACTION 4 connection fail.");
} else if (YunBaManager.MESSAGE_THIRD_PART_REGISTER_RESULT_ACTION.equals(intent.getAction())) {
// 获取该广播属于哪个平台,YunbaManager.PLATFORM_HMS 即华为,YunBaManager.PLATFORM_XIAOMI 即小米
int platform = intent.getIntExtra(YunBaManager.THIRD_PART_PLATFORM, 0);
if (platform == YunBaManager.PLATFORM_HMS) {
// 获取 token 数据
String token = intent.getStringExtra(YunBaManager.THIRD_PART_REGISTER_RESULT_CODE);
System.out.println("pointercnPush MESSAGE_THIRD_PART_REGISTER_RESULT_ACTION 5 " + token);
} else if (platform == YunBaManager.PLATFORM_XIAOMI) {
// 获取 token 数据
String token = intent.getStringExtra(YunBaManager.THIRD_PART_REGISTER_RESULT_CODE);
System.out.println("pointercnPush MESSAGE_THIRD_PART_REGISTER_RESULT_ACTION 5 " + token);
}
}
}













网友评论