文档章节

Flutter实现阿里云推送通知的功能

EmilyWu
 EmilyWu
发布于 09/20 17:39
字数 1130
阅读 126
收藏 0

前言:

       最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之前的推送一直都是用Fcm推送,这是我第一次在Flutter项目使用阿里云推送,在一开始使用Rammus插件的时候也遇到一些问题,经过不断的调式,最终实现了"阿里云推送通知"的功能。接下来我简单总结一下在Flutter项目中如何使用Rammus实现阿里云推送,希望对大家有所帮助。

先上效果图:

实现的步骤:

1.在pubspec.yaml添加sdk

dependencies:
  ...
  cupertino_icons: ^0.1.2
  # 添加
  rammus: ^0.0.3 

2.Android上的配置

解决Rammus插件和项目之间 “Manifest Merge冲突”的问题

2.1在Android project目录下的build.gradle文件中设置Seal插件的地址

buildscript {
    ext.kotlin_version = '1.3.50'
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        //添加插件
        classpath 'me.xx2bab.gradle:seal-manifest-precheck-plugin:1.0.0' 
    }
}

2.2在Android module的build.gradle文件中引用插件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
//引用插件
apply plugin: 'seal'

2.3在Android module的build.gradle文件中配置合并时的删除规则

def projectRoot = project.getRootProject().rootDir.absolutePath

android {
    ...
    
    //添加
    def manifestPath = [
            // for AAR of Release
            // see note below
            projectRoot + '/build-cache',
            projectRoot + '/rammus',
            // for AAR of SNAPSHOT
            projectRoot + '/app/build/intermediates/exploded-aar'
    ]

    def removeAttrs = [
            'android:theme'
    ]

    def replaceValues = [
            'android:theme'
    ]


    seal {
        enabled = true
        manifests = manifestPath

        appAttrs {
            enabled = true
            attrsShouldRemove = removeAttrs
        }

        appReplaceValues {
            enabled = true
            valuesShouldRemove = replaceValues
        }
    }


}

2.4在Android根目录下的 gradle.properties 文件中添加如下内容

org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true
//添加
android.buildCacheDir=./build-cache

2.5在Android的清单文件修改Application的属性 (重新构建项目,合并冲突的问题就完美解决了)

<application
        android:allowBackup="false"  //添加
        android:name=".MyApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="flutter_alipush"
        tools:replace="android:allowBackup,android:label,android:icon" //添加
        tools:ignore="GoogleAppIndexingWarning">

3.阿里云平台注册应用

首先去网址:https://emas.console.aliyun.com/  去注册自己的应用,不需要下载  json文件,拿到的AppKey和AppSecret直接放在Android的清单文件相应的位置即可。

  

4.在Android里面写一个application继承自FlutterApplication(阿里云推送要求)

class MyApplication:FlutterApplication() {
    override fun onCreate() {
        super.onCreate()
        PushServiceFactory.init(applicationContext)
        val pushService = PushServiceFactory.getCloudPushService()
        val callback = object : CommonCallback {
            override fun onSuccess(response: String?) {
                Log.e("TAG","success $response")
            }
            override fun onFailed(errorCode: String?, errorMessage: String?) {
                Log.e("TAG","error $errorMessage")
            }
        }
        pushService.register(applicationContext,callback)
        //一定要添加这一句代码
        pushService.setPushIntentService(RammusPushIntentService::class.java)
    }
}

5.在Android的清单文件设置appKey,appSecret (到这里Android的配置就完成了,不用再添加阿里云相关插件,因为Rammus插件已经集成进去了)

<application
        android:allowBackup="false"
        android:name=".MyApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="flutter_alipush"
        tools:replace="android:allowBackup,android:label,android:icon"
        tools:ignore="GoogleAppIndexingWarning"> <!--添加android:name:".MyApplication"-->

        <meta-data
            android:name="com.alibaba.app.appkey"
            android:value="27858563"/> <!--请填写你自己的- appKey-->
        <meta-data
            android:name="com.alibaba.app.appsecret"
            android:value="ab81d560e1ff5afc0c143fe33938e031 "/><!--请填写你自己的- appsecret-->

        <activity></activity>

