Python 为UnityAndroid端自动化接入Tradplus广告SDK
Python 为UnityAndroid端自动化接入Tradplus广告SDK
- Tradplus介绍
- 常规接入
- 进入Android开发文档
- 选择渠道配置
- 生成接入代码
- 人工依赖
- 下载官网同版本的 Unity插件
- 使用自动化工具接入
- 首次 你需要打两个标记来定位
- 运行工具 控制台会列出最新的十个Tradplus版本 任选其一
- 然后拖入项目路径后回车开始植入最新版
- 植入完成后 控制台会输出 end. 这时候工具运行目录下 会自动下载好指定Tradplus版本的Unity插件
- 其它声明
- 渠道配置
- ADMOB BIDDING自定义配置
- 源码
Tradplus介绍

常规接入
进入Android开发文档
技术文档: https://docs.tradplusad.com/docs/tradplussdk_android_doc_v6/download
选择渠道配置

生成接入代码

人工依赖
容易出错 新人入手也比较麻烦

下载官网同版本的 Unity插件

使用自动化工具接入
首次 你需要打两个标记来定位
在Traplus接入开头处 加上
/// TradPlus Start //

在Tradplus接入结尾处 加上
/// TradPlus End //

运行工具 控制台会列出最新的十个Tradplus版本 任选其一

然后拖入项目路径后回车开始植入最新版


植入完成后 控制台会输出 end. 这时候工具运行目录下 会自动下载好指定Tradplus版本的Unity插件

其它声明
渠道配置
修改配置文件 ads 需要接入的广告渠道配置
仅需要在第一次和每次运营更换广告渠道的时候 配置一次

ADMOB BIDDING自定义配置
一般情况下这个版本号是Tradplus官方的人来告诉你这是哪个版本号 改一次就好了

