搜尋套件、儲存庫與 APP 分類

flutter_ironsource_x 封面
套件詳情v2.7.4

flutter_ironsource_x

適用於 Flutter 的 IronSource 廣告與中介插件

Android
近 30 天下載
90
喜歡數
35
Pub 分數
120

安裝套件

flutter pub add flutter_ironsource_x

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Flutter_IronSource_X 是一個 Flutter 插件,可將 IronSource 的廣告中介平台整合至 Android 應用程式中,讓開發者能有效率地投放與管理廣告。它支援多種廣告格式,例如插播廣告、獎勵廣告及橫幅廣告,透過多個廣告網路實現收益。該插件簡化了與 IronSource SDK 的整合,提供簡潔的 API 進行廣告載入、顯示與事件處理。專為 Android 設計,確保與 IronSource 最新功能及效能優化相容。

適用情境

  • 移動遊戲變現
  • 整合獎勵視頻廣告
  • 顯示插頁廣告
  • 管理多網路廣告中介
  • 透過即時競標提升應用收入

主要特色

  • 支援多種廣告格式
  • 無縫整合 IronSource SDK
  • 即時廣告表現追蹤
  • 僅限 Android 平台支援
  • 事件驅動的廣告生命週期管理

適合對象

  • Android遊戲開發者
  • 尋求廣告盈利的應用
  • 使用 IronSource 中介的開發者
  • 需要獎勵廣告實現的項目
  • 面向全球受眾的行動應用

使用建議

  • 僅限 Android 平台
  • 需要 IronSource 帳戶設定
  • 依賴於 IronSource SDK 更新
  • 需要合適的廣告投放策略
  • 可能需要為特定廣告網絡進行額外設定

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

flutter_Ironsource_x Ver. 2

Banner

Banner

Interstitial/Rewarded Video

Interstitial/Rewarded Video

Offerwall

Offerwall


In the next version, the version format will be like this

xx.xx.xxxx
 🠕  🠕  🠕
 |  |  Publish Revision
 |  IronSource SDK Major Version
 Dart Major Version

 Example:
 2.7.1
 ------------------------------
 2 is Dart Major Version
 7 is IronSource Major Version
 1 is Publish Revision

IronSource Ads for Flutter

Flutter plugin for showing IronSource ads (Android only)

If this package was helpful to you in delivering on your project or you just wanna to support this project, a cup of coffee would be highly appreciated ;-)

Please support me so I can continue to develop this Plugin. Please support me through Buy me a coffee

Buy me a coffee

Progress

  • ✅ Interstitial
  • ✅ Banner (Still experimenting)
  • ✅ Offerwall
  • ✅ Rewarded video

Using Examples

Init

  void init() async {
    var userId = await IronSource.getAdvertiserId();
    await IronSource.validateIntegration();
    await IronSource.setUserId(userId);
    await IronSource.initialize(appKey: "appKey", listener: this,
                      gdprConsent: true, ccpaConsent: false);
    rewardeVideoAvailable = await IronSource.isRewardedVideoAvailable();
    offerwallAvailable = await IronSource.isOfferwallAvailable();
    setState(() {});
  }

By default gdprConsent and ccpaConsent are true

