Flutter广告与奖励插件tap_joy_plugin的使用
Flutter广告与奖励插件tap_joy_plugin的使用
简介
tap_joy_plugin
是一个用于在 Flutter 应用中集成 TapJoy SDK 的插件,支持 Android 和 iOS 平台。目前该插件不支持 TapJoy 购买或推送通知。
info.plist 变更
TapJoy 已经注册为 Apple 的 SKAdNetwork 网络合作伙伴。在您的应用的 info.plist
文件中添加 TapJoy 的网络标识符以及其他 DSP 合作伙伴的标识符:
<key>SKAdNetworkItems</key>
<array>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5lm9lj6jb7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
</array>
如果您的应用运行在 iOS 14.0 或更高版本上,则需要从用户处获取 App 追踪授权。在 info.plist
文件中添加以下行:
<key>NSUserTrackingUsageDescription</key>
<string>这允许我们为您提供个性化广告。</string>
Podfile 变更
在您的 iOS Podfile
中,取消注释以下行:
target 'Runner' do
# use_frameworks!
use_modular_headers!
AndroidManifest 变更
在您的 AndroidManifest.xml
文件中,添加所需的权限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
添加以下活动到 AndroidManifest.xml
文件的应用程序块中:
<activity
android:name="com.tapjoy.TJAdUnitActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:hardwareAccelerated="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />
<activity
android:name="com.tapjoy.TJContentActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:hardwareAccelerated="true" />
作为 Google Play Services 集成的一部分,还需要添加以下元数据:
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
使用方法
连接到 TapJoy
TapJoyPlugin.shared.connect(androidApiKey: "your-tapjoy-android-key",
iOSApiKey:"your-tapjoy-iOS-key",debug: true);
设置连接结果处理器
TapJoyPlugin.shared.setConnectionResultHandler((result) {
switch (result) {
case TJConnectionResult.connected:
// 处理连接成功的情况
break;
case TJConnectionResult.disconnected:
// 处理断开连接的情况
break;
}
});
获取 iOS App 追踪授权
TapJoyPlugin.shared.getIOSATTAuth().then((value) {
switch(value) {
case IOSATTAuthResult.notDetermined:
// 处理未确定的情况
break;
case IOSATTAuthResult.restricted:
// 处理受限的情况
break;
case IOSATTAuthResult.denied:
// 处理拒绝的情况
break;
case IOSATTAuthResult.authorized:
// 处理授权的情况
break;
case IOSATTAuthResult.none:
// 处理其他情况
break;
case IOSATTAuthResult.iOSVersionNotSupported:
// 处理 iOS 版本不支持的情况
break;
case IOSATTAuthResult.android:
// 处理 Android 情况
}
});
设置用户 ID
TapJoyPlugin.shared.setUserID(userID: "user_id");
创建放置
TJPlacement placement = TJPlacement(name: "TapJoyPlacementName");
创建并设置放置处理器
TJPlacementHandler handler = (contentState,name,error) {
switch(contentState) {
case TJContentState.contentReady:
// 处理内容准备好
break;
case TJContentState.contentDidAppear:
// 处理内容出现
break;
case TJContentState.contentDidDisappear:
// 处理内容消失
break;
case TJContentState.contentRequestSuccess:
// 处理请求成功
break;
case TJContentState.contentRequestFail:
// 处理请求失败
break;
case TJContentState.userClickedAndroidOnly:
// 处理用户点击
break;
}
};
placement.setHandler(handler);
请求内容
await placement.requestContent();
显示放置内容
await placement.showPlacement();
设置货币余额响应处理器
TapJoyPlugin.shared.setGetCurrencyBalanceHandler((currencyName, amount, error) { });
获取用户余额
await TapJoyPlugin.shared.getCurrencyBalance();
设置奖励货币响应处理器
TapJoyPlugin.shared.setAwardCurrencyHandler((currencyName, amount, error) { });
奖励货币
TapJoyPlugin.shared.awardCurrency(int amount);
设置消费货币响应处理器
TapJoyPlugin.shared.setSpendCurrencyHandler((currencyName, amount, error) { });
消费货币
TapJoyPlugin.shared.spendCurrency(int amount);
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中集成 TapJoy 插件。
import 'package:flutter/material.dart';
import 'package:tap_joy_plugin/tap_joy_plugin.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
TJPlacement myPlacement = TJPlacement(name: "LevelComplete");
TJPlacement myPlacement2 = TJPlacement(name: "Placement02");
String contentStateText = "";
String connectionState = "";
String iOSATTAuthResult = "";
String balance = "";
[@override](/user/override)
void initState() {
super.initState();
// 设置连接结果处理器
TapJoyPlugin.shared.setConnectionResultHandler(_connectionResultHandler());
// 连接到 TapJoy
TapJoyPlugin.shared.connect(
androidApiKey: "tap_joy_android_api_key",
iOSApiKey: "tap_joy_ios_api_key",
debug: true);
// 设置用户 ID
TapJoyPlugin.shared.setUserID(userID: "user_id123");
// 设置放置处理器
myPlacement.setHandler(_placementHandler());
myPlacement2.setHandler(_placementHandler());
// 添加放置
TapJoyPlugin.shared.addPlacement(myPlacement);
TapJoyPlugin.shared.addPlacement(myPlacement2);
// 设置货币处理器
TapJoyPlugin.shared.setGetCurrencyBalanceHandler(_currencyHandler());
TapJoyPlugin.shared.setAwardCurrencyHandler(_currencyHandler());
TapJoyPlugin.shared.setSpendCurrencyHandler(_currencyHandler());
TapJoyPlugin.shared.setEarnedCurrencyAlertHandler(_currencyHandler());
// 获取 iOS App 追踪授权
getAuth();
}
// 货币处理器
TJSpendCurrencyHandler _currencyHandler() {
TJSpendCurrencyHandler handler = (currencyName, amount, error) {
setState(() {
balance = "Currency Name: " +
currencyName.toString() +
" Amount: " +
amount.toString() +
" Error:" +
error.toString();
});
};
return handler;
}
// 连接结果处理器
TJConnectionResultHandler _connectionResultHandler() {
TJConnectionResultHandler handler = (result) {
switch (result) {
case TJConnectionResult.connected:
setState(() {
connectionState = "Connected";
});
break;
case TJConnectionResult.disconnected:
setState(() {
connectionState = "Disconnected";
});
break;
}
};
return handler;
}
// 放置处理器
TJPlacementHandler _placementHandler() {
TJPlacementHandler handler = (contentState, name, error) {
switch (contentState) {
case TJContentState.contentReady:
setState(() {
contentStateText = "Content Ready for placement : $name";
});
break;
case TJContentState.contentDidAppear:
setState(() {
contentStateText = "Content Did Appear for placement : $name";
});
break;
case TJContentState.contentDidDisappear:
setState(() {
contentStateText = "Content Did Disappear for placement : $name";
});
break;
case TJContentState.contentRequestSuccess:
setState(() {
contentStateText = "Content Request Success for placement : $name";
});
break;
case TJContentState.contentRequestFail:
setState(() {
contentStateText = "Content Request Fail + $error for placement : $name";
});
break;
case TJContentState.userClickedAndroidOnly:
setState(() {
contentStateText = "Content User Clicked for placement : $name";
});
break;
}
};
return handler;
}
// 获取 iOS App 追踪授权
Future<String> getAuth() async {
TapJoyPlugin.shared.getIOSATTAuth().then((value) {
switch (value) {
case IOSATTAuthResult.notDetermined:
setState(() {
iOSATTAuthResult = "Not Determined";
});
break;
case IOSATTAuthResult.restricted:
setState(() {
iOSATTAuthResult = "Restricted ";
});
break;
case IOSATTAuthResult.denied:
setState(() {
iOSATTAuthResult = "Denied ";
});
break;
case IOSATTAuthResult.authorized:
setState(() {
iOSATTAuthResult = "Authorized ";
});
break;
case IOSATTAuthResult.none:
setState(() {
iOSATTAuthResult = "Error ";
});
break;
case IOSATTAuthResult.iOSVersionNotSupported:
setState(() {
iOSATTAuthResult = "IOS Version Not Supported ";
});
break;
case IOSATTAuthResult.android:
setState(() {
iOSATTAuthResult = "on Android";
});
}
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('TapJoy Flutter'),
),
body: Center(
child: Column(
children: [
Text("Connection State : $connectionState"),
ElevatedButton(
child: Text("get iOS App Tracking Auth"),
onPressed: getAuth,
),
Text("IOS Auth Result : $iOSATTAuthResult"),
ElevatedButton(
child: Text("request content for Placement 001"),
onPressed: myPlacement.requestContent,
),
ElevatedButton(
child: Text("request content for Placement 002"),
onPressed: myPlacement2.requestContent,
),
Text("Content State : $contentStateText"),
ElevatedButton(
child: Text("show Placement 001"),
onPressed: myPlacement.showPlacement,
),
ElevatedButton(
child: Text("show Placement 002"),
onPressed: myPlacement2.showPlacement,
),
ElevatedButton(
child: Text("get balance"),
onPressed: TapJoyPlugin.shared.getCurrencyBalance,
),
ElevatedButton(
child: Text("award balance"),
onPressed: () {
TapJoyPlugin.shared.awardCurrency(15);
},
),
ElevatedButton(
child: Text("spend balance"),
onPressed: () {
TapJoyPlugin.shared.spendCurrency(5);
},
),
Text("Balance Response : $balance"),
],
),
),
),
);
}
}
更多关于Flutter广告与奖励插件tap_joy_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告与奖励插件tap_joy_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中集成和使用tap_joy_plugin
来展示广告和奖励用户是一个相对复杂的任务,但以下是一个基础的代码案例,展示了如何设置和使用这个插件。请注意,这个示例假设你已经有一个Flutter项目,并且已经完成了基本的Flutter开发环境的配置。
第一步:添加依赖
首先,你需要在你的pubspec.yaml
文件中添加tap_joy_plugin
的依赖。确保你的Flutter环境是最新的,并且已经配置了正确的Dart和Flutter SDK版本。
dependencies:
flutter:
sdk: flutter
tap_joy_plugin: ^最新版本号 # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
第二步:配置Tapjoy SDK
在使用Tapjoy SDK之前,你需要在Tapjoy的开发者网站上创建一个应用,并获取相关的SDK密钥。这些密钥将用于初始化Tapjoy SDK。
第三步:初始化Tapjoy SDK
在你的Flutter应用的入口文件(通常是main.dart
)中,你需要初始化Tapjoy SDK。
import 'package:flutter/material.dart';
import 'package:tap_joy_plugin/tap_joy_plugin.dart';
void main() {
runApp(MyApp());
// 初始化Tapjoy SDK
TapJoyPlugin.instance.initTapJoy(
sdkKey: "你的SDK密钥", // 替换为你的Tapjoy SDK密钥
placement: "你的Placement名称", // 替换为你的Tapjoy Placement名称
userId: "用户ID", // 可以是用户的唯一标识符,如UUID
environment: TapJoyEnvironment.PRODUCTION // 或 TapJoyEnvironment.SANDBOX,取决于你是否在测试环境中
);
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
// 显示广告的方法
void showAd() async {
try {
bool isAvailable = await TapJoyPlugin.instance.isContentAvailable();
if (isAvailable) {
await TapJoyPlugin.instance.showContentView();
} else {
print("No content available to show.");
}
} catch (e) {
print("Error showing content: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Tapjoy Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: showAd,
child: Text('Show Ad'),
),
),
);
}
}
第四步:处理奖励
当用户完成广告观看或互动后,Tapjoy会回调你的应用以通知奖励的发放。你需要实现一个方法来处理这些奖励。
// 在你的Flutter应用中添加一个回调来处理奖励
TapJoyPlugin.instance.setRewardListener((reward) {
// 处理奖励,例如更新用户的金币数量
print("Reward received: ${reward.name}, amount: ${reward.amount}");
});
注意事项
- 权限:确保你的应用具有必要的权限,例如网络访问权限。
- 测试:在发布前,务必在Tapjoy的Sandbox环境中充分测试你的集成。
- 更新:定期检查Tapjoy的文档和插件更新,以确保你的集成是最新的。
这个代码案例提供了一个基本的框架,展示了如何在Flutter项目中集成和使用tap_joy_plugin
。根据你的具体需求,你可能需要调整代码来适应你的应用逻辑和UI设计。