Flutter集成Prizor SDK插件prizorsdk_flutter的使用

Flutter集成Prizor SDK插件prizorsdk_flutter的使用

Prizor SDK Logo

Pub GitHub Prizor Website CRMall Website

Prizor SDK Flutter 是一个强大的 Flutter 插件,可以与 PrizorSDK 完美集成,为您的移动应用程序提供高级功能。本文档将指导您如何在 Flutter 项目中集成和使用 PrizorSDK。

功能

  • 无缝集成 PrizorSDK
  • 支持 iOS 14.3 及以上版本
  • 支持 Android API 29 及以上版本

开始使用

Android

为了确保 Prizor SDK Flutter 在 Android 上兼容,您需要在 Android 项目中进行以下配置:

  • compileSdkVersiontargetSdkVersion 设置为 33 或更高。
  • minSdkVersion 必须至少为 21。
  • Kotlin 版本必须至少为 1.8.0。

在 Android 清单文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.VIDEO_CAPTURE" />
<uses-permission android:name="android.permission.AUDIO_CAPTURE" />

<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />

在 Android 清单文件的 <application> 标签内添加以下元数据和提供程序:

<meta-data
    android:name="flutterEmbedding"
    android:value="2" />

<provider
    android:name="com.pichillilorenzo.flutter_inappwebview.InAppWebViewFileProvider"
    android:authorities="${applicationId}.flutter_inappwebview.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths" />
</provider>

iOS

为了使 Prizor SDK Flutter 在 iOS 上工作,确保您的项目满足以下要求:

  • 最低 iOS 版本为 11,但插件本身仅支持 iOS 14.3 及以上版本。

Info.plist 文件中添加以下键:

<key>NSMicrophoneUsageDescription</key>
<string>添加麦克风使用消息。</string>

<key>NSCameraUsageDescription</key>
<string>添加相机使用消息。</string>

使用

要开始使用 Prizor SDK 插件,请遵循以下步骤:

  1. 使用从 CRMall 团队提供的参数和用户数据初始化插件。以下是 Dart 中的一个示例:
PrizorSdkWidget(
  androidAPIErrorCallback: () => ScaffoldMessenger.of(context).showSnackBar(
    const SnackBar(content: Text("Android Version Error.")),
  ),
  params: PrizorSdkParams(
    environment: Environment.production,
    appId: "***",
    secret: "***",
    appName: "测试 SDK",
    accentColor: const Color(0xFFF1BF3B),
    accentForegroundColor: const Color(0xFFFFFFFF),
    user: User(
      documentNumber: "01234567890",
      cellphone: "+5512345678901",
      name: "John Doe",
    ),
  ),
);

androidAPIErrorCallback 用于在用户尝试使用运行在低于 29 级 API 的 Android 设备上的 Prizor SDK 时显示一条消息。

PrizorSdkParams

PrizorSdkParams 类负责存储配置 Prizor SDK 所需的参数。以下是每个参数的描述:

  • environment: 应用程序环境。可能的值有 productionstagedevelopmentmaster。使用 Environment.production 表示生产环境。
  • appId: 由 CRMall 团队提供的应用 ID。
  • secret: 由 CRMall 团队提供的应用密钥。
  • appName: 应用名称。
  • isRootRoute: (可选)如果为 true,Prizor SDK 将成为应用的根路由。如果为 false,Prizor SDK 将是一个普通路由。默认值为 false。(见下文示例)
  • titleRoute: (可选)当 isRootRoutetrue 时,此参数将用作 AppBar 的标题。默认值为空。(见下文示例)
  • accentColor: 应用的主要颜色,用于应用栏、按钮、图标等。
  • accentForegroundColor: 应用的前景颜色。
  • user: 用于应用活动的用户数据。
  • appLogo: 活动中的图像。如果为 null,则不显示。务必使用 PNG 图像!
  • appBrand: 主屏幕上的图像。如果为 null,则不显示。务必使用 PNG 图像!
  • splashForegroundColor: 启动画面的前景颜色。如果为 null,则使用 accentColor
  • splashBackgroundColor: 启动画面的背景颜色。如果为 null,则使用 accentForegroundColor
  • sac: SAC(客户服务)数据,用于应用活动。

