Flutter广告集成插件tyrads_sdk的使用

Flutter广告集成插件tyrads_sdk的使用

Tyrads

Tyrads 是一个开源框架,提供了一个用于展示和创建奖励墙的包装器。它与Tyrads后端进行交互,仅用几行代码就能轻松展示广告。

注意事项

  • 儿童和家庭计划 的应用不应使用Tyrads SDK,因为Tyrads不收集13岁以下用户的数据。
  • Tyrads SDK 使用Apple的广告标识符(IDFA)在iOS上和Google广告标识符(GAID)在Android上来识别和重定向用户。您应在用户授予相关IDFA/GAID权限后初始化Tyrads Flutter插件。

入门指南

前提条件

  • Android SDK 21或更高版本,并使用Google Play服务
  • iOS版本11.0或更高版本
  • Flutter版本1.20.0或更高版本
  • Dart SDK版本2.12.0或更高版本
  • CocoaPods版本1.10.0或更高版本

安装

打开项目根目录下的终端并运行以下命令:

flutter pub get tyrads_sdk

将Tyrads功能集成到您的应用程序是一个简单的过程,涉及几个关键步骤。通过遵循这些集成步骤,您可以无缝地将奖励墙功能整合到您的应用中,增强用户体验并可能为您的应用带来收入。

初始化

此步骤在您的应用中初始化Tyrads SDK。您需要提供从Tyrads平台获得的API密钥和API密钥。这允许您的应用安全地与Tyrads服务器通信。

Tyrads.instance.init(apiKey: "xyz", apiSecret: "abc123");

从版本1.1.2开始,您还可以向SDK传递用户和媒体源信息。这些信息用于个性化用户体验和改进归因准确性。有关每个参数的信息,请参阅文档

Tyrads.instance
    .init(
      apiKey: Env.TYRADS_SDK_KEY,
      apiSecret: Env.TYRADS_SDK_SECRET,
      userInfo: TyradsUserInfo(
        email: "example@tyrads.com",
        phoneNumber: "001234567890",
        userGroup: "High purchase user",
      ),
      mediaSourceInfo: TyradsMediaSourceInfo(
        mediaSourceName: "Facebook",
        mediaCampaignName: "Summer2023Promo",
        mediaSourceId: "FB001",
        mediaSubSourceId: "FB001_Stories",
        incentivized: false,
        mediaAdsetName: "YoungAdults25-34",
        mediaAdsetId: "AD001",
        mediaCreativeName: "SummerSale_Video",
        mediaCreativeId: "CR001",
        sub1: "ReferralCode123",
        sub2: "OrganicInstall",
        sub3: "HighValueUser",
        sub4: "FirstTimeUser",
        sub5: "iOSDevice",
      ),
    );

用户登录

在初始化SDK之后,必须进行用户登录。但是,传递用户ID是可选的,只有在发布者拥有自己的用户系统时才需要。此登录过程确保用户与奖励墙的交互能够被准确跟踪和归因。

var isLoginSuccessful = await Tyrads.instance.loginUser(userID: "xxx"); // userID 是可选的

显示奖励墙

一旦SDK已初始化且用户已登录(如果适用),您可以向用户显示奖励墙。这通常涉及调用由Tyrads SDK提供的函数,例如 showOffers,并传入您的应用上下文。奖励墙是用户可以参与各种优惠、广告或促销的地方,从而可能获得奖励或激励。

Tyrads.instance.showOffers(context);

深度链接路由

Tyrads SDK支持深度链接到奖励墙的特定部分。在初始化或与SDK交互时,您可以指定一个路由以打开特定页面。对于特定活动的路由,您需要提供活动ID。

// 注意:CAMPAIGNS 是默认路由,当未提供特定路由时
Tyrads.instance.showOffers(context);

// 明确指定活动页面
Tyrads.instance.showOffers(context, route: TyradsDeepRoutes.CAMPAIGNS);

// 已激活活动页面
Tyrads.instance.showOffers(context, route: TyradsDeepRoutes.CAMPAIGNS_ACTIVATED);

// 活动详情页面(需要活动ID)
Tyrads.instance.showOffers(context, route: TyradsDeepRoutes.CAMPAIGN_DETAILS, campaignID: "your_campaign_id_here");

// 活动票务页面(需要活动ID)
Tyrads.instance.showOffers(context, route: TyradsDeepRoutes.CAMPAIGN_TICKETS, campaignID: "your_campaign_id_here");

Android 12

将目标API级别更新到31(Android 12)或更高的应用需要在AndroidManifest.xml文件中声明Google Play服务的正常权限。

导航到项目根目录下的 android/app/src/main 目录,找到AndroidManifest.xml文件并在 <application> 之前添加以下行:

<uses-permission android:name="com.google.android.gms.permission.AD_ID" />

您可以在此处阅读有关Google广告ID更改的更多信息。

iOS 14+

您需要在 info.plist 文件中添加 NSUserTrackingUsageDescription,如下所示:

<key>NSUserTrackingUsageDescription</key>
<string>我们使用设备标识符来个性化您的奖励体验,跟踪您的进度,并提供定制的优惠。这有助于我们改进我们的服务,并确保您从我们的奖励计划中获得最大价值。</string>

Tyrads SDK可以在iOS 14+上与或不与IDFA权限一起工作。如果在ATT弹窗中未获得权限,SDK将向用户提供非个性化优惠。在这种情况下,转化率可能会较低。与未获得IDFA权限相比,奖励墙集成表现更好。建议您在Tyrads SDK初始化前请求IDFA使用权限。

