app_name: GuruApp

app_category: app

flavor: "guru_test"

# App接入GuruApp的基础信息（下面内容必填）
details:
  # 中台接口上报时的app_id，影响中台push接入和后期的中台打点接入（必填）
  saas_app_id: guruapp

  # 针对DynamicLink和Deeplink的判断（必填）
  authority: demo.gurugame.fun

  # 对应Firebase项目中的基础链接（必填）
  storage_prefix: https://firebasestorage.googleapis.com/v0/b/example.appspot.com/o

  # 对应CDN云控中的默认cdn链接（必填）
  default_cdn_prefix: https://cdn1.example.gurugame.fun

  # Android的商店链接，后期分享，用户反馈或PubMatic等广告源的使用（必填）
  android_gp_url: https://play.google.com/store/apps/details?id=app_package_id

  # IOS的商店链接，后期分享，用户反馈或PubMatic等广告源的使用（必填）
  ios_spp_store_url:

  # 隐私协议的链接（必填）
  policy_url: https://solitaire.fungame.studio/policy.html

  # 隐私条款的链接（必填）
  terms_url: https://solitaire.fungame.studio/termsofservice.html

  # 联系邮箱 （必填）
  email_url: demo@gurugame.fun

  # Android Package Name （必填）
  package_name: guru.app.demo

  # iOS Bundle Id （必填）
  bundle_id: guru.app.demo

  # Facebook App Id
  facebook_app_id: 123456789

