🚀 快速开始
2.0: 对应 2.0.0 纯短剧契约。pub.dev 当前仍提供 1.0.3;依赖尚未升级时请切换到 1.x 文档。

启动 SDK

import 'package:flutter/foundation.dart';
import 'package:gromore_ads/gromore_ads.dart';
import 'package:pangrowth_content/pangrowth_content.dart';

Future<void> startShortDrama({
  required String gromoreAppId,
  required String pangrowthConfigPath,
}) async {
  await GromoreAds.initialize(
    GromoreInitConfig(
      appId: gromoreAppId,
      useMediation: true,
      debugMode: kDebugMode,
    ),
  );

  await PangrowthContent.initialize(
    PangrowthInitConfig(
      configPath: pangrowthConfigPath,
      debug: kDebugMode,
      personalizationEnabled: true,
      android: const AndroidPangrowthOptions(
        imageCacheSizeMb: 64,
        toastPolicy: PangrowthToastPolicy.sdkDefault,
        privacy: AndroidPangrowthPrivacyConfig(
          allowAndroidId: false,
          allowOaid: false,
          teenagerMode: false,
          onlyRegisteredContent: true,
        ),
      ),
      ios: const IosPangrowthOptions(
        disableAbTest: false,
        newUser: false,
        hostManagesAudioSession: true,
        toastPolicy: PangrowthToastPolicy.sdkDefault,
        privacy: IosPangrowthPrivacyConfig(
          allowIdfa: false,
          teenagerMode: false,
          onlyRegisteredContent: true,
        ),
      ),
    ),
  );

  await PangrowthContent.start();
}

gromoreAppIdpangrowthConfigPath 应由宿主专用配置读取,是否纳入版本控制由宿主仓库策略决定。配置与当前应用身份或签名不匹配时,真实内容和广告数据无法正常返回;配置缺失或为空时应在调用 SDK 前明确失败。

initialize() 只保存内容 SDK 配置;start() 才会启动服务。GroMore 未 ready、配置文件无效或厂商启动失败时会抛出 PangrowthException,错误对象完整提供 codesubCodemessagerequestIddetails

Android 与 iOS 初始化参数独立分组,另一平台的配置不会发送给原生 SDK。个性化推荐在双端使用同一组运行时接口:

await PangrowthContent.setPersonalization(false);
final bool enabled = await PangrowthContent.getPersonalization();

展示聚合页

class DramaHomePage extends StatelessWidget {
  const DramaHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: SafeArea(
        child: DramaHomeNativeView(
          config: DramaHomeConfig(
            detail: DramaDetailConfig(
              unlockMode: DramaUnlockMode.sdkManaged,
              freeEpisodes: 5,
              unlockEpisodesPerAd: 2,
            ),
          ),
        ),
      ),
    );
  }
}

生命周期

  • 只在 PanGrowth start() 成功后创建页面。
  • 原生页面必须获得非零、有边界且稳定的尺寸;全屏页建议直接占满 Scaffold.body
  • Android 宿主必须使用 FlutterFragmentActivity,三个 Fragment 页面固定使用 Hybrid Composition。
  • 页面离开 Widget 树后由 PlatformView 自动释放原生 Fragment 或 ViewController。
  • controller 的 dispose() 可以重复调用,但 dispose 后的控制方法会抛出状态错误。
  • 切换到后台时暂停播放器,回到前台后按业务需要恢复。

更多页面能力参见Widget 导航

需要进一步协助?

与 LightCore 技术顾问沟通,获取商业化策略与集成支持。