Flutter推送通知插件bmwpushflut的使用

1、引用

Pub.dev:
getui-flutter-plugin

增加依赖:

flutter pub add bmwpushflut

或者手动在工程 pubspec.yaml 中加入 dependencies:

dependencies:
  bmwpushflut: ^0.1.3

下载依赖:

flutter pub get
flutter run

2、配置

2.1、Android

参考官网文档中心进行配置:
https://docs.getui.com/getui/mobile/android/overview/

flutter 插件默认包含自定义组件,Flutter 用户不用处理以下配置:

  • Android -> 集成指南 -> 3.配置推送服务 -> FlutterPushService (“继承自 com.igexin.sdk.PushService 的自定义 Service”)
  • Android -> 集成指南 -> 6.编写集成代码 -> FlutterIntentService (“继承自 com.igexin.sdk.GTIntentService 的自定义 Service”)

2.2、iOS

在你项目的 main.dart 中添加下列代码:

Getuiflut().startSdk(
  appId: "你的AppID",
  appKey: "你的AppKey",
  appSecret: "你的AppSecret",
);

启用通知:Xcode 主工程配置 > Signing & Capabilities > + Push Notifications


3、使用

3.1、公共 API

公共 API

/**
 * 绑定别名功能: 后台可以根据别名进行推送
 *
 * @param alias 别名字符串
 * @param aSn   绑定序列码, Android 中无效,仅在 iOS 有效
 */
bindAlias(alias, sn);
unbindAlias(alias, sn);

/**
 * 给用户打标签, 后台可以根据标签进行推送
 *
 * @param tags 别名数组
 */
setTag(tags);

/**
 * 停止 SDK 服务
 *
 */
turnOffPush();

/**
 * 开启 SDK 服务
 *
 */
turnOnPush();

回调方法

Getuiflut().addEventHandler(
  // 注册收到 cid 的回调
  onReceiveClientId: (String message) async {
    print("flutter onReceiveClientId: $message");
  },
  // 注册 DeviceToken 回调
  onRegisterDeviceToken: (String message) async {
    print("flutter onRegisterDeviceToken: $message");
  },
  // SDK 收到透传消息回调
  onReceivePayload: (Map<String, dynamic> message) async {
    print("flutter onReceivePayload: $message");
  },
  // 点击通知回调
  onReceiveNotificationResponse: (Map<String, dynamic> message) async {
    print("flutter onReceiveNotificationResponse: $message");
  },
  // APPLink 中携带的透传 payload 信息
  onAppLinkPayload: (String message) async {
    print("flutter onAppLinkPayload: $message");
  },
  // 通知服务开启/关闭回调
  onPushModeResult: (Map<String, dynamic> message) async {
    print("flutter onPushModeResult: $message");
  },
  // SetTag 回调
  onSetTagResult: (Map<String, dynamic> message) async {
    print("flutter onSetTagResult: $message");
  },
  // 设置别名回调
  onAliasResult: (Map<String, dynamic> message) async {
    print("flutter onAliasResult: $message");
  },
  // 查询别名回调
  onQueryTagResult: (Map<String, dynamic> message) async {
    print("flutter onQueryTagResult: $message");
  },
  // APNs 通知即将展示回调
  onWillPresentNotification: (Map<String, dynamic> message) async {
    print("flutter onWillPresentNotification: $message");
  },
  // APNs 通知设置跳转回调
  onOpenSettingsForNotification: (Map<String, dynamic> message) async {
    print("flutter onOpenSettingsForNotification: $message");
  },
  // 授权回调
  onGrantAuthorization: (String granted) async {
    print("flutter onGrantAuthorization: $granted");
  },
);

3.2、Android API

/**
 * 初始化个推 SDK
 */
Getuiflut.initGetuiSdk();

/**
 * 设置角标
 */
setBadge(badge);

3.3、iOS API

GTSDK <= 2.4.6.0 版本,需要使用插件版本 <= 0.2.5

GTSDK > 2.4.6.0 版本,需要使用最新插件版本

/**
 * 启动 SDK + 通知授权
 */
startSdk(appId, appKey, appSecret);

/**
 * 启动 SDK
 */
startSdkSimple(appId, appKey, appSecret);

/**
 * 通知授权, 需要先启动 SDK
 */
registerRemoteNotification(appId, appKey, appSecret);

/**
 * 获取冷启动 Apns 参数
 */
getLaunchNotification();

/**
 * 同步服务端角标
 */
setBadge(badge);

/**
 * 复位服务端角标
 */
resetBadge();

/**
 * 同步 App 本地角标
 */
setLocalBadge(badge);

示例代码

