cocoapods-byte-panglem-beta 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +22 -0
- data/README.md +11 -0
- data/Rakefile +13 -0
- data/cocoapods-byte-panglem-beta.gemspec +25 -0
- data/lib/cocoapods-byte-panglem-beta/analyzer.rb +213 -0
- data/lib/cocoapods-byte-panglem-beta/command.rb +4 -0
- data/lib/cocoapods-byte-panglem-beta/config.rb +178 -0
- data/lib/cocoapods-byte-panglem-beta/gem_version.rb +11 -0
- data/lib/cocoapods-byte-panglem-beta/net.rb +68 -0
- data/lib/cocoapods-byte-panglem-beta/panglem.rb +203 -0
- data/lib/cocoapods-byte-panglem-beta/plugin.rb +2 -0
- data/lib/cocoapods-byte-panglem-beta/recorder.rb +464 -0
- data/lib/cocoapods-byte-panglem-beta/tool.rb +62 -0
- data/lib/cocoapods-byte-panglem.rb +4 -0
- data/lib/cocoapods_plugin.rb +4 -0
- data/spec/command/panglem_spec.rb +11 -0
- data/spec/spec_helper.rb +50 -0
- metadata +125 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA256:
         | 
| 3 | 
            +
              metadata.gz: afddde5a0deee3c6ea7d6ab6c1e1501230d9174f04198b00dfb978ffe7ad9a62
         | 
| 4 | 
            +
              data.tar.gz: c79ed3bf0e38953f98c04f0a52966a7f00fc4a0a82e14c8f948ca158a3d70563
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: fafbce7c60b4909aa1ede07766633b6d2d5c6e323e1f2f09be681d2f1d70839492bdc905c557c8336c376526edc300fa583c5f878a9acda05f4bbe90ee5e3910
         | 
| 7 | 
            +
              data.tar.gz: 3d5f88d697c042b72b086b3bf9044c6e99799c08f2034bf267e806a41c59ce7c1f5922844811a06b4569fc708dd4ca21512b01bd00fd43b577405c3d0d35e6d4
         | 
    
        data/Gemfile
    ADDED
    
    
    
        data/LICENSE.txt
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            Copyright (c) 2023 zhangtianhao.1230@bytedance.com <zhangtianhao.1230@bytedance.com>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            MIT License
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining
         | 
| 6 | 
            +
            a copy of this software and associated documentation files (the
         | 
| 7 | 
            +
            "Software"), to deal in the Software without restriction, including
         | 
| 8 | 
            +
            without limitation the rights to use, copy, modify, merge, publish,
         | 
| 9 | 
            +
            distribute, sublicense, and/or sell copies of the Software, and to
         | 
| 10 | 
            +
            permit persons to whom the Software is furnished to do so, subject to
         | 
| 11 | 
            +
            the following conditions:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            The above copyright notice and this permission notice shall be
         | 
| 14 | 
            +
            included in all copies or substantial portions of the Software.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
         | 
| 17 | 
            +
            EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
         | 
| 18 | 
            +
            MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
         | 
| 19 | 
            +
            NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
         | 
| 20 | 
            +
            LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
         | 
| 21 | 
            +
            OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
         | 
| 22 | 
            +
            WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
         | 
    
        data/README.md
    ADDED
    
    
    
        data/Rakefile
    ADDED
    
    
| @@ -0,0 +1,25 @@ | |
| 1 | 
            +
            # coding: utf-8
         | 
| 2 | 
            +
            lib = File.expand_path('../lib', __FILE__)
         | 
| 3 | 
            +
            $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
         | 
| 4 | 
            +
            require 'cocoapods-byte-panglem-beta/gem_version.rb'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Gem::Specification.new do |spec|
         | 
| 7 | 
            +
              spec.name          = 'cocoapods-byte-panglem-beta'
         | 
| 8 | 
            +
              spec.version       = CocoapodsBytePanglem::VERSION
         | 
| 9 | 
            +
              spec.authors       = ['zhangtianhao.1230@bytedance.com']
         | 
| 10 | 
            +
              spec.email         = ['zhangtianhao.1230@bytedance.com']
         | 
| 11 | 
            +
              spec.description   = %q{A short description of cocoapods-byte-panglem.}
         | 
| 12 | 
            +
              spec.summary       = %q{A longer description of cocoapods-byte-panglem.}
         | 
