Flutter广告集成插件adsjmsdk的使用

Flutter广告集成插件adsjmsdk的使用

本项目是一个Flutter插件包,它包含针对Android和/或iOS平台的特定实现代码。

详细接入文档:

  • Android 接入文档
  • iOS 接入文档

初始化SDK

SjmAdSdk.init("AppId");

示例

开屏广告(Splash Ad)

SplashAdView(
    adId: "adId", // 替换为你的广告ID
    width: width, // 替换为实际宽度
    height: height, // 替换为实际高度
    onSjmAdLoaded: (String id) {
        print("SplashAd 加载成功");
    },
    onSjmAdShow: (String id) {
        print("SplashAd 展示");
    },
    onSjmAdClicked: (String id) {
        print("SplashAd 点击");
    },
    onSjmAdClosed: (String id) {
        print("SplashAd 关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("SplashAd 错误 " + message);
    }
)

激励视频广告(Reward Video Ad)

SjmAdSdk.showRewardVideoAd(
    "adId", // 替换为你的广告ID
    "userId", // 用户ID
    onSjmAdTradeId: (String id) {
        print("RewardVideoAd 交易ID");
    },
    onSjmAdLoaded: (String id) {
        print("RewardVideoAd 加载成功");
    },
    onSjmAdShow: (String id) {
        print("RewardVideoAd 展示");
    },
    onSjmAdReward: (String id) {
        print("RewardVideoAd 奖励");
    },
    onSjmAdClicked: (String id) {
        print("RewardVideoAd 点击");
    },
    onSjmAdVideoComplete: (String id) {
        print("RewardVideoAd 视频播放完成");
    },
    onSjmAdClosed: (String id) {
        print("RewardVideoAd 关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("RewardVideoAd 错误 " + message);
    },
);

插屏广告(Interstitial Ad)

SjmAdSdk.loadInterstitalAd(
    "adId", // 替换为你的广告ID
    onSjmAdLoaded: (String id) {
        print("InterstitialAd 加载成功");
    },
    onSjmAdShow: (String id) {
        print("InterstitialAd 展示");
    },
    onSjmAdClicked: (String id) {
        print("InterstitialAd 点击");
    },
    onSjmAdClosed: (String id) {
        print("InterstitialAd 关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("InterstitialAd 错误 " + message);
    },
);

信息流广告(Native Express Ad)

NativeExpressAdView(
    adId:  "adId", // 替换为你的广告ID
    width: 350, // 替换为实际宽度
    height: 300, // 替换为实际高度
    onSjmAdLoaded: (String id) {
        print("native_express 加载成功");
    },
    onSjmAdShow: (String id) {
        print("native_express 展示");
    },
    onSjmAdClicked: (String id) {
        print("native_express 点击");
    },
    onSjmAdClosed: (String id) {
        print("native_express 关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("native_express 错误 " + message);
    },
)

Banner广告

BannerAdView(
    adId: "adId", // 替换为你的广告ID
    width: 400, // 替换为实际宽度
    height: 60, // 替换为实际高度
    onSjmAdLoaded: (String id) {
        print("BannerAd 加载成功");
    },
    onSjmAdShow: (String id) {
        print("BannerAd 展示");
    },
    onSjmAdClicked: (String id) {
        print("BannerAd 点击");
    },
    onSjmAdClosed: (String id) {
        print("BannerAd 关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("BannerAd 错误 " + message);
    },
)

完整示例代码

import 'package:flutter/foundation.dart';

import 'H5Content.dart';
import 'banner.dart';
import 'content_novel.dart';
import 'interstital.dart';
import 'native_express.dart';
import 'splash.dart';
import 'tab.dart';
import 'package:flutter/material.dart';
import 'package:adsjmsdk/sjm_ad.dart';
import 'full_video.dart';
import 'news.dart';
import 'reward_video.dart';
import 'volice.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.grey,
        visualDensity: VisualDensity.adaptivePlatformDensity,
        buttonTheme: ButtonThemeData(minWidth: 200),
      ),
      home: MyHomePage(),
      routes: <String, WidgetBuilder>{
        '/homepage': (BuildContext context) => MyHomePage(),
        '/splash': (BuildContext context) => SplashPage(),
        '/reward-video': (BuildContext context) => RewardVideoPage(),
        '/full-video': (BuildContext context) => FullVideoPage(),
        '/banner': (BuildContext context) => BannerPage(),
        '/native_express': (BuildContext context) => NativeExpressPage(),
        '/interstitial': (BuildContext context) => InterstitalPage(),
        '/h5Content': (BuildContext context) => H5ContentPage(),
        '/tab': (BuildContext context) => Tabs(),
        '/volice': (BuildContext context) => VolicePage(),
        '/news': (BuildContext context) => NewsPage(),
        '/novel': (BuildContext context) => ContentNovelPage(),
      },
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/splash');
                },
                child: Text("开屏 广告-1")),
            ElevatedButton(
                onPressed: () {
                  var adId = 'sjmad_test009'; //sjmad_test009 sjmad_test002
                  if (defaultTargetPlatform == TargetPlatform.iOS) {
                    adId = "SJM_S002";
                  }
                  SjmAdSdk.showSplashAd(
                    adId,
                    5,
                    onSjmAdLoaded: (String id) {
                      print("SplashAd 加载成功");
                    },
                    onSjmAdShow: (String id) {
                      print("SplashAd 展示");
                    },
                    onSjmAdClicked: (String id) {
                      print("SplashAd 点击");
                    },
                    onSjmAdClosed: (String id) {
                      print("SplashAd 关闭");
                    },
                    onSjmAdError: (String id, int code, String message) {
                      print("SplashAd 错误 " + message);
                    },
                  );
                },
                child: Text("[ios]开屏 广告-2")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/reward-video');
                },
                child: Text("激励视频广告")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/full-video');
                },
                child: Text("全屏视频广告")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/banner');
                },
                child: Text("Banner 广告")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/interstitial');
                },
                child: Text("插屏广告")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/native_express');
                },
                child: Text("信息流广告")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/h5Content');
                },
                child: Text("[Android]H5Content")),
            ElevatedButton(
                onPressed: () {
                  SjmAdSdk.loadVideocontentAd("sjmad_test012");
                },
                child: Text("[Android]视频内容跳转")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/tab');
                },
                child: Text("[Android]视频内容tab嵌入")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/volice');
                },
                child: Text("[Android]语音红包")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/news');
                },
                child: Text("[Android]新闻咨询")),
            ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed('/novel');
                },
                child: Text("[Android]小说")),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


