Flutter广告展示插件yodosdk的使用
Flutter广告展示插件yodosdk的使用
在本示例中,我们将详细介绍如何使用yodosdk
插件来展示不同的广告类型。这些广告类型包括插屏广告(Interstitial Ads)、激励视频广告(Rewarded Ads)、原生广告(Native Ads)和横幅广告(Banner Ads)。我们将通过一个完整的示例代码来展示如何初始化SDK并展示不同类型的广告。
安装
首先,在你的pubspec.yaml
文件中添加yodosdk
依赖:
dependencies:
yodosdk: ^版本号
然后,导入插件:
import 'package:yodosdk/yodosdk.dart';
初始化SDK
在应用启动时,需要调用initSdk
方法来初始化SDK。这一步骤非常重要,因为只有初始化成功后才能加载和展示广告。
await Yodosdk.initSdk(
appId: "Your Yodo app key", // 你的应用ID
preLoadAds: true, // 预加载广告以提高缓冲速度
showPrivacyDialog: true, // 显示隐私对话框
initAdCallback: InitAdCallback(
onSuccess: () {
// 初始化成功回调
print("初始化成功");
},
onError: (error) {
// 初始化失败回调
print("初始化失败: $error");
},
),
);
展示插屏广告
插屏广告通常在用户进行特定操作或等待一段时间后展示。以下是展示插屏广告的代码:
Yodosdk.loadAndShowInter(
fullScreenAdCallbacks: FullScreenAdCallbacks(
onLoad: (adId) {
// 广告加载成功回调
print("插屏广告加载成功");
},
onAdLoadFail: (adId) {
// 广告加载失败回调
print("插屏广告加载失败");
},
onAdOpen: (adId) {
// 广告打开回调
print("插屏广告打开");
},
onAdOpenFail: (adId) {
// 广告打开失败回调
print("插屏广告打开失败");
},
onClose: (adId) {
// 广告关闭回调
print("插屏广告关闭");
},
),
);
展示激励视频广告
激励视频广告通常在用户完成某个任务后展示,并且用户可以选择观看广告来获得奖励。以下是展示激励视频广告的代码:
Yodosdk.loadAndShowReward(
rewardAdCallbacks: RewardAdCallbacks(
onRewardEarned: (adId) {
// 用户获得奖励回调
print("用户获得奖励");
},
onLoad: (adId) {
// 广告加载成功回调
print("激励视频广告加载成功");
},
onAdLoadFail: (adId) {
// 广告加载失败回调
print("激励视频广告加载失败");
},
onAdOpen: (adId) {
// 广告打开回调
print("激励视频广告打开");
},
onAdOpenFail: (adId) {
// 广告打开失败回调
print("激励视频广告打开失败");
},
onClose: (adId) {
// 广告关闭回调
print("激励视频广告关闭");
},
),
);
展示激励插屏广告
激励插屏广告与激励视频广告类似,但它们是在特定界面打开时展示的插屏广告。以下是展示激励插屏广告的代码:
Yodosdk.loadAndShowRewardInter(
rewardAdCallbacks: RewardAdCallbacks(
onRewardEarned: (adId) {
// 用户获得奖励回调
print("用户获得奖励");
},
onLoad: (adId) {
// 广告加载成功回调
print("激励插屏广告加载成功");
},
onAdLoadFail: (adId) {
// 广告加载失败回调
print("激励插屏广告加载失败");
},
onAdOpen: (adId) {
// 广告打开回调
print("激励插屏广告打开");
},
onAdOpenFail: (adId) {
// 广告打开失败回调
print("激励插屏广告打开失败");
},
onClose: (adId) {
// 广告关闭回调
print("激励插屏广告关闭");
},
),
);
展示开屏广告
开屏广告通常在应用启动时展示。以下是展示开屏广告的代码:
Yodosdk.loadAndShowAppOpen(
fullScreenAdCallbacks: FullScreenAdCallbacks(
onLoad: (adId) {
// 广告加载成功回调
print("开屏广告加载成功");
},
onAdLoadFail: (adId) {
// 广告加载失败回调
print("开屏广告加载失败");
},
onAdOpen: (adId) {
// 广告打开回调
print("开屏广告打开");
},
onAdOpenFail: (adId) {
// 广告打开失败回调
print("开屏广告打开失败");
},
onClose: (adId) {
// 广告关闭回调
print("开屏广告关闭");
},
),
);
展示原生广告
原生广告允许开发者自定义广告样式,使其更符合应用的整体设计。以下是展示原生广告的代码:
Yodosdk.getNative(
size: NativeSize.nativeLarge, // 原生广告容器大小
nativeAdCallback: NativeAdCallback(
onLoad: () {
// 广告加载成功回调
print("原生广告加载成功");
},
onClosed: () {
// 广告关闭回调
print("原生广告关闭");
},
onLoadFailed: (errorMessage) {
// 广告加载失败回调
print("原生广告加载失败: $errorMessage");
},
),
);
展示横幅广告
横幅广告通常固定在屏幕底部或顶部。以下是展示横幅广告的代码:
Yodosdk.getBanner(
size: BannerSize.adaptiveBanner, // 横幅广告尺寸
bannerAdCallback: BannerAdCallback(
onLoad: () {
// 广告加载成功回调
print("横幅广告加载成功");
},
onClosed: () {
// 广告关闭回调
print("横幅广告关闭");
},
onLoadFailed: (errorMessage) {
// 广告加载失败回调
print("横幅广告加载失败: $errorMessage");
},
onOpen: () {
// 广告打开回调
print("横幅广告打开");
},
onOpenFail: (String error) {
// 广告打开失败回调
print("横幅广告打开失败: $error");
},
),
);
完整示例代码
以下是一个完整的示例代码,展示了如何初始化SDK并展示不同类型广告。
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:yodosdk/Banner/BannerAdCallback.dart';
import 'package:yodosdk/Banner/Yodo_BannerAd.dart';
import 'package:yodosdk/Init/InitAdCallback.dart';
import 'package:yodosdk/Inter/FullScreenAdCallbacks.dart';
import 'package:yodosdk/Native/NativeAdCallback.dart';
import 'package:yodosdk/Native/YodoNativeAd.dart';
import 'package:yodosdk/Reward/RewardAdCallbacks.dart';
import 'package:yodosdk/yodosdk.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String interStatus = "No Status";
String rewardStatus = "No Status";
String initStatus = "Not Init";
String rewardInterStatus = "No Status";
String nativeStatus = "No Status";
String bannerStatus = "No Status";
String appOpenStatus = "No Status";
bool adLoader = false;
[@override](/user/override)
void initState() {
super.initState();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlugin() async {
await Yodosdk.initSdk(
appId: "viMNv8OKOh",
preLoadAds: true,
showPrivacyDialog: true,
initAdCallback: InitAdCallback(
onSuccess: () {
setInitStatus("Success");
print("Success Init ===========>");
},
onError: (error) {
setInitStatus(error.toString());
print("Error Init ======> $error");
},
),
);
}
setInitStatus(String status) {
if (mounted) {
setState(() {
initStatus = status;
});
}
}
setNativeStatus(String status) {
if (mounted) {
setState(() {
nativeStatus = status;
});
}
}
setBannerStatus(String status) {
if (mounted) {
setState(() {
bannerStatus = status;
});
}
}
onLoader() {
if (mounted) {
setState(() {
adLoader = true;
});
}
}
offLoader() {
if (mounted) {
setState(() {
adLoader = false;
});
}
}
setInterStatus(String status) {
if (mounted) {
setState(() {
interStatus = status;
});
}
}
setRewardStatus(String status) {
if (mounted) {
setState(() {
rewardStatus = status;
});
}
}
setRewardInterStatus(String status) {
if (mounted) {
setState(() {
rewardInterStatus = status;
});
}
}
setAppOpenStatus(String status) {
if (mounted) {
setState(() {
appOpenStatus = status;
});
}
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
backgroundColor: const Color(0xFFE5873C),
elevation: 0,
title: const Text('Yodo1 Plugin Demo'),
),
body: ListView(
children: [
const SizedBox(
height: 10,
),
Container(
margin: const EdgeInsets.symmetric(horizontal: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Row(
children: [
const Text(
"Sdk Init Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
initStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
)),
],
),
const Divider(),
Row(
children: [
const Text(
"Inter Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
interStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
)),
],
),
const Divider(),
Row(
children: [
const Text(
"Reward Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
rewardStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
)),
],
),
const Divider(),
Row(
children: [
const Text(
"Reward Inter Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
rewardInterStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
)),
],
),
const Divider(),
Row(
children: [
const Text(
"Native Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
nativeStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
)),
],
),
const Divider(),
Row(
children: [
const Text(
"Banner Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
bannerStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
),
),
],
),
const Divider(),
Row(
children: [
const Text(
"Appopen Status: ",
style: TextStyle(fontWeight: FontWeight.bold),
),
Expanded(
child: Text(
appOpenStatus,
style: const TextStyle(fontWeight: FontWeight.w500),
),
),
],
),
],
),
),
const SizedBox(
height: 10,
),
adLoader
? const Center(child: CircularProgressIndicator())
: Column(
children: [
Row(
children: [
Expanded(
child: Container(
margin:
const EdgeInsets.symmetric(horizontal: 10),
child: MaterialButton(
color: const Color(0xFFE5873C),
elevation: 0,
onPressed: () {
initPlugin();
},
child: const Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.start, color: Colors.white),
SizedBox(
width: 10,
),
Expanded(
child: Text(
"Init Plugin",
style: TextStyle(color: Colors.white),
),
)
],
),
),
),
),
Expanded(
child: Container(
margin:
const EdgeInsets.symmetric(horizontal: 10),
child: MaterialButton(
color: const Color(0xFFE5873C),
elevation: 0,
onPressed: () {
onLoader();
Yodosdk.loadAndShowInter(
fullScreenAdCallbacks:
FullScreenAdCallbacks(
onLoad: (adId) {
offLoader();
setInterStatus("Loaded");
},
onAdLoadFail: (adId) {
offLoader();
setInterStatus("Fail to Load ");
},
onAdOpen: (adId) {
setInterStatus("Ad Open");
},
onAdOpenFail: (adId) {
offLoader();
setInterStatus("Failed to Open");
},
onClose: (adId) {
offLoader();
setInterStatus("Closed");
},
),
);
},
child: const Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.fullscreen, color: Colors.white),
SizedBox(
width: 10,
),
Text(
"Inter Demo",
style: TextStyle(color: Colors.white),
)
],
),
),
),
),
],
),
Row(
children: [
Expanded(
child: Container(
margin:
const EdgeInsets.symmetric(horizontal: 10),
child: MaterialButton(
color: const Color(0xFFE5873C),
elevation: 0,
onPressed: () {
onLoader();
Yodosdk.loadAndShowReward(
rewardAdCallbacks: RewardAdCallbacks(
onRewardEarned: (adId) {
offLoader();
setRewardStatus("Earned");
},
onLoad: (adId) {
offLoader();
setRewardStatus("Loaded");
},
onAdLoadFail: (error) {
offLoader();
setRewardStatus("Fail to Load $error");
},
onAdOpen: (adId) {
offLoader();
setRewardStatus("Ad Open");
},
onAdOpenFail: (error) {
offLoader();
setRewardStatus("Failed to Open");
},
onClose: (adId) {
offLoader();
setRewardStatus("Closed");
},
),
);
},
child: const Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.payments, color: Colors.white),
SizedBox(
width: 10,
),
Expanded(
child: Text(
"Reward Demo",
style: TextStyle(color: Colors.white),
),
)
],
),
),
),
),
Expanded(
child: Container(
margin:
const EdgeInsets.symmetric(horizontal: 10),
child: MaterialButton(
color: const Color(0xFFE5873C),
elevation: 0,
onPressed: () {
onLoader();
Yodosdk.loadAndShowRewardInter(
rewardAdCallbacks: RewardAdCallbacks(
onRewardEarned: (adId) {
offLoader();
setRewardInterStatus("Earned");
},
onLoad: (adId) {
offLoader();
setRewardInterStatus("Loaded");
},
onAdLoadFail: (error) {
offLoader();
setRewardInterStatus(
"Fail to Load $error");
},
onAdOpen: (adId) {
offLoader();
setRewardInterStatus("Ad Open");
},
onAdOpenFail: (error) {
offLoader();
setRewardInterStatus("Failed to Open");
},
onClose: (adId) {
offLoader();
setRewardInterStatus("Closed");
},
),
);
},
child: const Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.paypal, color: Colors.white),
SizedBox(
width: 10,
),
Expanded(
child: Text(
"Reward Inter Demo",
style: TextStyle(color: Colors.white),
),
)
],
),
),
),
),
],
),
Container(
margin: const EdgeInsets.symmetric(horizontal: 10),
child: MaterialButton(
color: const Color(0xFFE5873C),
elevation: 0,
onPressed: () {
onLoader();
Yodosdk.loadAndShowAppOpen(
fullScreenAdCallbacks: FullScreenAdCallbacks(
onLoad: (adId) {
offLoader();
setAppOpenStatus("Loaded");
},
onAdLoadFail: (error) {
offLoader();
setAppOpenStatus("Fail to Load $error");
},
onAdOpen: (adId) {
offLoader();
setAppOpenStatus("Ad Open");
},
onAdOpenFail: (error) {
offLoader();
setAppOpenStatus("Failed to Open");
},
onClose: (adId) {
offLoader();
setAppOpenStatus("Closed");
},
),
);
},
child: const Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.payments, color: Colors.white),
SizedBox(
width: 10,
),
Expanded(
child: Text(
"App Open Demo",
style: TextStyle(color: Colors.white),
),
)
],
),
),
),
],
),
const SizedBox(
height: 10,
),
Container(
margin: const EdgeInsets.only(left: 10),
child: const Text(
"Native Demo",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
const SizedBox(
height: 10,
),
Yodosdk.getNative(
size: NativeSize.nativeLarge,
nativeAdCallback: NativeAdCallback(
onLoad: () {
setNativeStatus("OnLoaded");
},
onClosed: () {
setNativeStatus("onClose");
},
onLoadFailed: (errorMessage) {
setNativeStatus("On Error $errorMessage");
},
),
),
const SizedBox(
height: 10,
),
Container(
margin: const EdgeInsets.only(left: 10),
child: const Text(
"Banner Demo",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
Yodosdk.getBanner(
size: BannerSize.adaptiveBanner,
bannerAdCallback: BannerAdCallback(
onLoad: () {
setBannerStatus("OnLoaded");
},
onClosed: () {
setBannerStatus("onClose");
},
onLoadFailed: (errorMessage) {
setBannerStatus("On Error $errorMessage");
},
onOpen: () {
setBannerStatus("On Banner Open");
},
onOpenFail: (String error) {
setBannerStatus("On Error $error");
},
),
),
],
),
),
);
}
}
更多关于Flutter广告展示插件yodosdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter广告展示插件yodosdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
针对您提到的Flutter未知功能插件 yodosdk
,由于这是一个非标准或较少被公开的插件,我无法直接提供关于其特定功能或API调用的详细信息。然而,我可以向您展示如何集成和使用一个典型的Flutter插件(假设 yodosdk
遵循标准的Flutter插件结构),以及如何通过Dart代码与原生平台(iOS和Android)进行交互。
请注意,以下代码是一个假设性的示例,旨在展示如何集成和使用Flutter插件,而不是针对 yodosdk
的具体实现。您需要根据 yodosdk
的实际文档和API进行调整。
1. 插件集成步骤
首先,假设您已经有一个Flutter项目,并且您想要集成一个名为 yodosdk
的插件。您需要按照以下步骤操作:
1.1 在 pubspec.yaml
中添加依赖
dependencies:
flutter:
sdk: flutter
yodosdk:
git:
url: https://github.com/your-repo/yodosdk.git # 假设yodosdk托管在GitHub上
ref: some-branch # 指向具体的分支或标签
1.2 获取插件
在项目的根目录下运行 flutter pub get
来获取插件。
1.3 原生平台配置
根据 yodosdk
的文档,您可能需要在 ios/
和 android/
文件夹中进行额外的配置。这些配置通常包括在 Info.plist
、AndroidManifest.xml
或其他原生配置文件中添加权限或设置。
2. 使用插件
假设 yodosdk
提供了一个名为 YodoSdk
的类,并且该类具有一些方法,比如 initialize()
和 performAction()
。以下是如何在Flutter Dart代码中调用这些方法的示例:
import 'package:flutter/material.dart';
import 'package:yodosdk/yodosdk.dart'; // 假设yodosdk插件提供了一个Dart入口文件
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('YodoSdk Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Initializing YodoSdk...'),
ElevatedButton(
onPressed: () async {
try {
// 初始化插件
await YodoSdk.initialize();
// 执行某个动作
String result = await YodoSdk.performAction("some_action");
// 显示结果
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Action Result: $result")),
);
} catch (e) {
// 处理错误
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Error: ${e.toString()}")),
);
}
},
child: Text('Perform Action'),
),
],
),
),
),
);
}
}
3. 原生平台实现(假设)
由于 yodosdk
是一个假设的插件,以下是如何在原生平台上实现这个插件的简要说明:
3.1 iOS(Swift)
在 ios/Classes/YodoSdkPlugin.swift
中:
import Flutter
import UIKit
public class YodoSdkPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "yodosdk", binaryMessenger: registrar.messenger())
let instance = YodoSdkPlugin()
channel.setMethodCallHandler(onMethodCall: instance.handle(_:result:))
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
switch call.method {
case "initialize":
YodoSdk.shared.initialize()
result(nil)
case "performAction":
if let action = call.arguments as? String {
let result = YodoSdk.shared.perform(action: action)
result(result)
} else {
result(FlutterError(code: "INVALID_ARGUMENT", message: "Invalid argument", details: nil))
}
default:
result(FlutterMethodNotImplemented)
}
}
}
// 假设YodoSdk是一个iOS原生库
class YodoSdk: NSObject {
static let shared = YodoSdk()
func initialize() {
// 初始化代码
}
func perform(action: String) -> String {
// 执行动作并返回结果
return "Action Result"
}
}
3.2 Android(Kotlin)
在 android/src/main/kotlin/com/example/yodosdk/YodoSdkPlugin.kt
中:
package com.example.yodosdk
import android.content.Context
import androidx.annotation.NonNull
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.embedding.engine.plugins.activity.ActivityAware
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
class YodoSdkPlugin: FlutterPlugin, MethodCallHandler, ActivityAware {
private lateinit var channel: MethodChannel
private var context: Context? = null
override fun onAttachedToEngine(@NonNull flutterEngine: FlutterEngine, @NonNull context: Context) {
channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "yodosdk")
channel.setMethodCallHandler(this)
this.context = context
}
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
if (call.method == "initialize") {
YodoSdk.initialize(context)
result.success(null)
} else if (call.method == "performAction") {
val action = call.argument<String>("action") ?: ""
val result = YodoSdk.performAction(action)
result.success(result)
} else {
result.notImplemented()
}
}
override fun onDetachedFromEngine(@NonNull flutterEngine: FlutterEngine) {
channel.setMethodCallHandler(null)
}
override fun onAttachedToActivity(binding: ActivityPluginBinding) {
// No-op
}
override fun onDetachedFromActivityForConfigChanges() {
// No-op
}
override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) {
// No-op
}
override fun onDetachedFromActivity() {
// No-op
}
}
// 假设YodoSdk是一个Android原生库
object YodoSdk {
fun initialize(context: Context) {
// 初始化代码
}
fun performAction(action: String): String {
// 执行动作并返回结果
return "Action Result"
}
}
总结
以上代码展示了如何集成和使用一个假设的Flutter插件 yodosdk
。然而,由于 yodosdk
是一个未知功能的插件,您需要参考其官方文档或源代码来了解其具体的API和用法。在实际开发中,请务必遵循 yodosdk
的官方指南和最佳实践。