| 13 | 
            +
              spec.homepage      = 'https://github.com/EXAMPLE/cocoapods-byte-panglem'
         | 
| 14 | 
            +
              spec.license       = 'MIT'
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              # spec.files         = Dir['lib/**/*']
         | 
| 17 | 
            +
              spec.files         = `git ls-files`.split($/)
         | 
| 18 | 
            +
              spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
         | 
| 19 | 
            +
              spec.test_files    = spec.files.grep(%r{^(test|spec|features)/})
         | 
| 20 | 
            +
              spec.require_paths = ['lib']
         | 
| 21 | 
            +
              spec.add_dependency "cocoapods", '>= 1.1.1', '< 2.0'
         | 
| 22 | 
            +
              spec.add_development_dependency 'bundler', '~> 1.3'
         | 
| 23 | 
            +
              spec.add_development_dependency 'rake'
         | 
| 24 | 
            +
              spec.add_development_dependency 'highline'
         | 
| 25 | 
            +
            end
         | 
| @@ -0,0 +1,213 @@ | |
| 1 | 
            +
            ##Copyright 2023 ByteDance Ltd. and/or its affiliates
         | 
| 2 | 
            +
            ##SPDX-License-Identifier: MIT
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require_relative 'tool'
         | 
| 5 | 
            +
            require_relative 'recorder'
         | 
| 6 | 
            +
            require 'highline'
         | 
| 7 | 
            +
             | 
| 8 | 
            +
             | 
| 9 | 
            +
             | 
| 10 | 
            +
            module PM
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              # 处理器
         | 
| 13 | 
            +
              #
         | 
| 14 | 
            +
              class Analyzer
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def self.resolve_release_target(target, specs)
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  is_exist, hash = PM::Lockfile.read_from_path(File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.pangle"))
         | 
| 19 | 
            +
                  if is_exist
         | 
| 20 | 
            +
                    ## 校验.pangle文件有无改动
         | 
| 21 | 
            +
                    checksum = hash.delete("RECODER_CHECKSUM")
         | 
| 22 | 
            +
                    verified_checksum = Digest::SHA1.hexdigest(hash.inspect).encode('UTF-8') if checksum.respond_to?(:encode)
         | 
| 23 | 
            +
                    if verified_checksum != checksum
         | 
| 24 | 
            +
                      raise  "[cocoapods-byte-panglem-beta][error] Podfile.pangle file verification failed, you should not modify this file, please delete this file, re-execute 'pod iinstall', if you confirm that it has not been modified, please contact us "
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                    result = UpdateResut.from_hash(hash)
         | 
| 27 | 
            +
                    ## 校验Pangle SDK是否符合预期
         | 
| 28 | 
            +
                    pm_spec =  specs.find do |spec|
         | 
| 29 | 
            +
                      result.sdk_name==Pod::Specification.root_name(spec.spec.name)
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                    if pm_spec.nil?
         | 
| 32 | 
            +
                      raise  "[cocoapods-byte-panglem-beta][error] #{result.sdk_name} not found}"
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                    if pm_spec.spec.version.version != result.sdk_original_version
         | 
| 35 | 
            +
                      raise  "[cocoapods-byte-panglem-beta][error] #{result.sdk_name} version has change(#{result.sdk_original_version}->#{pm_spec.spec.version.version}),After generating the Podfile.panglewe file, you may have made some changes in the podfile, causing the version of Pangle SDK to change. Please change 'use_pangm_sdk_update! :is_release => true
         | 
| 36 | 
            +
                      ',delete':is_release => true'  and re-execute 'pod install'"
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
                    if result.is_sdk_update
         | 
| 39 | 
            +
                      title_options = { :verbose_prefix => '-> '.green }
         | 
| 40 | 
            +
                      Pod::UserInterface.titled_section("[cocoapods-byte-panglem-beta][info] will change pangle sdk version , the current version will change from #{result.sdk_original_version} to #{result.sdk_target_version}", title_options)
         | 
| 41 | 
            +
                      specs.delete_if{|spec|
         | 
| 42 | 
            +
                        Pod::Specification.root_name(spec.spec.name) == result.sdk_name && spec.spec.version.version == result.sdk_original_version
         | 
| 43 | 
            +
                      }
         | 
| 44 | 
            +
                      result.sdk_list.each{ |spec|
         | 
| 45 | 
            +
                        specs << Pod::Resolver::ResolverSpecification.new(spec, false, spec.spec_source)
         | 
| 46 | 
            +
                      }
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      if result.is_rely_update
         | 
| 49 | 
            +
                        specs.delete_if{|spec|
         | 
| 50 | 
            +
                          Pod::Specification.root_name(spec.spec.name) == result.rely_name && spec.spec.version.version == result.rely_original_version
         | 
| 51 | 
            +
                        }
         | 
| 52 | 
            +
                        result.rely_list.each{ |spec|
         | 
| 53 | 
            +
                          specs << Pod::Resolver::ResolverSpecification.new(spec, false, spec.spec_source)
         | 
| 54 | 
            +
                        }
         | 
| 55 | 
            +
                      end
         | 
| 56 | 
            +
                    end
         | 
| 57 | 
            +
                    specs.sort_by!{|spec| spec.spec.name}
         | 
| 58 | 
            +
                    specs
         | 
| 59 | 
            +
                  else
         | 
| 60 | 
            +
                    raise  "[cocoapods-byte-panglem-beta][error] #{File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.pangle")} not found, please check"
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
                end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                def self.resolve_last(target, specs)
         | 
