rammus github:
https://github.com/OpenFlutter/rammus/blob/master/example/lib/main.dart~~~~
基本流程与作者讲的流程一致,但是有一些注意项以及代码封装附在下面
Android版本
注: 需注意
// AndroidManifest.xml
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=华为appid" />
// 此处value如果为纯数字需要用“\”转一下 否则获取值为null
小米托管弹窗未生效排查
IOS 版本
基础设置
- 为app添加证书
- 设置成功后 app中应该增加push
- 推送证书设置
https://leancloud.cn/docs/ios_push_cert.html#hash454903157
注意事项
1.MissingPluginException
热更新引起的 把原有app停止运行再重新启动
2.ios推送时传入纯数字decode之后 可能返回的时int类型
注意类型问题 类型错误会直接造成应用闪退、
配置网址注意项
https://help.aliyun.com/document_detail/30072.html?spm=a2c4g.11186623.6.630.396f40b1t4SLCb
Rammus调用单例模式
import 'package:app/model/page_point.dart';
import 'package:app/utils/route_navigation.dart';
import 'package:app/views/business_pages/list_pages/index.dart';
// import 'package:flutter/material.dart';
import 'package:rammus/rammus.dart' as rammus;
import 'dart:convert';
class BaseMonitor {
List<PagePoint> listPage = ListPage().getPages();
Map<num, PagePoint> listPageMap = {};
final navigatorKey = NavKey.navKey;
BaseMonitor() {
listPage.forEach((item) => {
if (item.id != null) {
listPageMap[item.id] = item
}
});
_ramusInitState();
}
void _ramusInitState() {
var channels = List<rammus.NotificationChannel>();
channels.add(rammus.NotificationChannel(
"AliPushNotification",
"rammus",
"rammus test",
importance: rammus.AndroidNotificationImportance.MAX,
));
rammus.setupNotificationManager(channels);
rammus.onNotification.listen((data) async{
print("----------->notification here ${data.summary}");
// setState(() {
// _platformVersion = data.summary;
// });
});
rammus.onNotificationOpened.listen((data) async{
print("-----------> ${data.title} 被点了");
Map<String, dynamic> dataExtras = json.decode(data.extras);
num sourceType = num.tryParse(dataExtras['sourceType']) ?? 0;
if (sourceType == 0) return;
num sourceId = num.tryParse(dataExtras['sourceId']) ?? 0;
if (listPageMap[sourceType] != null) {
try {
navigatorKey.currentState?.pushNamed(
listPageMap[sourceType].name,
arguments: {
'requestAttachParams': { 'sourceId': sourceId }
});
} catch(e) {
print(e);
}
}
print("-----------> ${data.summary} 被点了");
print("-----------> ${data.extras} 被点了");
print("-----------> ${data.subtitle} 被点了");
print("-----------> ${data.badge} 被点了");
});
rammus.onNotificationRemoved.listen((data) {
print("-----------> $data 被删除了");
});
rammus.onNotificationReceivedInApp.listen((data) {
print("-----------> ${data.summary} In app");
});
rammus.onNotificationClickedWithNoAction.listen((data) {
print("${data.summary} no action");
});
rammus.onMessageArrived.listen((data) {
print("received data -> ${data.content}");
// setState(() {
// _platformVersion = data.content;
// });
});
}
}
/// 在应用中注册deviceId在服务器端认证 获取deviceId方式
import 'package:rammus/rammus.dart' as rammus;
var _deviceId = await rammus.deviceId;
// 方法二 获取16位 此方法只用于获取deviceid
// 此处deviceid非阿里云注册过返回的deviceid
DeviceInfoPlugin deviceInfo = new DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
其他问题
有时候会遇见flutter报grandle的错误,这时候可以将android文件夹放在android studio中自动编译下试试。
还有一个"http://maven..."类报错 经常重启一下就ok了。
华为手机在设置代理后会导致阿里cloud服务注册时失败因此获取不到deviceid,解决方案,可以用非代理的网络进一下app,然后用代理网络登陆。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。