{"id":19777397,"url":"https://github.com/gstory0404/flutter_unionad","last_synced_at":"2025-05-15T21:04:23.922Z","repository":{"id":38346090,"uuid":"289235545","full_name":"gstory0404/flutter_unionad","owner":"gstory0404","description":"字节跳动 穿山甲广告SDK Bytedance-UnionAD flutter版本插件","archived":false,"fork":false,"pushed_at":"2025-04-30T09:17:44.000Z","size":280721,"stargazers_count":340,"open_issues_count":30,"forks_count":74,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-30T10:52:56.663Z","etag":null,"topics":["flutter","flutter-ads","flutter-plugin","flutter-widget"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gstory0404.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-21T09:52:11.000Z","updated_at":"2025-04-30T09:17:49.000Z","dependencies_parsed_at":"2025-03-18T01:39:23.586Z","dependency_job_id":"f3e862ed-c17f-4815-8fb8-0490fd24d838","html_url":"https://github.com/gstory0404/flutter_unionad","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gstory0404%2Fflutter_unionad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gstory0404%2Fflutter_unionad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gstory0404%2Fflutter_unionad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gstory0404%2Fflutter_unionad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gstory0404","download_url":"https://codeload.github.com/gstory0404/flutter_unionad/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254422754,"owners_count":22068678,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flutter","flutter-ads","flutter-plugin","flutter-widget"],"created_at":"2024-11-12T05:24:44.700Z","updated_at":"2025-05-15T21:04:23.899Z","avatar_url":"https://github.com/gstory0404.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 字节跳动穿山甲广告 Flutter版本\n\n\u003cp\u003e\n\u003ca href=\"https://pub.dev/packages/flutter_unionad\"\u003e\u003cimg src=https://img.shields.io/pub/v/flutter_unionad?color=orange\u003e\u003c/a\u003e\n\u003ca href=\"https://pub.dev/packages/flutter_unionad\"\u003e\u003cimg src=https://img.shields.io/pub/likes/flutter_unionad\u003e\u003c/a\u003e\n\u003ca href=\"https://pub.dev/packages/flutter_unionad\"\u003e\u003cimg src=https://img.shields.io/pub/points/flutter_unionad\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/gstory0404/flutter_unionad/commits\"\u003e\u003cimg src=https://img.shields.io/github/last-commit/gstory0404/flutter_unionad\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/gstory0404/flutter_unionad\"\u003e\u003cimg src=https://img.shields.io/github/stars/gstory0404/flutter_unionad\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp\u003e\n\u003ca href=\"http://qm.qq.com/cgi-bin/qm/qr?_wv=1027\u0026k=VhD0AZSmzvsD3fu7CeQFkzpBQHMHANb1\u0026authKey=W7JGJ0HKklyhP1jyBvbTF2Dkw0cq4UmhVSx2zXVdIm6n48Xrto%2B7%2B1n9jbkAadyF\u0026noverify=0\u0026group_code=649574038\"\u003e\u003cimg src=https://img.shields.io/badge/flutter%E4%BA%A4%E6%B5%81%E7%BE%A4-649574038-blue\u003e\u003c/a\u003e\n\u003ca href=\"http://qm.qq.com/cgi-bin/qm/qr?_wv=1027\u0026k=9I9lyXewEsEnx0f00EOF_9hEcFmG5Bmg\u0026authKey=AJfQ8%2FhOLcoJ0p5B16EITjFav1IIs3UAerZSUsWZfa0evuklgxibHti51AYlZgI3\u0026noverify=0\u0026group_code=769626410\"\u003e\u003cimg src=https://img.shields.io/badge/flutter%E4%BA%A4%E6%B5%81%E7%BE%A42-769626410-blue\u003e\u003c/a\u003e\n\u003ca href=\"https://qm.qq.com/q/4MSgZuKimc\"\u003e\u003cimg src=https://img.shields.io/badge/flutte%E6%8F%92%E4%BB%B6%E5%8F%8D%E9%A6%88-662186116-blue\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cimg src=\"https://github.com/gstory0404/flutter_unionad/blob/master/image/demo.gif\" width=\"30%\"\u003e\n\n## 简介\n  flutter_unioad是一款集成了穿山甲Android和iOSSDK的Flutter插件,方便直接调用穿山甲SDK方法开发，已支持null safety,[体验demo](https://www.pgyer.com/j7YB)，可通过[GTAds](https://github.com/gstory0404/GTAds)实现多个广告平台接入、统一管理。\n  \n## 官方文档\n* [Android](https://www.csjplatform.com/union/media/union/download/detail?id=147\u0026osType=android\u0026locale=zh-CN\u0026backPath=/union/media/union/download/pangle)\n* [IOS](https://www.csjplatform.com/union/media/union/download/detail?id=148\u0026osType=ios\u0026locale=zh-CN\u0026backPath=/union/media/union/download/pangle)\n* [OpenHarmonyOS]()\n\n## 版本更新\n\n[更新日志](https://github.com/gstory0404/flutter_unionad/blob/master/CHANGELOG.md)\n\n## 注意事项\n⚠️ 版本更新必看，不然可能广告加载可能会出现异常\n[插件更新调整](https://github.com/gstory0404/flutter_unionad/blob/master/notice.md)\n\n⚠️ 由于融合SDK与旧版部分api不兼容，[2.0.0](https://github.com/gstory0404/flutter_unionad/blob/master/CHANGELOG.md)改动较大,更新后注意查看文档说明\n\n⚠️ 用gromore来创建广告位，使用gromore id来展示广告\n\n## 本地开发环境\n```\n[✓] Flutter (Channel stable, 3.22.1, on macOS 14.5 23F79 darwin-x64, locale zh-Hans-CN)\n[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)\n[✓] Xcode - develop for iOS and macOS (Xcode 15.2)\n[✓] Chrome - develop for the web\n[✓] Android Studio (version 2022.1)\n[✓] IntelliJ IDEA Ultimate Edition (version 2024.1.2)\n[✓] VS Code (version 1.89.1)\n[✓] Connected device (3 available)\n[✓] Network resources\n```\n\n## 集成步骤\n#### 1、pubspec.yaml\n```Dart\nflutter_unionad: ^latest\n```\n引入\n```Dart\nimport 'package:flutter_unionad/flutter_unionad.dart';\n```\n#### 2、Android\n[SDK](https://www.csjplatform.com/union/media/union/download/log?id=4)已配置插件中无需额外配置，只需要在android目录中AndroidManifest.xml配置\n```Java\n\u003cmanifest ···\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    ···\u003e\n  \u003capplication\n        tools:replace=\"android:label\"\u003e\n```\n\n#### 3、IOS\n[SDK](https://www.csjplatform.com/union/media/union/download/log?id=16)已配置插件中，其余根据SDK文档配置，因为使用PlatformView，在Info.plist加入\n```\n \u003ckey\u003eio.flutter.embedded_views_preview\u003c/key\u003e\n    \u003ctrue/\u003e\n```\n\n#### 4、鸿蒙next\n##### 需要把下面这个文件拷贝到你的鸿蒙项目根目录下\n[.ohpmrc](example/ohos/.ohpmrc)\n\n\n\n## 使用\n\n#### 1、SDK初始化\n\n⚠️如果要修改个性化，重新调用初始化方法\n```Dart\nawait FlutterUnionad.register(\n    //穿山甲广告 Android appid 必填\n    androidAppId: \"5098580\",\n    //穿山甲广告 ios appid 必填\n    iosAppId: \"5098580\",\n    //appname 必填\n    appName: \"unionad_test\",\n    //使用聚合功能一定要打开此开关，否则不会请求聚合广告，默认这个值为false\n    //true使用GroMore下的广告位\n    //false使用广告变现下的广告位\n    useMediation: true,\n    //是否为计费用户 选填\n    paid: false,\n    //用户画像的关键词列表 选填\n    keywords: \"\",\n    //是否允许sdk展示通知栏提示 选填\n    allowShowNotify: true,\n    //是否显示debug日志\n    debug: true,\n    //是否支持多进程 选填\n    supportMultiProcess: false,\n    //主题模式 默认FlutterUnionAdTheme.DAY,修改后需重新调用初始化\n    themeStatus: _themeStatus,\n    //允许直接下载的网络状态集合 选填\n    directDownloadNetworkType: [\n    FlutterUnionadNetCode.NETWORK_STATE_2G,\n    FlutterUnionadNetCode.NETWORK_STATE_3G,\n    FlutterUnionadNetCode.NETWORK_STATE_4G,\n    FlutterUnionadNetCode.NETWORK_STATE_WIFI\n    ],\n    androidPrivacy: AndroidPrivacy(\n        //是否允许SDK主动使用地理位置信息 true可以获取，false禁止获取。默认为true\n        isCanUseLocation: false,\n        //当isCanUseLocation=false时，可传入地理位置信息，穿山甲sdk使用您传入的地理位置信息lat\n        lat: 0.0,\n        //当isCanUseLocation=false时，可传入地理位置信息，穿山甲sdk使用您传入的地理位置信息lon\n        lon: 0.0,\n        // 是否允许SDK主动使用手机硬件参数，如：imei\n        isCanUsePhoneState: false,\n        //当isCanUsePhoneState=false时，可传入imei信息，穿山甲sdk使用您传入的imei信息\n        imei: \"\",\n        // 是否允许SDK主动使用ACCESS_WIFI_STATE权限\n        isCanUseWifiState: false,\n        // 当isCanUseWifiState=false时，可传入Mac地址信息\n        macAddress: \"\",\n        // 是否允许SDK主动使用WRITE_EXTERNAL_STORAGE权限\n        isCanUseWriteExternal: false,\n        // 开发者可以传入oaid\n        oaid: \"b69cd3cf68900323\",\n        // 是否允许SDK主动获取设备上应用安装列表的采集权限\n        alist: false,\n        // 是否能获取android ID\n        isCanUseAndroidId: false,\n        // 开发者可以传入android ID\n        androidId: \"\",\n        // 是否允许SDK在申明和授权了的情况下使用录音权限\n        isCanUsePermissionRecordAudio: false,\n        // 是否限制个性化推荐接口\n        isLimitPersonalAds: false,\n        // 是否启用程序化广告推荐 true启用 false不启用\n        isProgrammaticRecommend: false,\n    ),\n    iosPrivacy: IOSPrivacy(\n        //允许个性化广告\n        limitPersonalAds: false,\n        //允许程序化广告\n        limitProgrammaticAds: false,\n        //允许CAID\n        forbiddenCAID: false,\n    )\n);\n\n```\n#### 2、获取SDK版本\n```Dart\nawait FlutterUnionad.getSDKVersion();\n```\n\n#### 3、请求权限\n```Dart\n  FlutterUnionad.requestPermissionIfNecessary(\n      callBack: FlutterUnionadPermissionCallBack(\n            notDetermined: () {\n                print(\"权限未确定\");\n            },\n            restricted: () {\n                print(\"权限限制\");\n            },\n            denied: () {\n                print(\"权限拒绝\");\n            },\n            authorized: () {\n                print(\"权限同意\");\n            },\n       ),\n  );\n\n```\nAndroid获取定位、照片权限，只返回成功\n\nAndroid相关权限为非必须权限，可选择在AndroidManifest.xml中声明\n\nIOS 版本14及以上获取ATT权限，根据返回结果具体操作业务逻辑\n\n#### 4、开屏广告\n```Dart\nFlutterUnionadSplashAdView(\n    //android 开屏广告广告id 必填 889033013 102729400\n    androidCodeId: \"102729400\",\n    //ios 开屏广告广告id 必填\n    iosCodeId: \"102729400\",\n    //是否支持 DeepLink 选填\n    supportDeepLink: true,\n    // 期望view 宽度 dp 选填\n    width: MediaQuery.of(context).size.width,\n    //期望view高度 dp 选填\n    height: MediaQuery.of(context).size.height - 100,\n    //是否影藏跳过按钮(当影藏的时候显示自定义跳过按钮) 默认显示\n    hideSkip: false,\n    //超时时间\n    timeout: 3000,\n    callBack: FlutterUnionadSplashCallBack(\n        onShow: () {\n            print(\"开屏广告显示\");\n            setState(() =\u003e _offstage = false);\n        },\n        onClick: () {\n            print(\"开屏广告点击\");\n        },\n        onFail: (error) {\n            print(\"开屏广告失败 $error\");\n            Navigator.pop(context);\n        },\n        onFinish: () {\n            print(\"开屏广告倒计时结束\");\n            Navigator.pop(context);\n        },\n        onSkip: () {\n            print(\"开屏广告跳过\");\n            Navigator.pop(context);\n        },\n        onTimeOut: () {\n            print(\"开屏广告超时\");\n        },\n    ),\n),\n```\n#### 5、banner广告\n```Dart\nFlutterUnionadBannerView(\n    //andrrid banner广告id 必填\n    androidCodeId: \"102735527\",\n    //ios banner广告id 必填\n    iosCodeId: \"102735527\",\n    // 期望view 宽度 dp 必填\n    width: 600.5,\n    //期望view高度 dp 必填\n    height: 120.5,\n    //广告事件回调 选填\n    callBack: FlutterUnionadBannerCallBack(onShow: () {\n            print(\"banner广告加载完成\");\n        }, onDislike: (message) {\n            print(\"banner不感兴趣 $message\");\n        }, onFail: (error) {\n            print(\"banner广告加载失败 $error\");\n        }, onClick: () {\n            print(\"banner广告点击\");\n        },\n    ),\n),\n```\n\n#### 6、信息流广告\n```dart\n//个性化模板信息流广告\nFlutterUnionadNativeAdView(\n    //android 信息流广告id 必填\n    androidCodeId: \"102730271\",\n    //ios banner广告id 必填\n    iosCodeId: \"102730271\",\n    //是否支持 DeepLink 选填\n    supportDeepLink: true,\n    // 期望view 宽度 dp 必填\n    width: 375.5,\n    //期望view高度 dp 必填\n    height: 0,\n    callBack: FlutterUnionadNativeCallBack(\n        onShow: () {\n            print(\"信息流广告显示\");\n        },\n        onFail: (error) {\n            print(\"信息流广告失败 $error\");\n        },\n        onDislike: (message) {\n            print(\"信息流广告不感兴趣 $message\");\n        },\n        onClick: () {\n            print(\"信息流广告点击\");\n        },\n    ),\n),\n\n```\n\n\n#### 8、激励视频广告\n预加载激励视频广告\n```Dart\nFlutterUnionad.loadRewardVideoAd(\n    //是否个性化 选填\n    androidCodeId: \"102733764\",\n    //Android 激励视频广告id  必填\n    iosCodeId: \"102733764\",\n    //ios 激励视频广告id  必填\n    rewardName: \"200金币\",\n    //奖励名称 选填\n    rewardAmount: 200,\n    //奖励数量 选填\n    userID: \"123\",\n    //  用户id 选填\n    orientation: FlutterUnionadOrientation.VERTICAL,\n    //视屏方向 选填\n    mediaExtra: null,\n    //扩展参数 选填\n);\n```\n显示激励视频广告\n```dart\n await FlutterUnionad.showRewardVideoAd();\n```\n监听激励视频结果\n\n```Dart\n FlutterUnionad.FlutterUnionadStream.initAdStream(\n      //激励广告\n        flutterUnionadRewardAdCallBack: FlutterUnionadRewardAdCallBack(\n        onShow: (){\n          print(\"激励广告显示\");\n        },\n        onClick: (){\n          print(\"激励广告点击\");\n        },\n        onFail: (error){\n          print(\"激励广告失败 $error\");\n        },\n        onClose: (){\n          print(\"激励广告关闭\");\n        },\n        onSkip: (){\n          print(\"激励广告跳过\");\n        },\n        onVerify: (rewardVerify,rewardAmount,rewardName){\n          print(\"激励广告奖励  $rewardVerify   $rewardAmount  $rewardName\");\n        },\n        onReady: () async{\n          print(\"激励广告预加载准备就绪\");\n          await FlutterUnionad.showRewardVideoAd();\n        }, \n        onCache: () async {\n          print(\"激励广告物料缓存成功。建议在这里进行广告展示，可保证播放流畅和展示流畅，用户体验更好。\");\n        },\n        onUnReady: (){\n          print(\"激励广告预加载未准备就绪\");\n        }, \n        onRewardArrived: (rewardVerify, rewardType, rewardAmount, rewardName,\n          errorCode, error, propose) {\n            print(\n            \"阶段激励广告奖励  验证结果=$rewardVerify 奖励类型\u003cFlutterUnionadRewardType\u003e=$rewardType 奖励=$rewardAmount\"\n            \"奖励名称$rewardName 错误码=$errorCode 错误$error 建议奖励$propose\");\n            }),\n      ),\n    );\n```\n#### 9、draw视频广告\n```Dart\nFlutterUnionadDrawFeedAdView(\n    androidCodeId: \"102734241\",\n    iosCodeId: \"102734241\",\n    //是否支持 DeepLink 选填\n    width: 600.5,\n    // 期望view 宽度 dp 必填\n    height: 800.5,\n    callBack: FlutterUnionadDrawFeedCallBack(\n        onShow: () {\n            print(\"draw广告显示\");\n        },\n        onFail: (error) {\n            print(\"draw广告加载失败 $error\");\n        },\n        onClick: () {\n            print(\"draw广告点击\");\n        },\n        onDislike: (message) {\n            print(\"draw点击不喜欢 $message\");\n        },\n        onVideoPlay: () {\n            print(\"draw视频播放\");\n        },\n        onVideoPause: () {\n            print(\"draw视频暂停\");\n        },\n        onVideoStop: () {\n            print(\"draw视频结束\");\n        },\n    ),\n);\n```\n\n#### 11、新模版渲染插屏广告 分为全屏和插屏\n预加载新模版渲染插屏广告\n```dart\nFlutterUnionad.loadFullScreenVideoAdInteraction(\n    //android 全屏广告id 必填\n    androidCodeId: \"102735530\",\n    //ios 全屏广告id 必填\n    iosCodeId: \"102735530\",\n    //视屏方向 选填\n    orientation: FlutterUnionadOrientation.VERTICAL,\n);\n```\n\n显示新模版渲染插屏广告\n```dart\n  await FlutterUnionad.showFullScreenVideoAdInteraction();\n```\n\n新模版渲染插屏广告结果监听\n```dart\nFlutterUnionad.FlutterUnionadStream.initAdStream(\n      // 新模板渲染插屏广告回调\n        flutterUnionadNewInteractionCallBack: FlutterUnionadNewInteractionCallBack(\n              onShow: () {\n                print(\"新模板渲染插屏广告显示\");\n              },\n              onSkip: () {\n                print(\"新模板渲染插屏广告跳过\");\n              },\n              onClick: () {\n                print(\"新模板渲染插屏广告点击\");\n              },\n              onFinish: () {\n                print(\"新模板渲染插屏广告结束\");\n              },\n              onFail: (error) {\n                print(\"新模板渲染插屏广告错误 $error\");\n              },\n              onClose: () {\n                print(\"新模板渲染插屏广告关闭\");\n              },\n              onReady: () async{\n                print(\"新模板渲染插屏广告预加载准备就绪\");\n                //显示新模板渲染插屏\n                await FlutterUnionad.showFullScreenVideoAdInteraction();\n              },\n              onUnReady: (){\n                print(\"新模板渲染插屏广告预加载未准备就绪\");\n              },\n            ),\n    );\n```\n\n#### 13、日间/夜间模式\n获取主题模式\n```dart\n// 0正常模式 1夜间模式\n _themeStatus = await FlutterUnionad.getThemeStatus();\n```\n切换主题模式\n\n修改初始化中themeStatus参数，重新调用初始化\n\n#### 14 ecpm说明\n```\n/// [adnName] ADN的名称，与平台配置一致，自定义ADN时为ADN唯一标识\n/// [customAdnName] 自定义ADN的名称，与平台配置一致，非自定义ADN为nil\n/// [slotID] 代码位\n/// [levelTag] 价格标签，多阶底价下有效\n/// [ecpm] 返回价格，nil为无权限\n/// [biddingType] 广告类型\n/// [errorMsg] 额外错误信息,一般为空(扩展字段)\n/// [requestID] adn提供的真实广告加载ID，可为空\n/// [creativeID] adn提供的真实广告创意ID，可为空\n/// [adRitType] 广告位类型\n/// [segmentId] 流量分组ID\n/// [abtestId] AB实验分组ID\n/// [channel] 渠道名称\n/// [subChannel] 子渠道名称\n/// [scenarioId] 场景ID\n/// [subRitType] 混用类型，banner/fullVideo/rewardVideo/feed/draw/interstitial\n```\n\n## 常见问题\n\n[常见问题](https://github.com/gstory0404/flutter_unionad/blob/master/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98.md)\n\n## 插件链接\n\n|插件|地址|\n|:----|:----|\n|字节-穿山甲广告插件|[flutter_unionad](https://github.com/gstory0404/flutter_unionad)|\n|腾讯-优量汇广告插件|[flutter_tencentad](https://github.com/gstory0404/flutter_tencentad)|\n|百度-百青藤广告插件|[baiduad](https://github.com/gstory0404/baiduad)|\n|字节-Gromore聚合广告|[gromore](https://github.com/gstory0404/gromore)|\n|Sigmob广告|[sigmobad](https://github.com/gstory0404/sigmobad)|\n|聚合广告插件(迁移至GTAds)|[flutter_universalad](https://github.com/gstory0404/flutter_universalad)|\n|GTAds聚合广告|[GTAds](https://github.com/gstory0404/GTAds)|\n|字节穿山甲内容合作插件|[flutter_pangrowth](https://github.com/gstory0404/flutter_pangrowth)|\n|文档预览插件|[file_preview](https://github.com/gstory0404/file_preview)|\n|滤镜|[gpu_image](https://github.com/gstory0404/gpu_image)|\n\n### 开源不易，觉得有用的话可以请作者喝杯奶茶🧋\n\u003cimg src=\"https://github.com/gstory0404/flutter_unionad/blob/master/image/weixin.jpg\" width = \"200\" height = \"160\" alt=\"打赏\"/\u003e\n\n\n## 联系方式\n* Email: gstory0404@gmail.com\n* blog：https://www.gstory.cn/\n\n* QQ群: \u003ca target=\"_blank\" href=\"https://qm.qq.com/cgi-bin/qm/qr?k=4j2_yF1-pMl58y16zvLCFFT2HEmLf6vQ\u0026jump_from=webapi\"\u003e\u003cimg border=\"0\" src=\"//pub.idqqimg.com/wpa/images/group.png\" alt=\"649574038\" title=\"flutter交流\"\u003e\u003c/a\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgstory0404%2Fflutter_unionad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgstory0404%2Fflutter_unionad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgstory0404%2Fflutter_unionad/lists"}