| 65 | 
            +
                  is_update_finish = false
         | 
| 66 | 
            +
                  sdk_spec = nil
         | 
| 67 | 
            +
                  adapter_list = []
         | 
| 68 | 
            +
                  ## SDK 场景下不需要
         | 
| 69 | 
            +
                  if false
         | 
| 70 | 
            +
                    pm_spec = nil
         | 
| 71 | 
            +
                    adn_specs = specs.select do |spec|
         | 
| 72 | 
            +
                      name = spec.spec.name
         | 
| 73 | 
            +
                      if name == PM::BuildConfig.mediation_name
         | 
| 74 | 
            +
                        pm_spec = spec
         | 
| 75 | 
            +
                        target.PM_build_config.PM_info = PM::PMInfo.new(spec.spec.name, spec.spec.version.version)
         | 
| 76 | 
            +
                      end
         | 
| 77 | 
            +
                      if PM::Adn_Adapter.is_adapter?(name)
         | 
| 78 | 
            +
                        adn_note = target.PM_build_config.find_note PM::Adn_Adapter.get_adn name
         | 
| 79 | 
            +
                        adn_note.adapter_name = name
         | 
| 80 | 
            +
                        adn_note.adapter_original_version = spec.spec.version.version
         | 
| 81 | 
            +
                      elsif PM::Adn_Adapter.is_adn?(name)
         | 
| 82 | 
            +
                        adn_note = target.PM_build_config.find_note name
         | 
| 83 | 
            +
                        adn_note.adn_version = spec.spec.version.version
         | 
| 84 | 
            +
                      end
         | 
| 85 | 
            +
                      target.PM_build_config.is_adn_update_or_detect?(name)
         | 
| 86 | 
            +
                    end
         | 
| 87 | 
            +
                    # raise " error: Ads-Mediation-CN not found,please check"      if pm_spec == nil
         | 
| 88 | 
            +
                    adn_info_list =  adn_specs.map{|adn_spec|
         | 
| 89 | 
            +
                      adn_note = target.PM_build_config.find_note adn_spec.spec.name
         | 
| 90 | 
            +
                      adn_note.adn_version = adn_spec.spec.version.version
         | 
| 91 | 
            +
                      {"adn_name" => PM::Adn_Adapter.get_adn_abbreviation(adn_spec.spec.name),"adn_version" => adn_spec.spec.version.version}
         | 
| 92 | 
            +
                      # {"adn_name" => "ks","adn_version" => adn_spec.spec.version.version}
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                      # {"adn_name" => adn_spec.spec.name,"adn_version" => adn_spec.spec.version.version, "auto_update" => adn_note.auto_update, "load_detect" => adn_note.load_detect, "adapter_name" => adn_note.adapter_name, "adapter_version" => adn_note.adapter_original_version}
         | 
| 95 | 
            +
                    } if pm_spec
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                  specs.map do |spec|
         | 
| 98 | 
            +
                    if PM::MapRelations.is_sdk?(spec.spec.name)
         | 
| 99 | 
            +
                      sdk_spec = spec
         | 
| 100 | 
            +
                    elsif  PM::MapRelations.is_adapter?(spec.spec.name)
         | 