在 Flutter 应用中集成广告插件 adsjmsdk 可以帮助你轻松地展示广告并实现广告变现。以下是一个基本的步骤指南,介绍如何在 Flutter 项目中使用 adsjmsdk 插件。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 adsjmsdk 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  adsjmsdk: ^1.0.0  # 请根据实际情况使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 SDK

在应用的入口文件(通常是 main.dart)中初始化 adsjmsdk

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化广告 SDK
  await AdsJmSdk.initialize(
    appId: 'your_app_id',  // 替换为你的应用 ID
  );
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Ads Demo',
      home: HomeScreen(),
    );
  }
}

3. 展示横幅广告

在需要展示横幅广告的页面中,使用 BannerAdWidget

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

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ads Demo'),
      ),
      body: Column(
        children: [
          Expanded(
            child: Center(
              child: Text('Your content here'),
            ),
          ),
          // 展示横幅广告
          BannerAdWidget(
            adUnitId: 'your_banner_ad_unit_id',  // 替换为你的横幅广告单元 ID
            adSize: AdSize.BANNER,
            listener: (AdEvent event) {
              // 处理广告事件
              switch (event) {
                case AdEvent.loaded:
                  print('Banner Ad loaded');
                  break;
                case AdEvent.failed:
                  print('Banner Ad failed to load');
                  break;
                case AdEvent.clicked:
                  print('Banner Ad clicked');
                  break;
              }
            },
          ),
        ],
      ),
    );
  }
}

4. 展示插屏广告

在需要展示插屏广告的地方,调用 InterstitialAd 的方法。

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

class HomeScreen extends StatelessWidget {
  Future<void> showInterstitialAd() async {
    await InterstitialAd.load(
      adUnitId: 'your_interstitial_ad_unit_id',  // 替换为你的插屏广告单元 ID
      listener: (AdEvent event) {
        // 处理广告事件
        switch (event) {
          case AdEvent.loaded:
            print('Interstitial Ad loaded');
            InterstitialAd.show();
            break;
          case AdEvent.failed:
            print('Interstitial Ad failed to load');
            break;
          case AdEvent.closed:
            print('Interstitial Ad closed');
            break;
        }
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ads Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: showInterstitialAd,
          child: Text('Show Interstitial Ad'),
        ),
      ),
    );
  }
}

5. 展示激励视频广告

在需要展示激励视频广告的地方,调用 RewardedAd 的方法。

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

class HomeScreen extends StatelessWidget {
  Future<void> showRewardedAd() async {
    await RewardedAd.load(
      adUnitId: 'your_rewarded_ad_unit_id',  // 替换为你的激励视频广告单元 ID
      listener: (AdEvent event, {RewardItem? reward}) {
        // 处理广告事件
        switch (event) {
          case AdEvent.loaded:
            print('Rewarded Ad loaded');
            RewardedAd.show();
            break;
          case AdEvent.failed:
            print('Rewarded Ad failed to load');
            break;
          case AdEvent.closed:
            print('Rewarded Ad closed');
            break;
          case AdEvent.rewarded:
            print('User earned reward: ${reward?.amount} ${reward?.type}');
            break;
        }
      },
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ads Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: showRewardedAd,
          child: Text('Show Rewarded Ad'),
        ),
      ),
    );
  }
}

6. 处理生命周期

确保在应用的生命周期中正确处理广告的加载和销毁。

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

class _HomeScreenState extends State<HomeScreen> with WidgetsBindingObserver {
  [@override](/user/override)
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  [@override](/user/override)
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  [@override](/user/override)
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.paused) {
      // 应用进入后台时暂停广告
      AdsJmSdk.pause();
    } else if (state == AppLifecycleState.resumed) {
      // 应用回到前台时恢复广告
      AdsJmSdk.resume();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Ads Demo'),
      ),
      body: Center(
        child: Text('Your content here'),
      ),
    );
  }
}
回到顶部