deployment:
  # AppProperty Cache的大小，默认是256
  property_cache_size: 512

  # Paint.enableDithering，默认是true
  enable_dithering: false

  # 禁用激励视频，默认是false
  disable_rewards_ads: true

  # 是否启用 Analytics Statistic 统计
  enable_analytics_statistic: true

  # 是否自动恢复IAP购买数据
  auto_restore_iap: false

  # 初始的游戏币数量，默认是 0
  init_igc: 500

  # igc（游戏内货币） 验证密钥混，int类型，防止igc被外部修改
  igc_balance_secret: 2654404609

  # GuruApp Persistent Log 默认10M
  log_file_size_limit: 10485760

  # GuruApp Persistent Log 保存的个数，默认7个
  log_file_count: 7

  # 使用persistent log的最小等级,最终 >= 该level的日志将会被存储到本地
  # verbose: 0
  # debug: 1
  # info: 2
  # warning: 3
  # error: 4
  # wtf: 5
  # nothing: 6
  persistent_log_level: 1

  # ios 验证服务器的密码
  ios_validate_receipt_password: aa998877665544332211bb00cc

  # 被标注的conversion点，在自打点库中将被以Emergency的优先级进行发送
  conversion_events:
    - first_rads_rewarded
    - level_end_success_1
    - level_end_success_6
    - level_end_success_10
    - level_end_success_12
    - level_end_success_15
    - level_up
    - level_up_1
    - level_up_3
    - level_up_5
    - level_up_7
    - level_up_10
    - level_up_12
    - level_up_15
    - tch_ad_rev_roas_001
    - tutorial_complete

  api_connect_timeout: 15000

  api_receive_timeout: 15000

  #
  # Sandbox lets you test subscription events, such as renewals, state changes, and interrupted purchases,
  # without having to wait the length of the subscription duration. Once you added testers in sandbox,
  # you can choose a subscription renewal speed for each tester to determine how quickly subscriptions renew.
  # By default, accounts are set to a speed equalization of 1 month = 5 minutes,
  # but you can slow down or speed up the renewal period, based on the options below.
  # Subscriptions renew up to 12 times before auto-renewal turns off on the thirteenth renewal attempt.
  # ┌───────────────┬────────────────┬────────────────┬────────────────┬────────────────┬────────────────┐
  # │ Subscription  │  Renewal every │  Renewal every │  Renewal every │  Renewal every │  Renewal every │
  # │   Duration    │   3 Minutes    │   5 Minutes    │   15 Minutes   │   30 Minutes   │      Hour      │
  # ├───────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
  # │   1 Week      │   3 minutes    │   3 minutes    │   5 minutes    │   10 minutes   │   15 minutes   │
  # ├───────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
  # │   1 Month     │   3 minutes    │   5 minutes    │   15 minutes   │   30 minutes   │     1 hour     │
  # ├───────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
  # │   6 Months    │   18 minutes   │   30 minutes   │   90 minutes   │    3 hours     │    6 hours     │
  # ├───────────────┼────────────────┼────────────────┼────────────────┼────────────────┼────────────────┤
  # │   1 Year      │   36 minutes   │    1 hour      │    3 hours     │    6 hours     │   12 hours     │
  # └───────────────┴────────────────┴────────────────┴────────────────┴────────────────┴────────────────┘
  #
  # level 1: Renewal every 3 minutes per month
  # level 2: Renewal every 5 minutes per month (default)
  # level 3: Renewal every 15 minutes per month
  # level 4: Renewal every 30 minutes per month
  # level 5: Renewal every 1 hour per month
  ios_sandbox_subs_renewal_speed: 2

  # 是否使用广告合规初始化的逻辑，合规初始化是指先收集GDPR在初始化广告
  ads_compliant_initialization: false

  # 自动请求通知栏权限，默认是false
  auto_request_notification_permission: false

  # 请求通知栏权限时的提示出发机制
  # rationale: 依赖Android原生的shouldShowRequestRationale返回值来展示对应的Rationale页面
  # request: 依赖请求的次数来展示对应的Rationale页面
  notification_permission_prompt_trigger: rationale

  # 是否追踪通知栏权限的通过率，默认是false。
  # 如果为true时将会上报对应noti_perm_req_`n`和noti_perm_pass_`n`
  # n: 表示第几次请求
  # 注意！如果开启了追踪通知栏权限的通过率统计点位，那么firebase打点中将会出现`n`个noti_perm_req_`n`和noti_perm_pass_`n`这两个打点
  # 这里的n的限制需要配置tracking_notification_permission_pass_limit_times
  tracking_notification_permission_pass: false

  # 如果追踪通知栏权限的通过率，这个值表示最大的追踪次数，超过最大次数后将不再追踪
  tracking_notification_permission_pass_limit_times: 10

  # 是否打开GuruAnalytics的策略，默认是false
  enabled_guru_analytics_strategy: false

  # 在RewardedAware中调用 showRewardedAd 方法时
  # 在激励视频不可用时，是否允许使用插屏做为替代奖励，默认是 false
  # 注意：即使这里设置成 True，在你使用的页面 Controller中，要确保 with InterstitialAware
  allow_interstitial_as_alternative_reward: false

  # 在 Banner 广告未成功加载的期间，填充一个内部的广告，可以是一个推广，一个内部的广告。
  # 它不会影响正常的广告展示逻辑，只要 Banner 广告正常加载，都会将其进行隐藏。
  # 因此它的优先级永远不会大于正常的 Banner 广告, 默认值是 false
  show_internal_ads_when_banner_unavailable: true

  # 由于订阅订单比较重要，而从用户反馈的日志上来看，会存在接口返回异常的问题
  # 因此针对这种情况，添加订阅的恢复宽限次数，默认为 3 次
  # 当订阅订单恢复失败次数超过该次数，才会真正删除
  subscription_restore_grace_count: 3

  # 插屏在展示广告前，为了保证用户的体验，会有一个广告的保护时间，
  # 即：距上一次全屏广告（插屏广告和激励广告）的结束间隔时间，
  # 默认的间隔保护时间为 1 分钟（60 秒）单位为秒
  fullscreen_ads_min_interval: 60

  # 是否打开中台的 AccountProfile 同步机制
  # 打开后，在登陆后（包括匿名登陆) 会启动向 Firestore 进行同步AccountProfile的机制
  # Firestore 针对 AccountProfile的存储位置默认放在 users 表中
  enabled_sync_account_profile: false

  # 根据 BI 的需求，对应的 Purchase事件只能报太极的 001 或 020的其中一个
  # 因此添加 Purchase Event 的 trigger, 默认值为 1
  # 1: 表示在发生购买时打 tch_ad_rev_roas_001
  # 2: 表示在发生购买时打 tch_ad_rev_roas_020
  # 在广告展示时也会依据该 trigger 的值，在不同的时机打对应的 purchase事件
  purchase_event_trigger: 1