| 101 | 
            +
                      map = {}
         | 
| 102 | 
            +
                      map["adapter"] = PM::MapRelations.get_adapter_from_adn_abbreviation(spec.spec.name)
         | 
| 103 | 
            +
                      map["adapter_version"] = spec.spec.version.version
         | 
| 104 | 
            +
                      adapter_list << map
         | 
| 105 | 
            +
                    else
         | 
| 106 | 
            +
                    end
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  raise "[cocoapods-byte-panglem-beta][error] Ads-Global-Beta not found,please add"  if sdk_spec == nil
         | 
| 110 | 
            +
                  PM::Recorder.instance.adapter_list = adapter_list
         | 
| 111 | 
            +
                  # is_exist, wish_info =  read_user_wishes
         | 
| 112 | 
            +
                  wish_info = nil
         | 
| 113 | 
            +
                  response_data = request_adapter sdk_spec.spec.version.version ,adapter_list, wish_info
         | 
| 114 | 
            +
                  result =  PM::SpecificationInfo.get_specfication response_data, sdk_spec
         | 
| 115 | 
            +
                    ## 1. 判断sdk是否要更新, YES 则将旧的全部删除, 新的全部挂载
         | 
| 116 | 
            +
                    ## 2. 判断rely 是否要更新, YES 则同上
         | 
| 117 | 
            +
                  if result.is_sdk_update
         | 
| 118 | 
            +
                    ## 这里截断,询问是否更新
         | 
| 119 | 
            +
                    cli = HighLine.new
         | 
| 120 | 
            +
                    # is_allow_update =cli.ask("[cocoapods-byte-panglem-beta][info] Whether to allow automatic upgrade of pangle sdk(#{result.sdk_original_version} to #{result.sdk_target_version}),yes/no?")
         | 
| 121 | 
            +
                    is_allow_update = 'yes'
         | 
| 122 | 
            +
                    if is_allow_update == 'yes' or is_allow_update == 'y' or is_allow_update == 'Y'
         | 
| 123 | 
            +
                      title_options = { :verbose_prefix => '-> '.green }
         | 
| 124 | 
            +
                      Pod::UserInterface.titled_section("[cocoapods-byte-panglem-beta][info] will change pangle sdk version , the current version will change from #{result.sdk_original_version} to #{result.sdk_target_version}", title_options)
         | 
| 125 | 
            +
                      specs.delete_if{|spec|
         | 
| 126 | 
            +
                        Pod::Specification.root_name(spec.spec.name) == result.sdk_name && spec.spec.version.version == result.sdk_original_version
         | 
| 127 | 
            +
                      }
         | 
| 128 | 
            +
                      result.sdk_list.each{ |spec|
         | 
| 129 | 
            +
                        specs << Pod::Resolver::ResolverSpecification.new(spec, false, spec.spec_source)
         | 
| 130 | 
            +
                      }
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                      if result.is_rely_update
         | 
| 133 | 
            +
                        specs.delete_if{|spec|
         | 
| 134 | 
            +
                          Pod::Specification.root_name(spec.spec.name) == result.rely_name && spec.spec.version.version == result.rely_original_version
         | 
| 135 | 
            +
                        }
         | 
| 136 | 
            +
                        result.rely_list.each{ |spec|
         | 
| 137 | 
            +
                          specs << Pod::Resolver::ResolverSpecification.new(spec, false, spec.spec_source)
         | 
| 138 | 
            +
                        }
         | 
| 139 | 
            +
                      end
         | 
| 140 | 
            +
                      specs.sort_by!{|spec| spec.spec.name}
         | 
| 141 | 
            +
                      is_update_finish  = true
         | 
| 142 | 
            +
                      request_track result.sdk_original_version, result.sdk_target_version, result.sdk_target_version, response_data["code"], response_data["message"]
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                    else
         | 
| 145 | 
            +
                      wish_info = {"no_auto_update"=>true,"timestamp" =>Time.now.to_i}
         | 
| 146 | 
            +
                      recode_user_wishes wish_info
         | 
| 147 | 
            +
                    end
         | 
| 148 | 
            +
                  end
         | 
| 149 | 
            +
                  is_update_finish
         | 
| 150 | 
            +
                end
         | 
| 151 | 
            +
             | 
| 152 | 
            +
                def self.recode_user_wishes(wish_info)
         | 