Interstitial

    IronSource.loadInterstitial();
  void showInterstitial() async {
    if (await IronSource.isInterstitialReady()) {
      IronSource.showInterstitial();
    } else {
      print(
        "Interstial is not ready. use 'Ironsource.loadInterstial' before showing it",
      );
    }
  }
  @override
  void onInterstitialAdClicked() {
    print("onInterstitialAdClicked");
  }

  @override
  void onInterstitialAdClosed() {
    print("onInterstitialAdClosed");
  }

  @override
  void onInterstitialAdLoadFailed(IronSourceError error) {
      print("onInterstitialAdLoadFailed : ${error.toString()}");
  }

  @override
  void onInterstitialAdOpened() {
    print("onInterstitialAdOpened");
    setState(() {
      interstitialReady = false;
    });


  }

  @override
  void onInterstitialAdReady() {
    print("onInterstitialAdReady");
    setState(() {
      interstitialReady = true;
    });

  }

  @override
  void onInterstitialAdShowFailed(IronSourceError error) {

    print("onInterstitialAdShowFailed : ${error.toString()}");
    setState(() {
      interstitialReady = false;
    });
  }

  @override
  void onInterstitialAdShowSucceeded() {
    print("nInterstitialAdShowSucceeded");

Reward Video

  void showRewardedVideo() async {
    if (await IronSource.isRewardedVideoAvailable()) {
      IronSource.showRewardedVideol();
    } else {
      print("RewardedVideo not available");
    }
  }
  @override
  void onRewardedVideoAdClicked(Placement placement) {

    print("onRewardedVideoAdClicked");
  }

  @override
  void onRewardedVideoAdClosed() {
    print("onRewardedVideoAdClosed");

  }

  @override
  void onRewardedVideoAdEnded() {
    print("onRewardedVideoAdEnded");
  }

  @override
  void onRewardedVideoAdOpened() {
    print("onRewardedVideoAdOpened");

  }

  @override
  void onRewardedVideoAdRewarded(Placement placement) {

    print("onRewardedVideoAdRewarded: ${placement.placementName}");
  }

  @override
  void onRewardedVideoAdShowFailed(IronSourceError error) {

    print("onRewardedVideoAdShowFailed : ${error.toString()}");
  }

  @override
  void onRewardedVideoAdStarted() {
    print("onRewardedVideoAdStarted");
  }

  @override
  void onRewardedVideoAvailabilityChanged(bool available) {

    print("onRewardedVideoAvailabilityChanged : $available");
    setState(() {
      rewardeVideoAvailable = available;
    });
  }

Banner

IronSourceBannerAd(keepAlive: true, listener: BannerAdListener());
Banner Size Type:
  • BANNER
IronSourceBannerAd(keepAlive: true, listener: BannerAdListener(), size: BannerSize.BANNER);
  • LARGE
IronSourceBannerAd(keepAlive: true, listener: BannerAdListener(), size: BannerSize.LARGE);
  • LEADERBOARD
IronSourceBannerAd(keepAlive: true, listener: BannerAdListener(), size: BannerSize.LEADERBOARD);
  • RECTANGLE
IronSourceBannerAd(keepAlive: true, listener: BannerAdListener(), size: BannerSize.RECTANGLE);
  • SMART
IronSourceBannerAd(keepAlive: true, listener: BannerAdListener(), size: BannerSize.SMART);
  • CUSTOM
IronSourceBannerAd(
  keepAlive: true,
  listener: BannerAdListener(),
  size: BannerSize.BANNER,
  size: BannerSize(
      type: BannerSizeType.BANNER,
      width: 400,
      height: 50,
    ),
);
Banner Background Color
IronSourceBannerAd(
  keepAlive: true,
  listener: BannerAdListener(),
  size: BannerSize.BANNER,
  backgroundColor: Colors.amber, //Background Color
);
class BannerAdListener extends IronSourceBannerListener {
  @override
  void onBannerAdClicked() {
    print("onBannerAdClicked");
  }

  @override
  void onBannerAdLeftApplication() {
    print("onBannerAdLeftApplication");
  }

  @override
  void onBannerAdLoadFailed(Map<String, dynamic> error) {
    print("onBannerAdLoadFailed");

  }

  @override
  void onBannerAdLoaded() {
    print("onBannerAdLoaded");
  }

  @override
  void onBannerAdScreenDismissed() {
    print("onBannerAdScreenDismisse");
  }

  @override
  void onBannerAdScreenPresented() {
    print("onBannerAdScreenPresented");
  }
}

OfferWall


  void showOfferwall() async {
    if (await IronSource.isOfferwallAvailable()) {
      IronSource.showOfferwall();
    } else {
      print("Offerwall not available");
    }
  }
  @override
  void onGetOfferwallCreditsFailed(IronSourceError error) {

    print("onGetOfferwallCreditsFailed : ${error.toString()}");
  }

  @override
  void onOfferwallAdCredited(OfferwallCredit reward) {

    print("onOfferwallAdCredited : $reward");
  }

  @override
  void onOfferwallAvailable(bool available) {
    print("onOfferwallAvailable : $available");

    setState(() {
      offerwallAvailable = available;
    });
  }

  @override
  void onOfferwallClosed() {
    print("onOfferwallClosed");
  }

  @override
  void onOfferwallOpened() {
    print("onOfferwallOpened");
  }

  @override
  void onOfferwallShowFailed(IronSourceError error) {
    print("onOfferwallShowFailed ${error.toString()}");
  }

Update AndroidManifest.xml

Manifest Permissions

Add the following permissions to your AndroidManifest.xml file inside the manifest tag but outside the <application> tag:

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

Add the following activities inside the <application> tag in your AndroidManifest:

<activity
            android:name="com.ironsource.sdk.controller.ControllerActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true" />
<activity
            android:name="com.ironsource.sdk.controller.InterstitialActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true"
            android:theme="@android:style/Theme.Translucent" />
<activity
            android:name="com.ironsource.sdk.controller.OpenUrlActivity"
            android:configChanges="orientation|screenSize"
            android:hardwareAccelerated="true"
            android:theme="@android:style/Theme.Translucent" />

Setting android/app/build.gradle:

dependencies {
  implementation 'com.ironsource.sdk:mediationsdk:7.2.1'
  ...
}

Change compileSdkVersion to minimum is 31

android {
    compileSdkVersion 31
    ...

Change minSdkVersion to minimum is 21 and targetSdkkVersion to minimum is 31

defaultConfig {
        ...
        minSdkVersion 21
        targetSdkVersion 31
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

Setting android/build.gradle

Change ext.kotlin_version to minimum is 1.6.10

buildscript {
    ext.kotlin_version = '1.6.10'
    ...

add Google Play Services

Add xmlns:tools="http://schemas.android.com/tools" on top for replace label.

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.metamorfosis_labs.flutter_ironsource_x_example">

Add tools:replace="android:label" at the <application> tag

<application
        tools:replace="android:label"
        android:name="io.flutter.app.FlutterApplication"
        android:label="flutter_ironsource_x_example"
        android:networkSecurityConfig="@xml/network_security_config"
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_launcher">

Add the following inside the <application> tag in your AndroidManifest:

<meta-data
  android:name="com.google.android.gms.ads.APPLICATION_ID"
  android:value="ca-app-pub-xxxxxxxxxxxxxxxx~yyyyyyyyyy"/>

<meta-data android:name="com.google.android.gms.version"
  android:value="@integer/google_play_services_version" />

please read this to add google play service

Note

Make sure each widget for the Ironsource Plugin is placed on a different widget from the main or screen widget, this is to avoid collisions with the banner widget if you want the banner widget to work. For more details on how to use please see the sample source code

Mediation

follow this to add mediation sdks

Using this plugin

see directory example

Visit IronSource website to know more

Contributing

Thanks to @karnadii & @DiMiTriFrog

I will continue updating this library.

Support

If this package was helpful to you in delivering on your project or you just wanna to support this project, a cup of coffee would be highly appreciated ;-)

Buy me a coffee

所屬分類

原始碼儲存庫

使用此套件的專案

暫無相關資料。