#  tracking_notification_permission_pass_analytics_type : guru|firebase

# 广告配置
ads_profile:
  # Banner广告ID(变现提供)
  banner_ad_unit_id:
    android: xxxxxxxxxxxxxxxx
    ios: xxxxxxxxxxxxxxxx

  # Interstitial广告ID(变现提供)
  interstitial_ad_unit_id:
    android: xxxxxxxxxxxxxxxx
    ios: xxxxxxxxxxxxxxxx

  # Rewards广告ID(变现提供)
  rewards_ad_unit_id:
    android: xxxxxxxxxxxxxxxx
    ios: xxxxxxxxxxxxxxxx

  # Amazon广告的AppId(变现提供)
  amz_app_id:
    android: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    ios: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  # Amazon广告的Banner Slot Id(变现提供)
  banner_amz_slot_id:
    android: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    ios: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  # Amazon广告的Interstitial Slot Id(变现提供)
  interstitial_amz_slot_id:
    android: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    ios: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

  rewarded_amz_slot_id:
    android: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    ios: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

remote_config:
  # 保留配置，插屏广告相关配置
  iads_config: '{"free_s":600,"win_count":4,"scene":"game_start","sp_scene":"new_block:120;reset_scs:120","retry_min_s":10,"retry_max_s":600,"amazon_enable":false,"imp_gap_s":120}'

  # 保留配置，激励广告相关配置
  rads_config: '{"win_count":3}'

  # 保留配置，Banner广告相关配置
  bads_config: '{"free_s":180,"win_count":1}'

  # 保留配置，打点相关配置
  analytics_config: '{"cap":"firebase|facebook|guru", "init_delay_s": 10}'
#
#  _mapping:
#    cdn_config: "cdn2_config"