源码
主运行脚本
#默认服务端口import requests
import time
import implant
import downloadUnityPluginsapi = 'https://www.geek7.top:8000/api'
adsChannel = ['UnityAds']
region = '2' # 1: 中国 2: 其它地区adsChannel.clear()
sdkversionList = []
versionstr = ""
def log( msg ):print( msg )def InitChannel():adsChannel.clear()with open('./bin/ads','r') as fp:for line in fp.readlines():adsChannel.append(line.replace('\n',''))def Run( sdk_version = "10.2.0.1",overrid = True ):global versionstrInitChannel()data = {'token' : time.time(),'pipe':'tradplussdk','code':829,'adchannels':','.join(adsChannel),'version':sdk_version,'region' : region}res = requests.get(api,data) j = res.json()if 'version' not in j:log('erro: not foud version property in result.data')returnif 'data' not in j:log('erro: data not in depends')returnappGradleCode = j['data']if None == appGradleCode:log('GetDependencies fail')else:print('input you "Assets\\Plugins\\Android" full path')print('example: D:\\Git\\2dtoilet\\2dtoilet-client\\Assets\\Plugins')print('Or you can try the Android folder to this window.')print('current tradplus version list:')v = j['version']versionstr = '|'.join(v.split(',')[0:10])print(versionstr)if not overrid:sdkversionList.clear()sdkversionList.extend(v.split(','))returnsrcpath = input('input proj:\n')realpath = srcpath.replace('\\','/')implant.Run(realpath,appGradleCode)u3dzip = j['u3dzip']print(f'download unity plugin: {u3dzip}')downloadUnityPlugins.dowanlodZip(u3dzip,'./tradplus_unity_plugin_zips')if __name__ == "__main__":log('begin.')Run( "10.2.0.1", False )version = ""while True:version = input('input you tradplus version: ')print(f'pulling the current version dependency of Tradplus: {version}')if version in sdkversionList:breakelse:print(f'current version fail. :{version}')print(versionstr)Run( version )input('end.')
自动化植入mainTemplate.gradle脚本
import osdef Run( projpath, dependsContent ):print(f'project path: {projpath}')print(f'depend content: {dependsContent}')if not projpath.endswith('mainTemplate.gradle'):projpath = os.path.join(projpath,'mainTemplate.gradle')filterstr = ''dependlines = dependsContent.splitlines()tradplusContent = Falseadmob = Falseadmob_bidding = Falseadmob_bidding_str = "22.1.0.0"with open('./bin/ADMOB BIDDING','r') as fp:lines = fp.readlines()if len(lines) > 0:admob_bidding_str = lines[0]print(f"ADMOB BIDDING : {admob_bidding_str}")for l in dependlines:if l.startswith('dependencies {'):tradplusContent = Trueelif l.startswith('android {'):filterstr = filterstr[0:-2]breakelif tradplusContent:real = l.replace('\"','\'')if admob:admob = Falsesi = real.find('\'')ei = real.find('\'',si+1)com = real[si:ei+1]_import = ''' implementation(%s) {exclude module: "play-services-measurement-sdk-api"}\n'''%(com)filterstr += _importadmob_bidding = Truecontinueif admob_bidding and '// ' in real:_import = ''' //ADMOB BIDDINGimplementation ('com.applovin.mediation:google-adapter:%s'){exclude module: "play-services-measurement-sdk-api"}\n'''%(admob_bidding_str)filterstr += _importadmob_bidding = Falseif '// Admob' in real:admob = Truefilterstr += f'{real}\n'output = ''with open(projpath,'r',encoding='UTF-8') as fp:begin_write = Falselines = fp.readlines()for line in lines:if line.startswith(' /// TradPlus Start //'):output += ' /// TradPlus Start //\n'output += filterstrbegin_write = Trueelif line.startswith(' /// TradPlus End //'):output += ' /// TradPlus End //\n'begin_write = Falseelif not begin_write:output += lineif len(output) != 0 and output != '':print('Under implantation.')with open(projpath,'w',encoding='UTF-8') as fp:fp.write(output)print('Complete implantation.')else:print('got a little problem')
下载unity最新插件脚本
import requests
import zipfile
import tempfile
import osdef get_data( url ):response = requests.get(url)return url, response.contentdef dowanlodZip( url , dest = "./zip"):url, data = get_data( url ) # data为byte字节_tmp_file = tempfile.TemporaryFile() # 创建临时文件print(_tmp_file)_tmp_file.write(data) # byte字节数据写入临时文件# _tmp_file.seek(0)print(f'extract to: {os.path.join(os.getcwd(),dest)}')zf = zipfile.ZipFile(_tmp_file, mode='r')for names in zf.namelist():f = zf.extract(names, dest) # 解压到zip目录文件下print(f)zf.close()print('extract completed')相关文章:
Python 为UnityAndroid端自动化接入Tradplus广告SDK
Python 为UnityAndroid端自动化接入Tradplus广告SDK Tradplus介绍常规接入进入Android开发文档选择渠道配置生成接入代码人工依赖下载官网同版本的 Unity插件 使用自动化工具接入首次 你需要打两个标记来定位运行工具 控制台会列出最新的十个Tradplus版本 任选其一然后拖入项目…...
Matplotlib基础
目录: 一、绘制yx^2图像: 一、绘制yx^2图像: from matplotlib import pyplot as plt import numpy as np #生成(-50,50)的数组 x np.arange(-50,50) #计算因变量y的值 y x ** 2 #根据x、y数组绘制图形yx^2 plt.plot…...
上海东海职业技术学院低代码实训平台建设项目竞争性磋商公告
上海东海职业技术学院低代码实训平台建设项目竞争性磋商公告 招标|招标公告 上海市|闵行区 项目编号:0773-2340GNSHFWCS2823 招标单位:上海东海职业技术学院 代理单位:中金招标有限责任公司 预算金额:59万元 联系方式&…...
c语言之将输入的十进制转换成二进制数并打印原码反码补码
十进制转二进制 首先,我们要知道的是十进制转换成二进制数的方法。我们一般采用的除二取余的方法,在这里我用32位数组来进行转换。 int main() {printf("请输入一个十进制数\n");int n 0;scanf("%d", &n);int arr[32];int* p…...
算法题明明的随机数
第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。 import java.util.Iterator; import java.util.Scanner; import java.util.TreeSet; // 注意类名必须为 Main, 不要有任何 pa…...
B站不赚钱、“芒果”赚钱难,视频“后浪”火拼跨年夜
又是一年跨年时。 各大视频平台跨年晚会展开火拼,今年谁是赢家? 作为视频“后浪”,芒果超媒(300413.SZ)、哔哩哔哩(09626.HK,下称“B站”)此前相继公布了2023年三季报,…...
ajax请求的详细流程+详细示例
AJAX(Asynchronous JavaScript and XML)是一种用于创建异步 Web 应用程序的技术。下面是 AJAX 请求的详细流程: 创建 XMLHttpRequest 对象:在 JavaScript 代码中,使用 new XMLHttpRequest() 创建一个 XMLHttpRequest 对…...
这些产品手册制作工具,你都值得收藏
产品手册是企业向消费者传达产品信息的重要媒介,它能够直接影响消费者对产品的了解和购买决策。然而,制作一份专业而吸引人的产品手册并非易事,需要一定的设计和排版能力。为了帮助企业和个人更轻松地制作出优质的产品手册,下面将…...
跨账号和同账号的ECS云服务器之间迁移教程
阿里云ECS实例间迁移场景如下: 场景一:跨账号ECS实例间迁移 此场景适用于跨账号,同地域或者跨地域下的ECS实例间的迁移。例如:将阿里云账号A下的ECS实例,迁移阿里云B账号下。 场景二:同账号ECS实例间迁移 …...
python virtualenv 虚拟环境命令
# 安装 virtualenv pip3.9 install virtualenv # 创建虚拟环境test mkdir /envs # 创建一个文件夹放置虚拟环境 cd /envs/ virtualenv /envs/test # --pythonpython3.9 # 激活虚拟环境test source /envs/test/bin/activate # 安装依…...
深入理解MySQL索引底层数据结构
听课问题(听完课自己查资料) 什么是二叉树 二叉树是怎么存储数据的一个链表是一个集合的数据结构 List是怎么便利找到指定下标元素为什么会快?什么是红黑树 红黑树是怎么存储数据的什么是B TREE 是怎么存储数据的什么是BTREE 是怎么存储数据的 疑惑答案 a. 二叉树…...
使用 Tkinter 制作一个进制转换工具,好用!
在平时工作学习当中,我们经常会编写一些简单的 Python GUI 工具,以此来完成各种各样的自动化任务,比如批量处理文件,批量处理图片等等。当我们进行这些工具的编写之时,往往只关注了功能的实现,而忽略了页面…...
Final Cut 视频剪辑快速入门,小白上手视频课的制作
本文是一个快速入门教程,如果您是0视频处理基础,又想录制网课或是一些对效果要求不高的视频那么这篇教程足够使用了。 本文主要用Final Cut处理视频课,本文是笔者在制作视频课过程中逐渐摸索的,如果您想制作一些比较专业的视频&a…...
分布式定时任务Xxl_Job详细使用手册
看了很多网上的版本,思路描述的都不是很清晰,都只是几步操作就完成了,看效果,导致容易走入弯路(不排除是自己理解能力把),最开始以为是把admin模块集成到项目,后来测试了会ÿ…...
【PostgreSQL】表操作-修改表
【PostgreSQL】表操作快速链接 创建表及基础表命令 修改表 表权限 添加列 ALTER TABLE products ADD COLUMN description text;新列最初填充给定的任何默认值DEFAULT(如果未指定子句,则为 null)。 注意: 从 PostgreSQL 11 开始…...
【Java系列】文件操作详解
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得,欢迎大家在评论区交流讨论💌 目录 …...
docker-compose 安装 RocketMq
目录 1、rocketMq 官网 2、工作流程 RocketMQ集群工作流程 1. 启动NameServer 2. 启动 Broker 3. 创建 Topic...
【心得】PHP反序列化高级利用(phar|session)个人笔记
目录 ①phar反序列化 ②session反序列化 ①phar反序列化 phar 认为是java的jar包 calc.exe phar能干什么 多个php合并为独立压缩包,不解压就能执行里面的php文件,支持web服务器和命令行 phar协议 phar://xxx.phar $phar->setmetadata($h); m…...
MyBatisPlus之增删改查
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 MyBatisPlus之增删改查 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、什么是Mybati…...
pytorch03:transforms常见数据增强操作
目录 一、数据增强二、transforms--Crop裁剪2.1 transforms.CenterCrop2.2 transforms.RandomCrop2.3 RandomResizedCrop2.4 FiveCrop和TenCrop 三、transforms—Flip翻转、旋转3.1RandomHorizontalFlip和RandomVerticalFlip3.2 RandomRotation 四、transforms —图像变换4.1 t…...
算法基础篇(11)Floyd算法
Floyd算法本质是动态规划,用来求任意两点之间的最短路,也称为插点法。通过不断在两点之间加入新的点来更新最短路。1、状态表示:f[k][i][j]表示:仅仅经过1~k这些点,结点i走到结点j的最短路径的长度。2、状态转移方程&a…...
uniapp圆环进度条组件实战:从零到一打造个性化数据展示
Uniapp圆环进度条组件实战:从零到一打造个性化数据展示 在移动应用开发中,数据可视化是提升用户体验的关键因素之一。圆环进度条作为一种直观的数据展示方式,广泛应用于健身追踪、学习进度、任务完成度等场景。Uniapp作为跨平台开发框架&…...
当Navicat密码遗忘时:开源解密工具如何重建数据库连接通路
当Navicat密码遗忘时:开源解密工具如何重建数据库连接通路 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 数据库连接中断的三大痛点场景 场…...
Xenium空间原位转录组:从数据到生物学发现的实战解析
1. Xenium平台与空间原位转录组技术初探 第一次接触Xenium平台的数据时,我被它呈现的空间基因表达图谱震撼到了。想象一下,这就像给组织切片拍了一张"基因表达照片",每个像素点都记录着成百上千个基因的活动状态。10x Genomics推出…...
企业高效知识体系:8大核心特征+可落地搭建框架,告别知识散乱
对于企业而言,知识从来不是“文件堆”,而是能支撑业务、培养新人、规避风险的核心资产。很多企业陷入“文档满天飞、新人没人带、老员工离职带跑经验”的困境,本质是没有搭建起高效、完整的知识体系。今天就一次性讲透:一个能真正…...
Trae平台实战:我如何教会一个AI智能体应对动态网页和反爬虫?
Trae平台实战:动态网页抓取与反爬策略的智能应对之道 在数据驱动的商业环境中,网页抓取技术已成为企业获取竞争优势的关键能力。然而,随着网站防护技术的升级,传统爬虫在面对动态加载内容和复杂反爬机制时往往力不从心。本文将分享…...
保姆级教程:在Windows 11上为PyTorch配置CUDA 12.x和cuDNN(含环境变量疑难杂症排查)
Windows 11深度学习环境配置全攻略:从CUDA安装到PyTorch GPU加速实战 每次打开PyCharm准备大展身手时,看到那个令人心碎的False——torch.cuda.is_available()的输出结果,是不是感觉整个深度学习梦想都被泼了冷水?别担心…...
六边形地理索引的终极指南:H3算法如何革新空间数据分析
六边形地理索引的终极指南:H3算法如何革新空间数据分析 【免费下载链接】h3 Hexagonal hierarchical geospatial indexing system 项目地址: https://gitcode.com/gh_mirrors/h3/h3 你是否曾为处理大规模地理空间数据而头疼?传统的地理索引系统在…...
毕业论文神器 2026 降AI率平台推荐:工具对比+最好用AI推荐
2026年真正好用的AI论文降重与改写工具,核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...
STM32模拟Linux内核自动初始化机制实现
STM32模拟Linux内核自动初始化机制实现1. 项目概述1.1 技术背景在传统嵌入式开发中,程序通常按照顺序逻辑执行,当系统复杂度增加时会导致代码臃肿、模块耦合紧密。Linux内核通过initcall机制实现了模块化初始化,本项目在STM32平台上模拟实现了…...