| 153 | 
            +
                  PM::Lockfile.new(wish_info.to_hash).write_to_disk(File.expand_path("#{Pod::Config.instance.installation_root}/pangle.temp"))
         | 
| 154 | 
            +
                end
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                def self.read_user_wishes()
         | 
| 157 | 
            +
                  PM::Lockfile.read_from_path(File.expand_path("#{Pod::Config.instance.installation_root}/pangle.temp"))
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                def self.delete_invalid_adapters(target, specs)
         | 
| 161 | 
            +
                  un_den_adn_list= PM::Adn_Adapter.get_all_adn - specs.map(&:spec).map(&:name).map do |item|
         | 
| 162 | 
            +
                    PM::Adn_Adapter.is_adn?(item) ? Pod::Specification.root_name(item) : nil
         | 
| 163 | 
            +
                  end.compact.uniq
         | 
| 164 | 
            +
                  un_den_adapter_list = []
         | 
| 165 | 
            +
                  un_den_adapter_list = un_den_adn_list.map {|item|
         | 
| 166 | 
            +
                    PM::Adn_Adapter.get_adapter item
         | 
| 167 | 
            +
                  }
         | 
| 168 | 
            +
                  specs.delete_if { |spec|
         | 
| 169 | 
            +
                    result =  un_den_adapter_list.include?(Pod::Specification.root_name(spec.spec.name)) && !PM::Recorder.instance.global_note.auto_load_whitelist.keys.include?(Pod::Specification.root_name(spec.spec.name))
         | 
| 170 | 
            +
                    if result
         | 
| 171 | 
            +
                      title_options = { :verbose_prefix => '-> '.red}
         | 
| 172 | 
            +
                      Pod::UserInterface.titled_section("remove #{spec.spec.name}", title_options)
         | 
| 173 | 
            +
                    end
         | 
| 174 | 
            +
                    result
         | 
| 175 | 
            +
                  }
         | 
| 176 | 
            +
                end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                def self.request_adapter(version, adapter_list, wish_info = nil)
         | 
| 179 | 
            +
             | 
| 180 | 
            +
                  package_name = PM::MProject.get_package_name
         | 
| 181 | 
            +
                  body =  Hash["package_name"=>package_name, "pangle_sdk_version"=>version, "os_type"=>"ios","adapter"=>adapter_list,"beta_config"=>1]
         | 
| 182 | 
            +
                  if wish_info
         | 
| 183 | 
            +
                    body["media_prefer"] = wish_info
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
                  data = PM::Network.request_adapter(body,PM::Recorder.instance.use_service_local)
         | 
| 186 | 
            +
                  data
         | 
| 187 | 
            +
                end
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                def self.request_track(old_ad_sdk_version, new_ad_sdk_version, target_ad_sdk_version, code, message)
         | 
| 190 | 
            +
                  package_name = PM::MProject.get_package_name
         | 
| 191 | 
            +
                  plugin_version = CocoapodsBytePanglem::Version.version
         | 
| 192 | 
            +
                  event_extra = Hash["old_ad_sdk_version" => old_ad_sdk_version, "new_ad_sdk_version" => new_ad_sdk_version, "target_ad_sdk_version" => target_ad_sdk_version, "package_name" => package_name,"plugin_version"=>plugin_version,"error_code"=>code,"error_msg"=>message].to_json
         | 
| 193 | 
            +
                  stats_list = []
         | 
| 194 | 
            +
                  stats_list << Hash["event_extra" => event_extra, "is_ad_event"=> 1, "type"=>"update_version_code","os"=>"ios","beta_config"=>1]
         | 
| 195 | 
            +
             | 
| 196 | 
            +
                  message = Hash["ts"=>Time.now.to_i,"stats_list"=>stats_list].to_json
         | 
| 197 | 
            +
                  body =  Hash["message"=>message,"cypher"=>0]
         | 
| 198 | 
            +
                  PM::Network.request_track(body,old_ad_sdk_version)
         | 
| 199 | 
            +
                end
         | 
| 200 | 
            +
             | 
| 201 | 
            +
                def self.is_update?(value)
         | 
| 202 | 
            +
                  is_auto_update?(value) || is_stable_update?(value)
         | 
| 203 | 
            +
                end
         | 
| 204 | 
            +
             | 
| 205 | 
            +
                def self.is_auto_update?(value)
         | 
