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)));
  }
}
1 回复

更多关于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');
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!