Flutter推送通知插件jpush_flutter_android的使用

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

Flutter推送通知插件jpush_flutter_android的使用

pub package GitHub license

简介

集成极光推送的 Android 厂商通道 SDK 的 Flutter 插件。

环境要求

需与 jpush_flutter 3.1.8 插件配合使用。

版本对应关系

jpush_flutter jpush_flutter_android
3.1.8 0.0.3
3.0.9-3.1.7 0.0.1

快速开始

添加依赖

jpush_flutter_android 添加至 pubspec.yaml 引用:

dependencies:
  jpush_flutter_android: ^latest_version

# jpush_android:
  # huawei:
    # enable: false # 默认为true,可不写
  # xiaomi:
    # enable: false # 默认为true,可不写
  # meizu:
    # enable: false # 默认为true,可不写
  # vivo:
    # enable: false # 默认为true,可不写
  # oppo:
    # enable: false # 默认为true,可不写
  # honor:
    # enable: false # 默认为true,可不写

相关配置

配置参数

build.gradle 中添加如下参数:

android {
  ......
  
  defaultConfig {
    applicationId = "xx.xx.xx"
    ......
    
    manifestPlaceholders = [
        JPUSH_PKGNAME     : applicationId,
        JPUSH_APPKEY      : "你的 Appkey", // JPush 上注册的包名对应的 Appkey.
        JPUSH_CHANNEL     : "developer-default", // 暂时填写默认值即可.
        XIAOMI_APPKEY     : "您的应用对应的小米的APPKEY",
        XIAOMI_APPID      : "您的应用对应的小米的APPID",
        MEIZU_APPKEY      : "MZ-您的应用对应的魅族的APPKEY",
        MEIZU_APPID       : "MZ-您的应用对应的魅族的APPID",
        VIVO_APPKEY       : "您的应用对应的VIVO的APPKEY",
        VIVO_APPID        : "您的应用对应的VIVO的APPID",
        OPPO_APPKEY       : "OP-您的应用对应的OPPO的APPKEY",
        OPPO_APPID        : "OP-您的应用对应的OPPO的APPID",
        OPPO_APPSECRET    : "OP-您的应用对应的OPPO的APPSECRET",
        HONOR_APPID       : "您的应用对应的Honor的APPID"
    ]
  }
}

后续可能会支持在 pubspec.yaml 中添加这些参数,暂不支持。

配置代码混淆

代码混淆已集成在插件内,无须额外配置。

配置权限

所需的基础权限已经集成在配置的 jar 文件包内,无须额外配置。

配置华为推送

配置 agconnect-services.json 文件

参考 厂商通道参数申请指南 获取 agconnect-services.json 文件,并配置到 app 目录下。

完整示例 Demo

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 jpush_flutter_android 插件:

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

import 'package:flutter/services.dart';
import 'package:jpush_flutter_android/jpush_flutter_android.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  final _jPushFlutterAndroidPlugin = JPushFlutterAndroid();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    // We also handle the message potentially returning null.
    try {
      platformVersion =
          await _jPushFlutterAndroidPlugin.getPlatformVersion() ?? 'Unknown platform version';
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Text('Running on: $_platformVersion\n'),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用jpush_flutter_android插件来实现推送通知的一个代码案例。请注意,这个例子假设你已经有一个基本的Flutter项目结构,并且已经完成了Android的基本配置。

1. 添加依赖

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

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

然后运行flutter pub get来安装依赖。

2. 配置Android项目

2.1 在android/app/src/main/AndroidManifest.xml中添加必要的权限和JPush的配置:

<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.WAKE_LOCK" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

    <!-- JPush Service -->
    <service
        android:name="cn.jpush.android.service.DownloadService"
        android:enabled="true"
        android:exported="false" >
    </service>
    <service
        android:name="cn.jpush.android.service.PushService"
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="cn.jpush.android.intent.REGISTER" />
            <action android:name="cn.jpush.android.intent.UNREGISTER" />
            <action android:name="cn.jpush.android.intent.UPDATE_REGISTRATION" />
            <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
            <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
            <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
            <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" />
            <category android:name="com.example.yourapp" />
        </intent-filter>
    </service>
    <receiver android:name="cn.jpush.android.api.JPushReceiver"
        android:enabled="true"
        android:exported="false">
        <intent-filter>
            <action android:name="cn.jpush.android.intent.REGISTRATION" />
            <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
            <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
            <action android:name="cn.jpush.android.intent.NOTIFICATION_OPEN" />
            <action android:name="cn.jpush.android.intent.CONNECTION" />
        </intent-filter>
    </receiver>

    <!-- 其他配置 -->

</manifest>

2.2 在android/app/build.gradle中添加JPush的Maven仓库和依赖:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://registry.jpush.io/repository/maven-releases/' }
    }
}

dependencies {
    implementation 'cn.jiguang.sdk:jpush:3.9.3'  // 请替换为实际的最新版本号
    implementation 'cn.jiguang.sdk:jcore:2.8.5'  // 请替换为实际的最新版本号
}

3. 初始化JPush

在你的Flutter项目的main.dart文件中初始化JPush:

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

void main() {
  runApp(MyApp());
  // 初始化JPush
  _initJPush();
}

void _initJPush() async {
  // 在这里替换为你的AppKey
  String appKey = "your_app_key_here";
  bool result = await JPushFlutterAndroid.init(appKey);
  if (result) {
    print("JPush 初始化成功");
  } else {
    print("JPush 初始化失败");
  }
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Text('Hello, Flutter with JPush!'),
      ),
    );
  }
}

4. 处理推送通知

为了处理接收到的推送通知,你可以使用JPushFlutterAndroid.addNotificationListener来添加一个监听器:

void _initJPush() async {
  String appKey = "your_app_key_here";
  bool result = await JPushFlutterAndroid.init(appKey);
  if (result) {
    print("JPush 初始化成功");

    // 添加通知监听器
    JPushFlutterAndroid.addNotificationListener((message) {
      print("Received notification: $message");
      // 在这里处理你的通知逻辑
    });
  } else {
    print("JPush 初始化失败");
  }
}

总结

以上代码展示了如何在Flutter项目中使用jpush_flutter_android插件来实现推送通知的基本步骤。这包括添加依赖、配置Android项目、初始化JPush以及处理接收到的推送通知。请确保你替换了your_app_key_here为你的实际JPush AppKey,并根据需要调整代码。

回到顶部