| 206 | 
            +
                  value == PM::BuildConfig.update_value_last_version
         | 
| 207 | 
            +
                end
         | 
| 208 | 
            +
             | 
| 209 | 
            +
                def self.is_stable_update?(value)
         | 
| 210 | 
            +
                  value == PM::BuildConfig.update_value_last_stable_version
         | 
| 211 | 
            +
                end
         | 
| 212 | 
            +
              end
         | 
| 213 | 
            +
            end
         | 
| @@ -0,0 +1,178 @@ | |
| 1 | 
            +
            ##Copyright 2023 ByteDance Ltd. and/or its affiliates
         | 
| 2 | 
            +
            ##SPDX-License-Identifier: MIT
         | 
| 3 | 
            +
             | 
| 4 | 
            +
             | 
| 5 | 
            +
            module PM
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              # 配置项key
         | 
| 8 | 
            +
              #
         | 
| 9 | 
            +
              class BuildConfig
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def self.get_load_key
         | 
| 12 | 
            +
                  :gm_auto_load
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def self.get_update_key
         | 
| 16 | 
            +
                  :gm_auto_update
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def self.get_load_detect_key
         | 
| 20 | 
            +
                  :gm_load_detect
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def self.get_load_whitelist_key
         | 
| 24 | 
            +
                  :auto_load_whitelist
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def self.get_is_release_key
         | 
| 28 | 
            +
                  :is_release
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def self.get_use_service_local_key
         | 
| 32 | 
            +
                  :use_service_local
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def self.update_value_last_version
         | 
| 36 | 
            +
                  return "last"  ## 最新版本
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def self.update_value_last_stable_version
         | 
| 40 | 
            +
                  return "last_stable" ## 最新稳定版本
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                def self.update_value_non
         | 
| 44 | 
            +
                  return "not_update"   ## 不自动更新
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def self.mediation_name
         | 
| 48 | 
            +
                  return "Ads-Global-Beta"
         | 
| 49 | 
            +
                end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                def self.rely_name
         | 
| 52 | 
            +
                  return "BURelyFoundation_Global"
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                def self.get_all_config
         | 
| 56 | 
            +
                  [BuildConfig.get_update_key,BuildConfig.get_load_key,BuildConfig.get_load_detect_key]
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            #   admob:
         | 
| 61 | 
            +
            # IS:IronSourcePangleAdapter
         | 
| 62 | 
            +
            # max:
         | 
| 63 | 
            +
            # tradplus:
         | 
| 64 | 
            +
            # pod 'TradPlusAdSDK/PangleAdapter', '9.9.0'
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            # topon:
         | 
| 67 | 
            +
             | 
| 68 | 
            +
            # pod '','6.2.66'
         | 
| 69 | 
            +
             | 
| 70 | 
            +
              # adn  mediation  adapter 三者之间的映射关系, mediation后续会用到
         | 
| 71 | 
            +
              class MapRelations
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                ADNADAPTER = Hash[
         | 
| 74 | 
            +
                  ## sdk 不需要
         | 
| 75 | 
            +
                  # 'Ads-CN' => 'ABUAdCsjAdapter',
         | 
| 76 | 
            +
                  'UnityAds' => 'ABUAdUnityAdapter',
         | 
| 77 | 
            +
                  'Google-Mobile-Ads-SDK'=> 'ABUAdAdmobAdapter',
         | 
| 78 | 
            +
                  'BaiduMobAdSDK'=> 'ABUAdBaiduAdapter',
         | 
| 79 | 
            +
                  'GDTMobSDK'=> 'ABUAdGdtAdapter',
         | 
| 80 | 
            +
                  'SigmobAd-iOS'=> 'ABUAdSigmobAdapter',
         | 
| 81 | 
            +
                  'KSAdSDK'=> 'ABUAdKsAdapter',
         | 
| 82 | 
            +
                  'KlevinAdSDK'=> 'ABUAdKlevinAdapter',
         | 
| 83 | 
            +
                  'MintegralAdSDK'=> 'ABUAdMintegralAdapter',
         | 
| 84 | 
            +
                ].freeze
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                ## sdk 被接入adapter的映射关系
         | 
