Flutter阿里云推送插件aliyun_push的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter阿里云推送插件aliyun_push的使用

一、快速入门

  1. 创建应用

    • 在EMAS平台中创建应用,与您要加载SDK的端应用进行关联。创建应用请参见快速入门
  2. 应用配置

    • Android

      • 厂商通道配置:移动推送全面支持接入厂商通道,请参见配置厂商通道秘钥
      • 短信联动配置:移动推送支持与短信联动,通过补充推送短信提升触达效果,请参见短信联动配置
      • 多包名配置:移动推送支持预先针对各渠道添加包名,实现一次推送,全渠道包消息可达。请参见配置多包名
    • iOS

二、安装

pubspec.yaml中加入依赖项:

dependencies:
  aliyun_push: 0.1.7

三、配置

3.1 Android
  1. AppKey、AppSecret配置

    在Flutter工程的android模块下的AndroidManifest.xml文件中设置AppKey、AppSecret:

    <application android:name="*****">
        <meta-data android:name="com.alibaba.app.appkey" android:value="*****"/> 
        <meta-data android:name="com.alibaba.app.appsecret" android:value="****"/> 
    </application>
    

    com.alibaba.app.appkeycom.alibaba.app.appsecret为您在EMAS平台上的App对应信息。在EMAS控制台的应用管理中或在下载的配置文件中查看AppKey和AppSecret。

    AppKey和AppSecret请务必写在<application>标签下,否则SDK会报找不到AppKey的错误。

  2. 消息接收Receiver配置

    创建消息接收Receiver,继承自com.alibaba.sdk.android.push.MessageReceiver,并在对应回调中添加业务处理逻辑,可参考以下代码:

    public class MyMessageReceiver extends MessageReceiver {
        // 消息接收部分的LOG_TAG
        public static final String REC_TAG = "receiver";
        @Override
        public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
            // TODO处理推送通知
            Log.e("MyMessageReceiver", "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
        }
        @Override
        public void onMessage(Context context, CPushMessage cPushMessage) {
            Log.e("MyMessageReceiver", "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
        }
        @Override
        public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
            Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
        @Override
        protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
            Log.e("MyMessageReceiver", "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
        @Override
        protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {
            Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
        }
        @Override
        protected void onNotificationRemoved(Context context, String messageId) {
            Log.e("MyMessageReceiver", "onNotificationRemoved");
        }
    }
    
    

    将该receiver添加到AndroidManifest.xml文件中:

    <!-- 消息接收监听器 (用户可自主扩展) -->
    <receiver
        android:name=".MyMessageReceiver"
        android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 -->
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
        </intent-filter>
    </receiver>
    
  3. 辅助通道集成

    对于国内Android生态中的设备管控较严的情况,分别接入了相应的设备厂商推送辅助通道以提高这些设备上的到达率。辅助通道的集成可参考辅助通道集成

    在Flutter工程的android模块下的AndroidManifest.xml文件中设置各个辅助通道的配置参数:

    <application android:name="*****">
       <meta-data android:name="com.huawei.hms.client.appid" android:value="appid=xxxxx" />
    
       <meta-data android:name="com.vivo.push.api_key" android:value="" />
       <meta-data android:name="com.vivo.push.app_id" android:value="" />
    
       <meta-data android:name="com.hihonor.push.app_id" android:value="" />
    
       <meta-data android:name="com.oppo.push.key" android:value="" />
       <meta-data android:name="com.oppo.push.secret" android:value="" />
       <meta-data android:name="com.xiaomi.push.id" android:value="" />
       <meta-data android:name="com.xiaomi.push.key" android:value="" />
    
       <meta-data android:name="com.meizu.push.id" android:value="" />
       <meta-data android:name="com.meizu.push.key" android:value="" />
    
       <meta-data android:name="com.gcm.push.sendid" android:value="" />
       <meta-data android:name="com.gcm.push.applicationid" android:value="" />
       <meta-data android:name="com.gcm.push.projectid" android:value="" />
       <meta-data android:name="com.gcm.push.api.key" android:value="" />
    </application>
    

更多关于Flutter阿里云推送插件aliyun_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter阿里云推送插件aliyun_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter项目中集成并使用阿里云推送插件(aliyun_push)时,你可以按照以下步骤进行配置和实现。这里提供一个基本的代码案例,帮助你快速上手。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加aliyun_push依赖:

dependencies:
  flutter:
    sdk: flutter
  aliyun_push: ^最新版本号  # 请替换为最新的版本号

然后运行flutter pub get来获取依赖。

2. 配置Android和iOS项目

Android配置

  1. android/app/src/main/AndroidManifest.xml中添加权限和配置
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 添加必要的权限 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

    <!-- 阿里云推送服务配置 -->
    <application
        ... >
        
        <meta-data
            android:name="com.aliyun.ams.AppId"
            android:value="你的阿里云App ID"/> <!-- 替换为你的阿里云App ID -->

        <service
            android:name="com.aliyun.ams.message.impl.PushServiceImpl"
            android:exported="true">
            <intent-filter>
                <action android:name="com.aliyun.push.ACTION_MESSAGE"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </service>

        <receiver
            android:name="com.aliyun.ams.message.impl.NotificationClickReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="com.aliyun.push.ACTION_NOTIFICATION_CLICKED"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </receiver>
        
        <!-- 其他配置 -->
        ...
    </application>
</manifest>
  1. android/app/build.gradle中配置阿里云SDK
android {
    ...
    defaultConfig {
        ...
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
        manifestPlaceholders = [
                AMS_APPKEY: "你的阿里云App Key",  // 替换为你的阿里云App Key
                AMS_APPSECRET: "你的阿里云App Secret"  // 替换为你的阿里云App Secret
        ]
    }
    ...
}

iOS配置

对于iOS,阿里云推送需要一些额外的配置,这通常涉及到在Xcode中进行设置,但由于篇幅限制和iOS配置的复杂性,这里只简要说明需要配置的步骤:

  1. 在Xcode中配置App ID和推送权限。
  2. 在Info.plist中添加阿里云推送相关的配置。
  3. 在AppDelegate中初始化阿里云推送SDK。

由于iOS配置相对复杂且多变,建议参考阿里云官方文档进行详细配置。

3. 初始化和使用aliyun_push插件

在你的Flutter代码中初始化并使用aliyun_push插件:

import 'package:flutter/material.dart';
import 'package:aliyun_push/aliyun_push.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    _initPush();
  }

  Future<void> _initPush() async {
    // 初始化阿里云推送
    try {
      bool result = await AliyunPush.init(
        appId: "你的阿里云App ID",  // 替换为你的阿里云App ID
        appKey: "你的阿里云App Key",  // 替换为你的阿里云App Key
        appSecret: "你的阿里云App Secret",  // 替换为你的阿里云App Secret
      );
      print("Push init result: $result");
    } catch (e) {
      print("Failed to init push: $e");
    }

    // 监听推送消息
    AliyunPush.onMessageReceived.listen((Map<String, dynamic> message) {
      print("Received message: $message");
      // 处理推送消息
    });

    // 监听通知点击事件
    AliyunPush.onNotificationClicked.listen((Map<String, dynamic> notification) {
      print("Notification clicked: $notification");
      // 处理通知点击事件
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Aliyun Push Demo'),
        ),
        body: Center(
          child: Text('Waiting for push messages...'),
        ),
      ),
    );
  }
}

注意事项

  1. 确保你的阿里云推送服务已经正确配置并启用。
  2. 在发布应用前,请仔细检查并测试推送功能。
  3. 由于iOS和Android的配置差异较大,建议分别参考阿里云官方文档进行详细配置。

这个代码案例提供了一个基本的集成框架,你可以根据自己的需求进行扩展和修改。

回到顶部