Flutter广告效果追踪插件tenjin_plugin的使用

Flutter广告效果追踪插件tenjin_plugin的使用

简介

Tenjin Flutter Plugin 允许用户在他们的 iOS/Android 应用中跟踪事件和安装。欲了解有关 Tenjin 和我们的产品提供的更多信息,请访问 Tenjin 官网

插件集成

1. 添加依赖

在你的项目 pubspec.yaml 文件中添加依赖:

dependencies:
  tenjin_plugin: '^1.0.0'

2. 安装插件

在项目的根目录下运行以下命令以安装插件:

$ flutter pub get

Android ProGuard 设置

proguard-rules.pro 文件中添加以下规则:

-keep class com.tenjin.** { *; }
-keep public class com.google.android.gms.ads.identifier.** { *; }
-keep public class com.google.android.gms.common.** { *; }
-keep public class com.android.installreferrer.** { *; }
-keep class * extends java.util.ListResourceBundle {
    protected Object[][] getContents();
}
-keepattributes *Annotation*

iOS 注意事项

对于 AppTrackingTransparency,确保更新你的项目 .plist 文件,并添加 NSUserTrackingUsageDescription 及其相应的提示信息。此库仅适用于 iOS 14.0+。更多信息请参阅 iOS 文档

Android 注意事项

你需要在 gradle 依赖中添加 Google 的 Install Referrer Library。如果你还没有安装 Google Play Services,也需要添加:

dependencies {
  classpath("com.android.installreferrer:installreferrer:1.1.2")
  classpath("com.google.android.gms:play-services-analytics:17.0.0")
}

同时确保在 AndroidManifest.xml 中添加以下权限:

<manifest>
  ...
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  ...
</manifest>

使用方法

初始化

获取你的 API_KEY,可以从 Tenjin 组织标签页 获取。你可以通过以下方式初始化 Tenjin:

TenjinSDK.instance.init(apiKey: '<API-KEY>');

你可以通过 Live Test Device Data Tool 验证是否成功连接。你可以在支持部分找到测试设备。转到 SDK Live 页面,并发送一个测试事件。你应该会看到实时事件传入:

实时事件

GDPR 合规性

作为 GDPR 合规的一部分,你可以通过 Tenjin 的 SDK 来选择加入或退出设备/用户的操作,或者选择特定的设备相关参数来加入或退出。调用 OptOut() 将不会向 Tenjin 发送任何 API 请求,我们将不会处理任何事件。

TenjinSDK.instance.init(apiKey: '<API-KEY>');

bool userOptIn = checkOptInValue();

if (userOptIn) {
    TenjinSDK.instance.optIn();
} else {
    TenjinSDK.instance.optOut();
}

TenjinSDK.instance.connect();

要选择加入或退出特定的设备相关参数,可以使用 OptInParams()OptOutParams() 方法。OptInParams() 只会发送指定的设备相关参数。OptOutParams() 会发送所有设备相关参数,除了那些被指定的参数。

TenjinSDK.instance.init(apiKey: '<API-KEY>');

List<String> optInParams = ["ip_address", "advertising_id", "developer_device_id", "limit_ad_tracking", "referrer", "iad"];
TenjinSDK.instance.optInParams(optInParams);

TenjinSDK.instance.connect();

设置 Google DMA 参数

如果你已经集成了 CMP(Consent Management Platform),Tenjin SDK 会自动收集 Google DMA 参数。你无需在 Tenjin SDK 中实现任何内容。

如果你想要覆盖你的 CMP,或者想要构建自己的同意机制,可以使用以下方法:

TenjinSDK.instance.setGoogleDMAParameters(adPersonalization, adUserData);

要显式管理 Google DMA 参数的收集,你可以在任何时候选择加入或退出。默认情况下为选择加入,你可以轻松调整偏好设置以确保完全控制你的数据隐私设置:

TenjinSDK.instance.optOutGoogleDMA();
TenjinSDK.instance.optInGoogleDMA();

设备相关参数

参数名 描述 参考
ip_address IP 地址
advertising_id 设备广告 ID Android
limit_ad_tracking 是否限制广告跟踪 Android
platform 平台 Android
referrer Google Play 安装引用者 Android
os_version 操作系统版本 Android
device 设备名称 Android
device_manufacturer 设备制造商 Android
device_model 设备型号 Android
device_brand 设备品牌 Android
device_product 设备产品 Android
carrier 手机运营商 Android
connection_type 连接类型 Android
screen_width 屏幕宽度 Android
screen_height 屏幕高度 Android
os_version_release 操作系统版本 Android
build_id 构建 ID Android
locale 设备区域设置 Android
country 区域国家 Android
timezone 时区 Android

购买事件

为了理解用户收入和购买行为,开发者可以通过 Tenjin 发送 transaction 事件。有两种方式可以发送 transaction 事件给 Tenjin。

验证收据

Tenjin 可以验证 transaction 收据。示例如下:

