guru_sdk/guru_app/guru/guru_spec.yaml

504 lines
17 KiB
YAML
Raw Normal View History

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