Flutter腾讯云聊天推送插件tencent_cloud_chat_push的使用

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

Flutter腾讯云聊天推送插件tencent_cloud_chat_push的使用

tencent_cloud_chat_push 插件是一个用于在 Flutter 应用程序中集成推送通知的插件。该插件支持 iOS 和 Android 平台,并允许无缝集成各种原生推送通知提供商,如华为、小米、OPPO、vivo、荣耀、魅族和谷歌 Firebase 云消息传递(FCM)。

特性

  • 为 iOS 和 Android 轻松集成原生推送通知提供商
  • 自动处理推送通知事件,如接收通知和点击通知
  • 通过用户定义的回调函数实现可定制的推送通知处理

开始使用

步骤 1:将插件添加到项目中

要将 tencent_cloud_chat_push 插件添加到您的 Flutter 项目中,请将其作为依赖项添加到 pubspec.yaml 文件中,或者运行以下命令:

flutter pub add tencent_cloud_chat_push

步骤 2:配置推送通知参数

iOS

将您的 iOS APNs 推送证书上传到腾讯云聊天控制台并获取证书 ID。尽早调用 TencentCloudChatPush().setApnsCertificateID 方法并将证书 ID 传递给该方法:

TencentCloudChatPush().setApnsCertificateID(apnsCertificateID: CertificateID);
Android

完成推送通知提供商配置后,在控制台上下载 timpush-configs.json 文件,并将其添加到项目的 android/app/src/main/assets 目录下。如果该目录不存在,请手动创建它。

步骤 3:配置客户端代码

在此步骤中,您需要编写一些原生代码,例如 Swift、Java 和 XML。请按照提供的说明复制代码片段到指定文件。

iOS

编辑 ios/Runner/AppDelegate.swift 文件并粘贴提供的代码片段,如下所示的示例所示:

import UIKit
import Flutter

// 添加这两行导入语句
import TIMPush
import tencent_cloud_chat_push

// 在下面这一行中添加 `, TIMPushDelegate`
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate, TIMPushDelegate {
    
    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
    
    // 添加此函数
    func offlinePushCertificateID() -> Int32 {
        return TencentCloudChatPushFlutterModal.shared.offlinePushCertificateID();
    }
    
    // 添加此函数
    func applicationGroupID() -> String {
        return TencentCloudChatPushFlutterModal.shared.applicationGroupID()
    }
    
    // 添加此函数
    func onRemoteNotificationReceived(_ notice: String?) -> Bool {
        TencentCloudChatPushPlugin.shared.tryNotifyDartOnNotificationClickEvent(notice)
        return true
    }
}
Android

在项目的 android 目录中创建一个新的 Application 类文件,例如 MyApplication.java。如果您已经为其他目的创建了一个自定义的 Application 类,则可以重用它而不必创建新的一个。

import com.tencent.chat.flutter.push.tencent_cloud_chat_push.application.TencentCloudChatPushApplication;
public class MyApplication extends TencentCloudChatPushApplication {
    @Override
    public void onCreate() {
        super.onCreate();
    }
}

AndroidManifest.xml 文件中声明它,如下所示:

<application
    android:name="${Package Name}.MyApplication"
... 更多配置

步骤 4:配置推送通知提供商

iOS

此步骤中无需对 iOS 进行额外配置。

Android

打开 android/app/build.gradle 文件并添加您想要支持的推送通知提供商的依赖项。您可以包含以下列表中的所有或部分提供商:

dependencies {
     // 华为
     implementation 'com.tencent.timpush:huawei:${The version of this package}'
     
     // 小米
     implementation 'com.tencent.timpush:xiaomi:${The version of this package}'
     
     // OPPO
     implementation 'com.tencent.timpush:oppo:${The version of this package}'
     
     // vivo
     implementation 'com.tencent.timpush:vivo:${The version of this package}'
     
     // 荣耀
     implementation 'com.tencent.timpush:honor:${The version of this package}'
     
     // 魅族
     implementation 'com.tencent.timpush:meizu:${The version of this package}'
     
     // 谷歌 Firebase 云消息传递(Google FCM)
     implementation 'com.tencent.timpush:fcm:${The version of this package}'
}

步骤 5:处理通知点击事件并解析参数

定义一个函数来处理推送通知点击事件。该函数应具有以下签名:

void onNotificationClicked({required String ext, String? userID, String? groupID})

ext 参数包含消息的完整扩展信息,由发送方指定。如果没有指定,默认值将被使用。您可以解析此参数以导航到相应的页面。

userIDgroupID 参数由插件从扩展 JSON 字符串中自动解析,分别包含聊天伙伴的 userID 和群聊的 groupID。如果使用默认扩展字段(由 SDK 或 UIKit 指定),则可以使用这些默认值。如果解析失败,它们将为 null

步骤 6:注册推送插件

通过调用 TencentCloudChatPush().registerPush 方法注册推送插件。登录到腾讯云聊天模块后,但在使用任何其他插件(如 CallKit)之前调用此方法。传入上一步中定义的点击回调函数。

