Flutter忠诚度管理插件loyalty_core_flutter的使用
Flutter忠诚度管理插件loyalty_core_flutter的使用
安装
添加依赖到你的pubspec.yaml
文件
在项目的pubspec.yaml
文件中添加loyalty_flutter
作为依赖。
dependencies:
loyalty_flutter: ^版本号
然后运行以下命令来获取依赖:
flutter pub get
Android
1. 添加token以获取Terra库
在项目的local.properties
文件中添加TekoGoogleRegistryToken(联系trung.cs@teko.vn
获取token)。
TekoGoogleRegistry.password=your-token
在项目的build.gradle
文件中(即android/build.gradle
),添加以下代码:
allprojects {
repositories {
...
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
maven {
setUrl("https://asia-southeast1-maven.pkg.dev/teko-development/teko-mobile-sdks")
authentication {
basic(BasicAuthentication)
}
credentials {
username = "_json_key_base64"
password = properties.getProperty('TekoGoogleRegistry.password')
}
}
}
}
2. 启用dataBinding和multiDex
在应用模块的build.gradle
文件(即android/app/build.gradle
)中添加以下代码:
apply plugin: 'kotlin-kapt'
android {
...
defaultConfig {
...
multiDexEnabled true
}
buildFeatures {
dataBinding true
}
}
iOS
1. 设置GitHub访问令牌以访问Terra iOS框架
请与Terra团队联系以获取令牌,并在您的计算机上添加名为GITHUB_USER_TOKEN
的新环境变量。
2. 配置Podfile
a. 定义源
在本地机器上,定义Podfile的源:
source 'https://github.com/teko-vn/Specs-ios.git'
// 在CI环境中
source 'https://' + ENV['GITHUB_USER_TOKEN'] + '@github.com/teko-vn/Specs-ios.git'
b. 配置目标框架
在Podfile的post_install
部分,更新代码如下:
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
target.build_configurations.each do |config|
config.build_settings['VALID_ARCHS'] = 'arm64 armv7 armv7s x86_64'
config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
config.build_settings["BUILD_LIBRARY_FOR_DISTRIBUTION"] = "YES"
end
end
end
注意: 请勿将<your_token_secret>
提交到GitHub,否则它可能会被撤销。
库的使用
获取TerraLoyalty实例
静态方法:getInstance(String appName) → Future
应在应用程序初始化阶段调用此方法,并且必须在成功初始化TerraApp之后调用。
获取忠诚服务的配置
方法:Future<Result<LoyaltyConfiguration, Exception>> getConfiguration()
注册新忠诚会员
方法:Future<Result<RegisterMemberResult, Exception>> registerMember(RegisterMemeberRequest request)
获取会员的配置
方法:Future<Result<LoyaltyConfiguration, Exception>> getConfiguration()
获取会员资格二维码内容
方法:Future<Result<EncryptedMemCode, Exception>> getMembershipQr()
获取当前会员信息
方法:Future<Result<MemberInfo, Exception>> getMemberInfo(MemberInfoRequest request)
获取当前会员的所有忠诚交易记录
方法:Future<Result<TransactionHistory, Exception>> getTransactionHistory(TransactionHistoryRequest request)
获取忠诚网络配置
方法:Future<Result<NetworkConfigResult, Exception>> getNetworkConfig()
获取当前客户端ID
方法:Future<Result<String, Exception>> getClientId()
分配会员卡ID给会员
方法:Future<Result<void, Exception>> assignMemberCardId(String memberId, String memberCardId)
示例代码
以下是完整的示例代码:
import 'package:flutter/material.dart';
import 'package:loyalty_core_flutter/model/member_info_request.dart';
import 'package:loyalty_core_flutter/model/register_member_request.dart';
import 'package:loyalty_core_flutter/model/transaction_history_request.dart';
import 'package:loyalty_core_flutter/model/transaction_type.dart';
import 'package:loyalty_core_flutter/terra_loyalty.dart';
import 'package:loyalty_flutter_example/login_screen.dart';
import 'package:terra_flutter/terra_app.dart';
void main() {
runApp(const MyApp());
}
const terraAppName = "loyalty-flutter";
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late Terraloyalty _terraloyalty;
final _messangerKey = GlobalKey<ScaffoldMessengerState>();
[@override](/user/override)
void initState() {
super.initState();
_initTerraLibs();
}
void _initTerraLibs() async {
try {
await TerraApp.initTerraApp(appName: terraAppName);
_terraloyalty = await Terraloyalty.getInstance(terraAppName);
print("Initialized Terra succeeded");
} catch (error) {
print("Initialized Terra failed: $error");
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
scaffoldMessengerKey: _messangerKey,
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8),
child: Column(
children: [
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.getClientId();
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Get Loyalty Configuration"),
),
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.registerMember(RegisterMemeberRequest(
"0374264444", "name", "address", null, null, null, null, null, null));
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Register Member"),
),
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.getMembershipQr();
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Get MembershipQR"),
),
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.getMemberInfo(MemberInfoRequest());
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Get MemberInfo"),
),
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.getTransactionHistory(
TransactionHistoryRequest(
null, null, null, [TransactionType.grant], null, 1, 20));
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Get Transactions"),
),
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.getNetworkConfig();
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Get Network Config"),
),
ElevatedButton(
onPressed: () async {
final result = await _terraloyalty.getClientId();
if (result.isFailure) {
showToast("Failed");
} else {
showToast(result.get().toString());
}
},
child: const Text("Get Client ID"),
),
Builder(
builder: (context) {
return ElevatedButton(
onPressed: () async {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => const LoginScreen()),
);
},
child: const Text("Handle Authentication"),
);
}
),
],
),
),
),
),
);
}
void showToast(String message) {
_messangerKey.currentState!.showSnackBar(SnackBar(content: Text(message)));
}
}
更多关于Flutter忠诚度管理插件loyalty_core_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
loyalty_core_flutter
是一个用于管理用户忠诚度计划的 Flutter 插件。它通常用于处理积分、奖励、会员等级等功能。以下是如何使用 loyalty_core_flutter
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 loyalty_core_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
loyalty_core_flutter: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Flutter 应用中初始化 loyalty_core_flutter
插件。通常,你可以在 main.dart
文件中进行初始化:
import 'package:loyalty_core_flutter/loyalty_core_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化插件
await LoyaltyCoreFlutter.initialize(
apiKey: 'YOUR_API_KEY',
environment: Environment.production, // 或者 Environment.sandbox
);
runApp(MyApp());
}
3. 获取用户忠诚度信息
你可以使用 LoyaltyCoreFlutter
来获取用户的忠诚度信息,例如积分、会员等级等:
import 'package:loyalty_core_flutter/loyalty_core_flutter.dart';
class LoyaltyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loyalty Program'),
),
body: FutureBuilder<LoyaltyUserInfo>(
future: LoyaltyCoreFlutter.getUserLoyaltyInfo(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData) {
return Center(child: Text('No data available'));
}
final userInfo = snapshot.data!;
return Column(
children: [
Text('Points: ${userInfo.points}'),
Text('Tier: ${userInfo.tier}'),
Text('Rewards: ${userInfo.rewards}'),
],
);
},
),
);
}
}
4. 更新用户忠诚度信息
你可以使用 LoyaltyCoreFlutter
来更新用户的忠诚度信息,例如增加积分、升级会员等级等:
import 'package:loyalty_core_flutter/loyalty_core_flutter.dart';
class UpdateLoyaltyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Update Loyalty'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
await LoyaltyCoreFlutter.updateUserPoints(100); // 增加100积分
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Points updated successfully!')),
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to update points: $e')),
);
}
},
child: Text('Add 100 Points'),
),
),
);
}
}
5. 处理奖励
你可以使用 LoyaltyCoreFlutter
来处理用户的奖励,例如兑换奖励、查看可用奖励等:
import 'package:loyalty_core_flutter/loyalty_core_flutter.dart';
class RewardsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Rewards'),
),
body: FutureBuilder<List<Reward>>(
future: LoyaltyCoreFlutter.getAvailableRewards(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Center(child: Text('Error: ${snapshot.error}'));
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return Center(child: Text('No rewards available'));
}
final rewards = snapshot.data!;
return ListView.builder(
itemCount: rewards.length,
itemBuilder: (context, index) {
final reward = rewards[index];
return ListTile(
title: Text(reward.name),
subtitle: Text('Points: ${reward.pointsRequired}'),
trailing: ElevatedButton(
onPressed: () async {
try {
await LoyaltyCoreFlutter.redeemReward(reward.id);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Reward redeemed successfully!')),
);
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Failed to redeem reward: $e')),
);
}
},
child: Text('Redeem'),
),
);
},
);
},
),
);
}
}
6. 处理错误
在使用 loyalty_core_flutter
时,可能会遇到各种错误,例如网络错误、API 错误等。你可以使用 try-catch
块来捕获并处理这些错误。
try {
await LoyaltyCoreFlutter.updateUserPoints(100);
} catch (e) {
print('Error: $e');
}