以下是完整的示例代码,展示了如何使用 bmwpushflut 插件:

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

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

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String _payloadInfo = 'Null';
  String _userMsg = "";
  String _notificationState = "";
  String _getClientId = "";
  String _getDeviceToken = "";
  String _onReceivePayload = "";
  String _onReceiveNotificationResponse = "";
  String _onAppLinkPayLoad = "";

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

  Future<void> initPlatformState() async {
    String platformVersion;
    if (Platform.isIOS) {
      Getuiflut().startSdk(
        appId: "你的AppID",
        appKey: "你的AppKey",
        appSecret: "你的AppSecret",
      );
    }
    try {
      platformVersion = await Getuiflut.platformVersion;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }
    if (!mounted) return;

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

    Getuiflut().addEventHandler(
      onReceiveClientId: (String message) async {
        print("flutter onReceiveClientId: $message");
        setState(() {
          _getClientId = "ClientId: $message";
        });
      },
      onReceivePayload: (Map<String, dynamic> message) async {
        print("flutter onReceivePayload: $message");
        setState(() {
          _onReceivePayload = "$message";
        });
      },
      onReceiveNotificationResponse: (Map<String, dynamic> message) async {
        print("flutter onReceiveNotificationResponse: $message");
        setState(() {
          _onReceiveNotificationResponse = "$message";
        });
      },
      onAppLinkPayload: (String message) async {
        print("flutter onAppLinkPayload: $message");
        setState(() {
          _onAppLinkPayLoad = "$message";
        });
      },
      onPushModeResult: (Map<String, dynamic> message) async {
        print("flutter onPushModeResult: $message");
      },
      onSetTagResult: (Map<String, dynamic> message) async {
        print("flutter onSetTagResult: $message");
      },
      onAliasResult: (Map<String, dynamic> message) async {
        print("flutter onAliasResult: $message");
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: ListView(
          children: <Widget>[
            Container(
              alignment: Alignment.center,
              child: Column(
                children: <Widget>[
                  Text('platformVersion: $_platformVersion\n'),
                  Text('clientId: $_getClientId\n'),
                  ElevatedButton(
                    onPressed: () {
                      Getuiflut().turnOffPush();
                    },
                    child: const Text('停止推送'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Getuiflut().turnOnPush();
                    },
                    child: const Text('恢复推送'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Getuiflut().bindAlias('test', 'test');
                    },
                    child: const Text('绑定别名'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Getuiflut().unbindAlias('test', 'test');
                    },
                    child: const Text('解绑别名'),
                  ),
                  ElevatedButton(
                    onPressed: () {
                      Getuiflut().setTag(['tag1', 'tag2']);
                    },
                    child: const Text('设置标签'),
                  ),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


bmwpushflut 是一个用于在 Flutter 应用中集成宝马推送通知服务的插件。通过这个插件,你可以轻松地在 Flutter 应用中实现推送通知功能。以下是如何使用 bmwpushflut 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 bmwpushflut 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  bmwpushflut: ^1.0.0  # 请使用最新版本

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

2. 初始化插件

在你的 Flutter 应用中初始化 bmwpushflut 插件。通常,你可以在 main.dart 文件中进行初始化:

import 'package:bmwpushflut/bmwpushflut.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 BMW 推送服务
  await BmwPushFlut.init(
    appKey: 'YOUR_APP_KEY',
    appSecret: 'YOUR_APP_SECRET',
  );

  runApp(MyApp());
}

确保将 YOUR_APP_KEYYOUR_APP_SECRET 替换为你在宝马开发者平台上获取的实际值。

3. 处理推送通知

你可以通过监听推送通知来处理接收到的消息。例如:

BmwPushFlut.onMessageReceived.listen((BmwPushMessage message) {
  print("Received message: ${message.title} - ${message.body}");

  // 在这里处理推送通知,例如显示一个 SnackBar 或者跳转到特定页面
});

4. 处理点击通知

当用户点击通知时,你可以通过监听 onNotificationOpenedApp 来处理:

BmwPushFlut.onNotificationOpenedApp.listen((BmwPushMessage message) {
  print("Notification opened: ${message.title} - ${message.body}");

  // 在这里处理通知点击事件,例如跳转到特定页面
});

5. 处理后台消息

如果应用在后台运行时接收到通知,你可以通过 onBackgroundMessage 来处理:

Future<void> _handleBackgroundMessage(BmwPushMessage message) async {
  print("Background message: ${message.title} - ${message.body}");

  // 在这里处理后台消息
}

BmwPushFlut.onBackgroundMessage.listen(_handleBackgroundMessage);

6. 获取设备令牌

你可以通过 getToken 方法获取设备的推送令牌:

String token = await BmwPushFlut.getToken();
print("Device token: $token");

7. 注销推送服务

如果需要注销推送服务,可以调用 unregister 方法:

await BmwPushFlut.unregister();

8. 处理错误

你可以通过监听 onError 来处理推送服务中的错误:

BmwPushFlut.onError.listen((BmwPushError error) {
  print("Error: ${error.message}");
});

9. 配置 Android 和 iOS

确保你已经为 Android 和 iOS 正确配置了推送通知服务。例如,在 Android 中,你需要在 AndroidManifest.xml 中配置必要的权限和服务。在 iOS 中,你需要在 Info.plist 中配置推送通知权限。

10. 测试推送通知

最后,你可以通过宝马开发者平台或其他推送工具发送测试通知,确保你的应用能够正确接收和处理推送通知。

示例代码

以下是一个完整的示例代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await BmwPushFlut.init(
    appKey: 'YOUR_APP_KEY',
    appSecret: 'YOUR_APP_SECRET',
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('BMW Push Example'),
        ),
        body: Center(
          child: Text('Hello, BMW Push!'),
        ),
      ),
    );
  }
}

void _handleMessage(BmwPushMessage message) {
  print("Received message: ${message.title} - ${message.body}");
}

void _handleNotificationOpened(BmwPushMessage message) {
  print("Notification opened: ${message.title} - ${message.body}");
}

Future<void> _handleBackgroundMessage(BmwPushMessage message) async {
  print("Background message: ${message.title} - ${message.body}");
}

void _handleError(BmwPushError error) {
  print("Error: ${error.message}");
}

BmwPushFlut.onMessageReceived.listen(_handleMessage);
BmwPushFlut.onNotificationOpenedApp.listen(_handleNotificationOpened);
BmwPushFlut.onBackgroundMessage.listen(_handleBackgroundMessage);
BmwPushFlut.onError.listen(_handleError);
回到顶部