products:
  # sku
  #  商品的ID，如果同时指定了android和ios，优先级sku为主
  #  支持参数定义，见下面的样例商品theme的sku
  #
  # android,ios
  #  各个平台的SKU,如果指定了sku将忽略这两个选择
  #
  # attr
  #  possessive: 购买后永久有效
  #  consumable: 可消耗商品
  #  subscriptions: 订阅类商品
  #
  # method:
  #  购买的方式，支持iap,igc,reward
  #  iap: 通过IAP购买的商品
  #  igc: 通过虚拟游戏币购买的商品
  #  reward: 通过奖励的方式获取的商品
  #  如果这个商品支持多种方式购买，可以通过逗号的形式进行串联
  #
  # capabilities:
  #  表示该商品的能力，现阶段只支持noAds
  #
  # manifest:
  #  指购买该商品后所获得的清单
  #  category:
  #   该manifest的种类，这个主要用于后面的打点
  #   如果在guru_spec.yaml中定义相同的category，该category的名字必须能保证名字是不相似的，
  #   如果出现名字相似的情况下，将会视为冲突，如:noAds和no_ads这类相似的名字都将无法生成
  #  details,details1,details2...detailsN
  #   指该商品的获取明细，如igc多少个，道具多少个
  #   details中必须定义type和amount否则将无法生成
  #   details中的type，现阶段系统预定义了igc（表示游戏内货币）
  #   如果需要处理模板库不支持的类型，需要在使用模板库的时候添加相应的distributor
  #  自定义参数
  #   可以指定不同的参数，也可以引用sku中的参数，见下面的样例商品theme的manifest
  #   如果在guru_spec.yaml中定义相同的category的商品，自定义参数必须一至，
  #   否则将无法生成
  #

  no_ads:
    android: so.a.iap.noads.699
    ios: so.i.iap.noads.699
    attr: asset
    method: iap,reward,igc
    manifest:
      category: "no_ads"

  no_ads_coin_bundle:
    android: so.a.iap.noads.coin.799
    ios: so.i.iap.noads.coin.799
    attr: asset
    method: iap
    capabilities: noAds
    manifest:
      category: "no_ads"
      details:
        type: "igc" # in-game currency
        amount: 500
      details1:
        type: "cup"
        amount: 1
      details2:
        type: "frag"
        amount: 20

  theme:
    sku: "theme_{theme_id}"
    method: igc,reward
    attr: possessive
    manifest:
      category: "theme_{1}"
      theme_id: "{1}"

  #  theme2:
  #    sku: "theme2_{theme_id}"
  #    method: igc,reward
  #    attr: possessive
  #    manifest:
  #      category: "theme"
  #      theme_id: "{1}"
  #      details:
  #        type: "theme"
  #        amount: 1
  #      details2:
  #        type: "theme3"
  #        amount: 1

  prop:
    sku: "theme_{prop_id}_{pc_id}"
    method: igc,reward
    attr: possessive
    manifest:
      category: "prop"
      details:
        sku: "{1}_{2}"
        type: "prop"
        amount: 1
        theme_id: "{1}"
      details2:
        type: "pc"
        amount: 1
        theme_id: "{2}"

  no_ads2:
    android: so.a.iap.noads.699
    ios: so.i.iap.noads.699
    attr: possessive
    method: iap
    capabilities: noAds
    manifest:
      category: no_ads
      details:
        type: no_ads
        amount: 1
        ignore_sales: true

  coin200:
    android: so.a.iapc.coin.200
    ios: so.i.iapc.coin.200
    method: iap
    attr: consumable
    points: true
    manifest:
      category: coin
      details:
        type: coin
        amount: 200

  stage_pack:
    android: so.a.iap.stage.1
    ios: so.i.iap.stage.1
    attr: consumable
    method: iap
    manifest:
      category: "stage_1"
      details:
        type: "stage" # in-game currency
        amount: 1
        stage: 1

  premium_week:
    android: "m2.a.sub.premium"
    ios: "m2.i.sub.premium.p1w"
    attr: subscriptions
    method: iap
    capabilities: noAds
    base_plan: weekly
    group: premium
    offers:
      - freetrial
      - discount
    manifest:
      category: "sub"
      details:
        type: "igc"
        amount: 8000

  premium_year:
    android: "m2.a.sub.premium"
    ios: "m2.i.sub.premium.p1y"
    attr: subscriptions
    method: iap
    capabilities: noAds
    base_plan: yearly
    group: premium
    offers:
      - freetrial
      - discount
    manifest:
      category: "sub"
      details:
        type: "igc"
        amount: 16000
#
#  theme_mul:
#    sku: "theme_{category}_{theme_id}"
#    attr: possessive
#    method: igc
#    manifest:
#      category: "{1}"
#      theme_id: "{2}"
#      cate: "{1}"

# adjust 相关配置
adjust_profile:
  # 对应adjust的appToken,必填项
  app_token:
    android: testapptoken
    ios: testapptoken

  # 如果有对应的事件映射在这里统一定义
  event_map:
    level_start:
      android: hq0xzz
      ios: b8khry

    iap_purchase:
      android: yzy3uh
      ios: z0gje7
      params: true
    sub_purchase:
      android: yzy3uh
      ios: z0gje7
      params: true

    level_end:
      android: so63k4
      ios: 1p8z5t

    tutorial_complete:
      android: 95fu7q
      ios: 1p8z5t

experiments:

  test:
    start: 20240129T000000
    end: 20240129T000000
    audience:
      filters:
        - version:
            opt: lt
            mmp: 2.3.0
        - country:
            included: ""
            excluded: "us,cn,en"
        - platform:
            android:
              opt: gte
              ver: 33
            ios:
              opt: gte
              ver: 14
      variant: 2
  test2:
    start: 20240129T000000
    end: 20240129T000000
    audience:
      filters:
        - version:
            opt: lt
            mmp: 2.3.0
        - country:
            included: "cn"
            excluded: "us"
        - platform:
            android:
              opt: lt
              ver: 24
            ios:
              opt: gte
              ver: 14
        - new_user: true
      variant: 5