TenjinSDK.instance.transactionWithReceipt(
  productId: 'productId',
  currencyCode: 'USD',
  quantity: 1,
  unitPrice: 3.80,
  iosReceipt: 'iosReceipt',
  iosTransactionId: 'transactionId',
  androidDataSignature: 'androidDataSignature',
  androidPurchaseData: 'androidPurchaseData',
);

TenjinSDK.instance.transaction(
  productId: 'productId',
  currencyCode: 'USD',
  quantity: 1,
  unitPrice: 3.80,
);

你可以通过 Live Test Device Data Tool 验证 IAP 验证是否工作。你应该会看到实时事件传入:

实时事件

自定义事件

注意:不要在初始化之前发送自定义事件。初始化事件必须先于任何自定义事件发送。

重要:限制自定义事件名称少于 80 个字符。不要超过 500 个唯一的自定义事件名称。

你可以使用 Tenjin SDK 传递自定义事件:eventWithName(String name)

自定义交互可以与你使用的每个收购源的成本联系起来。示例如下:

// 集成一个带有特定名称的自定义事件 - 例如,屏幕上的右滑
TenjinSDK.instance.eventWithName("swipe_right");

传递带整数值的自定义事件:

// 传递一个带有整数值的自定义事件
TenjinSDK.instance.eventWithNameAndValue("item", 100);

使用上述示例,Tenjin 仪表板将汇总并平均所有名为 item 的事件的值。

请注意,如果传递的值不是整数,则该事件将不起作用。

深度链接

Tenjin 支持通过 Tenjin 的活动跟踪 URL 导航用户到应用内的特定部分。你可以利用 getDeeplink 方法和回调来访问通过数据对象返回的延迟深度链接。示例如下:

TenjinSDK.instance.setRewardCallback = (bool clickedTenjinLink,
        bool isFirstSession, Map<String, String> data) {
      if (isFirstSession) {
        if (clickedTenjinLink) {
          if (data.containsKey(TenjinSDK.DEEPLINK_URL)) {
            // 使用延迟深度链接 URL 将用户导航到应用的特定部分
          }
        }
      }
    };

以下是延迟深度链接回调中可能返回的参数:

参数名 描述
advertising_id 设备广告 ID
ad_network 广告网络
campaign_id Tenjin 活动 ID
campaign_name Tenjin 活动名称
site_id 源应用的站点 ID
referrer 应用商店的引用者参数
deferred_deeplink_url 活动的延迟深度链接
clickedTenjinLink 表示设备是否由 Tenjin 跟踪的布尔值
isFirstSession 表示这是设备的首次会话的布尔值

你还可以使用 v1.7.1+ SDK 通过检查 isFirstSession 参数来处理安装后的逻辑。例如,如果你有一个付费应用,你可以这样注册你的付费应用安装:

TenjinSDK.instance.init(apiKey: '<API-KEY>');
TenjinSDK.instance.setRewardCallback = (bool clickedTenjinLink,
        bool isFirstSession, Map<String, String> data) {
      if (isFirstSession) {
          // 发送付费应用价格和收入到 Tenjin
      }
    };

A/B 测试的应用子版本参数(需要 DataVault)

如果你正在进行 A/B 测试并希望报告差异,我们可以使用 appendAppSubversion 方法将一个数字附加到你的应用版本。例如,如果你的应用版本是 1.0.1,并设置 appendAppSubversion: 8888,它将报告为 1.0.1.8888

此数据将出现在 DataVault 中,你可以在其中使用应用子版本值生成报告。

TenjinSDK.instance.init(apiKey: '<API-KEY>');
TenjinSDK.instance.appendAppSubversion(8888);
TenjinSDK.instance.connect();

其他可用方法

客户用户 ID

TenjinSDK.setCustomerUserId(userId)
TenjinSDK.getCustomerUserId()

获取分析安装 ID

String? analyticsId = await TenjinSDK.instance.getAnalyticsInstallationId();

发送 AdMob 印象(ILRD)

TenjinSDK.eventAdImpressionAdMob(json)

发送 AppLovin 印象(ILRD)

TenjinSDK.eventAdImpressionAppLovin(json)

发送 HyperBid 印象(ILRD)

TenjinSDK.eventAdImpressionHyperBid(json)

发送 IronSource 印象(ILRD)

TenjinSDK.eventAdImpressionIronSource(json)

发送 TopOn 印象(ILRD)

TenjinSDK.eventAdImpressionTopOn(json)

发送 TradPlus 印象(ILRD)

TenjinSDK.eventAdImpressionTradPlus(json)
TenjinSDK.eventAdImpressionTradPlusAdInfo(adInfo)

支持

如果你在插件集成或使用过程中遇到任何问题,请联系我们:support@tenjin.com


示例代码

import 'dart:io';