这些参数可以根据应用的需求进行配置,以自定义 Prizor SDK 的外观和行为。

用户

User 类表示用于应用活动的用户数据。以下是每个参数的描述:

  • cellphone: 用户的手机号码。由于它用于发送验证代码,因此是必需的。
  • documentNumber: 用户的证件号码。由于它用于认证和匹配用户,因此是必需的。
  • name: 用户的名字。
  • otherDocument: 用户的其他证件。
  • gender: 用户的性别。
  • maritalStatus: 用户的婚姻状况。
  • day: 用户的出生日。
  • month: 用户的出生月。
  • year: 用户的出生年。
  • occupation: 用户的职业。
  • phones: 用户关联的电话号码列表。
  • emails: 用户关联的电子邮件地址列表。
  • addresses: 用户关联的地址列表。

这些参数提供了各种用户详细信息,可用于应用活动中的个性化和定向消息。

根路由示例

Prizor Sdk 带 BottomNavigationBar

isRootRoutetruetitleRouteBenefícios,Prizor Sdk 带 BottomNavigationBar 移除返回按钮并添加 AppBar 标题
Prizor Sdk with BottomNavigationBar

Prizor Sdk 带导航

isRootRoutefalsenull
Prizor Sdk with Navigation

额外信息

有关将 Prizor SDK 集成到项目的更多信息和支持,请联系 CRMall 团队。他们将为您提供必要的资源和支持,以确保集成过程顺利进行。


示例代码

import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:prizorsdk_flutter/prizorsdk_flutter.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    String title = 'PrizorSDK 示例';

    return MaterialApp(
      title: title,
      debugShowCheckedModeBanner: false,
      theme: ThemeData(primarySwatch: Colors.blue),
      home: const NavigationPage(),
    );
  }
}

class NavigationPage extends StatelessWidget {
  const NavigationPage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("PrizorSDK 示例"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              child: const Text("根页面示例"),
              onPressed: () async {
                if (context.mounted) {
                  Navigator.push(
                    context,
                    MaterialPageRoute<void>(
                      builder: (BuildContext context) => const MyRootHomePage(
                        title: "PrizorSDK 示例",
                      ),
                    ),
                  );
                }
              },
            ),
            ElevatedButton(
              child: const Text("导航页面示例"),
              onPressed: () async {
                if (context.mounted) {
                  Navigator.push(
                    context,
                    MaterialPageRoute<void>(
                      builder: (BuildContext context) => const MyHomePage(
                        title: "PrizorSDK 示例",
                      ),
                    ),
                  );
                }
              },
            ),
          ],
        ),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({required this.title, super.key});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController cpfController = TextEditingController(text: "");

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 10),
              child: TextField(
                controller: cpfController,
                keyboardType: TextInputType.number,
                decoration: const InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: 'CPF',
                ),
              ),
            ),
            Container(height: 20),
            ElevatedButton(
              child: const Text("打开 PrizorSDK"),
              onPressed: () async {
                if (cpfController.text != "" && cpfController.text.length == 11) {
                  await Permission.location.request();
                  await Permission.camera.request();
                  await Permission.microphone.request();

                  if (context.mounted) {
                    Navigator.push(
                      context,
                      MaterialPageRoute<void>(
                        builder: (BuildContext context) => PrizorSdkPage(
                          cpf: cpfController.text.replaceAll(RegExp("[\\D]"), ""),
                        ),
                      ),
                    );
                  }
                } else {
                  ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
                    content: Text('SDK 初始化错误。'),
                  ));
                }
              },
            ),
          ],
        ),
      ),
    );
  }
}

class MyRootHomePage extends StatefulWidget {
  const MyRootHomePage({required this.title, super.key});

  final String title;

  [@override](/user/override)
  State<MyRootHomePage> createState() => _MyRootHomePageState();
}

class _MyRootHomePageState extends State<MyRootHomePage> {
  final String DOCUMENT_FAKER = "40583583946";

  late final List<Widget> _children = [
    const MyHomePage(title: "首页"),
    PrizorSdkPage(
      cpf: DOCUMENT_FAKER,
      isRootRoute: true,
      titleRoute: '福利',
    ),
  ];

