- android厂推解析数据问题
mob flutter集成了tcp和厂推功能 , 对于tcp的数据,可以通过addPushReceiver方法获取到点击消息,并做跳转
MobpushPlugin.addPushReceiver((Object event) {
try {
if (event != null) {
Map<String, dynamic> map = convert.jsonDecode(event);
if (map["action"] == 2) {
//1是收到消息,2是点击消息
("mob _onEvent -> click notification ").p;
String pushData =
(map["result"]["extrasMap"]["pushData"] as String)
.replaceAll("\\", "");
}
}
} catch (e) {
print(e);
}
}, (Object event) {
("mob _onError -> :$event").p;
});
但是如果是厂推的消息点击的话 , flutter那边是没有做对应的通道解析的 . 不过flutter已经做好了原生通道的intent解析(我并没用使用 , 一开始不知道flutter有这个方法了) ,.
如果想要获取到厂推的消息点击后携带信息 , 那么是需要从intent中获取到信息 ,保存 ,再通过MethodChannel获取. mob的方法是: 1.解析数据 ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/432e4f715e8deafae11dea17f5342190.png) 2.使用MethodChannel获取启动的pushData(这一步需要自己做);
我这边的思路是: 1.activity的onCreate中获取intent保存在activity; 2.字符串截取pushData=后面的数据 , 正则取出第一个json ; 3.使用MethodChannel获取启动的pushData; 代码如下:(kotlin版)
var bundle: Bundle? = null;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
try {
bundle = intent.extras;
} catch (e: Exception) {
e.printStackTrace()
}
}
try {
//1.在Activity的onCreate 方法内保存bundle;
var str :String= bundle.toString();
//2.截取pushData=后面的字段
if(str.contains("pushData")){
str=str.substring(str.indexOf("pushData=")+9);
//正则取出第一个json数据
var regex:Regex= Regex("(?=\\{)[^\\s]*(?<=\\\"\\})");
var match=regex.find(str);//匹配
var pushData: String? = match?.value.toString();//获取值
Log.i("test", "bundle contains key : pushData $pushData");
result!!.success(pushData);
}else{
Log.i("test", "bundle do not contains key : pushData ");
result!!.success(null);
}
} catch (e: Exception) {
e.printStackTrace();
result!!.success(null);
}
- IOS在后台运行无法收到推送
应用在前端一般走的是TCp通道,应用处于后台走的是APNS通道,APN收不到,是与您自己设置的开发环境以及证书有关的,检查这几点:
第一,初始化我们sdk的appkey,检查自己项目里默认的plist文件里配置初始化我们sdk的appkey等信息是否有问题,或者多加空格这些,
第二,检查是否加了ATS的http权限配置
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
第三确定推送相关权限打开 Push Notifications 和Background Modes 打开 ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/5f70495e7aeebccc7d087b30499ffd00.png)
第四代码环境看设置的是开发环境还是生产环境 // 开发环境 false, 线上环境 true MobpushPlugin.setAPNsForProduction(false)如果是开发环境,那么自己项目环境就要设置一样的开发环境, ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/52ac93d32c36f84e29631c91e3ecb877.png)
,然后后台推送或者调用api推送环境都要设置开发环境 ![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/066ed56686f8a7c5c5da1eefd6390df3.png)
生产环境同理,需要注意: 1.测试生产环境,需要achiver 出ipa包,正常情况测试环境和生产环境token是不一样的,如果直接修改xcode的release环境直接测试, token没变化 ,会导致测试环境和生产环境混乱,并不能测试生产环境,所以需要achiver出ipa包测生产,可以上传到蒲公英安装测试,手机上之前测试的要卸载重新安装测试才行,最后检查在我们后台上传的开发证书和生产证书是不是对的,有没有上传颠倒等,密码最好是6位数密码.
|