| 87 | 
            +
                SERVERMAPADAPTER = Hash[
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                  'GoogleMobileAdsMediationPangle'=> 'admob',
         | 
| 90 | 
            +
                  'IronSourcePangleAdapter'=> 'ironsource',
         | 
| 91 | 
            +
                  'AppLovinMediationByteDanceAdapter'=> 'max',
         | 
| 92 | 
            +
                  'TradPlusAdSDK/PangleAdapter'=> 'tradplus',
         | 
| 93 | 
            +
                  'AnyThinkiOS/AnyThinkPangleAdapter'=> 'topon',
         | 
| 94 | 
            +
                ].freeze
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                SERVERMAPADN = Hash[
         | 
| 97 | 
            +
                  'UnityAds' => 'unity',
         | 
| 98 | 
            +
                  'Google-Mobile-Ads-SDK'=> 'admob',
         | 
| 99 | 
            +
                  'BaiduMobAdSDK'=> 'baidu',
         | 
| 100 | 
            +
                  'GDTMobSDK'=> 'gdt',
         | 
| 101 | 
            +
                  'SigmobAd-iOS'=> 'sigmob',
         | 
| 102 | 
            +
                  'KSAdSDK'=> 'ks',
         | 
| 103 | 
            +
                  'KlevinAdSDK'=> 'klevin',
         | 
| 104 | 
            +
                  'MintegralAdSDK'=> 'mtg',
         | 
| 105 | 
            +
                ].freeze
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                SDKNAME = "Ads-Global-Beta".freeze
         | 
| 108 | 
            +
                SDKRELY = "BURelyFoundation_Global".freeze
         | 
| 109 | 
            +
                SHOULD_REMOVE = [SDKNAME,SDKRELY]
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                def self.is_adn?(name)
         | 
| 112 | 
            +
                  name == SDKNAME
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                def self.get_adn_abbreviation(name)
         | 
| 116 | 
            +
                  SERVERMAPADN[name]
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                def self.get_adapter_from_adn_abbreviation(name)
         | 
| 120 | 
            +
                  SERVERMAPADAPTER[name]
         | 
| 121 | 
            +
                end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                def self.is_adn?(name)
         | 
| 124 | 
            +
                  ADNADAPTER.has_key?(name)
         | 
| 125 | 
            +
                end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                def self.is_sdk?(name)
         | 
| 128 | 
            +
                  SDKNAME==name
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                def self.is_adapter?(name)
         | 
| 132 | 
            +
                  SERVERMAPADAPTER.has_key?(name)
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                def self.should_remove_requirements?(name)
         | 
| 136 | 
            +
                  SHOULD_REMOVE.include?(name)
         | 
| 137 | 
            +
                end
         | 
| 138 | 
            +
             | 
| 139 | 
            +
                def self.get_adapter(name)
         | 
| 140 | 
            +
                  adapter = ''
         | 
| 141 | 
            +
                  if is_adn?(name)
         | 
| 142 | 
            +
                    adapter = ADNADAPTER[name]
         | 
| 143 | 
            +
                  end
         | 
| 144 | 
            +
                  adapter
         | 
| 145 | 
            +
                end
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                def self.get_adn(name)
         | 
| 148 | 
            +
                  adn_name = ''
         | 
| 149 | 
            +
                  if is_adapter?(name)
         | 
| 150 | 
            +
                    ## .index 在调试时候会报错
         | 
| 151 | 
            +
                    ADNADAPTER.select{ |key, value|
         | 
| 152 | 
            +
                    if value == name
         | 
| 153 | 
            +
                      adn_name = key
         | 
| 154 | 
            +
                      break
         | 
| 155 | 
            +
                    end
         | 
| 156 | 
            +
                    true
         | 
| 157 | 
            +
                    }
         | 
| 158 | 
            +
                  end
         | 
| 159 | 
            +
                  adn_name
         | 
| 160 | 
            +
                end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                def self.get_all_adapter
         | 
| 163 | 
            +
                  ADNADAPTER.values
         | 
| 164 | 
            +
                end
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                def self.get_all_adn
         | 
| 167 | 
            +
                  ADNADAPTER.keys
         | 
| 168 | 
            +
                end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                def self.get_sdk
         | 
| 171 | 
            +
                  SDKNAME
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
             | 
| 175 | 
            +
              end
         | 
| 176 | 
            +
             | 
| 177 | 
            +
             | 
| 178 | 
            +
            end
         | 
| @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            ##Copyright 2023 ByteDance Ltd. and/or its affiliates
         | 
