Flutter推送通知插件jpush_flutter_plugin的使用

Flutter推送通知插件jpush_flutter_plugin的使用

jpush_flutter_plugin

pub package
License: MIT


Requirement

Android iOS
支持 SDK 21+ 12.0+

Usage

dart

main()函数中初始化插件并配置相关参数:

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await setDebugMode(debugMode: true); // 开启调试模式
  await setAuth(auth: true);           // 设置认证
  await init('your appkey', 'your channel', (call) {
    print('[method]: ${call.method}'); // 回调方法
  });
  /// 其他代码...
  runApp(const MyApp());
}

Android

pubspec.yaml中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  jpush_flutter_plugin: latest

AndroidManifest.xml中添加必要的权限和配置:

<manifest
        xmlns:tools="http://schemas.android.com/tools"
>
    <!-- 添加自定义权限 -->
    <permission
            android:name="yourpackage.permission.JPUSH_MESSAGE"
            android:protectionLevel="signature" />
    <uses-permission android:name="yourpackage.permission.JPUSH_MESSAGE" />

    <!-- 必需的网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <!-- Android 13及以上版本需要的通知权限 -->
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

    <application 
            tools:replace="android:label"
    >
        <activity>
            <!-- 其他Activity配置 -->
        </activity>

        <!-- 配置发布渠道 -->
        <meta-data
                android:name="JPUSH_CHANNEL"
                android:value="developer-default" />
        <!-- 配置AppKey -->
        <meta-data
                android:name="JPUSH_APPKEY"
                android:value="your appkey" />
    </application>
</manifest>

build.gradle中配置NDK选项:

android {
    // ...

    defaultConfig {
        // ...

        ndk {
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
        }
    }

    packagingOptions {
        pickFirst 'lib/x86/libjcore336.so'
        pickFirst 'lib/x86_64/libjcore336.so'
        pickFirst 'lib/arm64-v8a/libjcore336.so'
        pickFirst 'lib/armeabi/libjcore336.so'
        pickFirst 'lib/armeabi-v7a/libjcore336.so'
    }
}

iOS

Info.plist中添加必要的键值对:

<dict>
    <key>NSUserTrackingUsageDescription</key>
    <string>申请访问Tracking权限</string>
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>
</dict>

在Xcode中启用以下功能:

  • Access WiFi Information
  • Push Notification

完整示例Demo

以下是一个完整的示例代码,展示如何使用jpush_flutter_plugin插件:

// Copyright (c) 2022, Kimmy
// https://kimmy.me
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await setDebugMode(debugMode: true); // 开启调试模式
  await setAuth(auth: true);           // 设置认证
  await init('3d3593296cc489e91041f7b8', 'app-store', (call) {
    print('[method]: ${call.method}'); // 回调方法
  });

  // 设置别名(可选)
  Future.delayed(const Duration(seconds: 5), () async {
    await setAlias(0, 'gqwyudagdasgcygewyufdgewyuqgdfqwgf');
  });

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(home: HomePage());
  }
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  String? _platformName;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('JpushFlutterPlugin Example')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (_platformName == null)
              const SizedBox.shrink()
            else
              Text(
                'Platform Name: $_platformName',
                style: Theme.of(context).textTheme.headline5,
              ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () async {
                try {
                  final result = await getPlatformName();
                  setState(() => _platformName = result);
                } catch (error) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      backgroundColor: Theme.of(context).primaryColor,
                      content: Text('$error'),
                    ),
                  );
                }
              },
              child: const Text('Get Platform Name'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


jpush_flutter_plugin 是一个用于在 Flutter 应用中集成极光推送(JPush)的插件。通过这个插件,你可以轻松地在 Flutter 应用中实现推送通知功能。以下是使用 jpush_flutter_plugin 的基本步骤:

1. 添加依赖

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

dependencies:
  jpush_flutter_plugin: ^version_number

version_number 替换为最新的插件版本号。

2. 配置 Android 项目

android/app/build.gradle 文件中,添加以下配置:

android {
    ...
    defaultConfig {
        ...
        manifestPlaceholders = [
            JPUSH_PKGNAME: applicationId,
            JPUSH_APPKEY : "your_jpush_appkey", // 替换为你的极光推送 AppKey
            JPUSH_CHANNEL: "developer-default", // 默认渠道
        ]
    }
    ...
}

3. 配置 iOS 项目

ios/Runner/Info.plist 文件中,添加以下配置:

<key>JPUSH_APPKEY</key>
<string>your_jpush_appkey</string> <!-- 替换为你的极光推送 AppKey -->
<key>CHANNEL</key>
<string>developer-default</string> <!-- 默认渠道 -->
<key>APS_FOR_PRODUCTION</key>
<string>0</string> <!-- 0 表示开发环境,1 表示生产环境 -->

4. 初始化 JPush

在你的 Dart 代码中,初始化 JPush:

import 'package:jpush_flutter_plugin/jpush_flutter_plugin.dart';

final JPush jpush = JPush();

void initJPush() async {
  jpush.setup(
    appKey: "your_jpush_appkey", // 替换为你的极光推送 AppKey
    channel: "developer-default",
    production: false, // 开发环境为 false,生产环境为 true
    debug: true, // 设置为 true 以打印调试日志
  );

  jpush.applyPushAuthority(
    JPushNotificationSettingsIOS(
      sound: true,
      alert: true,
      badge: true,
    ),
  );

  jpush.getRegistrationID().then((rid) {
    print("Registration ID: $rid");
  });

  jpush.setEventHandler(
    onReceiveNotification: (Map<String, dynamic> message) async {
      print("收到通知: $message");
    },
    onOpenNotification: (Map<String, dynamic> message) async {
      print("点击通知: $message");
    },
    onReceiveMessage: (Map<String, dynamic> message) async {
      print("收到自定义消息: $message");
    },
  );
}

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  initJPush();
  runApp(MyApp());
}
回到顶部