Class: Pindo::ApplovinXcodeHelper
- Inherits:
-
Object
- Object
- Pindo::ApplovinXcodeHelper
- Defined in:
- lib/pindo/module/xcode/applovin_xcode_helper.rb
Overview
Applovin Xcode 辅助类封装 Applovin 相关的操作,包括:
-
获取 SKAdNetwork IDs
-
更新 Info.plist 文件
-
运行 Applovin 安装脚本
Class Method Summary collapse
-
.fetch_skadnetwork_ids(upload_config: false) ⇒ Array<String>
获取 SKAdNetwork IDs.
-
.run_applovin_install_script(project_dir:, appstore_mode: false) ⇒ Object
运行 Applovin 安装脚本.
-
.update_applovin_config(project_dir: nil, appstore_mode: false, install_script: false, upload_config: false) ⇒ Boolean
更新 Xcode 工程的 Applovin 配置.
-
.update_info_plist(project_dir:, skadnetwork_ids:) ⇒ Object
更新 Info.plist 文件.
Class Method Details
.fetch_skadnetwork_ids(upload_config: false) ⇒ Array<String>
获取 SKAdNetwork IDs
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/pindo/module/xcode/applovin_xcode_helper.rb', line 50 def fetch_skadnetwork_ids(upload_config: false) skadnetwork_ids = [] puts "正在请求 Applovin 数据..." # 1. 请求 Applovin SKAdNetwork IDs applovin_data = request_applovin_skadnetwork_ids if applovin_data && applovin_data["skadnetwork_ids"] applovin_data["skadnetwork_ids"].each do |network_id| skadnetwork_ids << network_id["skadnetwork_id"] end end # 2. 请求 Applovin Mediation SKAdNetwork IDs mediation_data = request_applovin_mediation_skadnetwork_ids if mediation_data && mediation_data["mediationSKAdnetworkIdsSpecs"] mediation_data["mediationSKAdnetworkIdsSpecs"].each do |media_item| skadnetwork_ids += media_item["skAdnetworkIds"] end end # 3. 去重 skadnetwork_ids = skadnetwork_ids.uniq puts "✓ 从网络获取到 #{skadnetwork_ids.size} 条数据" # 4. 如果数据太少,从配置文件读取 if skadnetwork_ids.size <= 50 puts "网络数据太少,从缓存中获取..." cached_ids = load_cached_skadnetwork_ids skadnetwork_ids += cached_ids skadnetwork_ids = skadnetwork_ids.uniq puts "✓ 从缓存获取到 #{skadnetwork_ids.size} 条数据" elsif upload_config # 5. 保存到配置文件 save_skadnetwork_ids_to_config(skadnetwork_ids) end skadnetwork_ids end |
.run_applovin_install_script(project_dir:, appstore_mode: false) ⇒ Object
运行 Applovin 安装脚本
135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/pindo/module/xcode/applovin_xcode_helper.rb', line 135 def run_applovin_install_script(project_dir:, appstore_mode: false) xcodeproj_file = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by { |f| File.mtime(f) } return unless xcodeproj_file && File.exist?(xcodeproj_file) pindo_common_dir = Pindoconfig.instance.pindo_common_configdir # 选择脚本文件 script_name = appstore_mode ? "AppLovinQualityServiceSetup-ios.rb" : "AppLovinQualityServiceSetup-ios-dev.rb" source_script = File.join(pindo_common_dir, script_name) return unless File.exist?(source_script) # 复制脚本到项目目录 project_script = File.join(project_dir, "AppLovinQualityServiceSetup-ios.rb") FileUtils.cp_r(source_script, project_script) # 运行脚本 puts "正在运行 Applovin 安装脚本..." system("ruby #{project_script}") puts "✓ Applovin 安装脚本执行完成" end |
.update_applovin_config(project_dir: nil, appstore_mode: false, install_script: false, upload_config: false) ⇒ Boolean
更新 Xcode 工程的 Applovin 配置
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/pindo/module/xcode/applovin_xcode_helper.rb', line 23 def update_applovin_config(project_dir: nil, appstore_mode: false, install_script: false, upload_config: false) project_dir ||= Dir.pwd # 1. 获取 SKAdNetwork IDs skadnetwork_ids = fetch_skadnetwork_ids(upload_config: upload_config) if skadnetwork_ids.nil? || skadnetwork_ids.empty? puts "⚠ 未能获取 SKAdNetwork IDs" return false end puts "✓ 获取到 #{skadnetwork_ids.size} 条 SKAdNetwork IDs" # 2. 更新 Info.plist update_info_plist(project_dir: project_dir, skadnetwork_ids: skadnetwork_ids) # 3. 运行安装脚本(可选) if install_script run_applovin_install_script(project_dir: project_dir, appstore_mode: appstore_mode) end true end |
.update_info_plist(project_dir:, skadnetwork_ids:) ⇒ Object
更新 Info.plist 文件
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/pindo/module/xcode/applovin_xcode_helper.rb', line 94 def update_info_plist(project_dir:, skadnetwork_ids:) puts "正在更新 Xcode Info.plist..." # 1. 查找 Info.plist 文件 plist_file = find_info_plist(project_dir: project_dir) unless File.exist?(plist_file) puts "⚠ 未找到 Info.plist 文件: #{plist_file}" return false end # 2. 读取 Info.plist info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file) # 3. 更新配置 info_plist_dict["NSAdvertisingAttributionReportEndpoint"] ||= "https://postbacks-app.com" if !info_plist_dict.has_key?("NSAppTransportSecurity") info_plist_dict["NSAppTransportSecurity"] = {} info_plist_dict["NSAppTransportSecurity"]["NSAllowsArbitraryLoads"] = true end # 4. 更新 SKAdNetworkItems if skadnetwork_ids && skadnetwork_ids.size > 0 info_plist_dict["SKAdNetworkItems"] = [] skadnetwork_ids.each do |network_id| item = { "SKAdNetworkIdentifier" => network_id } info_plist_dict["SKAdNetworkItems"] << item end end # 5. 写回 Info.plist Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file) puts "✓ Info.plist 更新完成" true end |