504 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			YAML
		
	
	
			
		
		
	
	
			504 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			YAML
		
	
	
| 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
 | ||
| 
 | ||
| 
 |