示例代码

以下是一个完整的示例代码,展示了如何使用Tyrads SDK。

// ignore_for_file: use_build_context_synchronously

import 'package:example/env/env.dart';
import 'package:flutter/material.dart';
import 'package:tyrads_sdk/tyrads_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Tyrads SDK
  Tyrads.instance
      .init(
        apiKey: Env.TYRADS_SDK_KEY,
        apiSecret: Env.TYRADS_SDK_SECRET,
        userInfo: TyradsUserInfo(
          email: "example@tyrads.com",
          phoneNumber: "001234567890",
          userGroup: "High purchase user",
        ),
        mediaSourceInfo: TyradsMediaSourceInfo(
          mediaSourceName: "Facebook",
          mediaCampaignName: "Summer2023Promo",
          mediaSourceId: "FB001",
          mediaSubSourceId: "FB001_Stories",
          incentivized: false,
          mediaAdsetName: "YoungAdults25-34",
          mediaAdsetId: "AD001",
          mediaCreativeName: "SummerSale_Video",
          mediaCreativeId: "CR001",
          sub1: "ReferralCode123",
          sub2: "OrganicInstall",
          sub3: "HighValueUser",
          sub4: "FirstTimeUser",
          sub5: "iOSDevice",
        ),
      );

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Tyrrewards SDK Demo',
      theme: ThemeData.light(),
      home: Builder(builder: (context) {
        return const MyHomePage(title: "Tyrads SDK");
      }),
    );
  }
}

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> {
  String? userID;

  void _showOfferwall() async {
    var isLoginSuccessful = await Tyrads.instance.loginUser(userID: userID);
    if (!isLoginSuccessful) {
      // 重新初始化
    }

    // 或者您可以不等待未来完成就登录
    // Tyrads.instance.loginUser(userID: userID);
    // if (!Tyrads.instance.initializationWait.isCompleted) {
    //   await Tyrads.instance.initializationWait.future;
    // }
    // if (!Tyrads.instance.isLoginSuccessful) {
    //   // 重新初始化
    // }

    Tyrads.instance.showOffers(context);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            SizedBox(
              width: 300,
              child: TextField(
                onChanged: (v) {
                  userID = v;
                },
                decoration: const InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: "自定义用户ID或留空以匿名",
                ),
              ),
            ),
            const SizedBox(height: 10),
            OutlinedButton(
              onPressed: _showOfferwall,
              child: const Text("显示奖励墙"),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


Flutter 广告集成插件 tyrads_sdk 的使用

tyrads_sdk 是一个用于 Flutter 应用集成广告的插件。它可以帮助开发者在应用中展示横幅广告、插页广告、奖励视频广告等。以下是使用 tyrads_sdk 的基本步骤:


1. 添加依赖

pubspec.yaml 文件中添加 tyrads_sdk 依赖:

dependencies:
  flutter:
    sdk: flutter
  tyrads_sdk: ^latest_version  # 使用最新版本

运行 flutter pub get 以安装依赖。


2. 初始化 SDK

在应用启动时初始化 tyrads_sdk。通常在 main.dart 中进行初始化:

import 'package:tyrads_sdk/tyrads_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Tyrads SDK
  await TyradsSdk.initialize(
    appId: '你的AppID', // 从 Tyrads 控制台获取
    isTestMode: true,  // 测试模式,发布时设置为 false
  );

  runApp(MyApp());
}

3. 展示横幅广告

使用 BannerAdWidget 在页面中展示横幅广告:

import 'package:tyrads_sdk/tyrads_sdk.dart';

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tyrads 广告示例'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: Text('这里是应用内容'),
            ),
          ),
          // 展示横幅广告
          BannerAdWidget(unitId: '你的横幅广告UnitID'),
        ],
      ),
    );
  }
}

4. 展示插页广告

插页广告通常在特定场景(如页面切换时)展示:

import 'package:tyrads_sdk/tyrads_sdk.dart';

void showInterstitialAd() async {
  await TyradsSdk.showInterstitialAd(
    unitId: '你的插页广告UnitID',
    onAdClosed: () {
      print('插页广告关闭');
    },
    onAdFailedToLoad: (error) {
      print('插页广告加载失败: $error');
    },
  );
}

在需要展示广告的地方调用 showInterstitialAd() 方法。


5. 展示奖励视频广告

奖励视频广告通常用于激励用户完成某些操作:

import 'package:tyrads_sdk/tyrads_sdk.dart';

void showRewardedAd() async {
  await TyradsSdk.showRewardedAd(
    unitId: '你的奖励视频广告UnitID',
    onRewarded: (reward) {
      print('用户获得奖励: ${reward.amount} ${reward.type}');
    },
    onAdClosed: () {
      print('奖励视频广告关闭');
    },
    onAdFailedToLoad: (error) {
      print('奖励视频广告加载失败: $error');
    },
  );
}

在需要展示奖励视频广告的地方调用 showRewardedAd() 方法。


6. 测试模式

在开发阶段,建议启用测试模式,以避免展示真实广告。初始化时设置 isTestMode: true

await TyradsSdk.initialize(
  appId: '你的AppID',
  isTestMode: true, // 发布时设置为 false
);

7. 处理广告加载失败

所有广告类型都提供了 onAdFailedToLoad 回调,用于处理广告加载失败的情况。

onAdFailedToLoad: (error) {
  print('广告加载失败: $error');
},
回到顶部