Flutter应用内购买插件fyno_flutter_inapp的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter应用内购买插件fyno_flutter_inapp的使用

Fyno的Flutter InApp SDK提供了多种通知功能,所有功能都集成在一个工具中,允许其智能地从您的应用程序内部提供最佳且优化的消息传递服务。

前提条件

在开始之前,请确保您已经准备好以下信息:

  • 工作区ID (WSID):您可以在Fyno的API密钥页面上找到您的工作区ID。
  • 集成令牌:从集成页面获取集成令牌。
  • 用户ID:这应该是当前登录用户的唯一标识符。此用户ID对于Fyno向正确的用户发送特定通知至关重要。

安装

通过以下任一命令安装包。

dart pub add fyno_flutter_inapp
OR
flutter pub add fyno_flutter_inapp

这将在您的软件包的pubspec.yaml文件中添加类似如下的行(并运行隐式的dart/flutter pub get):

dependencies:
  fyno_flutter_inapp: <最新版本>

或者,您的编辑器可能支持dart/flutter pub get。查阅您的编辑器文档以了解更多信息。

HMAC签名生成

HMAC签名对于确保您的通知的安全性和完整性至关重要。以下是使用Dart生成HMAC签名的一个示例:

import 'dart:convert';
import 'package:crypto/crypto.dart';

void main() {
  String signature = Hmac(sha256, utf8.encode(workspaceId + integrationToken))
      .convert(utf8.encode(userId))
      .toString();
}

使用

在您的Dart文件中导入包:

import 'package:fyno_flutter_inapp/fyno_flutter_inapp.dart';

SDK初始化

要在您的Flutter应用程序中使用SDK,请按以下方式初始化SDK:

final FynoInApp fynoInApp = FynoInApp();

// WebSocket连接
fynoInApp.fynoInAppSocketConnect(
  workspaceId,
  integrationId,
  userId,
  origin,
  signature,
);

您可以配置两种类型的InApp UI:

  1. Fyno UI
  2. 可定制UI

Fyno UI

fynoInApp.getFynoNotificationIconButton(
  context,
  <icon_color>,
),

可定制UI

在可定制UI功能中,您可以灵活地构建自己的UI。此外,您可以为诸如“全部已读”和“全部删除”等操作个性化图标。如果您正在使用可定制UI,则必须调用以下API。

  1. 将所有InApp通知标记为已读
fynoInApp.markAllAsRead()
  1. 删除所有InApp通知
fynoInApp.deleteAllMessages()
  1. 将单个InApp通知标记为已读
fynoInApp.markAsRead(notification) // 传递此列表中的一个项目 fynoInApp.fynoInAppState.list
  1. 删除单个InApp通知
fynoInApp.deleteMessage(notification) // 传递此列表中的一个项目 fynoInApp.fynoInAppState.list
  1. 基于分页加载更多通知
fynoInApp.loadMoreNotifications(page, type) // type -> 'all' 或 'unread', page 应大于零

更多关于Flutter应用内购买插件fyno_flutter_inapp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用内购买插件fyno_flutter_inapp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中集成应用内购买(IAP)功能时,fyno_flutter_inapp 是一个常用的插件。下面是一个简单的代码示例,展示了如何配置和使用 fyno_flutter_inapp 插件来实现应用内购买。

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 fyno_flutter_inapp 依赖:

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

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

2. 配置 Android 和 iOS 项目

Android

  • android/app/src/main/AndroidManifest.xml 中添加必要的权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.BILLING"/>
  • android/app/build.gradle 文件中配置 applicationIdversionCode,并确保 minSdkVersion 至少为 16:
android {
    ...
    defaultConfig {
        ...
        applicationId "com.your.package.name"
        versionCode 1
        versionName "1.0"
        minSdkVersion 16
        ...
    }
    ...
}

iOS

  • 在 Xcode 中打开 ios/Runner.xcworkspace,确保你已经配置了 App Store Connect 的应用内购买项目。
  • Info.plist 中添加必要的键值对(如需要)。

3. 初始化插件并实现购买功能

在你的 Flutter 代码中,你可以这样使用 fyno_flutter_inapp 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  late FynoFlutterInapp _fynoFlutterInapp;

  @override
  void initState() {
    super.initState();
    _fynoFlutterInapp = FynoFlutterInapp();
    _initPlatformSpecific();
  }

  Future<void> _initPlatformSpecific() async {
    // Initialize the plugin
    await _fynoFlutterInapp.init({
      "androidPublicKey": "your-android-public-key",  // Replace with your actual public key
      "iosSandbox": true,  // Set to false for production
    });

    // Fetch available products
    List<Product> products = await _fynoFlutterInapp.getProducts(["your_product_id"]);
    print("Available products: $products");
  }

  Future<void> _purchaseProduct(Product product) async {
    try {
      Purchase purchase = await _fynoFlutterInapp.buyProduct(product.productId);
      if (purchase.status == PurchaseStatus.purchased) {
        print("Purchase successful: ${purchase.transactionReceipt}");
      } else {
        print("Purchase failed: ${purchase.errorMessage}");
      }
    } catch (e) {
      print("Error during purchase: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('In-App Purchase Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // Assuming you have already fetched and stored products
            // For simplicity, we're not showing that part here
            List<Product> products = await _fynoFlutterInapp.getProducts(["your_product_id"]);
            if (products.isNotEmpty) {
              _purchaseProduct(products.first);
            } else {
              print("No products found");
            }
          },
          child: Text('Purchase Product'),
        ),
      ),
    );
  }
}

注意事项

  1. 替换占位符:确保替换 "your-android-public-key""your_product_id" 为你实际使用的密钥和产品ID。
  2. 错误处理:在实际应用中,你应该添加更多的错误处理逻辑来应对各种可能的异常情况。
  3. 测试环境:在开发过程中,确保在测试环境中测试购买流程(例如,iOS 的沙盒环境)。

这个示例展示了基本的初始化、获取产品和购买产品的流程。根据你的实际需求,你可能需要扩展这个示例来处理更多复杂的场景,比如恢复购买、处理订阅等。

回到顶部