可选地,如果需要,还可以传递 apnsCertificateID(适用于 iOS)和 androidPushOEMConfig(适用于 Android):

TencentCloudChatPush().registerPush(onNotificationClicked: _onNotificationClicked);

完整示例代码

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

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

import 'package:flutter/services.dart';
import 'package:tencent_cloud_chat_push/tencent_cloud_chat_push.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 _tencentCloudChatPushPlugin = TencentCloudChatPush();

  [@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 _tencentCloudChatPushPlugin.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腾讯云聊天推送插件tencent_cloud_chat_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用tencent_cloud_chat_push插件来集成腾讯云聊天推送功能的示例代码。假设你已经完成了腾讯云IM(即时通讯)的基本配置,并且已经获取了必要的SDK AppID、AppKey等信息。

1. 添加依赖

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

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

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

2. 配置Android项目

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.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <application
        android:name=".MyApplication"  <!-- 确保你的Application类在这里被引用 -->
        ...>

        <!-- 其他配置 -->

        <!-- 腾讯云IM推送服务配置 -->
        <meta-data
            android:name="com.tencent.imsdk.provider.QQ_APP_ID"
            android:value="你的QQ_APP_ID" />
        <meta-data
            android:name="com.tencent.android.tpns.SDK_APPID"
            android:value="你的SDK_APPID" />
        <meta-data
            android:name="com.tencent.android.tpns.CHANNEL"
            android:value="developer-default" />
        <service
            android:name="com.tencent.android.tpns.service.XGPushService"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.tencent.android.tpns.action.PUSH_SERVICE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </service>
        <receiver
            android:name="com.tencent.android.tpns.XPushReceiver"
            android:exported="false"
            android:permission="com.tencent.android.tpns.permission.MESSAGE">
            <intent-filter>
                <action android:name="com.tencent.android.tpns.action.PUSH" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.tencent.android.tpns.action.REGISTER" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
        <receiver
            android:name="com.tencent.android.tpns.XPushNotificationReceiver"
            android:exported="true"
            android:permission="android.permission.BROADCAST_STICKY">
            <intent-filter>
                <action android:name="com.tencent.android.tpns.action.NOTIFICATION" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

    </application>

</manifest>

确保你的MyApplication类继承自FlutterApplication并进行了必要的初始化:

package com.example.yourapp;

import android.app.Application;
import io.flutter.embedding.android.FlutterApplication;
import com.tencent.imsdk.TIMManager;
import com.tencent.imsdk.ext.message.plugin.push.TIMCloudPushManager;

public class MyApplication extends FlutterApplication {
    @Override
    public void onCreate() {
        super.onCreate();

        // 初始化IM SDK
        TIMManager.getInstance().init(this, "你的AppID", "你的AppKey");

        // 初始化推送服务(如果需要)
        TIMCloudPushManager.getInstance().initPush(this);
    }
}

3. 配置iOS项目

对于iOS项目,你需要在Info.plist中添加一些必要的配置,并在AppDelegate.swiftAppDelegate.m中进行初始化。由于iOS的配置相对复杂且依赖于具体的CocoaPods集成,这里只给出简要步骤和关键代码:

  • Info.plist中添加必要的权限声明,如NSAppTransportSecurityNSLocationWhenInUseUsageDescription等(根据需要)。
  • 确保在Podfile中添加了腾讯云IM SDK的依赖,并运行pod install
  • AppDelegate中进行IM SDK的初始化:
#import <UIKit/UIKit.h>
#import <Flutter/Flutter.h>
#import <TIMSDK/TIMManager.h>

@interface AppDelegate : FlutterAppDelegate
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [super application:application didFinishLaunchingWithOptions:launchOptions];

    // 初始化IM SDK
    [[TIMManager sharedInstance] initSDKWithAppID:@"你的AppID" delegate:nil];

    // 初始化推送服务(如果需要,iOS的具体配置可能有所不同)
    // 注意:iOS推送服务通常还需要配置APNs证书等,这里只给出SDK初始化示例

    return [generatedApplication delegate:self launchOptions:launchOptions];
}

@end

4. 使用推送功能

在你的Flutter代码中,你可以通过tencent_cloud_chat_push插件提供的方法来处理推送消息。例如,监听推送消息:

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

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

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

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

    // 监听推送消息
    TencentCloudChatPush.onMessageReceived.listen((message) {
      print("Received push message: $message");
      // 处理推送消息,如显示通知等
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Tencent Cloud Chat Push Example'),
        ),
        body: Center(
          child: Text('Listening for push messages...'),
        ),
      ),
    );
  }
}

请注意,上述代码是一个基本的示例,实际项目中可能需要根据具体需求进行更多的配置和处理。特别是iOS推送服务的配置,通常需要更详细的步骤和证书管理。务必参考腾讯云官方文档以获取最新的配置指南和最佳实践。

回到顶部