import 'package:flutter/material.dart';
import 'package:tenjin_plugin/tenjin_sdk.dart';

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    TenjinSDK.instance.init(apiKey: '<API-KEY>');
    TenjinSDK.instance.optIn();
    TenjinSDK.instance.registerAppForAdNetworkAttribution();
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Tenjin SDK')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            children: [
              TextButton(
                onPressed: () => TenjinSDK.instance.connect(),
                child: Text('connect'),
              ),
              TextButton(
                onPressed: () => TenjinSDK.instance.eventWithName('swipe_right'),
                child: Text('eventWithName'),
              ),
              TextButton(
                onPressed: () => TenjinSDK.instance.eventWithNameAndValue('item', 100),
                child: Text('eventWithNameAndValue'),
              ),
              if (Platform.isIOS)
                TextButton(
                  onPressed: () {
                    TenjinSDK.instance.requestTrackingAuthorization();
                  },
                  child: Text('Request Tracking Authorization'),
                ),
              TextButton(
                onPressed: () {
                  TenjinSDK.instance.transactionWithReceipt(
                    productId: 'productId',
                    currencyCode: 'USD',
                    quantity: 1,
                    unitPrice: 3.80,
                    iosReceipt: 'iosReceipt',
                    iosTransactionId: 'transactionId',
                    androidDataSignature: 'androidDataSignature',
                    androidPurchaseData: 'androidPurchaseData',
                  );
                },
                child: Text('Transaction with Receipt'),
              ),
              TextButton(
                onPressed: () {
                  TenjinSDK.instance.transaction('productId', 'USD', 1, 3.80);
                },
                child: Text('Transaction'),
              ),
              TextButton(
                onPressed: () {
                  TenjinSDK.instance.updatePostbackConversionValue(3);
                },
                child: Text('Update SKAN'),
              ),
              TextButton(
                onPressed: () {
                  TenjinSDK.instance.setCustomerUserId('test_user_id');
                },
                child: Text('Set customer userId'),
              ),
              TextButton(
                onPressed: () async {
                  try {
                    String? userId = await TenjinSDK.instance.getCustomerUserId();
                    if (userId != null) {
                      print(userId);
                    } else {
                      print('Failed to get customer user id');
                    }
                  } catch (e) {
                    print('Error: $e');
                  }
                },
                child: Text('Get user id'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用Tenjin广告效果追踪插件tenjin_plugin的示例代码。请注意,为了实际运行这些代码,你需要先在Tenjin平台上注册并获取相关的配置信息(如API Key等)。

1. 添加依赖

首先,在你的Flutter项目的pubspec.yaml文件中添加tenjin_plugin依赖:

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

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

2. 配置Tenjin

在Flutter项目的main.dart或其他合适的初始化文件中,配置Tenjin插件。你需要提供从Tenjin平台获取的API Key和其他必要信息。

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化Tenjin插件
  TenjinPlugin.instance.init(
    apiKey: '你的API_KEY', // 替换为你的Tenjin API Key
    appVersion: '1.0.0',   // 你的应用版本号
    enableLogging: true,   // 是否启用日志记录,生产环境建议关闭
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Tenjin Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Tenjin Plugin Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            // 示例:追踪一个事件
            trackEvent();
          },
          child: Text('Track Event'),
        ),
      ),
    );
  }

  void trackEvent() {
    // 创建一个事件数据
    Map<String, dynamic> eventData = {
      'event_name': 'user_login', // 事件名称
      'user_id': '123456',        // 用户ID
      // 可以添加更多自定义事件属性
    };

    // 追踪事件
    TenjinPlugin.instance.trackEvent(eventData).then((result) {
      print('Event tracked successfully: $result');
    }).catchError((error) {
      print('Failed to track event: $error');
    });
  }
}

3. 追踪其他事件和属性

Tenjin插件支持追踪多种类型的事件和属性,你可以根据需求扩展上述代码。例如,追踪应用启动、页面浏览、广告点击等事件。

void trackAppOpen() {
  TenjinPlugin.instance.trackAppOpen().then((result) {
    print('App open tracked successfully: $result');
  }).catchError((error) {
    print('Failed to track app open: $error');
  });
}

void trackPageView(String pageName) {
  Map<String, dynamic> pageViewData = {
    'page_name': pageName, // 页面名称
    // 可以添加更多页面属性
  };

  TenjinPlugin.instance.trackPageView(pageViewData).then((result) {
    print('Page view tracked successfully: $result');
  }).catchError((error) {
    print('Failed to track page view: $error');
  });
}

void trackAdClick(String adNetwork, String adPlacement) {
  Map<String, dynamic> adClickData = {
    'ad_network': adNetwork,    // 广告网络名称
    'ad_placement': adPlacement,// 广告位名称
    // 可以添加更多广告点击属性
  };

  TenjinPlugin.instance.trackAdClick(adClickData).then((result) {
    print('Ad click tracked successfully: $result');
  }).catchError((error) {
    print('Failed to track ad click: $error');
  });
}

4. 注意事项

  • 确保你已经正确配置了Tenjin平台上的项目信息。
  • 在生产环境中,请关闭日志记录或确保日志信息不包含敏感数据。
  • 根据Tenjin的文档,确保事件名称和属性符合其要求。

以上示例展示了如何在Flutter项目中集成和使用Tenjin广告效果追踪插件tenjin_plugin。你可以根据需要进一步定制和扩展这些代码。

回到顶部