Flutter集成IronSource遇Activity null错误,求正确配置方法
问题背景
我正在Flutter中集成IronSource,使用的依赖版本为:ironsource_mediation: 1.1.0、google_mobile_ads: 2.3.0
已完成以下配置:
- app/build.gradle配置:
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' implementation 'com.google.android.gms:play-services-basement:18.1.0' implementation 'com.google.android.gms:play-services-appset:16.0.2' implementation 'com.ironsource.sdk:mediationsdk:7.2.7' // Add AdMob and Ad Manager Network implementation 'com.google.android.gms:play-services-ads:21.4.0' implementation 'com.ironsource.adapters:admobadapter:4.3.34' // Add Facebook Network implementation 'com.ironsource.adapters:facebookadapter:4.3.38' implementation 'com.facebook.android:audience-network-sdk:6.12.0'
- 项目build.gradle配置:
repositories {google()mavenCentral()maven { url 'https://android-sdk.is.com/' }}
- AndroidManifest.xml配置:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="com.google.android.gms.permission.AD_ID"/> <uses-permission android:name="com.android.vending.BILLING"/> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value= "@string/android__admob_ads_id_key" />
运行时出现以下错误:
E/flutter (12382): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)]
Unhandled Exception: PlatformException(ERROR, Activity is null, null,
null) E/flutter (12382): #0 StandardMethodCodec.decodeEnvelope
message_codecs.dart:653 E/flutter (12382): #1
MethodChannel._invokeMethod platform_channel.dart:315 E/flutter
(12382): E/flutter (12382): I/flutter
(12382): PlatformException(ERROR, Activity is null, null, null)
解决方案
该异常核心原因是IronSource SDK无法获取Android Activity实例,需通过以下步骤修复:
1. 绑定Activity到IronSource插件
修改Flutter项目的android/app/src/main/kotlin/[你的包名]/MainActivity.kt(或Java版MainActivity.java),重写configureFlutterEngine方法传递Activity实例:
Kotlin版本
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.engine.FlutterEngine import com.ironsource.adapters.flutter.IronSourceMediationPlugin class MainActivity : FlutterActivity() { override fun configureFlutterEngine(flutterEngine: FlutterEngine) { super.configureFlutterEngine(flutterEngine) IronSourceMediationPlugin.setActivity(this) } }
Java版本
import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import com.ironsource.adapters.flutter.IronSourceMediationPlugin; public class MainActivity extends FlutterActivity { @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); IronSourceMediationPlugin.setActivity(this); } }
2. 调整IronSource初始化时机
确保在Flutter引擎初始化完成后再调用初始化,建议在State的initState中执行:
import 'package:flutter/material.dart'; import 'package:ironsource_mediation/ironsource_mediation.dart'; class MyApp extends StatefulWidget { const MyApp({super.key}); @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { @override void initState() { super.initState(); initIronSource(); } Future<void> initIronSource() async { try { // 替换为你的IronSource App Key await IronSourceMediation.initialize(appKey: "YOUR_IRONSOURCE_APP_KEY"); } catch (e) { debugPrint("IronSource初始化失败: $e"); } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: const Text("IronSource集成")), body: const Center(child: Text("集成测试")), ), ); } }
3. 清理重建项目
执行以下命令清理缓存并重新构建:
flutter clean flutter pub get cd android && ./gradlew clean && cd .. flutter run
额外注意事项
- 确认
ironsource_mediation与原生SDK版本匹配,当前1.1.0对应7.2.7是兼容的; - Android 13+需动态申请
POST_NOTIFICATIONS权限,否则可能影响广告展示; - 检查AndroidManifest.xml中无重复权限或meta-data配置,避免冲突。
内容的提问来源于stack exchange,提问作者Vahit Behrouz