</application>

6.iOS上的配置

请参考 https://help.aliyun.com/document_detail/30072.html?spm=a2c4g.11186623.6.630.396f40b1t4SLCb

7.导包

import 'package:rammus/rammus.dart' as rammus;

8.获取device id,然后post给后台进行指定设备的推送(post给后台的代码在这里不展示)

//获取device id的方法
  Future<void> initPlatformState() async {
    String deviceId;
    try {
      deviceId = await rammus.deviceId;
    } on PlatformException {
      deviceId = 'Failed to get device id.';
    }
    if (!mounted) return;
    setState(() {
      _deviceId = deviceId;
      //接下来你要做的事情
      //1.将device id通过接口post给后台,然后进行指定设备的推送
      //2.推送的时候,在Android8.0以上的设备都要设置通知通道
    });
  }

9.通知栏的展示以及跳转指定的页面

    //推送通知的处理 (注意,这里的id:针对Android8.0以上的设备来设置通知通道,客户端的id跟阿里云的通知通道要一致,否则收不到通知)
    rammus.setupNotificationManager(id: "alipush notification",name: "rammus",description: "rammus test",);
    rammus.onNotification.listen((data){
      print("----------->notification here ${data.summary}");
    });
    rammus.onNotificationOpened.listen((data){//这里是点击通知栏回调的方法
      print("-----------> ${data.summary} 被点了");
      //点击通知后跳转的页面
      Navigator.of(context).push(new MaterialPageRoute(
          builder: (ctx) => new SettingPage()));
    });
  }

10.阿里云平台的推送(关键设置)

11.总结:

在Flutter上已经实现”阿里云推送通知“的功能啦,欢迎大家围观。源码地址: https://github.com/wupeilinloveu/flutter_alipush ,如果有什么疑问的话,可以留言联系我哦!

© 著作权归作者所有

EmilyWu
粉丝 15
博文 14
码字总数 14064
作品 0
佛山
Android工程师
私信 提问
Flutter使用FCM实现前后台的推送

前言: 目前Flutter的FCM推送只支持Android,需要google service支持。下面我简单总结一下在Flutter中如何实现FCM前后台推送,主要包括“通知消息”的推送和“底部导航的未读消息”推送。 实...

EmilyWu
04/10
610
3
玩 High API 系列之:实现钉钉Ding功能

摘要: 钉钉是企业IM市场上的领先者,深受中小企业客户的喜欢,就再几天前刚刚宣布用户数超过1亿!在钉钉里面有个特别实用的功能,那就是Ding一下,如果你发的消息特别紧急,可以直接通过短信...

阿里云云栖社区
2018/02/05
85
0
Flutter学习笔记(29)--Flutter如何与native进行通信

如需转载,请注明出处:Flutter学习笔记(29)--Flutter如何与native进行通信 前言:在我们开发Flutter项目的时候,难免会遇到需要调用native api或者是其他的情况,这时候就需要处理Flutter...

CurtisWgh
10/12
0
0
WePush 3.8.0 发布,专注批量推送的小而美的工具

WePush 3.8.0 已发布,一个专注批量推送的小而美的工具。 更新内容如下: v3.8.0 feature:新增支持钉钉消息类型(工作通知消息和群机器人消息) bug fix:修复微信公众号相关消息使用外部acc...

周波-RememBerBer
09/09
1K
2
Android 消息推送:第三方消息推送平台 详细解析

前言 消息推送在 开发中应用的场景是越来越多了,比如说电商产品进行活动宣传、资讯类产品进行新闻推送等等,如下图: 推送消息截图 本文将介绍 中实现消息推送的第三方推送的详细解决方案 ...

Carson_Ho
2017/05/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
11
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部