  int _currentIndex = 0;

  void _setIndex(int index) {
    setState(() {
      _currentIndex = index;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: _children[_currentIndex],
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: _currentIndex,
        onTap: (int index) {
          _setIndex(index);
        },
        items: const [
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: "首页",
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.app_shortcut_outlined),
            label: "PrizorSDK",
          ),
        ],
      ),
    );
  }
}

class PrizorSdkPage extends StatefulWidget {
  const PrizorSdkPage({
    super.key,
    required this.cpf,
    this.isRootRoute = false,
    this.titleRoute = "",
  });

  final String cpf;
  final String titleRoute;
  final bool isRootRoute;

  [@override](/user/override)
  State<PrizorSdkPage> createState() => _PrizorSdkPageState();
}

class _PrizorSdkPageState extends State<PrizorSdkPage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return PrizorSdkWidget(
      androidAPIErrorCallback: () => ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(content: Text("Android 版本错误。")),
      ),
      params: PrizorSdkParams(
        environment: Environment.production,
        appId: "***",
        secret: "***",
        appName: "PrizorSDK 示例",
        isRootRoute: widget.isRootRoute,
        titleRoute: widget.titleRoute,
        accentColor: const Color(0xFF000000),
        accentForegroundColor: Colors.white,
        user: const User(
          documentNumber: "40583583946",
          cellphone: "+5512345678901",
          name: "John Doe",
        ),
      ),
    );
  }
}

更多关于Flutter集成Prizor SDK插件prizorsdk_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Prizor SDK插件prizorsdk_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用prizorsdk_flutter插件的示例代码。这个示例将展示如何初始化Prizor SDK,并进行一些基本的功能调用。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加prizorsdk_flutter依赖:

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

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

2. 初始化Prizor SDK

在你的Flutter项目的入口文件(通常是main.dart)中,初始化Prizor SDK。通常这需要在应用的initState方法中完成。

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

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

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

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

  Future<void> _initializePrizorSDK() async {
    // 替换为你的Prizor SDK的API Key和Secret
    String apiKey = 'your_api_key_here';
    String secret = 'your_secret_here';

    try {
      await PrizorSDK.instance.init(apiKey: apiKey, secret: secret);
      print('Prizor SDK initialized successfully');
    } catch (e) {
      print('Failed to initialize Prizor SDK: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Prizor SDK Flutter Example'),
        ),
        body: Center(
          child: Text('Check the console for Prizor SDK initialization status'),
        ),
      ),
    );
  }
}

3. 使用Prizor SDK功能

一旦Prizor SDK初始化成功,你就可以调用它的各种功能。例如,假设Prizor SDK提供了一个获取用户信息的方法,你可以这样调用:

// 假设有一个按钮触发获取用户信息的操作
FlatButton(
  child: Text('Get User Info'),
  onPressed: () async {
    try {
      // 假设这是Prizor SDK提供的方法
      UserInfo userInfo = await PrizorSDK.instance.getUserInfo();
      print('User Info: ${userInfo.toJson()}');
    } catch (e) {
      print('Failed to get user info: $e');
    }
  },
)

请注意,上面的getUserInfo方法和UserInfo类是根据假设的API设计的。实际使用时,你需要参考Prizor SDK的官方文档来获取正确的方法和类名。

4. 处理回调和事件

如果Prizor SDK提供了事件监听功能,你可以使用类似下面的代码来处理回调:

@override
void initState() {
  super.initState();
  _initializePrizorSDK();
  
  // 监听某个事件,例如用户登录状态变化
  PrizorSDK.instance.onUserLoggedIn.listen((User user) {
    print('User logged in: ${user.toJson()}');
  });
}

同样,上面的onUserLoggedIn流和User类也是根据假设的API设计的。实际使用时,你需要参考Prizor SDK的官方文档。

结论

以上示例展示了如何在Flutter项目中集成并使用prizorsdk_flutter插件。请务必参考Prizor SDK的官方文档来获取最准确和最新的API信息。如果你遇到任何问题,官方文档和社区论坛是很好的资源。

回到顶部