| 2 | 
            +
            ##SPDX-License-Identifier: MIT
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'uri'
         | 
| 5 | 
            +
            require 'net/http'
         | 
| 6 | 
            +
            require 'net/https'
         | 
| 7 | 
            +
            require 'json'
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            module PM
         | 
| 10 | 
            +
                # 网络请求
         | 
| 11 | 
            +
                class Network
         | 
| 12 | 
            +
                    ## post请求
         | 
| 13 | 
            +
                    def Network.post (url,body)
         | 
| 14 | 
            +
                        # puts "start net request:#{body}"
         | 
| 15 | 
            +
                        uri = URI.parse(url)
         | 
| 16 | 
            +
                        https = Net::HTTP.new(uri.host,uri.port)
         | 
| 17 | 
            +
                        https.use_ssl = true ## 正式时请打开
         | 
| 18 | 
            +
                        request = Net::HTTP::Post.new(uri.path, initheader = {'Content-Type' =>'application/json'})
         | 
| 19 | 
            +
                        # request["Cookie"]="__union_admin_sess_cookie=232301_noduimkpdwrbyrkr1qih; _ssa_userphone=; _ssa_username=zhangtianhao.1230"
         | 
| 20 | 
            +
                        request.body = body.to_json
         | 
| 21 | 
            +
                        if PM::Recorder.instance.is_debug
         | 
| 22 | 
            +
                            puts "[cocoapods-byte-panglem-beta][debug] 网络请求信息: #{body.to_json}, url:#{url}"
         | 
| 23 | 
            +
                        end
         | 
| 24 | 
            +
                        res = https.request(request)
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                        if res.code == "200"
         | 
| 27 | 
            +
                            data = JSON.parse(res.body)
         | 
| 28 | 
            +
                            if PM::Recorder.instance.is_debug
         | 
| 29 | 
            +
                                puts "[cocoapods-byte-panglem-beta][debug] 网络返回信息: #{data}"
         | 
| 30 | 
            +
                            end
         | 
| 31 | 
            +
                            return data
         | 
| 32 | 
            +
                        else
         | 
| 33 | 
            +
                            ## 网络请求异常的提示
         | 
| 34 | 
            +
                            puts "[cocoapods-byte-panglem-beta][error] response code = #{res.code}, message = #{res.message}"
         | 
| 35 | 
            +
                        end
         | 
| 36 | 
            +
                        nil
         | 
| 37 | 
            +
                    end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    def Network.request_adapter(body, is_debug = false)
         | 
| 40 | 
            +
                        if is_debug
         | 
| 41 | 
            +
                            url = URI.parse('http://localhost:8080/index.html')
         | 
| 42 | 
            +
                            http = Net::HTTP.new(url.host, url.port)
         | 
| 43 | 
            +
                            request = Net::HTTP::Get.new(url.path, initheader = {'Content-Type' =>'application/json'})
         | 
| 44 | 
            +
                            response = http.request(request)
         | 
| 45 | 
            +
                            if PM::Recorder.instance.is_debug
         | 
| 46 | 
            +
                                puts "[cocoapods-byte-panglem-beta][debug] 网络请求信息: #{body.to_json}, url:#{url}"
         | 
| 47 | 
            +
                            end
         | 
| 48 | 
            +
                            data = JSON.parse(response.body)
         | 
| 49 | 
            +
                            if  PM::Recorder.instance.is_debug
         | 
| 50 | 
            +
                                puts "[cocoapods-byte-panglem-beta][debug] 网络返回信息: #{data}"
         | 
| 51 | 
            +
                            end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                            data
         | 
| 54 | 
            +
                        else
         | 
| 55 | 
            +
                            data = post("https://open-api.pangleglobal.com/union/media/open_api/auto_upgrade/config",body)
         | 
| 56 | 
            +
                        end
         | 
| 57 | 
            +
                    end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                    def Network.request_track(body, version_code)
         | 
| 60 | 
            +
                        ##     https://api16-access-sg.pangle.io/api/ad/union/sdk/stats/batch/
         | 
| 61 | 
            +
                        url = "https://api16-access-sg.pangle.io/api/ad/union/sdk/stats/batch/"+"?aid=5000546&version_code=#{version_code}&device_platform=iphone"
         | 
| 62 | 
            +
                        data = post(url,body)
         | 
| 63 | 
            +
                        data
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
             | 
| 68 | 
            +
            end
         |