Flutter推送服务插件appmetrica_push的使用
Flutter AppMetrica Push 使用指南
SDK 功能
- 接收和显示推送通知
- 接收静默推送通知
- 处理通知中的负载数据
- 在通知中显示图片
- 支持通过打开通知触发深链接(Deep Link)操作
- 支持通过打开通知触发 URL 操作
设置
-
添加依赖项
在pubspec.yaml
文件中添加以下依赖项:dependencies: firebase_core: ^latest_version firebase_analytics: ^latest_version appmetrica_plugin: ^latest_version appmetrica_push: ^latest_version
-
创建项目
- 在 AppMetrica 中创建一个项目。
- 在 Firebase Console 中创建一个项目,添加 Android 应用并上传
google-services.json
配置文件。 - 在 AppMetrica 项目设置中获取
API key
。 - 在 Firebase Console 的 Cloud Messaging API (Legacy) 中获取
Server key
。 - 配置 AppMetrica 以与 FCM 和 APNs 一起工作。
-
启用推送令牌更新(可选) FCM 服务可能会撤回设备的推送令牌,例如当用户长时间未启动应用时。AppMetrica 在服务器上存储推送令牌,并且无法向具有过期令牌的设备发送推送通知。为了自动收集当前的推送令牌,可以在 AppMetrica 界面的应用设置中启用“使用静默推送通知更新令牌”选项。
连接 AppMetrica Push SDK
Android
-
在
build.gradle
文件中设置minSdkVersion 19
-
使用 Google Services Plugin
-
将
google-services.json
文件放置在项目的模块目录中。 -
在
build.gradle
文件中添加以下内容:buildscript { dependencies { classpath 'com.google.gms:google-services:4.3.13' } }
-
在
build.gradle
文件中添加以下内容:apply plugin: 'com.google.gms.google-services'
-
-
不使用插件
-
修改
AndroidManifest.xml
文件中的application
元素:<meta-data android:name="ymp_firebase_default_app_id" android:value="APP_ID"/> <meta-data android:name="ymp_gcm_default_sender_id" android:value="number:SENDER_ID"/> <meta-data android:name="ymp_firebase_default_api_key" android:value="API_KEY"/> <meta-data android:name="ymp_firebase_default_project_id" android:value="PROJECT_ID"/>
-
APP_ID
:Firebase 中应用的 ID。可以在 Firebase 控制台的“项目设置”中找到。 -
SENDER_ID
:Firebase 中发送者的唯一 ID。可以在 Firebase 控制台的“项目设置”→“Cloud Messaging”中找到。 -
API_KEY
:Firebase 中应用的 API 密钥。可以在google-services.json
文件的current_key
字段中找到。 -
PROJECT_ID
:Firebase 中应用的项目 ID。可以在google-services.json
文件的project_id
字段中找到。
-
iOS
-
将
GoogleService-Info.plist
文件放置在<project>/ios/Runner/
目录中。 -
创建通知服务扩展
- 在 Xcode 中选择
File → New → Target
。 - 在 iOS Extensions 部分,选择
Notification Service Extension
并点击Next
。 - 在
Product Name
字段中输入扩展名称,然后点击Finish
。
- 在 Xcode 中选择
-
创建共享 App Groups
- 在 Xcode 项目设置中,进入 Capabilities 标签页。
- 为创建的扩展和应用启用 App Groups 选项。
- 在 App Groups 部分使用 + 按钮创建一个组。您需要在后续配置中使用该组名称。
- 为应用和扩展选择您创建的组。
-
修改
Notification Service Extension
中的代码import UserNotifications import YandexMobileMetricaPush class YourNotificationServiceName: UNNotificationServiceExtension { private var contentHandler: ((UNNotificationContent) -> Void)? private var bestAttemptContent: UNMutableNotificationContent? private let syncQueue = DispatchQueue(label: "YourNotificationServiceName.syncQueue") override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) if bestAttemptContent != nil { // 修改通知内容 YMPYandexMetricaPush.setExtensionAppGroup("your.app.group.name") YMPYandexMetricaPush.handleDidReceive(request) } YMPYandexMetricaPush.downloadAttachments(for: request) { [weak self] attachments, error in if let error = error { print("Error: \(error)") } self?.completeWithBestAttempt(attachments: attachments) } } override func serviceExtensionTimeWillExpire() { completeWithBestAttempt(attachments: nil) } func completeWithBestAttempt(attachments: [UNNotificationAttachment]?) { syncQueue.sync { [weak self] in if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent { if let attachments = attachments { bestAttemptContent.attachments = attachments } contentHandler(bestAttemptContent) self?.bestAttemptContent = nil self?.contentHandler = nil } } } }
-
在
AppDelegate.swift
中添加以下代码YMPYandexMetricaPush.setExtensionAppGroup("your.app.group.name")
-
修改
Podfile
文件platform :ios, '10.0' target 'YourNotificationServiceName' do use_frameworks! pod 'YandexMobileMetricaPush' end post_install do |installer| installer.pods_project.targets.each do |target| if target.name == 'YandexMobileMetrica-Static_Core' target.remove_from_project end flutter_additional_ios_build_settings(target) end end
初始化 AppMetrica Push SDK
await Firebase.initializeApp();
await FirebaseAnalytics.instance.setAnalyticsCollectionEnabled(true);
// AppMetrica.activate 必须在 AppmetricaPush.activate 之前调用
await AppMetrica.activate(AppMetricaConfig('<AppMetrica API key>'));
await AppmetricaPush.instance.activate();
await AppmetricaPush.instance.requestPermission(PermissionOptions(
alert: true,
badge: true,
sound: true,
));
使用 AppMetrica Push SDK
// 获取 PUSH 服务令牌
await AppmetricaPush.instance.getTokens();
// 监听 PUSH 服务令牌变化
// 注意这是一个广播流
AppmetricaPush.instance.tokenStream.listen((Map<String, String?> data) => print('token: $data'));
// 监听静默推送,接收 payload 数据
// 注意这是一个广播流
AppmetricaPush.instance.onMessage.listen((String data) => print('onMessage: $data'));
// 监听推送,接收 payload 数据
// 注意这是一个广播流
AppmetricaPush.instance.onMessageOpenedApp.listen((String data) => print('onMessageOpenedApp: $data'));
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 项目中使用 AppMetrica Push SDK。
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:appmetrica_plugin/appmetrica_plugin.dart';
import 'package:appmetrica_push/appmetrica_push.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
await FirebaseAnalytics.instance.setAnalyticsCollectionEnabled(true);
// AppMetrica.activate 必须在 AppmetricaPush.activate 之前调用
await AppMetrica.activate(AppMetricaConfig('<AppMetrica API key>'));
await AppmetricaPush.instance.activate();
await AppmetricaPush.instance.requestPermission(PermissionOptions(
alert: true,
badge: true,
sound: true,
));
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'AppMetrica Push Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
void initState() {
super.initState();
// 监听 PUSH 服务令牌变化
AppmetricaPush.instance.tokenStream.listen((Map<String, String?> data) {
print('token: $data');
});
// 监听静默推送
AppmetricaPush.instance.onMessage.listen((String data) {
print('onMessage: $data');
});
// 监听推送打开应用
AppmetricaPush.instance.onMessageOpenedApp.listen((String data) {
print('onMessageOpenedApp: $data');
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('AppMetrica Push Demo'),
),
body: Center(
child: Text('等待推送通知...'),
),
);
}
}
更多关于Flutter推送服务插件appmetrica_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter推送服务插件appmetrica_push的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成并使用appmetrica_push
插件来实现推送服务,需要按照以下步骤进行配置和实现。这里是一个基本的代码案例来帮助你理解如何在Flutter应用中集成和使用这个插件。
第一步:添加依赖
首先,在你的pubspec.yaml
文件中添加appmetrica_push
依赖:
dependencies:
flutter:
sdk: flutter
appmetrica_push: ^最新版本号 # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
第二步:配置Android项目
2.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.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- AppMetrica PushReceiver -->
<receiver android:name="com.yandex.metrica.push.PushReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.yourapp" />
</intent-filter>
</receiver>
<!-- 其他配置 -->
</manifest>
2.2 在android/app/build.gradle
文件中添加Google服务依赖:
dependencies {
implementation 'com.google.firebase:firebase-messaging:最新版本号'
// 其他依赖
}
确保你已经配置了Firebase项目,并下载了google-services.json
文件放置在android/app/
目录下。
第三步:配置iOS项目(如果需要)
对于iOS项目,你需要配置Firebase和AppMetrica的相关设置,这通常涉及到在Xcode中设置推送通知权限和Firebase SDK。由于iOS的配置相对复杂且依赖于具体的Firebase和AppMetrica SDK版本,这里不详细展开,但你可以参考Firebase和Yandex AppMetrica的官方文档来完成iOS的配置。
第四步:在Flutter代码中集成AppMetrica Push
在你的Flutter项目中,你需要初始化AppMetrica Push并处理推送通知。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:appmetrica_push/appmetrica_push.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// 初始化Firebase Messaging(用于处理FCM消息)
FirebaseMessaging.instance.configure(
onMessage: (RemoteMessage message) async {
print('Got a message whilst in the foreground!');
print('Message data: ${message.data}');
},
onBackgroundMessage: myBackgroundMessageHandler,
onLaunch: (RemoteMessage message) async {
print('Got a message when launched!');
print('Message data: ${message.data}');
},
onResume: (RemoteMessage message) async {
print('Got a message when resumed!');
print('Message data: ${message.data}');
},
);
// 初始化AppMetrica Push(注意:这里的初始化代码可能需要根据实际插件的API进行调整)
AppMetricaPush.initialize();
runApp(MyApp());
}
Future<void> myBackgroundMessageHandler(RemoteMessage message) async {
print('Handling a background message: ${message.data}');
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter AppMetrica Push 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 AppMetrica Push Demo'),
),
body: Center(
child: Text('Check the console for push notifications.'),
),
);
}
}
注意:
- 上述代码中的
AppMetricaPush.initialize();
是一个假设的初始化方法,实际使用时请参考插件的官方文档和API。 - 对于处理推送通知的部分,
firebase_messaging
插件被用来处理Firebase Cloud Messaging(FCM)消息。如果你的AppMetrica Push配置依赖于FCM,那么这一步是必要的。 - iOS的配置和代码处理可能会有所不同,请参考相关文档进行适配。
请确保你已经阅读并理解了appmetrica_push
插件的官方文档,因为插件的API和初始化方法可能会随着版本的更新而发生变化。