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

小米托管弹窗未生效排查

https://help.aliyun.com/knowledge_detail/44410.html?spm=5176.10695662.1996646101.searchclickresult.33ff5e0eNsrj5G

IOS 版本

基础设置

  1. 为app添加证书
  2. 设置成功后 app中应该增加push

SDK%207bd1710a5c1940edb2d8f0074e710727/Untitled.png

  1. 推送证书设置

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,然后用代理网络登陆。


Astar
0 声望0 粉丝