Flutter服务管理插件easy_service_manager的使用
Flutter服务管理插件easy_service_manager的使用
功能特性
easy_service_manager
插件提供了以下功能:
- 支持多个设置屏幕
- 支持Google Play Store和AppStore评分系统
- 支持
in_app_review
插件 - 支持
easy_ads_flutter
插件 - 支持远程配置和JSON数据(如壁纸等)
- 支持
flutter_local_notifications
插件
使用方法
初始化
在应用程序启动时初始化 EasyServicesManager
。你需要提供一些必要的参数,例如广告ID管理器、应用描述、支持邮箱等。
await EasyServicesManager.instance.initialize(
adIdManager: const MyTestAdIdManager(),
aboutAppDescription: '您可以在这里添加应用描述。',
supportEmail: 'mail@example.com',
itunesMoreAppLink: 'tiktok-ltd/id1322881000',
androidDeveloperName: 'TikTok+Pte.+Ltd',
appStoreID: '835599320',
privacyPolicy: '这是隐私政策。',
remoteConfigEndpointUrl: 'nooralibutt.github.io/sample.json',
wallpapersKey: _wallpapersKeyMapper,
useNotifications: true,
isAutoScheduleNotification: true,
notificationsList: const [
'这是第一条通知',
'这是第二条通知',
'这是第三条通知',
'这是第四条通知',
],
);
集成EasyAds
要集成 easy_ads_flutter
,你可以在 EasyServicesManager
的初始化中添加 AdIdManager
类。
EasyServicesManager.instance.initialize(adIdManager: const MyTestAdIdManager())
iOS跟踪透明度权限
对于iOS跟踪透明度权限,你需要在 Info.plist
文件中添加以下权限:
<key>NSUserTrackingUsageDescription</key>
<string>此标识符将用于向您投放个性化广告。</string>
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
获取远程数据
你可以通过 EasyServicesManager
获取远程数据:
EasyServicesManager.instance.remoteConfig
更多设置屏幕
有两种方式使用更多设置屏幕:
- 独立应用模式
- 添加到Widget树
独立应用模式:
Navigator.of(context).push(
MaterialPageRoute(
fullscreenDialog: fullscreenDialog,
builder: (_) => Scaffold(body: EasyServicesManager.instance.moreScreen()),
),
);
添加到Widget树:
EasyServicesManager.instance.moreScreen();
显示评分浮动按钮
显示评分浮动按钮:
EasyServicesManager.instance.rateFloatingActionButton();
显示自定义应用内评分对话框
显示自定义应用内评分对话框:
EasyServicesManager.instance.tryShowingCustomInAppReview();
显示广告
你可以显示横幅广告、插页广告和奖励视频广告等。
显示AppOpen广告:
EasyServicesManager.instance.showAppOpenAd();
显示横幅广告:
EasyServicesManager.instance.showBannerAd();
显示插页广告:
EasyServicesManager.instance.showInterstitialAd();
显示计数插页广告:
EasyServicesManager.instance.showCountedInterstitialAd();
显示奖励视频广告:
EasyServicesManager.instance.showRewardedAd();
安排本地通知
安排本地通知需要在 EasyServicesManager
的初始化中传递通知列表。如果你不提供通知列表,本地通知将不会被初始化。
EasyServicesManager.instance.initialize(
notificationsList: const [
'这是第一条通知',
'这是第二条通知',
'这是第三条通知',
'这是第四条通知',
],
);
对于Android,你需要在 AndroidManifest.xml
中添加以下权限和配置:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
调度所有通知
调用以下方法调度所有通知列表:
EasyServicesManager.instance.scheduleAllNotifications();
调度单个通知
调用以下方法调度单个通知:
EasyServicesManager.instance.scheduleNotification();
取消通知
调用以下方法取消单个通知:
EasyServicesManager.instance.cancelNotification();
显示欢迎屏幕
显示欢迎屏幕:
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: WelcomeScreen(
iconPath: 'https://crosscode.dev/wp-content/uploads/2022/11/crosscode-horizontal-white.png',
initializeBuilder: initializeBuilder,
nextScreenRouteName: TabScreen.routeName,
),
);
}
Future<void> initializeBuilder() {
return EasyServicesManager.instance.initialize(
// 其他初始化参数
);
}
示例代码
以下是一个完整的示例代码,展示了如何使用 easy_service_manager
插件:
import 'dart:io';
import 'package:easy_service_manager/easy_service_manager.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(const MyApp());
}
class MyTestAdIdManager extends IAdIdManager {
const MyTestAdIdManager();
[@override](/user/override)
AppAdIds? get admobAdIds => AppAdIds(
appId: Platform.isAndroid
? 'ca-app-pub-3940256099942544~3347511713'
: 'ca-app-pub-3940256099942544~1458002511',
appOpenId: Platform.isAndroid
? 'ca-app-pub-3940256099942544/3419835294'
: 'ca-app-pub-3940256099942544/5575463023',
bannerId: 'ca-app-pub-3940256099942544/6300978111',
interstitialId: 'ca-app-pub-3940256099942544/1033173712',
rewardedId: 'ca-app-pub-3940256099942544/5224354917',
);
[@override](/user/override)
AppAdIds? get unityAdIds => AppAdIds(
appId: Platform.isAndroid ? '4374881' : '4374880',
bannerId: Platform.isAndroid ? 'Banner_Android' : 'Banner_iOS',
interstitialId:
Platform.isAndroid ? 'Interstitial_Android' : 'Interstitial_iOS',
rewardedId: Platform.isAndroid ? 'Rewarded_Android' : 'Rewarded_iOS',
);
[@override](/user/override)
AppAdIds? get appLovinAdIds => AppAdIds(
appId: 'YOUR_SDK_KEY',
bannerId: Platform.isAndroid
? 'ANDROID_BANNER_AD_UNIT_ID'
: 'IOS_BANNER_AD_UNIT_ID',
interstitialId: Platform.isAndroid
? 'ANDROID_INTER_AD_UNIT_ID'
: 'IOS_INTER_AD_UNIT_ID',
rewardedId: Platform.isAndroid
? 'ANDROID_REWARDED_AD_UNIT_ID'
: 'IOS_REWARDED_AD_UNIT_ID',
);
[@override](/user/override)
AppAdIds? get fbAdIds => const AppAdIds(
appId: '1579706379118402',
interstitialId: 'VID_HD_16_9_15S_LINK#YOUR_PLACEMENT_ID',
bannerId: 'IMG_16_9_APP_INSTALL#YOUR_PLACEMENT_ID',
rewardedId: 'VID_HD_16_9_46S_APP_INSTALL#YOUR_PLACEMENT_ID',
);
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData.dark(useMaterial3: true),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: WelcomeWidget(
iconPath:
'https://crosscode.dev/wp-content/uploads/2022/11/crosscode-horizontal-white.png',
initializeBuilder: initializeBuilder,
autoDone: true,
onDone: () => onPressedStandalone(false),
),
floatingActionButton: Column(
mainAxisSize: MainAxisSize.min,
children: [
EasyServicesManager.instance.rateFloatingActionButton() ?? const SizedBox(),
FloatingActionButton(
heroTag: "onFullScreenPressedStandalone",
onPressed: () => onPressedStandalone(true),
child: const Icon(Icons.launch),
),
FloatingActionButton(
heroTag: "onPressedStandalone",
onPressed: () => onPressedStandalone(false),
child: const Icon(Icons.push_pin),
)
],
),
floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
);
}
static Widget getMoreSettings() {
return EasyServicesManager.instance.moreScreen();
}
void onPressedStandalone(bool fullscreenDialog) {
Navigator.of(context).push(
MaterialPageRoute(
fullscreenDialog: fullscreenDialog,
builder: (_) => Scaffold(body: getMoreSettings()),
),
);
}
Future<void> initializeBuilder() {
return EasyServicesManager.instance.initialize(
adIdManager: const MyTestAdIdManager(),
aboutAppDescription: '您可以在这里添加应用描述。',
supportEmail: 'mail@example.com',
itunesMoreAppLink: 'tiktok-ltd/id1322881000',
androidDeveloperName: 'TikTok+Pte.+Ltd',
appStoreID: '835599320',
privacyPolicy: '这是隐私政策。',
remoteConfigEndpointUrl: 'nooralibutt.github.io/sample.json',
wallpapersKey: _wallpapersKeyMapper,
useNotifications: true,
isAutoScheduleNotification: true,
notificationsList: const [
'这是第一条通知',
'这是第二条通知',
'这是第三条通知',
'这是第四条通知',
],
);
}
}
String _wallpapersKeyMapper(bool isAndroidApproving, bool isIosApproving) {
if (isAndroidApproving || isIosApproving) return 'approving_wallpapers';
return 'wallpapers';
}
更多关于Flutter服务管理插件easy_service_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter服务管理插件easy_service_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用easy_service_manager
插件的示例代码。这个插件通常用于服务的管理,比如启动、停止和注册服务等。假设你已经在pubspec.yaml
文件中添加了依赖并运行了flutter pub get
。
pubspec.yaml
首先,确保你的pubspec.yaml
文件中包含了easy_service_manager
依赖:
dependencies:
flutter:
sdk: flutter
easy_service_manager: ^latest_version # 替换为最新版本号
main.dart
下面是一个基本的示例,展示如何使用easy_service_manager
来管理一个简单的服务。
import 'package:flutter/material.dart';
import 'package:easy_service_manager/easy_service_manager.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Easy Service Manager Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
EasyServiceManager? _serviceManager;
bool _isServiceRunning = false;
@override
void initState() {
super.initState();
_serviceManager = EasyServiceManager();
// 注册一个示例服务
_serviceManager!.registerService(
'example_service',
() async {
// 模拟服务运行
await Future.delayed(Duration(seconds: 5));
print('Service completed.');
},
);
}
@override
void dispose() {
// 停止所有服务
_serviceManager?.stopAllServices();
super.dispose();
}
void _startService() async {
setState(() {
_isServiceRunning = true;
});
try {
await _serviceManager!.startService('example_service');
print('Service started.');
} catch (e) {
print('Failed to start service: $e');
} finally {
setState(() {
_isServiceRunning = false;
});
}
}
void _stopService() async {
setState(() {
_isServiceRunning = true;
});
try {
await _serviceManager!.stopService('example_service');
print('Service stopped.');
} catch (e) {
print('Failed to stop service: $e');
} finally {
setState(() {
_isServiceRunning = false;
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Easy Service Manager Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Service is $_isServiceRunning running',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _isServiceRunning ? null : _startService,
child: Text('Start Service'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: _isServiceRunning ? _stopService : null,
child: Text('Stop Service'),
),
],
),
),
);
}
}
解释
- 依赖添加:确保在
pubspec.yaml
文件中添加了easy_service_manager
依赖。 - 服务管理:在
MyHomePage
类中,我们创建了一个EasyServiceManager
实例,并注册了一个名为example_service
的服务。 - 服务启动与停止:通过
_startService
和_stopService
方法,我们可以启动和停止服务。服务运行时会模拟一个5秒的延迟,并在完成后打印一条消息。 - UI交互:在UI中,我们有两个按钮用于启动和停止服务,并显示服务当前的状态。
请注意,这只是一个基本的示例。根据你的实际需求,你可能需要更复杂的逻辑来处理服务的注册、启动和停止。此外,请确保你已经阅读了easy_service_manager
的官方文档,以了解所有可用的功能和最佳实践。