Compare commits

...

435 Commits

Author SHA1 Message Date
xiekaidong
90af1ffd08 提升版本号 2024-12-26 09:39:41 +08:00
xiekaidong
405413a212 更新配置 2024-12-23 14:40:01 +08:00
xiekaidong
9488ff2513 fix 2024-11-25 15:03:43 +08:00
xiekaidong
2a42432a18 更新配置 2024-11-21 17:17:59 +08:00
xiekaidong
874e4f85fc 提升版本号 2024-10-29 09:47:07 +08:00
xiekaidong
62c2e9cfc3 fix 2024-10-29 09:43:50 +08:00
xiekaidong
49bafa2fac 更新配置 2024-10-28 09:38:39 +08:00
xiekaidong
7739b7d291 提升版本号 2024-09-23 15:06:20 +08:00
xiekaidong
f0f4c639c0 更新配置 2024-09-23 15:03:28 +08:00
xiekaidong
b6d20fe9cd 提升版本号 2024-08-27 11:12:01 +08:00
xiekaidong
f7a4d2aa47 更新配置 2024-08-27 11:10:52 +08:00
chenxi
f3cac19afe 打包设置 2024-07-22 18:11:18 +08:00
xiekaidong
8538803485 更新配置 2024-07-22 16:47:06 +08:00
xiekaidong
be63ed686d 提升版本号 2024-07-22 16:28:09 +08:00
xiekaidong
67e9e2606f 提升APITarget 2024-07-22 16:19:55 +08:00
xiekaidong
7a015b49c0 更新配置 2024-07-22 12:02:26 +08:00
xiekaidong
8910eb7a9a 升版本 2024-06-24 15:08:26 +08:00
xiekaidong
7736db2fd8 Merge branch 'dev_20240625' 2024-06-24 15:06:32 +08:00
xiekaidong
f7e06bbbb0 更新配置 2024-06-24 15:06:20 +08:00
xiekaidong
9c606c912c 更新配置 2024-06-24 11:07:14 +08:00
chenxi
b29592f4ba 删除不删除不用的过时的库 2024-06-19 14:49:35 +08:00
chenxi
93870ca319 Merge branch 'master' of git.juzugame.com:b6-client/b6-unity 2024-06-19 11:53:17 +08:00
chenxi
10a8fb1bd4 升级支付库 2024-06-19 11:53:08 +08:00
xiekaidong
f0a42fe98e 更新配置 2024-05-27 11:39:25 +08:00
xiekaidong
3cb8082e95 更新配置 2024-05-23 14:26:12 +08:00
xiekaidong
000bf11a3c 提升版本号 2024-04-25 10:19:37 +08:00
xiekaidong
94bf2f7e8d 更新配置 2024-04-25 10:18:02 +08:00
xiekaidong
ecb8126410 更新配置 2024-04-24 14:35:19 +08:00
xiekaidong
fb5452c195 修改版本号 2024-03-26 09:52:58 +08:00
xiekaidong
bbba324be0 更新配置 2024-03-26 09:52:07 +08:00
xiekaidong
0d8ae2d971 更新配置 2024-03-21 16:43:53 +08:00
xiekaidong
10fdfacc3d fix 2024-02-21 15:35:50 +08:00
xiekaidong
c664cf5dad 提升版本号 2024-02-21 15:26:41 +08:00
xiekaidong
a758dcc6cb 更新配置 2024-02-19 15:14:15 +08:00
xiekaidong
1868e0240b 提升版本号 2024-01-31 11:52:28 +08:00
xiekaidong
915b2d063d 更新配置 2024-01-31 11:09:22 +08:00
xiekaidong
0a437537bc 检查工具 2024-01-31 11:03:00 +08:00
xiekaidong
28e0b2c050 提升版本号,设置abname 2024-01-26 14:31:09 +08:00
xiekaidong
aa3289de03 更新配置 2024-01-26 14:25:30 +08:00
xiekaidong
7193f5dcbe fix 2024-01-26 11:09:44 +08:00
Fang
bb32c2d7d7 删除资源 2024-01-26 10:08:42 +08:00
Fang
4edac166cb 资源 2024-01-26 10:08:06 +08:00
Fang
9281fa7205 资源导入 2024-01-25 14:46:37 +08:00
Fang
5aa8a23495 战令更新 2024-01-24 15:53:54 +08:00
d4be4b43e6 1 2024-01-24 10:36:59 +08:00
fa077c8263 0049 2024-01-22 19:47:28 +08:00
xiekaidong
ed8226641d 更新配置表 2023-12-26 17:23:22 +08:00
xiekaidong
093f14b332 版本号修改 2023-12-26 16:01:39 +08:00
xiekaidong
0a47f14639 设置abName 2023-12-26 15:55:54 +08:00
xiekaidong
49d3ec38f9 资源检查 2023-12-26 15:04:26 +08:00
xiekaidong
d9229a681c 更新配置 2023-12-26 15:02:13 +08:00
3a4eb9b1bb 111111111 2023-12-26 14:40:00 +08:00
Fang
5ff0c61668 战令入口bannner导入 2023-12-26 10:52:06 +08:00
Fang
122cc3b38b 竞技场bannner导入 2023-12-25 17:50:26 +08:00
Fang
9c9fe3ec54 头像资源上传 2023-12-25 17:30:39 +08:00
Fang
3eb1cf0802 竞技场头像框素材导入 2023-12-25 15:44:53 +08:00
xiekaidong
56ef059eb8 Merge branch 'dev_20231225' of http://git.juzugame.com/b6-client/b6-unity into dev_20231225 2023-12-25 11:28:54 +08:00
xiekaidong
ee98d9f79a 修复 2023-12-25 11:28:48 +08:00
zhangpengfei
2f51ae1ae6 主角修改 2023-12-25 10:52:52 +08:00
xiekaidong
3930c8fdd7 资源 2023-12-25 10:27:20 +08:00
xiekaidong
2867004de9 更新配置 2023-12-25 10:05:21 +08:00
xiekaidong
b36d71eaf3 符文之塔bug修复 2023-12-25 09:51:39 +08:00
xiekaidong
b8252ea632 资源处理 2023-11-16 14:53:57 +08:00
Fang
7a978d23e6 导入头像框 2023-11-16 14:30:21 +08:00
xiekaidong
ab7b5bc5fc 提升版本号 2023-11-15 16:31:16 +08:00
xiekaidong
f63a371e34 更新配置资源检查 2023-11-15 16:06:21 +08:00
xiekaidong
0c30b628b5 Merge branch 'dev_20231121' of http://git.juzugame.com/b6-client/b6-unity into dev_20231121 2023-11-15 10:49:00 +08:00
xiekaidong
41b3ffa70d 音效 2023-11-15 10:48:40 +08:00
Fang
931b027788 导入头像、竞技场入口banner资源 2023-11-15 10:36:32 +08:00
1d7a2b6d8a 1111 2023-11-15 09:50:22 +08:00
9f66ce34ac 1111111 2023-11-14 19:22:49 +08:00
Fang
6ca3d26981 通行证入口banner修改 2023-11-14 18:12:50 +08:00
Fang
e5c0e0e410 竞技场界面spine导入、战令spine修改 2023-11-14 18:05:58 +08:00
xiekaidong
956e0fc450 竞技场bug修复 2023-11-10 10:37:24 +08:00
zhangpengfei
6b868e2614 boss动画修改 2023-11-09 20:15:18 +08:00
195a4fcb6c 小怪动作修改 2023-11-09 19:57:59 +08:00
zhangpengfei
14753f4ff0 新皮肤上传 2023-11-08 18:14:01 +08:00
xiekaidong
9679193809 提升版本号 2023-10-31 10:32:01 +08:00
chenxi
4472be6385 还原 2023-10-30 14:02:35 +08:00
chenxi
83a73f90f2 Merge branch 'master' into dev_ironsource 2023-10-30 11:31:03 +08:00
chenxi
f850de3096 升级sdk 2023-10-27 17:49:52 +08:00
xiekaidong
0bffde22a1 提升版本号 2023-10-27 17:45:22 +08:00
xiekaidong
34a91873b6 锁定buff修复 2023-10-27 16:01:13 +08:00
chenxi
bfe54cca00 build.gradle 2023-10-27 14:24:31 +08:00
chenxi
abfddf5100 升级ironsource 2023-10-26 19:55:37 +08:00
xiekaidong
e66680a204 提升版本号 2023-10-26 11:12:06 +08:00
xiekaidong
08c82f82bc 多语言 2023-10-26 10:50:30 +08:00
xiekaidong
b8f3b9530e bug修复 2023-10-26 10:39:37 +08:00
xiekaidong
cdae36a0c5 更新资源、提升版本号、设置abName 2023-10-23 14:38:12 +08:00
xiekaidong
22619de917 资源检查 2023-10-23 14:32:03 +08:00
xiekaidong
55f0519824 更新配置 2023-10-23 10:36:35 +08:00
Fang
cabbc6f24a 锦标赛战令、礼包购买次数刷新fix 2023-10-20 18:41:03 +08:00
Fang
c9f70b1833 更表 2023-10-20 18:10:46 +08:00
Fang
e998aa73de 导入竞技场banner spine 2023-10-20 18:09:38 +08:00
Fang
41eb07e262 修改资源命名 2023-10-20 17:12:53 +08:00
xiekaidong
9e29e2b527 音效 2023-10-20 16:58:20 +08:00
zhangpengfei
78ebbdb287 角色修改 2023-10-20 16:32:57 +08:00
Fang
68fe25fc5f 更表 2023-10-20 16:08:27 +08:00
0f7a10bd19 111111111 2023-10-20 15:51:39 +08:00
Fang
1777464ea5 导入ui资源 2023-10-20 15:41:36 +08:00
zhangpengfei
d38336d49c p0046角色上传 2023-10-19 15:49:04 +08:00
Fang
17072fed51 战令banner spine导入 2023-10-18 18:18:29 +08:00
xiekaidong
6c60435457 提升版本号 2023-10-16 17:03:55 +08:00
Fang
2b3f91e516 锦标赛升级显示fix 2023-10-16 16:31:47 +08:00
xiekaidong
4a06d0df69 提升版本号 2023-10-09 18:39:17 +08:00
xiekaidong
6c37c72e4a 更新配置 2023-10-09 17:49:27 +08:00
xiekaidong
380bb080da Merge branch 'dev_20231009' of http://git.juzugame.com/b6-client/b6-unity into dev_20231009 2023-10-09 17:36:20 +08:00
xiekaidong
f7f9b292c0 设置abname 2023-10-09 17:36:06 +08:00
Fang
ab0b38c501 更表 2023-10-09 17:33:06 +08:00
Fang
928dd46290 导入第四赛季入口banner资源 2023-10-09 17:11:46 +08:00
Fang
bf52ed6083 锦标赛领全部奖励修改 2023-10-09 16:34:37 +08:00
Fang
2ae155b480 修改锦标赛积分规则 2023-10-09 16:22:19 +08:00
xiekaidong
16d550aefa 设置abname 2023-10-09 16:01:10 +08:00
xiekaidong
8304af85ef 资源检查 2023-10-09 15:57:20 +08:00
xiekaidong
135658321b 更新配置 2023-10-09 15:51:46 +08:00
xiekaidong
c86b965ee6 Merge branch 'master' into dev_20231009
# Conflicts:
#	Assets/lua/app/config/act_gift.lua.bytes
#	Assets/lua/app/config/const.lua.bytes
#	Assets/lua/app/config/skill.lua.bytes
#	Assets/lua/app/config/skill_rogue.lua.bytes
2023-10-09 15:48:59 +08:00
Fang
e2473b1d64 更表 2023-10-09 15:26:05 +08:00
Fang
a959e8a3a3 更表 2023-10-09 14:26:14 +08:00
Fang
262f74311e 锦标赛添加开启限制 2023-10-09 11:32:40 +08:00
Fang
09c0fb8c4f 符文副本结算波次处理 2023-10-09 11:10:10 +08:00
Fang
d4272eb86b 1 2023-10-09 10:57:00 +08:00
Fang
130d25ec22 符文副本结算去掉波次数据 2023-10-09 10:55:49 +08:00
Fang
06cecef8fc 超框 2023-10-09 09:42:40 +08:00
chenxi
949da0fdfd 战斗音效 2023-10-08 20:29:19 +08:00
chenxi
98cd8bd9c9 新皮肤头像 2023-10-08 20:24:41 +08:00
5575d26087 111 2023-10-08 20:12:21 +08:00
Fang
c6fb5ee0a8 锦标赛倒计时刷新fix 2023-10-08 18:30:59 +08:00
Fang
9d023efcb6 锦标赛跨组fix 2023-10-08 18:02:31 +08:00
Fang
a2b50a8315 锦标赛入口导入 2023-10-08 17:02:51 +08:00
Fang
2c40d73a0e 锦标赛战令进度条显示修改,帮助文案修改 2023-10-08 16:57:44 +08:00
Fang
2f9f35b98d fix、导入新赛季头像 2023-10-08 15:00:02 +08:00
Fang
f76dd842fc 锦标赛fix 2023-10-08 11:36:15 +08:00
Fang
0abc5d6ab5 锦标赛奖励领取效果 2023-10-07 18:12:18 +08:00
Fang
a38f6816e3 编译 2023-10-07 17:42:49 +08:00
Fang
18d2e5c1fe 编译 2023-10-07 11:58:48 +08:00
xiekaidong
68ca7492e6 梦魇bug修复 2023-10-07 09:59:02 +08:00
cc805c09f7 竞技场战令4 2023-10-07 09:48:22 +08:00
Fang
77fd785a44 导入竞技场banner资源 2023-09-28 17:47:11 +08:00
zhangpengfei
962103db4c p0045角色上传 2023-09-28 17:29:21 +08:00
Fang
b9393f591d 购买等级fix 2023-09-28 15:33:21 +08:00
Fang
1b3c0bc18b 帮助界面滚动fix 2023-09-28 15:26:44 +08:00
Fang
fcbb2a6c65 文案修改 2023-09-28 14:44:34 +08:00
Fang
b71c87b4b8 review 2023-09-28 12:00:07 +08:00
陈希
ebb7db4e18 Merge branch 'fang/tourn' into 'dev_20231009'
波次锦标赛、竞技场锦标赛

See merge request b6-client/b6-unity!19
2023-09-28 03:51:59 +00:00
Fang
d9a9716798 编译 2023-09-28 11:07:20 +08:00
Fang
3a986f6b7a 协议 2023-09-28 11:07:20 +08:00
Fang
8722d4b433 竞技场锦标赛 2023-09-28 11:07:20 +08:00
Fang
e1a49e73d9 波次锦标赛 2023-09-27 18:54:16 +08:00
xiekaidong
738f80d84b 提升版本号 2023-09-25 19:46:48 +08:00
xiekaidong
f4c431f50c 更新配置 2023-09-25 19:46:10 +08:00
Fang
45ce3c75c4 bug fix 2023-09-25 18:29:36 +08:00
xiekaidong
3ff2e9085e 提升版本号 2023-09-22 10:16:38 +08:00
xiekaidong
06d05d2fe8 更新资源 2023-09-22 10:11:51 +08:00
xiekaidong
401c2bd48f 容错 2023-09-22 09:58:41 +08:00
xiekaidong
de5805d1dc bug修复 2023-09-22 09:52:30 +08:00
xiekaidong
e5a7bad0a9 提升版本号 2023-09-21 15:20:52 +08:00
xiekaidong
992b6f5f6f 更新配置 2023-09-21 14:49:41 +08:00
xiekaidong
f0f95f01d7 删除adQuality 2023-09-20 17:59:06 +08:00
xiekaidong
9d5afff839 修改版本号 2023-09-20 17:54:20 +08:00
xiekaidong
d127666db5 更新配置 2023-09-20 17:46:07 +08:00
xiekaidong
00e53beccd 设置abname 2023-09-20 17:44:40 +08:00
xiekaidong
07c3c5334a 替换资源 2023-09-20 17:24:21 +08:00
xiekaidong
97cc288db3 更新资源 2023-09-20 17:19:36 +08:00
zhangpengfei
c83be5ae7f 皮肤动画修改 2023-09-20 17:14:45 +08:00
Fang
4f9e75da7a 显示fix 2023-09-20 16:52:02 +08:00
xiekaidong
4821b24301 清除材质冗余属性 2023-09-20 16:42:28 +08:00
xiekaidong
ba57353ad0 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-20 16:41:28 +08:00
xiekaidong
41cfc6c2b9 更新特效 2023-09-20 16:41:25 +08:00
zhangpengfei
bb625cb8e8 皮肤动画修改 2023-09-20 16:29:59 +08:00
xiekaidong
59cf73eed0 编辑器 2023-09-20 16:25:23 +08:00
xiekaidong
e8447938f9 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-20 16:04:32 +08:00
xiekaidong
c429cb382b 替换资源 2023-09-20 16:04:28 +08:00
b72212aa71 p0011版权优化 2023-09-20 15:54:27 +08:00
f48cd9d74a p0039眼睛 2023-09-20 15:42:48 +08:00
xiekaidong
ea95ca7f2c 替换资源 2023-09-20 15:20:02 +08:00
xiekaidong
91e6c226a5 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-20 15:16:45 +08:00
xiekaidong
43d34f274e 试玩功能属性加成 2023-09-20 15:16:41 +08:00
cfd7a48e82 11111 2023-09-20 15:14:57 +08:00
Fang
e65320206a 优化自动淬炼的随机假数据 2023-09-20 14:30:29 +08:00
xiekaidong
f93c89c162 修改 2023-09-20 11:46:41 +08:00
xiekaidong
16b6f9b4bc bug修复 2023-09-20 11:27:32 +08:00
xiekaidong
8a961ae07b 复活优化 2023-09-20 11:16:41 +08:00
xiekaidong
eeede315a6 优化体验 2023-09-20 10:56:35 +08:00
xiekaidong
00e6d5389f 优化符文副本重生 2023-09-20 10:55:12 +08:00
xiekaidong
07fb378809 优化符文副本重生 2023-09-20 10:54:41 +08:00
7e4834769d 符文系统-淬炼属性 2023-09-20 10:20:07 +08:00
xiekaidong
81a5a71a20 bug修复 2023-09-20 10:19:32 +08:00
Fang
24dbb7aa0b 符文随到高品质出动效时,层级调整到最高 2023-09-20 09:51:53 +08:00
Fang
ba70479f0c 符文随机假数据不展示当前等级最高两个品质 2023-09-20 09:37:04 +08:00
xiekaidong
2460664dc9 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-20 09:36:31 +08:00
xiekaidong
71b7f13375 更新资源 2023-09-20 09:36:28 +08:00
Fang
6f3e35243a fix、符文淬炼检查等级修改 2023-09-20 00:11:21 +08:00
xiekaidong
8cf8056ef4 设置一下材质球 2023-09-19 22:02:32 +08:00
xiekaidong
da59410f2b Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 21:16:31 +08:00
xiekaidong
a071da067a 更新资源 2023-09-19 21:16:11 +08:00
Fang
22a2bb1a5e 新号圆月活动请求fix、符文材料个数显示修改 2023-09-19 20:53:05 +08:00
xiekaidong
d72c8beab6 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 20:17:26 +08:00
xiekaidong
930ea28eff 更新资源 2023-09-19 20:17:17 +08:00
xiekaidong
122043a733 删除资源 2023-09-19 20:16:48 +08:00
779c698170 结算胜利失败 2023-09-19 20:13:20 +08:00
Fang
01d6a4b439 圆月头像框上传 2023-09-19 20:02:37 +08:00
xiekaidong
55c5ad0741 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 19:41:48 +08:00
xiekaidong
c710842d63 资源修复 2023-09-19 19:41:44 +08:00
Fang
4756312d3c 超框处理 2023-09-19 18:45:28 +08:00
xiekaidong
70c822b986 更新资源 2023-09-19 18:36:21 +08:00
xiekaidong
798fb612d3 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919
# Conflicts:
#	Assets/lua/app/config/strings/ja/global.lua.bytes
#	Assets/lua/app/userdata/activity/act_boss_rush/act_boss_rush_data.lua.bytes
2023-09-19 18:34:25 +08:00
xiekaidong
24a0670365 配置更新 2023-09-19 18:34:04 +08:00
Fang
f40b937012 更表、超框处理 2023-09-19 18:31:31 +08:00
xiekaidong
0d8a07e5fa Merge branch 'sdk_2' into dev_20230919 2023-09-19 18:24:09 +08:00
xiekaidong
5f5d13a898 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 18:13:14 +08:00
xiekaidong
60cb67ca4d bug修复 2023-09-19 18:13:11 +08:00
Fang
a68d772eb3 添加符文上报、符文动效fix、皮肤解锁头像fix、属性展示fix 2023-09-19 17:28:10 +08:00
xiekaidong
0aa578ce70 音效 2023-09-19 17:27:29 +08:00
xiekaidong
1d74ee3b77 bug修复 2023-09-19 17:17:18 +08:00
xiekaidong
78c5077f5b 更新资源 2023-09-19 16:51:46 +08:00
xiekaidong
6cfbfbbe50 资源替换 2023-09-19 16:43:00 +08:00
xiekaidong
02f32f15df 上报抽卡次数、特效 2023-09-19 16:05:58 +08:00
xiekaidong
d47ae896cd Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 15:49:54 +08:00
xiekaidong
267d580dad 特效 2023-09-19 15:45:20 +08:00
zhangpengfei
1815903a06 皮肤动画修改 2023-09-19 15:31:21 +08:00
xiekaidong
33e280187a 替换资源 2023-09-19 15:24:57 +08:00
xiekaidong
c686640095 更新配置 2023-09-19 15:04:13 +08:00
xiekaidong
16da88351d Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919
# Conflicts:
#	Assets/lua/app/config/localization/localization_global_const.lua.bytes
#	Assets/lua/app/config/skill.lua.bytes
#	Assets/lua/app/config/strings/cn/global.lua.bytes
#	Assets/lua/app/config/strings/cn/item.lua.bytes
#	Assets/lua/app/config/strings/en/equip.lua.bytes
#	Assets/lua/app/config/strings/ja/global.lua.bytes
#	Assets/lua/app/config/strings/vi/task_type.lua.bytes
#	Assets/lua/app/config/strings/zh/task_type.lua.bytes
#	Assets/lua/app/ui/hero/runes_info_comp.lua.bytes
2023-09-19 15:03:53 +08:00
xiekaidong
d32e88ac01 编译lua 2023-09-19 15:03:21 +08:00
Fang
0b59c2d77d 符文动画、属性fix 2023-09-19 15:03:02 +08:00
fb7e273422 符文淬炼-属性动画 2023-09-19 14:45:51 +08:00
chenxi
83016a2aef facebook 2023-09-19 14:45:16 +08:00
xiekaidong
9ca3f79c89 bug修复 2023-09-19 14:30:19 +08:00
xiekaidong
641cccf3c0 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 12:22:24 +08:00
xiekaidong
7057163384 音效 2023-09-19 12:22:20 +08:00
chenxi
1ba9f51ff8 ios package修改 2023-09-19 12:02:11 +08:00
Fang
8ec42e8a10 导入战令banner、fix 2023-09-19 11:52:59 +08:00
5ddfb7eb01 20057hit 2023-09-19 11:51:15 +08:00
Fang
e003e236ec 更表 2023-09-19 11:28:36 +08:00
xiekaidong
92508925bb Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 11:24:12 +08:00
xiekaidong
0942c88d19 设置 2023-09-19 11:24:01 +08:00
Fang
505a7cb8fb fix 2023-09-19 11:22:05 +08:00
xiekaidong
edfc1d0b46 修复 2023-09-19 11:20:59 +08:00
xiekaidong
37979729e0 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 11:05:00 +08:00
xiekaidong
5c3b431d25 提示 2023-09-19 11:04:57 +08:00
Fang
9a44044fa6 修改 2023-09-19 10:59:02 +08:00
xiekaidong
1e766a87c7 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-19 10:52:15 +08:00
xiekaidong
71058ccfee 增加战斗前后上阵英雄参数,方便查询作弊 2023-09-19 10:52:11 +08:00
Fang
6f5f4d94e9 自动淬炼加同步 2023-09-19 10:51:20 +08:00
Fang
299b03213f 1 2023-09-19 10:44:56 +08:00
Fang
6266224727 预制体修改 2023-09-19 10:42:33 +08:00
Fang
e4b953c193 导入资源 2023-09-19 10:40:16 +08:00
d1306fbb31 20058hit 2023-09-19 10:37:55 +08:00
xiekaidong
1ef890c2b4 更新图集 2023-09-19 10:10:58 +08:00
xiekaidong
03956d8ecb 资源检查 2023-09-19 09:52:01 +08:00
xiekaidong
0c0be394ac 更新图集 2023-09-19 09:45:12 +08:00
xiekaidong
beb7ae495c 删除 2023-09-19 09:44:39 +08:00
xiekaidong
1b9826fced 上传特效 2023-09-19 09:30:22 +08:00
xiekaidong
8b235c7e3a 优化 2023-09-19 09:27:16 +08:00
xiekaidong
f07e452b82 提示 2023-09-18 21:51:21 +08:00
xiekaidong
f4a61a5cbd bug修复 2023-09-18 21:35:23 +08:00
xiekaidong
c58757a314 优化 2023-09-18 21:29:17 +08:00
xiekaidong
9f0867dea5 Merge branch 'dev_20230919' into sdk_2 2023-09-18 21:18:10 +08:00
xiekaidong
fcf516ac7f 广告sdk崩溃尝试修复 2023-09-18 21:15:43 +08:00
xiekaidong
7d6398835a 优化显示 2023-09-18 21:05:52 +08:00
xiekaidong
41434625e2 bug修复 2023-09-18 20:52:32 +08:00
xiekaidong
f6e906a646 音效 2023-09-18 20:27:16 +08:00
xiekaidong
6050a42478 更新图集 2023-09-18 20:26:24 +08:00
xiekaidong
a2ff24f5a6 帮助界面 2023-09-18 20:22:02 +08:00
xiekaidong
c30e9d729c 优化和容错 2023-09-18 20:07:37 +08:00
xiekaidong
a5e8643589 图片设置 2023-09-18 19:45:53 +08:00
xiekaidong
9a29a4b382 Merge branch 'dev_20230919' into sdk_2 2023-09-18 19:12:11 +08:00
Fang
37ec3978b5 fix 2023-09-18 18:40:27 +08:00
Fang
29526815ba ui布局调整 2023-09-18 18:03:54 +08:00
xiekaidong
88632884bc Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-18 17:06:26 +08:00
xiekaidong
56fbcd4a6e 更新资源 2023-09-18 17:06:17 +08:00
Fang
3d37d44aa7 编译 2023-09-18 16:57:46 +08:00
xiekaidong
292198793e Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-18 16:39:06 +08:00
xiekaidong
3ea4515098 音效 2023-09-18 16:39:03 +08:00
Fang
b92f858295 界面优化 2023-09-18 16:38:04 +08:00
5e7537ebb0 角色版权优化03、07、08、14 2023-09-18 16:37:25 +08:00
zhangpengfei
442320c2be 旧角色替换 2023-09-18 16:12:57 +08:00
xiekaidong
188a85d723 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-18 16:04:06 +08:00
xiekaidong
9b95508c42 优化 2023-09-18 16:04:03 +08:00
Fang
bddd14fdd4 Merge branch 'fang/runes' into dev_20230919 2023-09-18 14:57:16 +08:00
Fang
448aa0659e 符文自动淬炼修改、特效完善 2023-09-18 14:57:00 +08:00
xiekaidong
c54a6c48b9 更新图集,编译lua 2023-09-18 14:53:41 +08:00
xiekaidong
b6345dce5a Merge branch 'master' into dev_20230919
# Conflicts:
#	Assets/arts/atlas/ui/common.asset
#	Assets/arts/textures/ui/common/common_lock_1.png
#	Assets/arts/textures/ui/common/common_lock_1.png.meta
#	Assets/lua/app/module/battle/controller/battle_base_controller.lua.bytes
#	Assets/lua/app/userdata/activity/act_boss_rush/act_boss_rush_data.lua.bytes
#	Assets/lua/app/userdata/battle/battle_base_data.lua.bytes
2023-09-18 14:51:32 +08:00
xiekaidong
b0ca1e6132 循环活动的一些处理 2023-09-18 14:43:39 +08:00
xiekaidong
916c9d9a69 上传特效 2023-09-18 14:09:19 +08:00
xiekaidong
94f5ea647f 界面调整 2023-09-18 12:02:52 +08:00
xiekaidong
b044273afc bug修复 2023-09-18 12:00:41 +08:00
xiekaidong
79c4fd7907 优化显示 2023-09-18 11:40:53 +08:00
xiekaidong
74681e64c7 sdk升级 2023-09-18 11:26:51 +08:00
xiekaidong
8a7e4ec47c 调整 2023-09-18 11:22:40 +08:00
xiekaidong
33e84e5cc1 优化显示 2023-09-18 11:21:37 +08:00
xiekaidong
c0aeccf71a 显示优化 2023-09-18 10:52:38 +08:00
xiekaidong
f12896f346 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-18 10:38:22 +08:00
xiekaidong
b3f490c9ac bug修复 2023-09-18 10:38:18 +08:00
Fang
94a532d553 更新图集 2023-09-18 10:21:59 +08:00
Fang
6792ac4fd7 更新 2023-09-18 10:17:16 +08:00
xiekaidong
ae1aeba1c5 编译lua 2023-09-18 09:39:22 +08:00
xiekaidong
c8ac729532 bug修复 2023-09-18 09:37:52 +08:00
xiekaidong
1cf27e1a54 编译lua 2023-09-16 20:26:20 +08:00
xiekaidong
f78213bce1 界面调整 2023-09-16 20:24:32 +08:00
xiekaidong
91dc07f589 帮助界面 2023-09-16 20:17:20 +08:00
xiekaidong
7eed36b812 选择界面表现 2023-09-16 19:39:51 +08:00
xiekaidong
ca342100a2 升级表现 2023-09-16 19:17:54 +08:00
xiekaidong
1ecdf0cd14 界面优化 2023-09-16 18:45:58 +08:00
xiekaidong
bdcf3f995b 优化 2023-09-16 18:13:32 +08:00
xiekaidong
2a8107ddce 第一版梦魇酒馆,差表现 2023-09-16 18:08:26 +08:00
xiekaidong
d924919e22 更新配置 2023-09-16 17:58:05 +08:00
xiekaidong
83a5666725 Merge branch 'dev_20230919' into limit_pvp
# Conflicts:
#	Assets/arts/atlas/ui/act_common.asset
#	Assets/arts/atlas/ui/act_common.spriteatlas
#	Assets/arts/atlas/ui/common.asset
#	Assets/arts/atlas/ui/common.spriteatlas
#	Assets/proto/protocol.bytes
2023-09-16 17:56:32 +08:00
xiekaidong
a022065ef5 界面 2023-09-16 17:52:04 +08:00
xiekaidong
78b27b7607 资源处理 2023-09-15 21:46:10 +08:00
xiekaidong
53caadd7e5 更新资源 2023-09-15 21:01:19 +08:00
xiekaidong
bcb9e60c73 界面调整 2023-09-15 21:00:29 +08:00
Fang
0d50692a4f 请求优化 2023-09-15 20:54:35 +08:00
xiekaidong
35d8383450 更新资源 2023-09-15 20:48:00 +08:00
xiekaidong
e528334190 界面处理 2023-09-15 20:46:35 +08:00
陈希
e2abf80e5d Merge branch 'fang/act' into 'dev_20230919'
圆月活动

See merge request b6-client/b6-unity!18
2023-09-15 11:33:16 +00:00
Fang
769cfbe34d 圆月活动 2023-09-15 19:23:25 +08:00
xiekaidong
753fba3b0d 更新资源 2023-09-15 18:34:09 +08:00
zhangpengfei
ee5e11f045 小丑动画修改 2023-09-15 18:20:27 +08:00
xiekaidong
ab0c8d0559 buff层级 2023-09-15 17:43:23 +08:00
xiekaidong
6f784eb8e3 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-15 17:41:40 +08:00
xiekaidong
cccce0625e pvp战斗取消元素随机加权 2023-09-15 17:41:37 +08:00
Fang
94fcea9026 竞技场结算时同步当前积分 2023-09-15 17:38:42 +08:00
zhangpengfei
b42736678e Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-15 17:38:03 +08:00
zhangpengfei
d6eb5dfbe9 新角色皮肤上传 2023-09-15 17:37:55 +08:00
xiekaidong
0ba16ffa0c 更新配置和优化显示 2023-09-15 17:37:15 +08:00
xiekaidong
1c44759790 资源 2023-09-15 17:27:22 +08:00
Fang
833a583f97 梦魇酒馆spine导入 2023-09-15 17:19:38 +08:00
zhangpengfei
37da32c547 BOSS修改 2023-09-15 16:08:11 +08:00
zhangpengfei
bbb5804a24 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-15 15:31:07 +08:00
zhangpengfei
50e9a27318 新BOSS上传 2023-09-15 15:30:59 +08:00
Fang
ebf9ec6209 导入符文解锁图片资源 2023-09-15 15:29:24 +08:00
Fang
565322e62a spine资源导入 2023-09-15 15:27:47 +08:00
xiekaidong
abbde65fff 音效 2023-09-14 21:16:02 +08:00
xiekaidong
1275c6494f 界面 2023-09-14 21:13:25 +08:00
Fang
a86dbc2116 新用户报错fix 2023-09-14 12:05:04 +08:00
Fang
575a7a90f7 编译 2023-09-14 11:08:40 +08:00
Fang
2b78eb4cc0 显示fix 2023-09-14 11:08:09 +08:00
Fang
845c800565 替换资源 2023-09-14 09:39:46 +08:00
xiekaidong
4117053230 界面调整 2023-09-13 20:43:33 +08:00
xiekaidong
d9110872bf 拼界面 2023-09-13 20:41:45 +08:00
Fang
0679e04395 属性fix 2023-09-13 18:24:56 +08:00
Fang
9345d10d6c 符文属性加成修改 2023-09-13 17:59:30 +08:00
xiekaidong
c88edc50e5 界面调整 2023-09-13 16:33:56 +08:00
xiekaidong
96f2d2fae8 bug修复 2023-09-13 16:28:01 +08:00
xiekaidong
c3a6f1e5b8 更新资源 2023-09-13 16:20:28 +08:00
xiekaidong
e0009f528e 替换资源 2023-09-13 16:12:47 +08:00
xiekaidong
9b1f58562b 替换资源 2023-09-13 16:01:33 +08:00
xiekaidong
22b2cadb96 资源资源 2023-09-13 15:59:47 +08:00
xiekaidong
7f05bf4024 兼容处理 2023-09-13 15:53:14 +08:00
Fang
f409368faa bug fix 2023-09-13 15:45:27 +08:00
xiekaidong
760e3878f4 bug修复 2023-09-13 15:34:58 +08:00
xiekaidong
178c761583 提升版本号 2023-09-13 14:59:27 +08:00
xiekaidong
d84ffd490d 资源检查更新图集 2023-09-13 14:58:54 +08:00
xiekaidong
75abb7d2bb 一些优化和审核模式处理 2023-09-13 14:56:25 +08:00
xiekaidong
ad6e8b1402 Merge branch 'master' into master_ios_assets_update 2023-09-13 14:23:35 +08:00
Fang
0a231c3f94 自动铸造开启等级 2023-09-13 11:03:18 +08:00
xiekaidong
00c9bd3bfe 还原资源 2023-09-13 10:46:12 +08:00
xiekaidong
47d4ccd4a6 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-13 09:43:43 +08:00
xiekaidong
96a0a976e6 优化 2023-09-13 09:43:41 +08:00
zhangpengfei
771b713f6d 新角色上传 2023-09-13 09:28:52 +08:00
xiekaidong
4ef44130e9 优化和上传特效 2023-09-13 09:19:18 +08:00
xiekaidong
00e06273ad 优化 2023-09-12 20:34:37 +08:00
xiekaidong
bcf3982203 显示bug修复 2023-09-12 20:27:00 +08:00
xiekaidong
eaed3e859e 资源调整 2023-09-12 20:13:37 +08:00
xiekaidong
17a349c66d 优化点击 2023-09-12 20:12:12 +08:00
xiekaidong
2a8cfe31e9 点击优化 2023-09-12 20:10:19 +08:00
xiekaidong
ce6127b71d 显示优化 2023-09-12 20:08:08 +08:00
xiekaidong
9f0fd56ab4 修复bug 2023-09-12 19:46:47 +08:00
xiekaidong
da10987311 更新资源 2023-09-12 19:20:54 +08:00
Fang
a6d3bb1803 bug fix 2023-09-12 18:44:00 +08:00
Fang
97ce41a1e3 更新配置 2023-09-12 18:11:58 +08:00
Fang
862e9200e7 容错 2023-09-12 17:59:54 +08:00
63c531b066 5英雄 2023-09-12 17:49:00 +08:00
xiekaidong
6bfab0547f bug修复 2023-09-12 16:32:07 +08:00
xiekaidong
f49e729db2 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-12 16:22:29 +08:00
xiekaidong
27308ff7fd bug修复 2023-09-12 16:22:26 +08:00
Fang
1e970493b3 优化 2023-09-12 16:17:22 +08:00
xiekaidong
6ea9e710b0 Merge branch 'dev_20230919' of http://git.juzugame.com/b6-client/b6-unity into dev_20230919 2023-09-12 16:05:55 +08:00
xiekaidong
e0e91933e8 编译lua 2023-09-12 16:04:33 +08:00
Fang
f0e3749794 显示fix 2023-09-12 16:03:48 +08:00
Fang
dc1b6c9838 显示fix 2023-09-12 15:27:50 +08:00
Fang
37bd501110 容错处理 2023-09-12 15:05:52 +08:00
陈希
4094f79f7b Merge branch 'fang/runes' into 'dev_20230919'
符文功能

See merge request b6-client/b6-unity!17
2023-09-12 06:50:32 +00:00
xiekaidong
06f81a091a Merge branch 'master' into dev_20230919
# Conflicts:
#	Assets/lua/app/userdata/activity/fourteen_day/fourteen_day_data.lua.bytes
2023-09-12 14:41:48 +08:00
xiekaidong
bd58628e2d 更新资源 2023-09-12 14:41:23 +08:00
xiekaidong
34953bab97 回合数提示 2023-09-12 14:32:16 +08:00
xiekaidong
9ff6dbeee0 战斗优化调整 2023-09-12 12:23:40 +08:00
xiekaidong
8638d3f2e2 提升版本号 2023-09-12 11:59:13 +08:00
xiekaidong
0dcdf0fe9d Merge branch 'dev_20230912_hotupdate' of http://git.juzugame.com/b6-client/b6-unity into dev_20230912_hotupdate 2023-09-12 11:40:48 +08:00
xiekaidong
57131fb59b 调整 2023-09-12 11:40:45 +08:00
Fang
8dadc9e37d 添加容错 2023-09-12 11:26:29 +08:00
xiekaidong
1e1e4835d3 更新配置 2023-09-12 11:23:24 +08:00
xiekaidong
b5f498ad7c 优化 2023-09-12 11:17:46 +08:00
Fang
6eeff31530 符文功能 2023-09-12 10:41:44 +08:00
xiekaidong
c715f838f8 bug修复 2023-09-12 10:24:46 +08:00
xiekaidong
35193331ef 符文副本 2023-09-12 10:09:29 +08:00
xiekaidong
b8d0930d6c Merge branch 'dungeon_rune' into dev_20230919
# Conflicts:
#	Assets/proto/protocol.bytes
2023-09-12 10:08:56 +08:00
xiekaidong
b4f2b23cb2 符文副本 2023-09-12 10:06:47 +08:00
xiekaidong
29ffd0dc36 更新资源 2023-09-12 09:35:19 +08:00
xiekaidong
5b27f2c252 更新资源 2023-09-11 20:04:28 +08:00
xiekaidong
1d12b1c1e8 符文副本 2023-09-11 20:02:19 +08:00
xiekaidong
0c3788b90d 更新协议 2023-09-11 17:32:31 +08:00
xiekaidong
026350ff6a 更新资源 2023-09-11 14:02:28 +08:00
xiekaidong
6bd690e738 更新协议 2023-09-11 12:00:21 +08:00
xiekaidong
81d593d09a buff修改 2023-09-11 10:49:35 +08:00
xiekaidong
91c0c3b104 显示问题优化 2023-09-11 10:18:31 +08:00
xiekaidong
4da792de57 更新资源 2023-09-09 16:13:44 +08:00
xiekaidong
c36cb3f9e5 资源替换 2023-09-09 15:09:31 +08:00
xiekaidong
57b1dded5f 资源替换 2023-09-09 14:06:54 +08:00
xiekaidong
ebbd97f8af 更新资源 2023-09-09 13:43:51 +08:00
xiekaidong
059c6ca56b 符文副本 2023-09-08 18:54:00 +08:00
xiekaidong
11283750f3 更新协议 2023-09-08 10:56:18 +08:00
xiekaidong
2c07878a4d 判定修复 2023-09-08 10:37:37 +08:00
xiekaidong
65bbbaa0cc 界面调整 2023-09-08 10:24:39 +08:00
Fang
a586912584 添加容错 2023-09-08 10:02:17 +08:00
xiekaidong
5fe814b753 合并符文怪物表 2023-09-08 09:38:10 +08:00
xiekaidong
dbb30676a2 符文副本主界面 2023-09-07 19:15:01 +08:00
xiekaidong
2dd0c48961 界面和资源 2023-09-07 15:21:53 +08:00
xiekaidong
d83509fc3f 资源处理 2023-09-06 18:47:40 +08:00
xiekaidong
c028971870 符文副本 2023-09-06 16:57:13 +08:00
xiekaidong
980d92839d 魅惑、免疫buff,被控状态下,技能cd不递减 2023-09-06 16:28:01 +08:00
chenxi
67dfdf94c6 打包工具完善 2023-09-06 15:28:10 +08:00
xiekaidong
5e469d538f 更新资源 2023-09-06 14:10:15 +08:00
xiekaidong
d3b124c536 Merge branch 'master' into dev_20230919 2023-09-06 10:20:38 +08:00
xiekaidong
45ab702c1c maxSDK升级 2023-09-04 21:00:23 +08:00
xiekaidong
d6046b2e7d Merge branch 'master' into dev_20230919 2023-08-30 09:19:48 +08:00
xiekaidong
27d17254a7 Merge branch 'master' into dev_20230919 2023-08-29 19:41:13 +08:00
xiekaidong
ed5e2f1dc7 xlua 2023-08-28 15:07:57 +08:00
xiekaidong
8cef52f549 Merge branch 'dev_20230919' into sdk_2 2023-08-24 15:48:02 +08:00
xiekaidong
b3091fbf49 更新ironsource 2023-08-23 20:21:05 +08:00
chenxi
72775fbd50 上报参数 2023-08-18 20:13:47 +08:00
chenxi
01427a9f4c 打包脚本 2023-08-17 16:53:55 +08:00
chenxi
4316bca531 自动设置版本号 2023-08-17 14:15:07 +08:00
chenxi
e4446afdec fix bug 2023-08-17 10:04:44 +08:00
3640 changed files with 3756420 additions and 14810 deletions

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: cd642f9c5d7126f47898e5dc9520a8ff
guid: 0c41a7273e266a0468c52d3a52652dbd
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -0,0 +1,195 @@
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
namespace BFEditor.Build
{
public class CompareAssetBundleWindow : EditorWindow
{
private string newestABPath = "";
private string lastABPath = "";
public bool IsAndroid = true;
private List<string> ABList = new List<string>();
Vector2 resultScrollPos;
public CompareAssetBundleWindow()
{
titleContent = new GUIContent("AssetBundle对比");
}
private void OnEnable()
{
GetNewestABPath();
}
void OnGUI()
{
GUILayout.Space(18);
GUILayout.BeginHorizontal();
GUILayout.Label("当前版本AB路径");
GUILayout.TextField(newestABPath, GUILayout.Width(600));
if (GUILayout.Button("选择", GUILayout.Width(80)))
{
string openPath = EditorUtility.OpenFolderPanel("select ab path", newestABPath, "");
if (openPath.CompareTo("") != 0){
newestABPath = openPath;
}
}
GUILayout.EndHorizontal();
GUILayout.Space(10);
GUILayout.BeginHorizontal();
GUILayout.Label("上个版本AB路径");
GUILayout.TextField(lastABPath, GUILayout.Width(600));
if (GUILayout.Button("选择", GUILayout.Width(80)))
{
string openPath = EditorUtility.OpenFolderPanel("select ab path", lastABPath, "");
if (openPath.CompareTo("") != 0){
lastABPath = openPath;
}
}
GUILayout.EndHorizontal();
GUILayout.Space(10);
GUILayout.BeginHorizontal();
GUILayout.Space(150);
if (GUILayout.Button("对比", GUILayout.Width(200), GUILayout.Height(40)))
{
CheckMD5AndAssetHash();
}
GUILayout.Space(100);
if (GUILayout.Button("使用上个版本的AB修复", GUILayout.Width(200), GUILayout.Height(40)))
{
UseLastABFix();
}
GUILayout.EndHorizontal();
GUILayout.Space(30);
DrawResult();
}
private void DrawResult()
{
resultScrollPos = GUILayout.BeginScrollView(resultScrollPos, GUILayout.Width(800), GUILayout.Height(620));
for (int i = ABList.Count - 1; i >= 0; i--)
{
var path = ABList[i];
GUILayout.BeginHorizontal();
GUILayout.Space(20);
EditorGUILayout.TextField(path);
GUILayout.Space(10);
GUILayout.EndHorizontal();
}
GUILayout.EndScrollView();
}
private void CheckMD5AndAssetHash()
{
if (string.IsNullOrEmpty(newestABPath))
{
return;
}
if (string.IsNullOrEmpty(lastABPath))
{
return;
}
ABList.Clear();
var manifestPath = System.IO.Path.Combine(newestABPath, "asset_bundle_manifest.ab");
var manifestAB = AssetBundle.LoadFromFile(manifestPath);
var Manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
manifestAB.Unload(false);
var lastManifestPath = System.IO.Path.Combine(lastABPath, "asset_bundle_manifest.ab");
var lastManifestAB = AssetBundle.LoadFromFile(lastManifestPath);
var lastManifest = lastManifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
lastManifestAB.Unload(false);
var allAB = Manifest.GetAllAssetBundles();
foreach(var path in allAB)
{
if (path.Contains("ab_config.bytes") || path.Contains("asset_bundle_manifest.ab"))
{
continue;
}
var fullPathA = Path.Combine(newestABPath, path);
var fullPathB = Path.Combine(lastABPath, path);
if (File.Exists(fullPathB) && BF.GameLaunchUtils.GetFileMD5(fullPathA).CompareTo(BF.GameLaunchUtils.GetFileMD5(fullPathB)) != 0)
{
if (Manifest.GetAssetBundleHash(path) == lastManifest.GetAssetBundleHash(path))
{
// md5 不一致但是AssetHash一致的情况
ABList.Add(path);
}
}
}
}
private void UseLastABFix()
{
if (string.IsNullOrEmpty(newestABPath))
{
return;
}
if (string.IsNullOrEmpty(lastABPath))
{
return;
}
if (ABList.Count == 0)
{
return;
}
foreach(var path in ABList)
{
var fullPathA = Path.Combine(newestABPath, path);
var fullPathB = Path.Combine(lastABPath, path);
File.Copy(fullPathB, fullPathA, true);
}
var version = newestABPath.Substring(newestABPath.Replace("\\", "/").LastIndexOf("/") + 1);
AssetBundleUtils.RegenerateABConfigMd5(newestABPath, version);
ABList.Clear();
}
public static void ShowWindow()
{
var window = GetWindow<CompareAssetBundleWindow>();
window.Show();
}
private void GetNewestABPath()
{
var bundleCachePath = IsAndroid ? Application.dataPath + "/../HistoryAssetBundles" : Application.dataPath + "/../HistoryAssetBundles/IOS";
var dirInfo = new DirectoryInfo(bundleCachePath);
var dirs = dirInfo.GetDirectories();
if (dirs.Length == 0)
{
newestABPath = "";
lastABPath = "";
}
if (dirs.Length == 1)
{
newestABPath = dirs[0].FullName;
lastABPath = "";
}
var hightestIndex = 0;
var secondIndex = 0;
for (var i = 1; i < dirs.Length; i++)
{
if (dirs[i].FullName.CompareTo(dirs[hightestIndex].FullName) > 0)
{
secondIndex = hightestIndex;
hightestIndex = i;
}
}
newestABPath = dirs[hightestIndex].FullName;
if (hightestIndex > 0)
{
lastABPath = dirs[secondIndex].FullName;
}
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 92d1c3826af024ff1a77c6c7d7983c7d
guid: ea05efeb3467b0947b735c8fe281cb8c
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -192,10 +192,34 @@ namespace BFEditor.Build
}
}
[MenuItem("打包工具/AssetBundles/对比上一个版本AB Android", priority = 207)]
static void CompareLastVersionABAndroid()
{
var window = (CompareAssetBundleWindow)EditorWindow.GetWindowWithRect(typeof(CompareAssetBundleWindow),
new Rect(Screen.width / 2, Screen.height / 2, 800, 800), true);
window.IsAndroid = true;
window.Show();
}
[MenuItem("打包工具/AssetBundles/对比上一个版本AB IOS", priority = 208)]
static void CompareLastVersionABIOS()
{
var window = (CompareAssetBundleWindow)EditorWindow.GetWindowWithRect(typeof(CompareAssetBundleWindow),
new Rect(Screen.width / 2, Screen.height / 2, 800, 800), true);
window.IsAndroid = false;
window.Show();
}
[MenuItem("打包工具/打包窗口", priority = 301)]
static void ShowBuildWindow()
{
BuildProjectWindow.ShowWindow();
}
[MenuItem("打包工具/Android转换为AAB工程", priority = 401)]
static void ConvertAndroidStudioToAAB()
{
BuildAndroidUtils.ConvertToAAB();
}
}
}

View File

@ -13,6 +13,8 @@ namespace BFEditor.Build
public class BuildProjectWindow : EditorWindow
{
private static int versionCode = 18;
private static string versionName = "1.6.5";
BFPlatformOptions platform = BFPlatformOptions.AndroidDev;
const string ANDROID_DEV_PACKAGE_NAME = "com.juzu.b6.dev.android";
const string ANDROID_RELEASE_PACKAGE_NAME = "com.juzu.b6.release.android";
@ -34,7 +36,7 @@ namespace BFEditor.Build
platform = (BFPlatformOptions)EditorGUILayout.EnumPopup("", platform);
EditorGUILayout.Space();
EditorGUILayout.LabelField("版本: 0.1.0");
EditorGUILayout.LabelField("版本: " + versionName);
EditorGUILayout.Space();
string packageName;
@ -70,7 +72,8 @@ namespace BFEditor.Build
if (GUILayout.Button("一键打包"))
{
var buildInfo = new BuildInfo();
buildInfo.version = "0.1.0";
buildInfo.version = versionName;
buildInfo.version_code = versionCode;
buildInfo.mode = mode;
buildInfo.bundleName = packageName;
buildInfo.skipVersion = skipVersion;

View File

@ -3,6 +3,7 @@ using UnityEditor;
using System.IO;
using UnityEditor.Build.Reporting;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System;
using System.Threading;
@ -29,8 +30,14 @@ namespace BFEditor.Build
static string GoogleCommonProjectPath = Application.dataPath + "/../BFVersions/android/google_common";
static string GPAsProjectPath = Application.dataPath + "/../BFVersions/android/ub-gp"; // gp删档测试渠道
static string GPOfficialAsProjectPath = Application.dataPath + "/../BFVersions/android/ub-google"; // gp正式渠道
static string PublishAsProjectPath = Application.dataPath + "/../BFVersions/android/publish_release";
static string SignShellPath = Application.dataPath + "/../BFFiles/androidkey";
static string GpAlginShellPath = Application.dataPath + "/../BFFiles/androidkey";
static HashSet<string> AABInPackageFileHashSet = new HashSet<string>()
{
"bin",
"UnityServicesProjectConfiguration.json"
};
static BuildAndroidUtils()
{
@ -282,6 +289,7 @@ namespace BFEditor.Build
else if(buildInfo.IsGPChannel())
{
MergeProject(buildInfo, GoogleAsProjectPath);
FixGradleVersion(buildInfo.version_code, buildInfo.version);
}
return result;
}
@ -391,13 +399,19 @@ namespace BFEditor.Build
static void FixGradleVersion(int versionCode, string versionName)
{
Debug.Log("[bfinfo]修正build.gradle: VersionCode " + versionCode + " VersionName " + versionName);
var gradleFilePath = Path.Combine(GradleExcuteProjectPath, "build.gradle");
var gradleFilePath = Path.Combine(PublishAsProjectPath, "launcher", "build.gradle");
var text = File.ReadAllText(gradleFilePath);
var regex = new Regex("versionCode 1");
text = regex.Replace(text, string.Format("versionCode {0}", versionCode));
regex = new Regex("versionName '0.1'");
text = regex.Replace(text, string.Format("versionName '{0}'", versionName));
var regex2 = new Regex("versionName '0.1.0'");
text = regex2.Replace(text, string.Format("versionName '{0}'", versionName));
File.WriteAllText(gradleFilePath, text);
var gradleFilePath2 = Path.Combine(PublishAsProjectPath, "unityLibrary", "build.gradle");
var text2 = File.ReadAllText(gradleFilePath2);
text2 = regex.Replace(text2, string.Format("versionCode {0}", versionCode));
text2 = regex2.Replace(text2, string.Format("versionName '{0}'", versionName));
File.WriteAllText(gradleFilePath2, text2);
}
/// <summary>
@ -543,5 +557,77 @@ namespace BFEditor.Build
tmp.Abort();
}
}
public static void ConvertToAAB()
{
var installTimePackDirPath = Path.Combine(PublishAsProjectPath, "../", "dz_google_abb", "install_time_pack");
var targetDirPath = Path.Combine(PublishAsProjectPath, "install_time_pack");
if (Directory.Exists(targetDirPath))
{
Directory.Delete(targetDirPath, true);
Directory.CreateDirectory(targetDirPath);
}
else
{
Directory.CreateDirectory(targetDirPath);
}
BFEditorUtils.CopyDir(installTimePackDirPath, targetDirPath);
var abDirPath = Path.Combine(PublishAsProjectPath, "unityLibrary/src/main/assets");
var destFolderName = Path.Combine(PublishAsProjectPath, "install_time_pack/src/main/assets");
var dirInfo = new DirectoryInfo(abDirPath);
var floders = dirInfo.GetDirectories();
for (var i = 0; i < floders.Length; i++)
{
if (AABInPackageFileHashSet.Contains(floders[i].Name))
{
continue;
}
var newDir = Path.Combine(destFolderName, floders[i].Name);
if (!Directory.Exists(newDir))
{
Directory.CreateDirectory(newDir);
}
BFEditorUtils.CopyDir(floders[i].FullName, newDir);
Directory.Delete(floders[i].FullName, true);
}
var files = dirInfo.GetFiles();
for (var i = 0; i < files.Length; i++)
{
var file = files[i];
if (AABInPackageFileHashSet.Contains(file.Name))
{
continue;
}
var destFile = Path.Combine(destFolderName, file.Name);
if (File.Exists(destFile))
{
File.Delete(destFile);
}
File.Move(file.FullName, destFile);
}
var settingsGradleFilePath = Path.Combine(PublishAsProjectPath, "settings.gradle");
var text = File.ReadAllText(settingsGradleFilePath);
var appendText = "include ':install_time_pack'";
if (!text.EndsWith(appendText))
{
text = text + "\n" + appendText;
}
File.WriteAllText(settingsGradleFilePath, text);
var buildGradlePath = Path.Combine(PublishAsProjectPath, "launcher/build.gradle");
var buildGradleText = File.ReadAllText(buildGradlePath);
var regex2 = new Regex("assetPacks = [\":install_time_pack\"]");
if (!regex2.IsMatch(buildGradleText))
{
var regex22 = new Regex("android {");
buildGradleText = regex22.Replace(buildGradleText, "android {\n assetPacks = [\":install_time_pack\"]");
}
File.WriteAllText(buildGradlePath, buildGradleText);
Debug.Log("Android转换为AAB工程完成");
}
}
}

View File

@ -20,18 +20,25 @@ namespace BFEditor
// }
const string BOARD_EXCEL_KEY = "bf_board_excel_key";
const string BOARD_GRID_TYPE_KEY = "bf_board_grid_type_key";
const string BOARD_GRID_EDGE_KEY = "bf_board_grid_edge_key";
int gridCount = 49;
string battleImgDirectory = "Assets/arts/textures/ui/battle/";
string boardFilepath;
string boardGridTypePath;
string boardGridEdgePath;
string boardFiledName = "board";
string boardEdgeFiledName = "grid_edge";
string randomTypeStr = "";
string boardEdgeStr = "";
int curIndex = 1;
int maxRow = 7;
Dictionary<int, Dictionary<string, string>> boardGridTypeDict = new Dictionary<int, Dictionary<string, string>>();
Dictionary<int, JArray> boardDict = new Dictionary<int, JArray>();
Dictionary<int, JArray> outPutBoardDict = new Dictionary<int, JArray>();
Dictionary<string, Texture> imgDict = new Dictionary<string, Texture>();
Dictionary<int, Dictionary<string, string>> boardGridEdgeDict = new Dictionary<int, Dictionary<string, string>>();
Dictionary<int, JArray> edgeDict = new Dictionary<int, JArray>();
Dictionary<int, JArray> outPutBoardEdgeDict = new Dictionary<int, JArray>();
bool loadExcelOver = false;
Dictionary<int, string> elementTypeImgDict = new Dictionary<int, string>(){
[1] = "red_1",
@ -55,6 +62,12 @@ namespace BFEditor
{
boardGridTypePath = "选择grid_type配置表路径";
}
boardGridEdgePath = GetBoardGridEdgePath();
if (boardGridEdgePath.Equals(""))
{
boardGridEdgePath = "选择grid_edge_type配置表路径";
}
string[] paths = Directory.GetFiles(battleImgDirectory);
foreach(var path in paths)
{
@ -86,6 +99,16 @@ namespace BFEditor
PlayerPrefs.SetString(BOARD_GRID_TYPE_KEY, path);
}
string GetBoardGridEdgePath()
{
return PlayerPrefs.GetString(BOARD_GRID_EDGE_KEY, "");
}
void SetBoardGridEdgePath(string path)
{
PlayerPrefs.SetString(BOARD_GRID_EDGE_KEY, path);
}
BoardEditorWindow()
{
this.titleContent = new GUIContent("棋盘编辑器");
@ -114,6 +137,20 @@ namespace BFEditor
}
}
GUILayout.EndHorizontal();
GUILayout.BeginHorizontal();
GUILayout.Label("grid_edge 路径", GUILayout.Width(100));
GUILayout.Space(10);
GUILayout.TextField(boardGridEdgePath, GUILayout.Width(300));
if (GUILayout.Button("选择", GUILayout.Width(80)))
{
string openPath = EditorUtility.OpenFilePanel("选择配置表", GetBoardGridEdgePath(), "");
if (openPath.CompareTo("") != 0)
{
boardGridEdgePath = openPath;
SetBoardGridEdgePath(openPath);
}
}
GUILayout.EndHorizontal();
GUILayout.Space(10);
GUILayout.BeginHorizontal();
@ -305,6 +342,74 @@ namespace BFEditor
boardDict[curIndex] = ja;
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
GUILayout.EndArea();
GUILayout.BeginArea(new Rect(730, 650, 500, 500));
GUILayout.BeginVertical();
GUILayout.Label("棋盘边缘元素");
boardEdgeStr = GUILayout.TextField(boardEdgeStr, GUILayout.Width(400), GUILayout.Height(100));
if(GUILayout.Button("加载边缘元素配置", GUILayout.Width(110)))
{
JArray edgeJo = edgeDict[curIndex];
string str = "[";
for (int i = 0; i < edgeJo.Count; i++)
{
JArray gridInfo = (JArray)edgeJo[i];
if (gridInfo.Count < 3)
{
continue;
}
string s = "{";
for (int j = 0; j < 3; j++)
{
s = s + gridInfo[j].ToString();
if(j != 2)
{
s = s + ", ";
}
}
s = s + "}";
str = str + s;
if (i != edgeJo.Count)
{
str = str + ", ";
}
}
boardEdgeStr = str;
}
if(GUILayout.Button("重新刷新边缘元素", GUILayout.Width(110)))
{
string[] units = boardEdgeStr.Split('{');
List<string> edgeList = new List<string>();
for (int i = 0; i < units.Length; i++)
{
string formatStr = units[i].Replace("[", "").Replace("]", "").Replace(" ", "").Replace("}", "");
string[] unitList = formatStr.Split(',');
if (unitList.Length >= 3)
{
string str = "[";
for(int j = 0; j < 3; j++)
{
str = str + unitList[j];
if (j != 2)
{
str = str + ",";
}
}
str = str + "]";
edgeList.Add(str);
}
}
JArray ja = new JArray();
for (int i = 0; i < edgeList.Count; i++)
{
JArray unit = (JArray)JsonConvert.DeserializeObject(edgeList[i]);
ja.Add(unit);
}
edgeDict[curIndex] = ja;
}
GUILayout.EndVertical();
GUILayout.EndArea();
if(GUI.Button(new Rect(1050, 10, 100, 30), "导出到Excel"))
{
@ -357,6 +462,21 @@ namespace BFEditor
boardGridTypeDict[key] = dict;
}
// 读取grid_edge_type配置表
BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardGridEdgePath, pythonToolPath);
string boardGridEdgeJson = File.ReadAllText(tempPath);
jsonObj = (JObject)JsonConvert.DeserializeObject(boardGridEdgeJson);
foreach (var item in jsonObj)
{
int key = int.Parse(item.Key);
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (var item2 in (JObject)item.Value)
{
dict[item2.Key] = item2.Value.ToString();
}
boardGridEdgeDict[key] = dict;
}
// 读取boardFile配置表
BFEditorUtils.RunCommond("python", "load_board.py " + tempPath + " " + boardFilepath, pythonToolPath);
string boardFileJson = File.ReadAllText(tempPath);
@ -369,6 +489,12 @@ namespace BFEditor
boardDict[key] = copyBoard((JArray)item.Value[boardFiledName]);
outPutBoardDict[key] = copyBoard((JArray)item.Value[boardFiledName]);
}
if (item.Value[boardEdgeFiledName] != null)
{
int key = int.Parse(item.Key);
edgeDict[key] = copyBoard((JArray)item.Value[boardEdgeFiledName]);
outPutBoardEdgeDict[key] = copyBoard((JArray)item.Value[boardEdgeFiledName]);
}
}
loadExcelOver = true;
@ -394,7 +520,7 @@ namespace BFEditor
void DragBoard()
{
Texture img;
GUI.DrawTexture(new Rect(0, 150, 702, 702), boardImg);
GUI.DrawTexture(new Rect(0, 200, 702, 702), boardImg);
if(!loadExcelOver)
{
return;
@ -406,7 +532,7 @@ namespace BFEditor
return;
}
GUILayout.BeginArea(new Rect(0, 150, 702, 702));
GUILayout.BeginArea(new Rect(0, 200, 702, 702));
GUILayout.BeginVertical();
JArray jo = boardDict[curIndex];
int posIndex = 0;
@ -452,9 +578,52 @@ namespace BFEditor
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
if (edgeDict.ContainsKey(curIndex))
{
JArray edgeJo = edgeDict[curIndex];
for (int i = 0; i < edgeJo.Count; i++)
{
JArray gridInfo = (JArray)edgeJo[i];
if(gridInfo.Count < 3)
{
continue;
}
int posId = (int)gridInfo[0];
int edgeType = (int)gridInfo[1];
int dir = (int)gridInfo[2];
// 绘制类型
if(boardGridEdgeDict[edgeType].ContainsKey("icon"))
{
string icon = boardGridEdgeDict[edgeType]["icon"];
if (imgDict.ContainsKey(icon))
{
int row = posId / 10;
int col = posId % 10;
img = imgDict[icon];
if (dir == 1)
{
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth - 16, 92, 32), img);
}
else if (dir == 2)
{
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth, startOffset + (row - 1) * textureWidth - 16 + textureWidth, 92, 32), img);
}
else if (dir == 3)
{
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth - 16, startOffset + (row - 1) * textureWidth - 16, 32, 92), img);
}
else if (dir == 4)
{
GUI.DrawTexture(new Rect(startOffset + (col - 1) * textureWidth - 16 + textureWidth, startOffset + (row - 1) * textureWidth - 16, 32, 92), img);
}
}
}
}
}
GUILayout.EndArea();
GUILayout.BeginArea(new Rect(730, 150, 510 * 7, 550 / 7 * maxRow));
GUILayout.BeginArea(new Rect(730, 200, 510 * 7, 550 / 7 * maxRow));
GUILayout.BeginVertical();
GUILayout.BeginHorizontal();
GUILayout.Label("棋盘配置信息", GUILayout.Width(100), GUILayout.Height(30));

View File

@ -136,71 +136,17 @@ namespace BFEditor
var configFileInfos = configDirInfo.GetFiles(suffix, SearchOption.TopDirectoryOnly);
// 检查棋盘文件格式
checkBoard("chapter_board", env, sb);
checkBoard("chapter_board_bossrush", env, sb);
checkBoard("chapter_board_daily_challenge", env, sb);
checkBoard("chapter_board_dungeon_armor", env, sb);
checkBoard("chapter_board_dungeon_equip", env, sb);
checkBoard("chapter_board_dungeon_gold", env, sb);
checkBoard("chapter_board_dungeon_shards", env, sb);
checkBoard("chapter_board_rune", env, sb);
checkBoard("activity_pvp_board", env, sb);
checkBoard("arena_board", env, sb);
var luaScriptString = @"local cfg = require('app/config/chapter_board')
if not cfg or not cfg.data then
return ''
end
cfg = cfg.data
local tempMap = {}
local addErrorInfo = function(errorInfo, cfgId, errorStr)
if not tempMap[cfgId] then
tempMap[cfgId] = true
table.insert(errorInfo, 'cfgId = ' .. cfgId)
end
table.insert(errorInfo, ' ' .. errorStr)
end
local errorInfo = {}
for k, info in pairs(cfg) do
local board = info.board
if not board then
addErrorInfo(errorInfo, k, 'board字段')
end
if #board < 49 then
addErrorInfo(errorInfo, k, 'board长度不足' .. #board)
end
for index, v in ipairs(board) do
if not v[1] then
addErrorInfo(errorInfo, k, 'board字段中' .. index .. '')
end
if not v[2] then
addErrorInfo(errorInfo, k, 'board字段中' .. index .. '')
end
end
local mystery_box_board = info.mystery_box_board
if mystery_box_board then
for index, v in ipairs(mystery_box_board) do
if not v[1] then
addErrorInfo(errorInfo, k, 'mystery_box_board字段中' .. index .. '')
end
if not v[2] then
addErrorInfo(errorInfo, k, 'mystery_box_board字段中' .. index .. '')
end
end
end
end
if #errorInfo > 0 then
return table.concat(errorInfo, '\n');
end
return ''";
var resultStr = env.DoString(luaScriptString);
if (resultStr.Length > 0)
{
foreach(var strObj in resultStr)
{
var str = Convert.ToString(strObj);
if(!String.IsNullOrEmpty(str))
{
sb.Append(str + "\n");
}
}
}
// 检查monster
string monsterConfigListLua = "{";
@ -213,7 +159,7 @@ namespace BFEditor
}
}
monsterConfigListLua += "}";
luaScriptString = "local ids = {}\n local MONSTER_LIST = " + monsterConfigListLua + "\n";
var luaScriptString = "local ids = {}\n local MONSTER_LIST = " + monsterConfigListLua + "\n";
luaScriptString += @"local str = {}
for i, name in ipairs(MONSTER_LIST) do
if name ~= 'monster_base' and name ~= 'monster_position' and name ~= 'monster_position_base' then
@ -230,7 +176,7 @@ namespace BFEditor
return table.concat(str, '\n');
end
return ''";
resultStr = env.DoString(luaScriptString);
var resultStr = env.DoString(luaScriptString);
if (resultStr.Length > 0)
{
foreach(var strObj in resultStr)
@ -299,6 +245,76 @@ namespace BFEditor
return sb;
}
public static void checkBoard(string configName, LuaEnv env, in StringBuilder sb)
{
var luaScriptString = @"
if not cfg or not cfg.data then
return ''
end
cfg = cfg.data
local tempMap = {}
local addErrorInfo = function(errorInfo, cfgId, errorStr)
if not tempMap[cfgId] then
tempMap[cfgId] = true
table.insert(errorInfo, 'cfgId = ' .. cfgId)
end
table.insert(errorInfo, ' ' .. errorStr)
end
local errorInfo = {}
for k, info in pairs(cfg) do
local board = info.board or info.board_daily_challenge
if not board then
addErrorInfo(errorInfo, k, configName .. ' board字段')
else
if #board < 49 then
addErrorInfo(errorInfo, k, configName .. ' board长度不足' .. #board)
end
for index, v in ipairs(board) do
if not v[1] then
addErrorInfo(errorInfo, k, configName .. ' board字段中' .. index .. '')
end
if not v[2] then
addErrorInfo(errorInfo, k, configName .. ' board字段中' .. index .. '')
elseif v[2] > 5 or v[2] < 0 then
addErrorInfo(errorInfo, k, configName .. ' board字段中' .. index .. '' .. v[2])
end
end
local mystery_box_board = info.mystery_box_board
if mystery_box_board then
for index, v in ipairs(mystery_box_board) do
if not v[1] then
addErrorInfo(errorInfo, k, configName .. ' mystery_box_board字段中' .. index .. '')
end
if not v[2] then
addErrorInfo(errorInfo, k, configName .. ' mystery_box_board字段中' .. index .. '')
end
end
end
end
end
if #errorInfo > 0 then
return table.concat(errorInfo, '\n');
end
return ''";
var resultStr = env.DoString(" local cfg = require('app/config/" + configName + "')\n" + "local configName = '" + configName + "'\n" + luaScriptString);
if (resultStr.Length > 0)
{
foreach(var strObj in resultStr)
{
var str = Convert.ToString(strObj);
if(!String.IsNullOrEmpty(str))
{
sb.Append(str + "\n");
}
}
}
}
public static bool FastExportExcelToLua(bool isDeveloper, string designExcelPath)
{
failFlag = false;

View File

@ -104,7 +104,7 @@ namespace BFEditor
[MenuItem("其他工具/棋盘编辑器", false, 9)]
public static void CreateBoardEditorWindow()
{
var window = (BoardEditorWindow)EditorWindow.GetWindowWithRect(typeof(BoardEditorWindow), new Rect(Screen.width / 2, Screen.height / 2, 1200, 850), true);
var window = (BoardEditorWindow)EditorWindow.GetWindowWithRect(typeof(BoardEditorWindow), new Rect(Screen.width / 2, Screen.height / 2, 1200, 1000), true);
window.Show();
}
}

View File

@ -11,8 +11,8 @@ public class JenkinsAdapter {
/// 构建版本号
/// </summary>
private static string BuildVersion = (int.Parse(DateTime.Now.ToString("yyMMddHH"))).ToString();
private static int versionCode = 9;
private static string versionName = "1.3.8";
private static int versionCode = 10;
private static string versionName = "1.4.0";
[MenuItem("Jenkins/JenkinsBuildIos")]
public static void CommandLineBuildIos() {

View File

@ -171,9 +171,36 @@ public class Package {
// <true />";
// list.AddKey(UnityNotificationRequestAuthorizationOnAppLaunch);
string SKAdNetworkIdentifiers = @"
<key>SKAdNetworkItems</key>
<array>
// max专用的SKAdNetworkIdentifiers可以直接覆盖替换
string SKAdNetworkIdentifiersForMAX = @"
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>238da6jt44.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>24t9a8vw3c.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>24zw6aqk47.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>252b5q8x7y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>275upjj5gd.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>294l99pt4k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>2fnua5tdw4.skadnetwork</string>
@ -182,6 +209,14 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>2u9pt9hc89.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>32z4fx6l9h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3l6bd9hu43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3qcr597p9d.skadnetwork</string>
@ -190,6 +225,10 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>3qy4746246.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3sh42y64q3.skadnetwork</string>
@ -202,6 +241,22 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>4468km3ulz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44jx6755aq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44n7hlldy6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>47vhws6wlr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>488r3q3dtq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4dzt52r2t5.skadnetwork</string>
@ -212,148 +267,16 @@ public class Package {
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>22mmun2rn5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>24t9a8vw3c.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>275upjj5gd.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>294l99pt4k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>32z4fx6l9h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3l6bd9hu43.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>3rd42ekr43.skadnetwork</string>
<string>4mn522wn87.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4pfyvq9l8r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4w7y6s5ca2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>523jb4fst2.skadnetwork</string>
@ -366,6 +289,14 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>54nzkqm89y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>578prtvx9j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5a6flpkh64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>5l3tpt7t6e.skadnetwork</string>
@ -378,42 +309,142 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>5tjdwbrq8w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6964rsfnh4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6g9af3uyq4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6p4ks3rnbw.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6v7lgmsu45.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6xzpu9s2p8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>737z793b9f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>74b6s63p6l.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7953jerfzd.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>79pbpufp6p.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7fmhfwg9en.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7rz58n8ntl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>7ug5zh24hu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>84993kbrcf.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>89z7zv988g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8c4e2ghe7u.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8m87ys6875.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8r8llnkz5a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>8s468mfl3y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>97r2b46745.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9b89h5y424.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9g2aggbj52.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9nlqeag3gk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9rd848q2bz.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9t245vhmpl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9vvzujtq5s.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9yg77x724h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a7xqa6mtl2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a8cz6cu7e5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>av6w8kgt66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>b9bk5wbcq9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>bxvub5ada5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c3frkrj4fj.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>c6k4g5qg8m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cg4yq2srnc.skadnetwork</string>
@ -422,14 +453,58 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>cj5566h2ga.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cp8zw746q7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cs644xg564.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>cstr6suwn9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dbu4b84rxf.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dkc879ngq3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dzg6xy7pwj.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>e5fvkxwrpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>eh6m2bh4zr.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ejvt5qm6ak.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f38h382jlk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f73kdq92p3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>feyaarzu9v.skadnetwork</string>
@ -438,6 +513,10 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>g28c52eehv.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>g2y4y55b64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ggvn48r87g.skadnetwork</string>
@ -446,22 +525,66 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>glqzh8vgby.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta8lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gta9lk7p23.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gvmwg8q7h5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>h65wbv5k3f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hb56zgv37p.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hdw39hrw9y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hs6bdukanm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>k674qkevps.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbd757ywx3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>kbmxgpxpgc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>klf5c3l5u5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>krvm3zuq6h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>lr83yxwka7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ludvb6z3bs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>m297p6643m.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>m5mvw97r93.skadnetwork</string>
@ -474,14 +597,30 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>mlmmfzh3r3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mls7yz5dvl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mp6xlyr22a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mtkv5xtk9e.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n66cz3y3bx.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n6fk4nfna4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n9x2a789qt.skadnetwork</string>
@ -490,14 +629,38 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>nzq8sh4pbs.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>p78axxw29g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ppxm28t8ap.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>prcb7njmu6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pu4na253f3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwa73g5rt2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwdxu55a5a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>qqp299437r.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>qu637u8glc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>r45fhb6rf7.skadnetwork</string>
@ -506,18 +669,78 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>rvh3l7un93.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>rx5hdcabgc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s39g8k73mm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s69wq72ugq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>su67r6k2v3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t38b2kh725.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>t6d3zquu66.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>tl55sbb4fm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>u679fj5vs4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>uw77j35x4d.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v4nxqhlyqp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v72qych5uu.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v79kvwwj4g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vcra2ehyfk.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>vutu7akeur.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>w9q455wk68.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wg4vff78zm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>wzmmz9fp6w.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x44k69ngh6.skadnetwork</string>
@ -538,169 +761,21 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>xy9t38ct57.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zmvfpc5aq8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44jx6755aq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>44n7hlldy6.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>4w7y6s5ca2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6964rsfnh4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>6p4ks3rnbw.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>737z793b9f.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>74b6s63p6l.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>84993kbrcf.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>97r2b46745.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a2p9lx4jpn.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>a7xqa6mtl2.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>b9bk5wbcq9.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>bxvub5ada5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>dzg6xy7pwj.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f73kdq92p3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>g2y4y55b64.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>hdw39hrw9y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>krvm3zuq6h.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>lr83yxwka7.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mls7yz5dvl.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>mp6xlyr22a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pwdxu55a5a.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>rx5hdcabgc.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>s69wq72ugq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>su67r6k2v3.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>u679fj5vs4.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>w9q455wk68.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>y45688jllp.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>n38lu8286q.skadnetwork</string>
<string>y5ghdn5j9k.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v9wttpbfk9.skadnetwork</string>
<string>yclnxrl5pm.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>252b5q8x7y.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>9g2aggbj52.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>238da6jt44.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>x2jnk7ly8j.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>488r3q3dtq.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>f7s53z58qe.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>v79kvwwj4g.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>ecpz2srf59.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>gvmwg8q7h5.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>pu4na253f3.skadnetwork</string>
<string>ydx93a7ass.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
@ -710,8 +785,28 @@ public class Package {
<key>SKAdNetworkIdentifier</key>
<string>z4gj7hsk7h.skadnetwork</string>
</dict>
</array>
";
<dict>
<key>SKAdNetworkIdentifier</key>
<string>z959bm4gru.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zmvfpc5aq8.skadnetwork</string>
</dict>
<dict>
<key>SKAdNetworkIdentifier</key>
<string>zq492l623r.skadnetwork</string>
</dict>";
string SKAdNetworkIdentifiers = @"
<key>SKAdNetworkItems</key>
<array>"
+ SKAdNetworkIdentifiersForMAX
+ @"<dict>
<key>SKAdNetworkIdentifier</key>
<string>x2jnk7ly8j.skadnetwork</string>
</dict>" // 不知道哪儿来的,但是不删除
+ "</array>";
list.AddKey(SKAdNetworkIdentifiers);
///*/facebook 深度连接
@ -736,9 +831,9 @@ public class Package {
<string>fb</string>
<string>fbapi</string>
<string>fb-messenger-share-api</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
@ -749,8 +844,39 @@ public class Package {
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbapi20160328</string>
<string>fbauth</string>
</array>";
<string>fb-messenger-api</string>
<string>fb-messenger-api20140430</string>
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>facebook.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>akamaihd.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>";
list.AddKey(facebookStr);
//*/

View File

@ -8,19 +8,28 @@
url "https://maven.google.com"
}
maven {
url "https://android-sdk.is.com/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9, Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16, Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8, Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:8, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16, Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:16, Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:16, Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:8, Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8
url "https://android-sdk.is.com/" // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:9, Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:48, Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:16
}
maven {
url "https://maven.google.com/" // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17, Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25, Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8, Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8, Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:15, Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:15, Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8, Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:8, Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
url "https://maven.google.com/" // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:17, Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:25, Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:40, Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
}
maven {
url "https://repo.maven.apache.org/maven2/" // Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:8
url "https://cboost.jfrog.io/artifactory/chartboost-ads/" // Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:15
}
maven {
url "https://artifact.bytedance.com/repository/pangle/" // Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:15
url "https://repo.maven.apache.org/maven2/" // Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:8
}
maven {
url "https://sdk.tapjoy.com/" // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
url "https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea/" // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:8, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:16, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:24, Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:32
}
maven {
url "https://artifact.bytedance.com/repository/pangle/" // Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:15
}
maven {
url "https://sdk.tapjoy.com/" // Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
}
maven {
url "https://jitpack.io/" // Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:8
}
mavenLocal()
jcenter()
@ -34,42 +43,50 @@ apply plugin: 'com.android.library'
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// Android Resolver Dependencies Start
implementation 'com.adcolony:sdk:4.8.0' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
implementation 'androidx.recyclerview:recyclerview:1.2.1' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:40
implementation 'com.adcolony:sdk:4.8.0' // Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:8
implementation 'com.android.installreferrer:installreferrer:2.1' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml:10
implementation 'com.android.support:appcompat-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
implementation 'com.android.support:cardview-v7:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
implementation 'com.android.support:customtabs:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
implementation 'com.android.support:support-v4:25.3.1' // Facebook.Unity.Editor.AndroidSupportLibraryResolver.addSupportLibraryDependency
implementation 'com.applovin:applovin-sdk:11.7.1' // Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:15
implementation 'com.applovin:applovin-sdk:11.10.1' // Assets/ThirdParty/MaxSdk/AppLovin/Editor/Dependencies.xml:4
implementation 'com.appsflyer:adrevenue:6.5.4' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml:4
implementation 'com.appsflyer:af-android-sdk:6.4.1' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml:6
implementation 'com.appsflyer:unity-adrevenue-generic-wrapper:6.5.4' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerAdRevenueDependencies.xml:5
implementation 'com.appsflyer:unity-wrapper:6.4.1' // Assets/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml:8
implementation 'com.chartboost:chartboost-sdk:9.2.0' // Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:15
implementation 'com.facebook.android:audience-network-sdk:6.12.0' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:8
implementation 'com.chartboost:chartboost-sdk:9.3.1' // Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:15
implementation 'com.facebook.android:audience-network-sdk:6.16.0' // Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:8
implementation 'com.facebook.android:facebook-applinks:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:6
implementation 'com.facebook.android:facebook-core:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:5
implementation 'com.facebook.android:facebook-gamingservices:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:9
implementation 'com.facebook.android:facebook-login:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:7
implementation 'com.facebook.android:facebook-share:[15.1,16)' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:8
implementation 'com.fyber:marketplace-sdk:8.2.2' // Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:8
implementation 'com.google.android.gms:play-services-ads:21.5.0' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:8
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:17
implementation 'com.google.android.gms:play-services-basement:18.1.0' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:25
implementation 'com.ironsource.adapters:adcolonyadapter:4.3.14' // Assets/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:admobadapter:4.3.35' // Assets/IronSource/Editor/ISAdMobAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:applovinadapter:4.3.37' // Assets/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:chartboostadapter:4.3.11' // Assets/IronSource/Editor/ISChartboostAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:facebookadapter:4.3.39' // Assets/IronSource/Editor/ISFacebookAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:fyberadapter:4.3.24' // Assets/IronSource/Editor/ISFyberAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:liftoffadapter:4.3.5' // Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:pangleadapter:4.3.17' // Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:tapjoyadapter:4.1.24' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:unityadsadapter:4.3.27' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8
implementation 'com.ironsource.sdk:mediationsdk:7.3.0.1' // Assets/IronSource/Editor/IronSourceSDKDependencies.xml:9
implementation 'com.pangle.global:ads-sdk:5.0.0.8' // Assets/IronSource/Editor/ISPangleAdapterDependencies.xml:15
implementation 'com.fyber:marketplace-sdk:8.2.4' // Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:8
implementation 'com.google.android.gms:play-services-ads:22.2.0' // Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:8
implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:17
implementation 'com.google.android.gms:play-services-basement:18.1.0' // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:25
implementation 'com.ironsource.adapters:adcolonyadapter:4.3.15' // Assets/ThirdParty/IronSource/Editor/ISAdColonyAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:admobadapter:4.3.39' // Assets/ThirdParty/IronSource/Editor/ISAdMobAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:applovinadapter:4.3.39' // Assets/ThirdParty/IronSource/Editor/ISAppLovinAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:chartboostadapter:4.3.12' // Assets/ThirdParty/IronSource/Editor/ISChartboostAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:facebookadapter:4.3.45' // Assets/ThirdParty/IronSource/Editor/ISFacebookAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:fyberadapter:4.3.28' // Assets/ThirdParty/IronSource/Editor/ISFyberAdapterDependencies.xml:16
implementation 'com.ironsource.adapters:mintegraladapter:4.3.19' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:48
implementation 'com.ironsource.adapters:pangleadapter:4.3.22' // Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:tapjoyadapter:4.1.25' // Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:unityadsadapter:4.3.33' // Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:8
implementation 'com.ironsource.adapters:vungleadapter:4.3.22' // Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:16
implementation 'com.ironsource.sdk:mediationsdk:7.5.1' // Assets/ThirdParty/IronSource/Editor/IronSourceSDKDependencies.xml:9
implementation 'com.mbridge.msdk.oversea:mbbanner:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:24
implementation 'com.mbridge.msdk.oversea:mbbid:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:32
implementation 'com.mbridge.msdk.oversea:newinterstitial:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:8
implementation 'com.mbridge.msdk.oversea:reward:16.5.21' // Assets/ThirdParty/IronSource/Editor/ISMintegralAdapterDependencies.xml:16
implementation 'com.pangle.global:ads-sdk:5.5.0.5' // Assets/ThirdParty/IronSource/Editor/ISPangleAdapterDependencies.xml:15
implementation 'com.parse.bolts:bolts-android:1.4.0' // Assets/ThirdParty/FacebookSDK/Plugins/Editor/Dependencies.xml:4
implementation 'com.tapjoy:tapjoy-android-sdk:12.11.1' // Assets/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
implementation 'com.unity3d.ads:unity-ads:4.6.1' // Assets/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
implementation 'io.liftoff:liftoffads:1.9.1' // Assets/IronSource/Editor/ISLiftoffAdapterDependencies.xml:8
implementation 'com.tapjoy:tapjoy-android-sdk:13.0.1' // Assets/ThirdParty/IronSource/Editor/ISTapJoyAdapterDependencies.xml:15
implementation 'com.unity3d.ads:unity-ads:4.9.1' // Assets/ThirdParty/IronSource/Editor/ISUnityAdsAdapterDependencies.xml:15
implementation 'com.vungle:vungle-ads:7.0.0' // Assets/ThirdParty/IronSource/Editor/ISVungleAdapterDependencies.xml:8
// Android Resolver Dependencies End
**DEPS**}

View File

@ -111,8 +111,8 @@ public partial class AdManager
string networkPlacement = adInfo.NetworkPlacement; // The placement ID from the network that showed the ad
string adFormat = adInfo.AdFormat;
var dict = new Dictionary<string, string>();
dict.Add("revenue", revenue.ToString());
var dict = new Dictionary<string, System.Object>();
dict.Add("revenue", revenue);
dict.Add("country_code", countryCode);
dict.Add("network_name", networkName);
dict.Add("ad_unit_Id", adUnitId);

View File

@ -31,15 +31,16 @@ namespace BF
// SDK init
BFLog.Log("unity-script: IronSource.Agent.init");
// IronSource.Agent.setMetaData("is_test_suite", "enable");
IronSource.Agent.init(appKey);
IronSource.Agent.setManualLoadRewardedVideo(true);
// 初始化之前先设置一下用户id
ISAdQualityConfig adQualityConfig = new ISAdQualityConfig();
adQualityConfig.UserId = SystemInfo.deviceUniqueIdentifier;
// adQualityConfig.TestMode = true;
// adQualityConfig.LogLevel = ISAdQualityLogLevel.INFO;
IronSourceAdQuality.Initialize(appKey, adQualityConfig);
// ISAdQualityConfig adQualityConfig = new ISAdQualityConfig();
// adQualityConfig.UserId = SystemInfo.deviceUniqueIdentifier;
// // adQualityConfig.TestMode = true;
// // adQualityConfig.LogLevel = ISAdQualityLogLevel.INFO;
// IronSourceAdQuality.Initialize(appKey, adQualityConfig);
#elif UNITY_IPHONE
// string appKey = "8545d445";
// 初始化之前先设置一下用户id
@ -155,6 +156,8 @@ namespace BF
void SdkInitializationCompletedEvent()
{
BFLog.Log("unity-script: I got SdkInitializationCompletedEvent");
//Launch test suite
// IronSource.Agent.launchTestSuite();
}
#endregion
@ -283,8 +286,8 @@ namespace BF
{
return;
}
var dict = new Dictionary<string, string>();
dict.Add("revenue", revenue.ToString());
var dict = new Dictionary<string, System.Object>();
dict.Add("revenue", revenue);
dict.Add("auction_id", impressionData.auctionId);
dict.Add("country_code", impressionData.country);
dict.Add("network_name", impressionData.adNetwork);
@ -298,7 +301,7 @@ namespace BF
}
if (!ReferenceEquals(impressionData.lifetimeRevenue, null))
{
dict.Add("lifetime_revenue", impressionData.lifetimeRevenue.ToString());
dict.Add("lifetime_revenue", impressionData.lifetimeRevenue);
}
if (!string.IsNullOrEmpty(impressionData.encryptedCPM))
{

View File

@ -1,5 +1,5 @@
<dependencies>
<unityversion>4.3.19.0</unityversion>
<unityversion>4.3.20.1</unityversion>
<androidPackages>
<androidPackage spec="com.adcolony:sdk:4.8.0">
<repositories>
@ -9,7 +9,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:adcolonyadapter:4.3.14">
<androidPackage spec="com.ironsource.adapters:adcolonyadapter:4.3.15">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -17,7 +17,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceAdColonyAdapter" version="4.3.16.0">
<iosPod name="IronSourceAdColonyAdapter" version="4.3.17.1">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,7 +1,7 @@
<dependencies>
<unityversion>4.3.47.0</unityversion>
<unityversion>4.3.54.0</unityversion>
<androidPackages>
<androidPackage spec="com.google.android.gms:play-services-ads:21.5.0">
<androidPackage spec="com.google.android.gms:play-services-ads:22.2.0">
<repositories>
<repository>https://maven.google.com/</repository>
</repositories>
@ -9,7 +9,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:admobadapter:4.3.35">
<androidPackage spec="com.ironsource.adapters:admobadapter:4.3.39">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -17,7 +17,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceAdMobAdapter" version="4.3.41.0">
<iosPod name="IronSourceAdMobAdapter" version="4.3.47.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,21 +1,21 @@
<dependencies>
<unityversion>4.3.42.0</unityversion>
<unityversion>4.3.44.3</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:applovinadapter:4.3.37">
<androidPackage spec="com.ironsource.adapters:applovinadapter:4.3.39">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<androidPackages>
<androidPackage spec="com.applovin:applovin-sdk:11.7.1">
<androidPackage spec="com.applovin:applovin-sdk:11.10.1">
<repositories>
<repository>https://maven.google.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceAppLovinAdapter" version="4.3.38.0">
<iosPod name="IronSourceAppLovinAdapter" version="4.3.40.3">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,21 +1,21 @@
<dependencies>
<unityversion>4.3.17.0</unityversion>
<unityversion>4.3.19.2</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:chartboostadapter:4.3.11">
<androidPackage spec="com.ironsource.adapters:chartboostadapter:4.3.12">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<androidPackages>
<androidPackage spec="com.chartboost:chartboost-sdk:9.2.0">
<androidPackage spec="com.chartboost:chartboost-sdk:9.3.1">
<repositories>
<repository>https://maven.google.com/</repository>
<repository>https://cboost.jfrog.io/artifactory/chartboost-ads/</repository>
</repositories>
</androidPackage>
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceChartboostAdapter" version="4.3.13.0">
<iosPod name="IronSourceChartboostAdapter" version="4.3.15.2">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,7 +1,7 @@
<dependencies>
<unityversion>4.3.52.0</unityversion>
<unityversion>4.3.61.0</unityversion>
<androidPackages>
<androidPackage spec="com.facebook.android:audience-network-sdk:6.12.0">
<androidPackage spec="com.facebook.android:audience-network-sdk:6.16.0">
<repositories>
<repository>https://maven.google.com/</repository>
</repositories>
@ -9,7 +9,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:facebookadapter:4.3.39">
<androidPackage spec="com.ironsource.adapters:facebookadapter:4.3.45">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -17,7 +17,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceFacebookAdapter" version="4.3.39.0">
<iosPod name="IronSourceFacebookAdapter" version="4.3.43.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,7 +1,7 @@
<dependencies>
<unityversion>4.3.34.0</unityversion>
<unityversion>4.3.38.0</unityversion>
<androidPackages>
<androidPackage spec="com.fyber:marketplace-sdk:8.2.2">
<androidPackage spec="com.fyber:marketplace-sdk:8.2.4">
<repositories>
<repository>https://repo.maven.apache.org/maven2/</repository>
</repositories>
@ -9,7 +9,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:fyberadapter:4.3.24">
<androidPackage spec="com.ironsource.adapters:fyberadapter:4.3.28">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -17,7 +17,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceFyberAdapter" version="4.3.28.0">
<iosPod name="IronSourceFyberAdapter" version="4.3.31.1">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,7 +1,7 @@
<dependencies>
<unityversion>4.3.16.0</unityversion>
<unityversion>4.3.19.0</unityversion>
<androidPackages>
<androidPackage spec="com.mbridge.msdk.oversea:newinterstitial:16.4.41">
<androidPackage spec="com.mbridge.msdk.oversea:newinterstitial:16.5.21">
<repositories>
<repository>https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea/</repository>
</repositories>
@ -9,7 +9,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.mbridge.msdk.oversea:reward:16.4.41">
<androidPackage spec="com.mbridge.msdk.oversea:reward:16.5.21">
<repositories>
<repository>https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea/</repository>
</repositories>
@ -17,7 +17,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.mbridge.msdk.oversea:mbbanner:16.4.41">
<androidPackage spec="com.mbridge.msdk.oversea:mbbanner:16.5.21">
<repositories>
<repository>https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea/</repository>
</repositories>
@ -25,7 +25,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.mbridge.msdk.oversea:mbbid:16.4.41">
<androidPackage spec="com.mbridge.msdk.oversea:mbbid:16.5.21">
<repositories>
<repository>https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea/</repository>
</repositories>
@ -41,7 +41,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:mintegraladapter:4.3.16">
<androidPackage spec="com.ironsource.adapters:mintegraladapter:4.3.19">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -49,7 +49,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceMintegralAdapter" version="4.3.15.0">
<iosPod name="IronSourceMintegralAdapter" version="4.3.18.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,21 +1,21 @@
<dependencies>
<unityversion>4.3.22.0</unityversion>
<unityversion>4.3.27.0</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:pangleadapter:4.3.17">
<androidPackage spec="com.ironsource.adapters:pangleadapter:4.3.22">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<androidPackages>
<androidPackage spec="com.pangle.global:ads-sdk:5.0.0.8">
<androidPackage spec="com.pangle.global:ads-sdk:5.5.0.5">
<repositories>
<repository>https://artifact.bytedance.com/repository/pangle/</repository>
</repositories>
</androidPackage>
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourcePangleAdapter" version="4.3.19.0">
<iosPod name="IronSourcePangleAdapter" version="4.3.24.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,21 +1,21 @@
<dependencies>
<unityversion>4.1.29.0</unityversion>
<unityversion>4.1.30.3</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:tapjoyadapter:4.1.24">
<androidPackage spec="com.ironsource.adapters:tapjoyadapter:4.1.25">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<androidPackages>
<androidPackage spec="com.tapjoy:tapjoy-android-sdk:12.11.1">
<androidPackage spec="com.tapjoy:tapjoy-android-sdk:13.0.1">
<repositories>
<repository>https://sdk.tapjoy.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceTapjoyAdapter" version="4.1.24.0">
<iosPod name="IronSourceTapjoyAdapter" version="4.1.25.3">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,14 +1,14 @@
<dependencies>
<unityversion>4.3.32.0</unityversion>
<unityversion>4.3.38.0</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:unityadsadapter:4.3.27">
<androidPackage spec="com.ironsource.adapters:unityadsadapter:4.3.33">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<androidPackages>
<androidPackage spec="com.unity3d.ads:unity-ads:4.6.1">
<androidPackage spec="com.unity3d.ads:unity-ads:4.9.1">
<repositories>
<repository>https://maven.google.com/</repository>
</repositories>
@ -16,7 +16,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceUnityAdsAdapter" version="4.3.28.0">
<iosPod name="IronSourceUnityAdsAdapter" version="4.3.33.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,7 +1,7 @@
<dependencies>
<unityversion>4.3.33.0</unityversion>
<unityversion>4.3.37.0</unityversion>
<androidPackages>
<androidPackage spec="com.vungle:publisher-sdk-android:6.12.1">
<androidPackage spec="com.vungle:vungle-ads:7.0.0">
<repositories>
<repository>https://jitpack.io/</repository>
</repositories>
@ -9,7 +9,7 @@
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.adapters:vungleadapter:4.3.20">
<androidPackage spec="com.ironsource.adapters:vungleadapter:4.3.22">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -17,7 +17,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceVungleAdapter" version="4.3.26.0">
<iosPod name="IronSourceVungleAdapter" version="4.3.29.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -220,7 +220,7 @@ public class IronSourceDependenciesManager : EditorWindow
ProviderInfo info = new ProviderInfo();
object providerXML;
var lowerCaseItem = item.Key.ToLower();
var lowerCaseItem = item.Key.ToLower(new System.Globalization.CultureInfo("en"));
linksDictionary.TryGetValue(lowerCaseItem, out providerXML);

View File

@ -22,7 +22,7 @@ public class IronSourceManifestProcessor : IPreprocessBuild
private const string AD_ID_PERMISSION_ATTR = "com.google.android.gms.permission.AD_ID";
private const string MANIFEST_PERMISSION = "uses-permission";
private const string MANIFEST_META_DATA = "meta-data";
private const string IRONSOURCE_MANIFEST_PATH = "IronSource/Plugins/Android/IronSource.plugin/AndroidManifest.xml";
private const string IRONSOURCE_MANIFEST_PATH = "IronSource/Plugins/Android/IronSource.androidlib/AndroidManifest.xml";
private string manifestPath = "";
private XNamespace ns = "http://schemas.android.com/apk/res/android";

View File

@ -1,8 +1,8 @@
<dependencies>
<unityversion>7.3.0.1</unityversion>
<unityversion>7.5.1</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource.sdk:mediationsdk:7.3.0.1">
<androidPackage spec="com.ironsource.sdk:mediationsdk:7.5.1">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
@ -26,7 +26,7 @@
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceSDK" version="7.3.0.0">
<iosPod name="IronSourceSDK" version="7.5.0.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 6ee27eb8be2558e4482bcaa12bbd4781
guid: 78bb03eee4d26fb4da4755f7e6529784
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -0,0 +1,28 @@
fileFormatVersion: 2
guid: 718f851be2f4c4ee9b4c748b225a7ea2
folderAsset: yes
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 0
settings:
DefaultValueInitialized: true
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ironsource.unity">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
<!-- AdMob -->
<!--As Requiered By Admob please add your App ID-->
<!--<meta-data-->
<!--android:name="com.google.android.gms.ads.APPLICATION_ID"-->
<!--android:value="YOUR_ADMOB_APP_ID"/>-->
</application>
</manifest>

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 43f2c8ee7c4303948bbd5f896c515318
guid: e46e3d39a8bec48d9ae81d0008842ad4
DefaultImporter:
externalObjects: {}
userData:

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c104a6ee5617fb048acdd3b2f1cbc512
guid: a5936d92d17be4fde864e068dd13d202
folderAsset: yes
DefaultImporter:
externalObjects: {}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: cbe75846a2b4da1459371181319ce8e3
guid: f10a601320ff74e1e96ecfd77be278c5
PluginImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -0,0 +1,2 @@
target=android-9
android.library=true

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: f6d91e910c9af49d7a1d0254340e9dca
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,22 @@
using System;
/// <summary>
/// Represents the available formats for displaying advertisements.
/// </summary>
public enum AdFormat
{
/// <summary>
/// Represents a rewarded video ad format.
/// </summary>
RewardedVideo,
/// <summary>
/// Represents an interstitial ad format.
/// </summary>
Interstitial,
/// <summary>
/// Represents a banner ad format.
/// </summary>
Banner
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 08e1a7bef35354a1883fab85829a4273
guid: 8124546645b9349f7858c4510ea7de78
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -2,15 +2,20 @@
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System;
public class AndroidAgent : IronSourceIAgent
{
private static AndroidJavaObject _androidBridge;
private readonly static string AndroidBridge = "com.ironsource.unity.androidbridge.AndroidBridge";
private const string REWARD_AMOUNT = "reward_amount";
private const string REWARD_NAME = "reward_name";
private const string PLACEMENT_NAME = "placement_name";
static AndroidJavaObject _androidBridge;
readonly static string AndroidBridge = "com.ironsource.unity.androidbridge.AndroidBridge";
const string REWARD_AMOUNT = "reward_amount";
const string REWARD_NAME = "reward_name";
const string PLACEMENT_NAME = "placement_name";
const string WATERFALL_CONFIG_FLOOR = "floor";
const string WATERFALL_CONFIG_CEILING = "ceiling";
const string WATERFALL_CONFIG_API = "setWaterfallConfiguration";
public AndroidAgent ()
{
@ -34,6 +39,48 @@ public class AndroidAgent : IronSourceIAgent
//******************* Base API *******************//
/// <summary>
/// Allows publishers to set configurations for a waterfall of a given ad type.
/// </summary>
/// <param name="waterfallConfiguration">The configuration for the given ad types waterfall. </param>
/// <param name="adFormat">The AdFormat for which to configure the waterfall.</param>
public void SetWaterfallConfiguration(WaterfallConfiguration waterfallConfiguration, AdFormat adFormat)
{
var ceiling = waterfallConfiguration.Ceiling;
var floor = waterfallConfiguration.Floor;
var dict = new Dictionary<string, string>();
if (ceiling.HasValue)
{
dict.Add(WATERFALL_CONFIG_CEILING, ceiling.Value.ToString(CultureInfo.InvariantCulture));
}
if (floor.HasValue)
{
dict.Add(WATERFALL_CONFIG_FLOOR, floor.Value.ToString(CultureInfo.InvariantCulture));
}
var json = IronSourceJSON.Json.Serialize(dict);
string stringAdFormat;
switch (adFormat)
{
case AdFormat.RewardedVideo:
stringAdFormat = "REWARDED_VIDEO";
break;
case AdFormat.Interstitial:
stringAdFormat = "INTERSTITIAL";
break;
case AdFormat.Banner:
stringAdFormat = "BANNER";
break;
default:
return;
}
getBridge().Call(WATERFALL_CONFIG_API, json, stringAdFormat);
}
public void onApplicationPause (bool pause)
{
if (pause)

View File

@ -7,7 +7,7 @@ public class IronSource : IronSourceIAgent
{
private IronSourceIAgent _platformAgent;
private static IronSource _instance;
public static string UNITY_PLUGIN_VERSION = "7.3.0.1-r";
public static string UNITY_PLUGIN_VERSION = "7.5.1-r";
private static bool isUnsupportedPlatform;
private IronSource()
@ -67,6 +67,16 @@ public class IronSource : IronSourceIAgent
//******************* Base API *******************//
/// <summary>
/// Allows publishers to set configurations for a waterfall of a given ad type.
/// </summary>
/// <param name="waterfallConfiguration">The configuration for the given ad types waterfall. </param>
/// <param name="adFormat">The AdFormat for which to configure the waterfall.</param>
public void SetWaterfallConfiguration(WaterfallConfiguration waterfallConfiguration, AdFormat adFormat)
{
_platformAgent.SetWaterfallConfiguration(waterfallConfiguration, adFormat);
}
public void onApplicationPause(bool pause)
{
_platformAgent.onApplicationPause(pause);
@ -256,21 +266,25 @@ public class IronSource : IronSourceIAgent
//******************* Offerwall API *******************//
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public void showOfferwall()
{
_platformAgent.showOfferwall();
}
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public void showOfferwall(string placementName)
{
_platformAgent.showOfferwall(placementName);
}
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public void getOfferwallCredits()
{
_platformAgent.getOfferwallCredits();
}
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public bool isOfferwallAvailable()
{
return _platformAgent.isOfferwallAvailable();

View File

@ -83,11 +83,17 @@ public class IronSourceEvents : MonoBehaviour
[Obsolete("This API has been deprecated as of SDK 7.3.0.1", false)]
public static event Action<string, IronSourceError> onInterstitialAdShowFailedDemandOnlyEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<bool> onOfferwallAvailableEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action onOfferwallOpenedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<Dictionary<string, object>> onOfferwallAdCreditedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<IronSourceError> onGetOfferwallCreditsFailedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action onOfferwallClosedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<IronSourceError> onOfferwallShowFailedEvent;
[Obsolete("This API has been deprecated as of SDK 7.3.0. Please use the alternate API in IronSourceBannerEvents listener instead.", false)]
@ -1643,6 +1649,7 @@ public class IronSourceEvents : MonoBehaviour
private static event Action _onOfferwallOpenedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action onOfferwallOpenedEvent
{
add
@ -1672,6 +1679,7 @@ public class IronSourceEvents : MonoBehaviour
private static event Action<IronSourceError> _onOfferwallShowFailedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<IronSourceError> onOfferwallShowFailedEvent
{
add
@ -1702,6 +1710,7 @@ public class IronSourceEvents : MonoBehaviour
private static event Action _onOfferwallClosedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action onOfferwallClosedEvent
{
add
@ -1731,6 +1740,7 @@ public class IronSourceEvents : MonoBehaviour
private static event Action<IronSourceError> _onGetOfferwallCreditsFailedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<IronSourceError> onGetOfferwallCreditsFailedEvent
{
add
@ -1762,6 +1772,7 @@ public class IronSourceEvents : MonoBehaviour
private static event Action<Dictionary<string, object>> _onOfferwallAdCreditedEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<Dictionary<string, object>> onOfferwallAdCreditedEvent
{
add
@ -1789,6 +1800,7 @@ public class IronSourceEvents : MonoBehaviour
private static event Action<bool> _onOfferwallAvailableEvent;
[Obsolete("This API call is for the ironSource Offerwall, which will soon be deprecated. Please migrate to the Tapjoy Offerwall using the 'Offerwall migration checklist'.", false)]
public static event Action<bool> onOfferwallAvailableEvent
{
add

View File

@ -4,6 +4,13 @@ public interface IronSourceIAgent
{
//******************* Base API *******************//
/// <summary>
/// Allows publishers to set configurations for a waterfall of a given ad type.
/// </summary>
/// <param name="waterfallConfiguration">The configuration for the given ad types waterfall. </param>
/// <param name="adFormat">The AdFormat for which to configure the waterfall.</param>
void SetWaterfallConfiguration(WaterfallConfiguration waterfallConfiguration, AdFormat adFormat);
void onApplicationPause(bool pause);
string getAdvertiserId();

View File

@ -11,6 +11,15 @@ public class UnsupportedPlatformAgent : IronSourceIAgent
#region IronSourceAgent implementation
/// <summary>
/// This function is not supported on the current platform and does nothing.
/// </summary>
/// <param name="waterfallConfiguration">The configuration for the given ad types waterfall. </param>
/// <param name="adFormat">The AdFormat for which to configure the waterfall.</param>
public void SetWaterfallConfiguration(WaterfallConfiguration waterfallConfiguration, AdFormat adFormat)
{
}
public void start()
{
}

View File

@ -0,0 +1,92 @@
using System.Collections.Generic;
using System;
/// <summary>
/// Configuration class which allows users to customize or filter a Waterfall.
/// </summary>
public class WaterfallConfiguration
{
readonly double? ceiling;
readonly double? floor;
/// <summary>
/// Gets the ceiling value.
/// </summary>
public double? Ceiling { get { return ceiling; } }
/// <summary>
/// Gets the floor value.
/// </summary>
public double? Floor { get { return floor; } }
/// <summary>
/// Initializes a new instance of the WaterfallConfiguration class.
/// </summary>
/// <param name="ceiling">The ceiling value.</param>
/// <param name="floor">The floor value.</param>
private WaterfallConfiguration(double? ceiling, double? floor)
{
this.ceiling = ceiling;
this.floor = floor;
}
/// <summary>
/// Gets a builder for creating instances of WaterfallConfiguration.
/// </summary>
/// <returns>The WaterfallConfigurationBuilder.</returns>
public static WaterfallConfigurationBuilder Builder()
{
return new WaterfallConfigurationBuilder();
}
/// <summary>
/// Creates an empty instance of WaterfallConfiguration.
/// </summary>
/// <returns>The empty WaterfallConfiguration.</returns>
public static WaterfallConfiguration Empty()
{
return new WaterfallConfiguration(double.NaN, double.NaN);
}
/// <summary>
/// Builder class which to create a WaterfallConfiguration.
/// </summary>
public class WaterfallConfigurationBuilder
{
double? ceiling;
double? floor;
internal WaterfallConfigurationBuilder() {}
/// <summary>
/// Sets the ceiling value.
/// </summary>
/// <param name="ceiling">The ceiling value.</param>
/// <returns>The WaterfallConfigurationBuilder.</returns>
public WaterfallConfigurationBuilder SetCeiling(double ceiling)
{
this.ceiling = ceiling;
return this;
}
/// <summary>
/// Sets the floor value.
/// </summary>
/// <param name="floor">The floor value.</param>
/// <returns>The WaterfallConfigurationBuilder.</returns>
public WaterfallConfigurationBuilder SetFloor(double floor)
{
this.floor = floor;
return this;
}
/// <summary>
/// Builds an instance of WaterfallConfiguration based on the configured values.
/// </summary>
/// <returns>The created WaterfallConfiguration.</returns>
public WaterfallConfiguration Build()
{
return new WaterfallConfiguration(ceiling, floor);
}
}
}

View File

@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: c70eb41427c4848d391fa9e66f60daf3
guid: 354652886a99945cba942b569effe7bb
MonoImporter:
externalObjects: {}
serializedVersion: 2

View File

@ -1,14 +1,23 @@
#if UNITY_IPHONE || UNITY_IOS
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Linq;
using System;
using System.Globalization;
// public class iOSAgent : IronSourceIAgent
// {
// struct IOSWaterfallConfiguration
// {
// public double Floor;
// public double Ceiling;
// }
// [DllImport("__Internal")]
// private static extern void LPPSetWaterfallConfiguration(IOSWaterfallConfiguration configurationParams, AdFormat adFormat);
// [DllImport("__Internal")]
// private static extern void CFSetPluginData(string pluginType, string pluginVersion, string pluginFrameworkVersion);
@ -191,6 +200,22 @@ using System.Globalization;
// //******************* Base API *******************//
// /// <summary>
// /// Allows publishers to set configurations for a waterfall of a given ad type.
// /// </summary>
// /// <param name="adFormat">The AdFormat for which to configure the waterfall.</param>
// /// <param name="waterfallConfiguration">The configuration for the given ad types waterfall. </param>
// public void SetWaterfallConfiguration(WaterfallConfiguration waterfallConfiguration, AdFormat adFormat)
// {
// var config = new IOSWaterfallConfiguration
// {
// Floor = waterfallConfiguration.Floor ?? 0.0,
// Ceiling = waterfallConfiguration.Ceiling ?? 0.0
// };
// LPPSetWaterfallConfiguration(config, adFormat);
// }
// public void onApplicationPause(bool pause)
// {

View File

@ -1,36 +0,0 @@
<dependencies>
<unityversion>7.13.0</unityversion>
<androidPackages>
<androidPackage spec="com.ironsource:adqualitysdk:7.13.0">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<androidPackages>
<androidPackage spec="com.ironsource.unity:adqualitysdk:7.13.0">
<repositories>
<repository>https://android-sdk.is.com/</repository>
</repositories>
</androidPackage>
</androidPackages>
<!-- <iosPods>
<iosPod name="IronSourceAdQualitySDK" version="7.13.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>
</iosPod>
</iosPods>
<iosPods>
<iosPod name="IronSourceAdQualityUnityBridge" version="7.13.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>
</iosPod>
</iosPods> -->
</dependencies>

View File

@ -1,6 +0,0 @@
using System;
public enum ISAdQualityDeviceIdType {
NONE = 0,
GAID = 1,
IDFA = 2
};

View File

@ -1,16 +0,0 @@
using System;
public enum ISAdQualityAdType {
UNKNOWN = -1,
RICH_MEDIA = 0,
INTERSTITIAL = 1,
APP_WALL = 2,
VIDEO = 3,
REWARDED_VIDEO = 4,
NATIVE = 5,
BANNER = 6,
OFFER_WALL = 7,
NATIVE_HTML = 8,
EXTERNAL = 9,
REWARDED = 10,
INTERACTIVE = 11
};

View File

@ -1,53 +0,0 @@
#if UNITY_ANDROID
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Scripting;
[Preserve]
public class ISAdQualityAndroidInitHandler : AndroidJavaProxy
{
private const string IRON_SOURCE_AD_QUALITY_CLASS = "com.ironsource.adqualitysdk.sdk.unity.IronSourceAdQuality";
private const string UNITY_IS_AD_QUALITY_INIT_LISTENER = "com.ironsource.adqualitysdk.sdk.unity.UnityISAdQualityInitListener";
public event Action OnAdQualitySdkInitSuccess = delegate { };
public event Action<ISAdQualityInitError, string> OnAdQualitySdkInitFailed = delegate { };
//implements UnityISAdQualityInitListener java interface
public ISAdQualityAndroidInitHandler(): base(UNITY_IS_AD_QUALITY_INIT_LISTENER)
{
#if !UNITY_EDITOR
try
{
using (var jniAdQualityClass = new AndroidJavaClass(IRON_SOURCE_AD_QUALITY_CLASS))
{
jniAdQualityClass.CallStatic("setUnityISAdQualityInitListener", this);
}
}
catch(Exception e)
{
Debug.LogError("setUnityISAdQualityInitListener method doesn't exist, error: " + e.Message);
}
#endif
}
[Preserve]
public void adQualitySdkInitSuccess()
{
if (this.OnAdQualitySdkInitSuccess != null)
{
this.OnAdQualitySdkInitSuccess();
}
}
[Preserve]
public void adQualitySdkInitFailed(int adQualitySdkInitError, string errorMessage)
{
if (this.OnAdQualitySdkInitFailed != null)
{
this.OnAdQualitySdkInitFailed((ISAdQualityInitError)adQualitySdkInitError, errorMessage);
}
}
}
#endif

View File

@ -1,118 +0,0 @@
using System;
using UnityEngine;
public class ISAdQualityConfig
{
private String userId;
private bool userIdSet;
private bool testMode;
private ISAdQualityInitCallback adQualityInitCallback;
private ISAdQualityLogLevel logLevel;
private String initializationSource;
private bool coppa;
private ISAdQualityDeviceIdType deviceIdType;
public ISAdQualityConfig()
{
userId = null;
testMode = false;
userIdSet = false;
logLevel = ISAdQualityLogLevel.INFO;
coppa = false;
deviceIdType = ISAdQualityDeviceIdType.NONE;
initializationSource = null;
}
public String UserId
{
get
{
return userId;
}
set
{
userIdSet = true;
userId = value;
}
}
internal bool UserIdSet
{
get
{
return userIdSet;
}
}
public bool TestMode
{
get
{
return testMode;
}
set
{
testMode = value;
}
}
public ISAdQualityLogLevel LogLevel
{
get
{
return logLevel;
}
set
{
logLevel = value;
}
}
public ISAdQualityInitCallback AdQualityInitCallback
{
get
{
return adQualityInitCallback;
}
set
{
adQualityInitCallback = value;
}
}
public String InitializationSource
{
get
{
return initializationSource;
}
set
{
initializationSource = value;
}
}
public bool Coppa
{
get
{
return coppa;
}
set
{
coppa = value;
}
}
public ISAdQualityDeviceIdType DeviceIdType
{
get
{
return deviceIdType;
}
set
{
deviceIdType = value;
}
}
}

View File

@ -1,66 +0,0 @@
using System;
using UnityEngine;
public class ISAdQualityCustomMediationRevenue
{
private ISAdQualityMediationNetwork mediationNetwork;
private ISAdQualityAdType adType;
private double revenue;
private String placement;
public ISAdQualityCustomMediationRevenue()
{
mediationNetwork = ISAdQualityMediationNetwork.UNKNOWN;
adType = ISAdQualityAdType.UNKNOWN;
revenue = 0;
placement = null;
}
public ISAdQualityMediationNetwork MediationNetwork
{
get
{
return mediationNetwork;
}
set
{
mediationNetwork = value;
}
}
public ISAdQualityAdType AdType
{
get
{
return adType;
}
set
{
adType = value;
}
}
public double Revenue
{
get
{
return revenue;
}
set
{
revenue = value;
}
}
public String Placement
{
get
{
return placement;
}
set
{
placement = value;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 8bb7937cdf9c640cf8ee92ed1fa34227
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
using System;
using UnityEngine;
public interface ISAdQualityInitCallback
{
void adQualitySdkInitSuccess();
void adQualitySdkInitFailed(ISAdQualityInitError adQualityInitError, string errorMessage);
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 894fc956cbe6c43e385333baa4651e56
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,88 +0,0 @@
using UnityEngine;
using System;
public class ISAdQualityInitCallbackWrapper : MonoBehaviour
{
private ISAdQualityInitCallback mCallback;
#if UNITY_ANDROID
private ISAdQualityAndroidInitHandler adQualityAndroidInitHandler;
#endif
#if UNITY_IPHONE || UNITY_IOS
// private ISAdQualityiOSInitHandler adQualityiOSInitHandler;
#endif
public ISAdQualityInitCallback AdQualityInitCallback
{
set
{
mCallback = value;
}
get
{
return mCallback;
}
}
void Awake ()
{
#if UNITY_ANDROID
adQualityAndroidInitHandler = new ISAdQualityAndroidInitHandler(); //sets this.adQualityAndroidInitHandler as listener for init events on the bridge
registerAdQualityAndroidInitEvents();
#endif
#if UNITY_IPHONE || UNITY_IOS
// registerAdQualityiOSInitEvents();
// adQualityiOSInitHandler = new ISAdQualityiOSInitHandler(); //sets this.adQualityiOSInit as listener for init events on the bridge
#endif
DontDestroyOnLoad(gameObject); //Makes the object not be destroyed automatically when loading a new scene.
}
private void adQualitySdkInitSuccess()
{
if (mCallback != null)
{
mCallback.adQualitySdkInitSuccess();
}
}
private void onAdQualitySdkInitFailed(ISAdQualityInitError sdkInitError, string errorMsg)
{
if (mCallback != null)
{
mCallback.adQualitySdkInitFailed(sdkInitError, errorMsg);
}
}
#if UNITY_ANDROID
//subscribe to ISAdQualityAndroidInitHandler events
private void registerAdQualityAndroidInitEvents() {
adQualityAndroidInitHandler.OnAdQualitySdkInitSuccess += () =>
{
adQualitySdkInitSuccess();
};
adQualityAndroidInitHandler.OnAdQualitySdkInitFailed += (sdkInitError, errorMsg) =>
{
onAdQualitySdkInitFailed(sdkInitError, errorMsg);
};
}
#endif
#if UNITY_IPHONE || UNITY_IOS
//subscribe to ISAdQualityiOSInitHandler events
// private void registerAdQualityiOSInitEvents() {
// ISAdQualityiOSInitHandler.OnAdQualitySdkInitSuccess += () =>
// {
// adQualitySdkInitSuccess();
// };
// ISAdQualityiOSInitHandler.OnAdQualitySdkInitFailed += (sdkInitError, errorMsg) =>
// {
// onAdQualitySdkInitFailed(sdkInitError, errorMsg);
// };
// }
#endif
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1f5c838c5a8ff40529569d29728deec4
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,14 +0,0 @@
using System;
public enum ISAdQualityInitError {
AD_QUALITY_SDK_WAS_SHUTDOWN = 0,
ILLEGAL_USER_ID = 1,
ILLEGAL_APP_KEY = 2,
EXCEPTION_ON_INIT = 3,
NO_NETWORK_CONNECTION = 4,
CONFIG_LOAD_TIMEOUT = 5,
CONNECTOR_LOAD_TIMEOUT = 6,
AD_NETWORK_VERSION_NOT_SUPPORTED_YET = 7,
AD_NETWORK_SDK_REQUIRES_NEWER_AD_QUALITY_SDK = 8,
AD_QUALITY_ALREADY_INITIALIZED = 9
};

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 6da8d8e07e45042f197fc5f6304a9d62
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,495 +0,0 @@
/*
* Based on the miniJSON by Calvin Rien
*/
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
namespace ISAdQualityJSON
{
public static class Json
{
public static object Deserialize (string json)
{
if (json == null) {
return null;
}
return Parser.Parse (json);
}
sealed class Parser : IDisposable
{
const string WHITE_SPACE = " \t\n\r";
const string WORD_BREAK = " \t\n\r{}[],:\"";
enum TOKEN
{
NONE,
CURLY_OPEN,
CURLY_CLOSE,
SQUARED_OPEN,
SQUARED_CLOSE,
COLON,
COMMA,
STRING,
NUMBER,
TRUE,
FALSE,
NULL
}
;
StringReader json;
Parser (string jsonString)
{
json = new StringReader (jsonString);
}
public static object Parse (string jsonString)
{
using (var instance = new Parser(jsonString)) {
return instance.ParseValue ();
}
}
public void Dispose ()
{
json.Dispose ();
json = null;
}
Dictionary<string, object> ParseObject ()
{
Dictionary<string, object> table = new Dictionary<string, object> ();
// ditch opening brace
json.Read ();
// {
while (true) {
switch (NextToken) {
case TOKEN.NONE:
return null;
case TOKEN.COMMA:
continue;
case TOKEN.CURLY_CLOSE:
return table;
default:
// name
string name = ParseString ();
if (name == null) {
return null;
}
// :
if (NextToken != TOKEN.COLON) {
return null;
}
// ditch the colon
json.Read ();
// value
table [name] = ParseValue ();
break;
}
}
}
List<object> ParseArray ()
{
List<object> array = new List<object> ();
// ditch opening bracket
json.Read ();
// [
var parsing = true;
while (parsing) {
TOKEN nextToken = NextToken;
switch (nextToken) {
case TOKEN.NONE:
return null;
case TOKEN.COMMA:
continue;
case TOKEN.SQUARED_CLOSE:
parsing = false;
break;
default:
object value = ParseByToken (nextToken);
array.Add (value);
break;
}
}
return array;
}
object ParseValue ()
{
TOKEN nextToken = NextToken;
return ParseByToken (nextToken);
}
object ParseByToken (TOKEN token)
{
switch (token) {
case TOKEN.STRING:
return ParseString ();
case TOKEN.NUMBER:
return ParseNumber ();
case TOKEN.CURLY_OPEN:
return ParseObject ();
case TOKEN.SQUARED_OPEN:
return ParseArray ();
case TOKEN.TRUE:
return true;
case TOKEN.FALSE:
return false;
case TOKEN.NULL:
return null;
default:
return null;
}
}
string ParseString ()
{
StringBuilder s = new StringBuilder ();
char c;
// ditch opening quote
json.Read ();
bool parsing = true;
while (parsing) {
if (json.Peek () == -1) {
parsing = false;
break;
}
c = NextChar;
switch (c) {
case '"':
parsing = false;
break;
case '\\':
if (json.Peek () == -1) {
parsing = false;
break;
}
c = NextChar;
switch (c) {
case '"':
case '\\':
case '/':
s.Append (c);
break;
case 'b':
s.Append ('\b');
break;
case 'f':
s.Append ('\f');
break;
case 'n':
s.Append ('\n');
break;
case 'r':
s.Append ('\r');
break;
case 't':
s.Append ('\t');
break;
case 'u':
var hex = new StringBuilder ();
for (int i=0; i< 4; i++) {
hex.Append (NextChar);
}
s.Append ((char)Convert.ToInt32 (hex.ToString (), 16));
break;
}
break;
default:
s.Append (c);
break;
}
}
return s.ToString ();
}
object ParseNumber ()
{
string number = NextWord;
if (number.IndexOf ('.') == -1) {
long parsedInt;
Int64.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedInt);
return parsedInt;
}
double parsedDouble;
Double.TryParse (number, NumberStyles.Any, CultureInfo.InvariantCulture, out parsedDouble);
return parsedDouble;
}
void EatWhitespace ()
{
while (WHITE_SPACE.IndexOf(PeekChar) != -1) {
json.Read ();
if (json.Peek () == -1) {
break;
}
}
}
char PeekChar {
get {
return Convert.ToChar (json.Peek ());
}
}
char NextChar {
get {
return Convert.ToChar (json.Read ());
}
}
string NextWord {
get {
StringBuilder word = new StringBuilder ();
while (WORD_BREAK.IndexOf(PeekChar) == -1) {
word.Append (NextChar);
if (json.Peek () == -1) {
break;
}
}
return word.ToString ();
}
}
TOKEN NextToken {
get {
EatWhitespace ();
if (json.Peek () == -1) {
return TOKEN.NONE;
}
char c = PeekChar;
switch (c) {
case '{':
return TOKEN.CURLY_OPEN;
case '}':
json.Read ();
return TOKEN.CURLY_CLOSE;
case '[':
return TOKEN.SQUARED_OPEN;
case ']':
json.Read ();
return TOKEN.SQUARED_CLOSE;
case ',':
json.Read ();
return TOKEN.COMMA;
case '"':
return TOKEN.STRING;
case ':':
return TOKEN.COLON;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
case '-':
return TOKEN.NUMBER;
}
string word = NextWord;
switch (word) {
case "false":
return TOKEN.FALSE;
case "true":
return TOKEN.TRUE;
case "null":
return TOKEN.NULL;
}
return TOKEN.NONE;
}
}
}
/// <summary>
/// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string
/// </summary>
/// <param name="json">A Dictionary&lt;string, object&gt; / List&lt;object&gt;</param>
/// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns>
public static string Serialize (object obj)
{
return Serializer.Serialize (obj);
}
sealed class Serializer
{
StringBuilder builder;
Serializer ()
{
builder = new StringBuilder ();
}
public static string Serialize (object obj)
{
var instance = new Serializer ();
instance.SerializeValue (obj);
return instance.builder.ToString ();
}
void SerializeValue (object value)
{
IList asList;
IDictionary asDict;
string asStr;
if (value == null) {
builder.Append ("null");
} else if ((asStr = value as string) != null) {
SerializeString (asStr);
} else if (value is bool) {
builder.Append (value.ToString ().ToLower ());
} else if ((asList = value as IList) != null) {
SerializeArray (asList);
} else if ((asDict = value as IDictionary) != null) {
SerializeObject (asDict);
} else if (value is char) {
SerializeString (value.ToString ());
} else {
SerializeOther (value);
}
}
void SerializeObject (IDictionary obj)
{
bool first = true;
builder.Append ('{');
foreach (object e in obj.Keys) {
if (!first) {
builder.Append (',');
}
SerializeString (e.ToString ());
builder.Append (':');
SerializeValue (obj [e]);
first = false;
}
builder.Append ('}');
}
void SerializeArray (IList anArray)
{
builder.Append ('[');
bool first = true;
foreach (object obj in anArray) {
if (!first) {
builder.Append (',');
}
SerializeValue (obj);
first = false;
}
builder.Append (']');
}
void SerializeString (string str)
{
builder.Append ('\"');
char[] charArray = str.ToCharArray ();
foreach (var c in charArray) {
switch (c) {
case '"':
builder.Append ("\\\"");
break;
case '\\':
builder.Append ("\\\\");
break;
case '\b':
builder.Append ("\\b");
break;
case '\f':
builder.Append ("\\f");
break;
case '\n':
builder.Append ("\\n");
break;
case '\r':
builder.Append ("\\r");
break;
case '\t':
builder.Append ("\\t");
break;
default:
int codepoint = Convert.ToInt32 (c);
if ((codepoint >= 32) && (codepoint <= 126)) {
builder.Append (c);
} else {
builder.Append ("\\u" + Convert.ToString (codepoint, 16).PadLeft (4, '0'));
}
break;
}
}
builder.Append ('\"');
}
void SerializeOther (object value)
{
if (value is float
|| value is int
|| value is uint
|| value is long
|| value is double
|| value is sbyte
|| value is byte
|| value is short
|| value is ushort
|| value is ulong
|| value is decimal) {
builder.Append (value.ToString ());
} else {
SerializeString (value.ToString ());
}
}
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a80f212ad97ca4136b919689ba6ad522
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,9 +0,0 @@
using System;
public enum ISAdQualityLogLevel {
NONE = 0,
ERROR = 1,
WARNING = 2,
INFO = 3,
DEBUG = 4,
VERBOSE = 5
};

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: c958a1a9721494cefb50a4fad4b6bb8b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,12 +0,0 @@
using System;
public enum ISAdQualityMediationNetwork {
UNKNOWN = -1,
ADMOB = 0,
DT_FAIR_BID = 1,
HELIUM = 2,
LEVEL_PLAY = 3,
MAX = 4,
UNITY = 5,
SELF_MEDIATED = 6,
OTHER = 7
};

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b1c44dbefc86f46d7a84660f64b9ba47
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,66 +0,0 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
public class ISAdQualitySegment
{
public string name = null;
public int age;
public string gender = null;
public int level;
public int isPaying;
public double inAppPurchasesTotal;
public long userCreationDate;
public Dictionary<string,string> customs;
public ISAdQualitySegment ()
{
age = -1;
level = -1;
isPaying = -1;
inAppPurchasesTotal = -1;
userCreationDate = -1;
customs = new Dictionary<string,string> ();
}
public void setCustom(string key, string value){
customs.Add (key, value);
}
public Dictionary<string,string> getSegmentAsDict ()
{
Dictionary<string,string> dict = new Dictionary<string,string> ();
if (!string.IsNullOrEmpty(name))
{
dict.Add ("name", name);
}
if (age != -1)
{
dict.Add ("age", age + "");
}
if (!string.IsNullOrEmpty(gender))
{
dict.Add ("gender", gender);
}
if (level != -1)
{
dict.Add ("level", level + "");
}
if (isPaying > -1 && isPaying < 2)
{
dict.Add ("isPaying", isPaying + "");
}
if (inAppPurchasesTotal > -1)
{
dict.Add ("iapt", inAppPurchasesTotal + "");
}
if (userCreationDate != -1)
{
dict.Add ("userCreationDate", userCreationDate + "");
}
Dictionary<string,string> result = dict.Concat(customs).GroupBy(d => d.Key).ToDictionary(d => d.Key, d => d.First().Value);
return result;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: bbf07b143b428454a85a0dccbb3bd7b0
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,57 +0,0 @@
using UnityEngine;
using System.Collections.Generic;
using System;
public static class ISAdQualityUtils {
private static bool isDebugBuild = false;
private static bool isDebugBuildSet = false;
/// <summary>
/// Creates Log Debug message according to given tag and message.
/// </summary>
/// <param name="tag">The name of the class whose instance called this function.</param>
/// <param name="message">Debug message to output to log.</param>
public static void LogDebug(string tag, string message)
{
if (!isDebugBuildSet)
{
try //Debug.isDebugBuild can fail on WP8 if it is not called from the Main Thread
{
isDebugBuild = Debug.isDebugBuild;
}
catch (Exception e)
{
isDebugBuild = true;
Debug.Log(string.Format("{0} {1}", tag, e.Message));
}
isDebugBuildSet = true;
}
if (isDebugBuild)
{
Debug.Log(string.Format("{0} {1}", tag, message));
}
}
/// <summary>
/// Creates Log Error message according to given tag and message.
/// </summary>
/// <param name="tag">The name of the class whose instance called this function..</param>
/// <param name="message">Error message to output to log.</param>
public static void LogError(string tag, string message) {
Debug.LogError(string.Format("{0} {1}", tag, message));
}
public static void LogWarning(string tag, string message) {
Debug.LogWarning(string.Format("{0} {1}", tag, message));
}
/// <summary>
/// Returns the class name to be used in serialization/deserialization process
/// </summary>
/// <param name="target">The target to get class name for</param>
/// <returns>The class name of the provided instance</returns>
public static string GetClassName(object target) {
return target.GetType().Name;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ae84ef4134f7e4290bd18d994cd71a5b
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,67 +0,0 @@
// #if UNITY_IPHONE || UNITY_IOS
// using System;
// using System.Collections.Generic;
// using System.Runtime.InteropServices;
// using UnityEngine;
// public class ISAdQualityiOSInitHandler : MonoBehaviour
// {
// public static event Action OnAdQualitySdkInitSuccess = delegate { };
// public static event Action<ISAdQualityInitError, string> OnAdQualitySdkInitFailed = delegate { };
// #if UNITY_IOS && !UNITY_EDITOR
// delegate void ISAdQualityUnityInitSuccessCallback(string args);
// [DllImport("__Internal")]
// private static extern int ironSourceAdQuality_registerInitSuccessCallback(ISAdQualityUnityInitSuccessCallback func);
// delegate void ISAdQualityUnityInitFailedCallback(string args);
// [DllImport("__Internal")]
// private static extern void ironSourceAdQuality_registerInitFailedCallback(ISAdQualityUnityInitFailedCallback func);
// public ISAdQualityiOSInitHandler()
// {
// ironSourceAdQuality_registerInitSuccessCallback(fireInitSuccessCallback);
// ironSourceAdQuality_registerInitFailedCallback(fireInitFailedCallback);
// }
// [AOT.MonoPInvokeCallback(typeof(ISAdQualityUnityInitSuccessCallback))]
// public static void fireInitSuccessCallback(string message)
// {
// if (OnAdQualitySdkInitSuccess != null)
// {
// OnAdQualitySdkInitSuccess();
// }
// }
// [AOT.MonoPInvokeCallback(typeof(ISAdQualityUnityInitFailedCallback))]
// public static void fireInitFailedCallback(string message)
// {
// if (OnAdQualitySdkInitFailed != null)
// {
// ISAdQualityInitError sdkInitError = ISAdQualityInitError.EXCEPTION_ON_INIT;
// string errorMsg = String.Empty;
// try
// {
// if (!String.IsNullOrEmpty(message))
// {
// string[] separators = { "Unity:" };
// string[] splitArray = message.Split(separators, System.StringSplitOptions.RemoveEmptyEntries);
// if (splitArray.Length > 1)
// {
// sdkInitError = (ISAdQualityInitError)Enum.Parse(typeof(ISAdQualityInitError), splitArray[0]);
// errorMsg = splitArray[1];
// }
// }
// }
// catch (Exception e)
// {
// errorMsg = e.Message;
// }
// OnAdQualitySdkInitFailed(sdkInitError, errorMsg);
// }
// }
// #endif
// }
// #endif

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: a21b72b3702244ccaa9227784e3fc6f3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,157 +0,0 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
using ISAdQualityJSON;
public class IronSourceAdQuality : CodeGeneratedSingleton
{
private static GameObject adQualityGameObject = new GameObject("IronSourceAdQuality");
#if UNITY_IOS && !UNITY_EDITOR
// [DllImport ("__Internal")]
// private static extern int ironSourceAdQuality_initialize(string appKey, string userId, bool userIdSet, bool testMode,
// bool debug, int logLevel, string initializationSource, bool coppa,
// int deviceIdType, bool isInitCallbackSet);
// [DllImport ("__Internal")]
// private static extern int ironSourceAdQuality_changeUserId(string userId);
// [DllImport ("__Internal")]
// private static extern int ironSourceAdQuality_setUserConsent(bool userConsent);
// [DllImport ("__Internal")]
// private static extern int ironSourceAdQuality_sendCustomMediationRevenue(int mediationNetwork, int adType, string placement, double revenue);
// [DllImport ("__Internal")]
// private static extern int ironSourceAdQuality_setSegment(string jsonString);
#endif
protected override bool DontDestroySingleton { get { return true; } }
protected override void InitAfterRegisteringAsSingleInstance() {
base.InitAfterRegisteringAsSingleInstance();
}
public static void Initialize(string appKey) {
Initialize(appKey, new ISAdQualityConfig());
}
public static void Initialize(string appKey, ISAdQualityConfig adQualityConfig) {
if (adQualityConfig == null) {
adQualityConfig = new ISAdQualityConfig();
}
Initialize(appKey,
adQualityConfig.UserId,
adQualityConfig.UserIdSet,
adQualityConfig.TestMode,
adQualityConfig.LogLevel,
adQualityConfig.InitializationSource,
adQualityConfig.Coppa,
adQualityConfig.DeviceIdType,
adQualityConfig.AdQualityInitCallback);
}
private static void Initialize(string appKey,
string userId,
bool userIdSet,
bool testMode,
ISAdQualityLogLevel logLevel,
string initializationSource,
bool coppa,
ISAdQualityDeviceIdType deviceIdType,
ISAdQualityInitCallback adQualityInitCallback) {
#if !UNITY_EDITOR
GetSynchronousCodeGeneratedInstance<IronSourceAdQuality>();
ISAdQualityInitCallbackWrapper initCallbackWrapper = adQualityGameObject.GetComponent<ISAdQualityInitCallbackWrapper>();
if (initCallbackWrapper == null) {
initCallbackWrapper = adQualityGameObject.AddComponent<ISAdQualityInitCallbackWrapper>();
}
initCallbackWrapper.AdQualityInitCallback = adQualityInitCallback;
bool isInitCallbackSet = (adQualityInitCallback != null);
#if UNITY_ANDROID
AndroidJNI.PushLocalFrame(100);
AndroidJNI.PopLocalFrame(IntPtr.Zero);
#endif
#if UNITY_ANDROID
AndroidJNI.PushLocalFrame(100);
using(AndroidJavaClass jniAdQualityClass = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.unity.IronSourceAdQuality")) {
AndroidJavaClass jLogLevelEnum = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.ISAdQualityLogLevel");
AndroidJavaObject jLogLevel = jLogLevelEnum.CallStatic<AndroidJavaObject>("fromInt", (int)logLevel);
AndroidJavaClass jDeviceIdTypeEnum = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.ISAdQualityDeviceIdType");
AndroidJavaObject jDeviceIdType = jDeviceIdTypeEnum.CallStatic<AndroidJavaObject>("fromInt", (int)deviceIdType);
jniAdQualityClass.CallStatic("initialize", appKey, userId, userIdSet, testMode, jLogLevel, initializationSource, coppa, jDeviceIdType, isInitCallbackSet);
}
AndroidJNI.PopLocalFrame(IntPtr.Zero);
#elif UNITY_IOS
// ironSourceAdQuality_initialize(appKey, userId, userIdSet ,testMode, DEBUG, (int)logLevel, initializationSource, coppa, (int)deviceIdType, isInitCallbackSet);
#endif
#else
ISAdQualityUtils.LogWarning(TAG, "Ad Quality SDK works only on Android or iOS devices.");
#endif
}
public static void ChangeUserId(String userId) {
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJNI.PushLocalFrame(100);
using(AndroidJavaClass jniAdQualityClass = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.unity.IronSourceAdQuality")) {
jniAdQualityClass.CallStatic("changeUserId", userId);
}
AndroidJNI.PopLocalFrame(IntPtr.Zero);
#elif UNITY_IOS && !UNITY_EDITOR
// ironSourceAdQuality_changeUserId(userId);
#endif
}
[Obsolete("This method has been deprecated and will be removed soon")]
public static void SetUserConsent(bool userConsent) {
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJNI.PushLocalFrame(100);
using(AndroidJavaClass jniAdQualityClass = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.unity.IronSourceAdQuality")) {
jniAdQualityClass.CallStatic("setUserConsent", userConsent);
}
AndroidJNI.PopLocalFrame(IntPtr.Zero);
#elif UNITY_IOS && !UNITY_EDITOR
// ironSourceAdQuality_setUserConsent(userConsent);
#endif
}
public static void SendCustomMediationRevenue(ISAdQualityCustomMediationRevenue customMediationRevenue) {
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJNI.PushLocalFrame(100);
using(AndroidJavaClass jniAdQualityClass = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.unity.IronSourceAdQuality")) {
jniAdQualityClass.CallStatic("sendCustomMediationRevenue",
(int) customMediationRevenue.MediationNetwork,
(int) customMediationRevenue.AdType,
customMediationRevenue.Placement,
customMediationRevenue.Revenue);
}
AndroidJNI.PopLocalFrame(IntPtr.Zero);
#elif UNITY_IOS && !UNITY_EDITOR
// ironSourceAdQuality_sendCustomMediationRevenue((int) customMediationRevenue.MediationNetwork,
// (int) customMediationRevenue.AdType,
// customMediationRevenue.Placement,
// customMediationRevenue.Revenue);
#endif
}
public static void setSegment(ISAdQualitySegment segment) {
Dictionary <string,string> dict = segment.getSegmentAsDict();
string jsonString = ISAdQualityJSON.Json.Serialize(dict);
#if UNITY_ANDROID && !UNITY_EDITOR
AndroidJNI.PushLocalFrame(100);
using(AndroidJavaClass jniAdQualityClass = new AndroidJavaClass("com.ironsource.adqualitysdk.sdk.unity.IronSourceAdQuality")) {
jniAdQualityClass.CallStatic("setSegment", jsonString);
}
AndroidJNI.PopLocalFrame(IntPtr.Zero);
#elif UNITY_IOS && !UNITY_EDITOR
// ironSourceAdQuality_setSegment(jsonString);
#endif
}
private const string TAG = "IronSource AdQuality";
private const bool DEBUG = false;
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 9316531db81604347bb41857c8e7ea43
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 4338140da312a4c6fb1614cd4725933a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,22 +0,0 @@
using UnityEngine;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
#if UNITY_EDITOR
using UnityEditor;
#endif
/// <summary>
/// This class holds the store's configurations.
/// </summary>
public class ISAdQualityEditorScript : ScriptableObject
{
#if UNITY_EDITOR
static string currentModuleVersion = "7.13.0";
#endif
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 5e0d3ac0c6a1f4767826e6a49833d7c3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,208 +0,0 @@
using UnityEngine;
#if UNITY_EDITOR
using UnityEditor;
#endif
using System.IO;
using System.Xml;
using System.Text;
using System.Linq;
using System.Collections.Generic;
public class IronSourceAdQualityManifestTools
{
static string outputFile = Path.Combine(Application.dataPath, "Plugins/Android/AndroidManifest.xml");
public static void GenerateManifest()
{
#if UNITY_EDITOR
// only copy over a fresh copy of the AndroidManifest if one does not exist
if (!File.Exists(outputFile))
{
#if UNITY_4_5 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1
var inputFile = Path.Combine(EditorApplication.applicationContentsPath, "PlaybackEngines/androidplayer/AndroidManifest.xml");
#elif UNITY_5_2
var inputFile = Path.Combine(EditorApplication.applicationContentsPath, "PlaybackEngines/androidplayer/Apk/AndroidManifest.xml");
#else
var inputFile = Path.Combine(EditorApplication.applicationPath, "../PlaybackEngines/androidplayer/Apk/AndroidManifest.xml");
#endif
File.Copy(inputFile, outputFile);
}
UpdateManifest();
#endif
}
private static string _namespace = "";
private static XmlDocument _document = null;
private static XmlNode _manifestNode = null;
private static XmlNode _applicationNode = null;
private static void LoadManifest(){
_document = new XmlDocument();
_document.Load(outputFile);
if (_document == null)
{
Debug.LogError("Couldn't load " + outputFile);
return;
}
_manifestNode = FindChildNode(_document, "manifest");
_namespace = _manifestNode.GetNamespaceOfPrefix("android");
_applicationNode = FindChildNode(_manifestNode, "application");
if (_applicationNode == null) {
Debug.LogError("Error parsing " + outputFile);
return;
}
}
private static void SaveManifest(){
_document.Save(outputFile);
}
public static void UpdateManifest() {
LoadManifest ();
SetPermission("android.permission.INTERNET");
SetPermission("android.permission.ACCESS_NETWORK_STATE");
SaveManifest ();
}
public static void AddActivity(string activityName, Dictionary<string, string> attributes) {
AppendApplicationElement("activity", activityName, attributes);
}
public static void RemoveActivity(string activityName) {
RemoveApplicationElement("activity", activityName);
}
public static void SetPermission(string permissionName) {
PrependManifestElement("uses-permission", permissionName);
}
public static void RemovePermission(string permissionName) {
RemoveManifestElement("uses-permission", permissionName);
}
public static XmlElement AppendApplicationElement(string tagName, string name, Dictionary<string, string> attributes) {
return AppendElementIfMissing(tagName, name, attributes, _applicationNode);
}
public static void RemoveApplicationElement(string tagName, string name) {
RemoveElement(tagName, name, _applicationNode);
}
public static XmlElement PrependManifestElement(string tagName, string name) {
return PrependElementIfMissing(tagName, name, null, _manifestNode);
}
public static void RemoveManifestElement(string tagName, string name) {
RemoveElement(tagName, name, _manifestNode);
}
public static XmlElement AddMetaDataTag(string mdName, string mdValue) {
return AppendApplicationElement("meta-data", mdName, new Dictionary<string, string>() {
{ "value", mdValue }
});
}
public static XmlElement AppendElementIfMissing(string tagName, string name, Dictionary<string, string> otherAttributes, XmlNode parent) {
XmlElement e = null;
if (!string.IsNullOrEmpty(name)) {
e = FindElementWithTagAndName(tagName, name, parent);
}
if (e == null)
{
e = _document.CreateElement(tagName);
if (!string.IsNullOrEmpty(name)) {
e.SetAttribute("name", _namespace, name);
}
parent.AppendChild(e);
}
if (otherAttributes != null) {
foreach(string key in otherAttributes.Keys) {
e.SetAttribute(key, _namespace, otherAttributes[key]);
}
}
return e;
}
public static XmlElement PrependElementIfMissing(string tagName, string name, Dictionary<string, string> otherAttributes, XmlNode parent) {
XmlElement e = null;
if (!string.IsNullOrEmpty(name)) {
e = FindElementWithTagAndName(tagName, name, parent);
}
if (e == null)
{
e = _document.CreateElement(tagName);
if (!string.IsNullOrEmpty(name)) {
e.SetAttribute("name", _namespace, name);
}
parent.PrependChild(e);
}
if (otherAttributes != null) {
foreach(string key in otherAttributes.Keys) {
e.SetAttribute(key, _namespace, otherAttributes[key]);
}
}
return e;
}
public static void RemoveElement(string tagName, string name, XmlNode parent) {
XmlElement e = FindElementWithTagAndName(tagName, name, parent);
if (e != null)
{
parent.RemoveChild(e);
}
}
public static XmlNode FindChildNode(XmlNode parent, string tagName)
{
XmlNode curr = parent.FirstChild;
while (curr != null)
{
if (curr.Name.Equals(tagName))
{
return curr;
}
curr = curr.NextSibling;
}
return null;
}
public static XmlElement FindChildElement(XmlNode parent, string tagName)
{
XmlNode curr = parent.FirstChild;
while (curr != null)
{
if (curr.Name.Equals(tagName))
{
return curr as XmlElement;
}
curr = curr.NextSibling;
}
return null;
}
public static XmlElement FindElementWithTagAndName(string tagName, string name, XmlNode parent)
{
var curr = parent.FirstChild;
while (curr != null)
{
if (curr.Name.Equals(tagName) && curr is XmlElement && ((XmlElement)curr).GetAttribute("name", _namespace) == name)
{
return curr as XmlElement;
}
curr = curr.NextSibling;
}
return null;
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 62494cb2550224675873046db8776006
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,95 +0,0 @@
// Copyright (c) 2012 Calvin Rien
// http://the.darktable.com
//
// This software is provided 'as-is', without any express or implied warranty. In
// no event will the authors be held liable for any damages arising from the use
// of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not claim
// that you wrote the original software. If you use this software in a product,
// an acknowledgment in the product documentation would be appreciated but is not
// required.
//
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
using UnityEngine;
using System.Collections.Generic;
using System;
[System.Serializable]
public sealed class ObjectKvp : UnityNameValuePair<string> {
public string value = null;
override public string Value {
get { return this.value; }
set { this.value = value; }
}
public ObjectKvp(string key, string value) : base(key, value) {
}
}
[System.Serializable]
public class ObjectDictionary : UnityDictionary<string> {
public List<ObjectKvp> values;
override protected List<UnityKeyValuePair<string, string>> KeyValuePairs {
get {
if (values == null) {
values = new List<ObjectKvp>();
}
List<UnityKeyValuePair<string, string>> valuesConverted = new List<UnityKeyValuePair<string, string>>();
foreach (ObjectKvp okvp in values)
{
valuesConverted.Add(ConvertOkvp(okvp));
}
return valuesConverted;
}
set {
if (value == null) {
values = new List<ObjectKvp>();
return;
}
foreach(UnityKeyValuePair<string,string> ukvp in value)
{
values.Add(ConvertUkvp(ukvp));
}
}
}
public new ObjectKvp ConvertUkvp(UnityKeyValuePair<string,string> ukvp)
{
return new ObjectKvp(ukvp.Key, ukvp.Value);
}
public UnityKeyValuePair<string, string> ConvertOkvp(ObjectKvp okvp)
{
return new UnityKeyValuePair<string, string>(okvp.Key,okvp.Value);
}
override protected void SetKeyValuePair(string k, string v) {
var index = values.FindIndex(x => {
return x.Key == k;});
if (index != -1) {
if (v == null) {
values.RemoveAt(index);
return;
}
values[index] = new ObjectKvp(k, v);
return;
}
values.Add(new ObjectKvp(k, v));
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 3d242fa04ee9a4fc79ae19ff5a74303d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,317 +0,0 @@
// Copyright (c) 2012 Calvin Rien
// http://the.darktable.com
//
// This software is provided 'as-is', without any express or implied warranty. In
// no event will the authors be held liable for any damages arising from the use
// of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented; you must not claim
// that you wrote the original software. If you use this software in a product,
// an acknowledgment in the product documentation would be appreciated but is not
// required.
//
// 2. Altered source versions must be plainly marked as such, and must not be
// misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
using System.Collections;
using System.Collections.Generic;
public class UnityNameValuePair<V> : UnityKeyValuePair<string, V> {
public string name = null;
override public string Key {
get { return name; }
set { name = value; }
}
public UnityNameValuePair() : base() {
}
public UnityNameValuePair(string key, V value) : base(key, value) {
}
}
public class UnityKeyValuePair<K, V> {
virtual public K Key {
get;
set;
}
virtual public V Value {
get;
set;
}
public UnityKeyValuePair() {
Key = default(K);
Value = default(V);
}
public UnityKeyValuePair(K key, V value) {
Key = key;
Value = value;
}
}
public abstract class UnityDictionary<K,V> : IDictionary<K,V> {
abstract protected List<UnityKeyValuePair<K,V>> KeyValuePairs {
get;
set;
}
protected abstract void SetKeyValuePair(K k, V v); /* {
var index = Collection.FindIndex(x => {return x.Key == k;});
if (index != -1) {
if (v == null) {
Collection.RemoveAt(index);
return;
}
values[index] = new UnityKeyValuePair(key, value);
return;
}
values.Add(new UnityKeyValuePair(key, value));
} */
virtual public V this[K key] {
get {
var result = KeyValuePairs.Find(x => {
return x.Key.Equals(key);});
if (result == null) {
return default(V);
}
return result.Value;
}
set {
if (key == null) {
return;
}
SetKeyValuePair(key, value);
}
}
#region IDictionary interface
public void Add(K key, V value) {
this[key] = value;
}
public void Add(KeyValuePair<K, V> kvp) {
this[kvp.Key] = kvp.Value;
}
public bool TryGetValue(K key, out V value) {
if (!this.ContainsKey(key)) {
value = default(V);
return false;
}
value = this[key];
return true;
}
public bool Remove(KeyValuePair<K, V> item) {
return Remove(item.Key);
}
public bool Remove(K key) {
var list = KeyValuePairs;
var index = list.FindIndex(x => {
return x.Key.Equals(key);});
if (index == -1) {
return false;
}
list.RemoveAt(index);
KeyValuePairs = list;
return true;
}
public void Clear() {
var list = KeyValuePairs;
list.Clear();
KeyValuePairs = list;
}
public bool ContainsKey(K key) {
return KeyValuePairs.FindIndex(x => {
return x.Key.Equals(key);}) != -1;
}
public bool Contains(KeyValuePair<K, V> kvp) {
return this[kvp.Key].Equals(kvp.Value);
}
public int Count {
get {
return KeyValuePairs.Count;
}
}
public void CopyTo(KeyValuePair<K, V>[] array, int index) {
List<KeyValuePair<K, V>> copy = new List<KeyValuePair<K, V>>();
for (int i = 0; i < KeyValuePairs.Count;i++)
{
copy[i] = ConvertUkvp(KeyValuePairs[i]);
}
copy.CopyTo(array, index);
}
public KeyValuePair<K,V> ConvertUkvp(UnityKeyValuePair<K, V> ukvp)
{
return new KeyValuePair<K,V>(ukvp.Key,(V)ukvp.Value);
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator() as IEnumerator;
}
public IEnumerator<KeyValuePair<K, V>> GetEnumerator() {
return new UnityDictionaryEnumerator(this);
}
public ICollection<K> Keys {
get {
ICollection<K> keys = new List<K>();
foreach(UnityKeyValuePair<K,V> ukvp in KeyValuePairs)
{
keys.Add(ukvp.Key);
}
return keys;
}
}
public ICollection<V> Values {
get {
ICollection<V> values = new List<V>();
foreach (UnityKeyValuePair<K, V> ukvp in KeyValuePairs)
{
values.Add(ukvp.Value);
}
return values;
}
}
public ICollection<KeyValuePair<K, V>> Items {
get {
List<KeyValuePair<K,V>> items = new List<KeyValuePair<K,V>>();
foreach(UnityKeyValuePair<K,V> value in KeyValuePairs)
{
items.Add(new KeyValuePair<K, V>(value.Key, value.Value));
}
return items;
}
}
public V SyncRoot {
get { return default(V); }
}
public bool IsFixedSize {
get { return false; }
}
public bool IsReadOnly {
get { return false; }
}
public bool IsSynchronized {
get { return false; }
}
internal sealed class UnityDictionaryEnumerator : IEnumerator<KeyValuePair<K, V>> {
// A copy of the SimpleDictionary T's key/value pairs.
KeyValuePair<K, V>[] items;
int index = -1;
internal UnityDictionaryEnumerator() {
}
internal UnityDictionaryEnumerator(UnityDictionary<K,V> ud) {
// Make a copy of the dictionary entries currently in the SimpleDictionary T.
items = new KeyValuePair<K, V>[ud.Count];
ud.CopyTo(items, 0);
}
object IEnumerator.Current {
get { return Current; }
}
public KeyValuePair<K, V> Current {
get {
ValidateIndex();
return items[index];
}
}
// Return the current dictionary entry.
public KeyValuePair<K, V> Entry {
get { return (KeyValuePair<K, V>) Current; }
}
public void Dispose() {
index = -1;
items = null;
}
// Return the key of the current item.
public K Key {
get {
ValidateIndex();
return items[index].Key;
}
}
// Return the value of the current item.
public V Value {
get {
ValidateIndex();
return items[index].Value;
}
}
// Advance to the next item.
public bool MoveNext() {
if (index < items.Length - 1) {
index++;
return true;
}
return false;
}
// Validate the enumeration index and throw an exception if the index is out of range.
private void ValidateIndex() {
if (index < 0 || index >= items.Length) {
throw new System.InvalidOperationException("Enumerator is before or after the collection.");
}
}
// Reset the index to restart the enumeration.
public void Reset() {
index = -1;
}
#endregion
}
}
public abstract class UnityDictionary<V> : UnityDictionary<string, V> {
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 2b3aeeb1755c04e6f80ffb1e982537f5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 221bee1d14f6b4afaa10e6a0915411ba
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,16 +0,0 @@
using UnityEngine;
public abstract class BaseBehaviour : MonoBehaviour
{
private Transform cashedTransform;
public Transform CachedTransform
{
get { return cashedTransform ?? (cashedTransform = transform); }
}
protected virtual void Awake() { }
protected virtual void Start() { }
protected virtual void OnDestroy() { }
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 80937c3c4170b4ff59501e589794ddca
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,17 +0,0 @@
#pragma warning disable 618
/// <summary>
/// A Singleton for use when your component needs to be accessed at any given (run)time and can be automagically created on demand.
/// To use, override <see cref="UnitySingleton.InitAfterRegisteringAsSingleInstance"/> and write your initialization logic.
/// If your singleton shouldn't be destroyed when moving between scenes (<see cref="UnityEngine.Object.DontDestroyOnLoad"/>),
/// Override <see cref="UnitySingleton.DontDestroySingleton"/> and return true.
/// Like this:
///
/// protected override bool DontDestroySingleton
/// {
/// get { return true; }
/// }
///
/// </summary>
public abstract class CodeGeneratedSingleton : UnitySingleton
{
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 1a0aa54a1a93447f6a59f4a1534ecbe7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,17 +0,0 @@
#pragma warning disable 618
/// <summary>
/// A Singleton for use when your component needs to be blaced in a scene on design time.
/// To use, override <see cref="UnitySingleton.InitAfterRegisteringAsSingleInstance"/> and write your initialization logic.
/// If your singleton shouldn't be destroyed when moving between scenes (<see cref="UnityEngine.Object.DontDestroyOnLoad"/>),
/// Override <see cref="UnitySingleton.DontDestroySingleton"/> and return true.
/// Like this:
///
/// protected override bool DontDestroySingleton
/// {
/// get { return true; }
/// }
///
/// </summary>
public abstract class SceneSingleton : UnitySingleton
{
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 2b330e7d866904612b12283dfae41b84
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,271 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
public abstract class UnitySingleton : BaseBehaviour
{
#region Private Variables
private static readonly Dictionary<Type, UnitySingleton> instances = new Dictionary<Type, UnitySingleton>();
private static readonly Dictionary<Type, Dictionary<MonoBehaviour, Action<UnitySingleton>>> instanceListeners =
new Dictionary<Type, Dictionary<MonoBehaviour, Action<UnitySingleton>>>();
#endregion
#region Private Properties
protected bool IsInstanceReady { get; private set; }
#endregion
#region Private Functions
private void RegisterAsSingleInstanceAndInit()
{
instances.Add(GetType(), this);
InnerInit();
}
private void InnerInit()
{
InitAfterRegisteringAsSingleInstance();
if (DontDestroySingleton)
{
DontDestroyOnLoad(gameObject);
}
}
private static S GetOrCreateInstanceOnGameObject<S>(Type type) where S : CodeGeneratedSingleton
{
S instance = null;
var prefab = Resources.Load<GameObject>(type.Name);
if (prefab)
{
var instantiatedObject = Instantiate(prefab)
#if !UNITY_5
as GameObject
#endif
;
if (!instantiatedObject)
{
throw new Exception("Failed to instantiate prefab: " + type.Name);
}
instance = instantiatedObject.GetComponent<S>();
if (!instance)
{
instance = instantiatedObject.AddComponent<S>();
}
}
if (!instance)
{
instance = new GameObject(type.Name).AddComponent<S>();
}
return instance;
}
private void NotifyInstanceListeners()
{
var type = GetType();
// Checks if there are any registered listeners for this type of singleton
if (instanceListeners.ContainsKey(type))
{
foreach (var actionWithSender in instanceListeners[type].ToArray())
{
// If the sender is alive and has listeners - run its actions
if (actionWithSender.Key && actionWithSender.Value != null)
{
actionWithSender.Value(this);
}
// Either way - remove the sender + action from the collection
instanceListeners[type].Remove(actionWithSender.Key);
}
}
}
protected void DeclareAsReady()
{
IsInstanceReady = true;
NotifyInstanceListeners();
}
#endregion
#region Public Functions
protected static S GetSynchronousCodeGeneratedInstance<S>() where S : CodeGeneratedSingleton
{
var type = typeof(S);
S instance;
// An instance of this type does not exist
if (!instances.ContainsKey(type))
{
// Try to find an existing one in the scene
instance = FindObjectOfType<S>();
if (!instance)
{
// Creating a new one
instance = GetOrCreateInstanceOnGameObject<S>(type);
}
instance.RegisterAsSingleInstanceAndInit();
}
// An instance of this type already exists
else
{
instance = instances[type] as S;
}
if (!instance)
{
throw new Exception("No instance was created: " + type.Name);
}
instance.IsInstanceReady = true;
return instance;
}
public static void DoWithCodeGeneratedInstance<C>(MonoBehaviour sender, Action<C> whatToDoWithInstanceWhenItsReady) where C : CodeGeneratedSingleton
{
// Make sure an instance exists (creating it if it doesn't)
GetSynchronousCodeGeneratedInstance<C>();
// Do the action with the existing instance or wait for it to be ready
DoWithExistingInstance(sender, whatToDoWithInstanceWhenItsReady);
}
public static void DoWithSceneInstance<S>(MonoBehaviour sender, Action<S> whatToDoWithInstanceWhenItsReady) where S : SceneSingleton
{
DoWithExistingInstance(sender, whatToDoWithInstanceWhenItsReady);
}
/// <summary>
/// Performs an action on an existing instance if and when it exists and ready
/// </summary>
/// <typeparam name="S"></typeparam>
/// <param name="sender"></param>
/// <param name="whatToDoWithInstanceWhenItsReady"></param>
private static void DoWithExistingInstance<S>(MonoBehaviour sender, Action<S> whatToDoWithInstanceWhenItsReady) where S : UnitySingleton
{
var type = typeof(S);
var isInstanceNotExistOrReady = true;
// An instance of this type exists
if (instances.ContainsKey(type))
{
var instance = instances[type] as S;
if (instance && instance.IsInstanceReady)
{
isInstanceNotExistOrReady = false;
// Call the action with the existing instance
whatToDoWithInstanceWhenItsReady(instance);
}
}
// An instance of this type does not exist, we have to wait for it to initialize
if (isInstanceNotExistOrReady)
{
if (!instanceListeners.ContainsKey(type))
{
instanceListeners.Add(type, new Dictionary<MonoBehaviour, Action<UnitySingleton>>());
}
if (!instanceListeners[type].ContainsKey(sender))
{
instanceListeners[type].Add(sender, null);
}
instanceListeners[type][sender] += singleton => whatToDoWithInstanceWhenItsReady(singleton as S);
}
}
#endregion
#region Unity Functions
protected sealed override void Start()
{
base.Start();
var type = GetType();
var needToDestroy = false;
// There's already an instance of my type
if (instances.ContainsKey(type))
{
// The existing instance is not this instance so we've got a conflict (There can only be one!)
if (instances[type] != this)
{
if (this is CodeGeneratedSingleton)
{
throw new Exception("There's already an instance for " + type.Name);
}
if (this is SceneSingleton)
{
if (DontDestroySingleton)
{
// [this] is not the single instance (Singleton) so we actually DO need to destroy it
needToDestroy = true;
}
}
}
}
// There's no instance of my type and I'm a CodeGeneratedSingleton
// It should have been created via code so if I don't exist in the instance collection it means I was created on a scene
else if (this is CodeGeneratedSingleton)
{
throw new NotSupportedException(string.Format("{0} is a {1} and needs to be created via code, and not placed on a scene!", type.Name, typeof(CodeGeneratedSingleton).Name));
}
if (needToDestroy)
{
Debug.LogWarning(string.Format("There's already a {0} instance on the current scene, there's no point in staying.. goodbye.. I'm gonna go now :(", type.Name));
Destroy(this);
}
else if (this is SceneSingleton)
{
RegisterAsSingleInstanceAndInit();
SetReadyAndNotifyAfterRegistering();
}
}
/// <summary>
/// Override this if the singleton won't be ready immediately after registering as single instance
/// </summary>
protected virtual void SetReadyAndNotifyAfterRegistering()
{
DeclareAsReady();
}
protected override void OnDestroy()
{
base.OnDestroy();
var type = GetType();
// There's already an instance of my type but it's me - remove me
if (instances.ContainsKey(type) && instances[type] == this)
{
instances.Remove(type);
}
}
#endregion
#region Virtuals
protected virtual void InitAfterRegisteringAsSingleInstance() { }
protected virtual bool DontDestroySingleton { get { return false; } }
#endregion
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: ac12af7b0ebf6409c935fad7857982be
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<dependencies>
<androidPackages>
<androidPackage spec="com.applovin:applovin-sdk:11.4.4" />
<androidPackage spec="com.applovin:applovin-sdk:11.10.1" />
</androidPackages>
<iosPods>
<iosPod name="AppLovinSDK" version="11.4.3" />
<iosPod name="AppLovinSDK" version="11.10.1" />
</iosPods>
</dependencies>

View File

@ -16,6 +16,7 @@ typedef void (*ALUnityBackgroundCallback)(const char* args);
- (void)createBannerWithAdUnitIdentifier:(NSString *)adUnitIdentifier atPosition:(NSString *)bannerPosition;
- (void)createBannerWithAdUnitIdentifier:(NSString *)adUnitIdentifier x:(CGFloat)xOffset y:(CGFloat)yOffset;
- (void)loadBannerWithAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)setBannerBackgroundColorForAdUnitIdentifier:(NSString *)adUnitIdentifier hexColorCode:(NSString *)hexColorCode;
- (void)setBannerPlacement:(nullable NSString *)placement forAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)startBannerAutoRefreshForAdUnitIdentifier:(NSString *)adUnitIdentifier;
@ -34,6 +35,7 @@ typedef void (*ALUnityBackgroundCallback)(const char* args);
- (void)createMRecWithAdUnitIdentifier:(NSString *)adUnitIdentifier atPosition:(NSString *)mrecPosition;
- (void)createMRecWithAdUnitIdentifier:(NSString *)adUnitIdentifier x:(CGFloat)xOffset y:(CGFloat)yOffset;
- (void)loadMRecWithAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)setMRecPlacement:(nullable NSString *)placement forAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)startMRecAutoRefreshForAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)stopMRecAutoRefreshForAdUnitIdentifier:(NSString *)adUnitIdentifer;
@ -61,6 +63,12 @@ typedef void (*ALUnityBackgroundCallback)(const char* args);
- (void)setInterstitialExtraParameterForAdUnitIdentifier:(NSString *)adUnitIdentifier key:(NSString *)key value:(nullable NSString *)value;
- (void)setInterstitialLocalExtraParameterForAdUnitIdentifier:(NSString *)adUnitIdentifier key:(NSString *)key value:(nullable id)value;
- (void)loadAppOpenAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (BOOL)isAppOpenAdReadyWithAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)showAppOpenAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier placement:(nullable NSString *)placement customData:(nullable NSString *)customData;
- (void)setAppOpenAdExtraParameterForAdUnitIdentifier:(NSString *)adUnitIdentifier key:(NSString *)key value:(nullable NSString *)value;
- (void)setAppOpenAdLocalExtraParameterForAdUnitIdentifier:(NSString *)adUnitIdentifier key:(NSString *)key value:(nullable id)value;
- (void)loadRewardedAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (BOOL)isRewardedAdReadyWithAdUnitIdentifier:(NSString *)adUnitIdentifier;
- (void)showRewardedAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier placement:(nullable NSString *)placement customData:(nullable NSString *)customData;
@ -85,8 +93,11 @@ typedef void (*ALUnityBackgroundCallback)(const char* args);
// User Service
- (void)didDismissUserConsentDialog;
// Consent Flow
- (void)startConsentFlow;
// Utils
+ (NSString *)serializeParameters:(NSDictionary<NSString *, NSString *> *)dict;
+ (NSString *)serializeParameters:(NSDictionary<NSString *, id> *)dict;
/**
* Creates an instance of @c MAUnityAdManager if needed and returns the singleton instance.

View File

@ -3,7 +3,6 @@ guid: 4209563f82b8a4f7dabf03705ab761c6
labels:
- al_max
- al_max_export_path-MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.h
- al_max_export_path-MaxSdk\AppLovin\Plugins\iOS\MAUnityAdManager.h
PluginImporter:
externalObjects: {}
serializedVersion: 2
@ -16,7 +15,7 @@ PluginImporter:
validateReferences: 1
platformData:
- first:
: Any
'': Any
second:
enabled: 0
settings:

View File

@ -5,7 +5,7 @@
#import "MAUnityAdManager.h"
#define VERSION @"5.4.5"
#define VERSION @"5.10.1"
#define KEY_WINDOW [UIApplication sharedApplication].keyWindow
#define DEVICE_SPECIFIC_ADVIEW_AD_FORMAT ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) ? MAAdFormat.leader : MAAdFormat.banner
@ -42,13 +42,14 @@ extern "C" {
}
#endif
@interface MAUnityAdManager()<MAAdDelegate, MAAdViewAdDelegate, MARewardedAdDelegate, MAAdRevenueDelegate, ALVariableServiceDelegate>
@interface MAUnityAdManager()<MAAdDelegate, MAAdViewAdDelegate, MARewardedAdDelegate, MAAdRevenueDelegate, MAAdReviewDelegate, ALVariableServiceDelegate>
// Parent Fields
@property (nonatomic, weak) ALSdk *sdk;
// Fullscreen Ad Fields
@property (nonatomic, strong) NSMutableDictionary<NSString *, MAInterstitialAd *> *interstitials;
@property (nonatomic, strong) NSMutableDictionary<NSString *, MAAppOpenAd *> *appOpenAds;
@property (nonatomic, strong) NSMutableDictionary<NSString *, MARewardedAd *> *rewardedAds;
@property (nonatomic, strong) NSMutableDictionary<NSString *, MARewardedInterstitialAd *> *rewardedInterstitialAds;
@ -67,6 +68,7 @@ extern "C" {
@property (nonatomic, strong) NSMutableDictionary<NSString *, NSString *> *adViewCustomDataToSetAfterCreate;
@property (nonatomic, strong) NSMutableArray<NSString *> *adUnitIdentifiersToShowAfterCreate;
@property (nonatomic, strong) NSMutableSet<NSString *> *disabledAdaptiveBannerAdUnitIdentifiers;
@property (nonatomic, strong) NSMutableSet<NSString *> *disabledAutoRefreshAdViewAdUnitIdentifiers;
@property (nonatomic, strong) UIView *safeAreaBackground;
@property (nonatomic, strong, nullable) UIColor *publisherBannerBackgroundColor;
@ -107,6 +109,7 @@ static ALUnityBackgroundCallback backgroundCallback;
if ( self )
{
self.interstitials = [NSMutableDictionary dictionaryWithCapacity: 2];
self.appOpenAds = [NSMutableDictionary dictionaryWithCapacity: 2];
self.rewardedAds = [NSMutableDictionary dictionaryWithCapacity: 2];
self.rewardedInterstitialAds = [NSMutableDictionary dictionaryWithCapacity: 2];
self.adViews = [NSMutableDictionary dictionaryWithCapacity: 2];
@ -123,6 +126,7 @@ static ALUnityBackgroundCallback backgroundCallback;
self.adViewCustomDataToSetAfterCreate = [NSMutableDictionary dictionaryWithCapacity: 1];
self.adUnitIdentifiersToShowAfterCreate = [NSMutableArray arrayWithCapacity: 2];
self.disabledAdaptiveBannerAdUnitIdentifiers = [NSMutableSet setWithCapacity: 2];
self.disabledAutoRefreshAdViewAdUnitIdentifiers = [NSMutableSet setWithCapacity: 2];
self.adInfoDict = [NSMutableDictionary dictionary];
self.adInfoDictLock = [[NSObject alloc] init];
@ -172,7 +176,15 @@ static ALUnityBackgroundCallback backgroundCallback;
backgroundCallback = unityBackgroundCallback;
NSDictionary *infoDict = [[NSBundle mainBundle] infoDictionary];
NSString *sdkKey = infoDict[@"AppLovinSdkKey"];
if ( [sdkKey al_isValidString] )
{
self.sdk = [ALSdk sharedWithKey: sdkKey settings: [self generateSDKSettingsForAdUnitIdentifiers: serializedAdUnitIdentifiers metaData: serializedMetaData]];
}
else
{
self.sdk = [ALSdk sharedWithSettings:[self generateSDKSettingsForAdUnitIdentifiers:serializedAdUnitIdentifiers metaData:serializedMetaData]];
}
self.sdk.variableService.delegate = self;
[self.sdk setPluginVersion: [@"Max-Unity-" stringByAppendingString: VERSION]];
self.sdk.mediationProvider = @"max";
@ -187,7 +199,8 @@ static ALUnityBackgroundCallback backgroundCallback;
@"consentDialogState" : consentDialogStateStr,
@"countryCode" : configuration.countryCode,
@"appTrackingStatus" : appTrackingStatus,
@"isSuccessfullyInitialized" : ([self.sdk isInitialized] ? @"true" : @"false")}];
@"isSuccessfullyInitialized" : @([self.sdk isInitialized]),
@"isTestModeEnabled" : @([configuration isTestModeEnabled])}];
}];
return self.sdk;
@ -205,6 +218,11 @@ static ALUnityBackgroundCallback backgroundCallback;
[self createAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: [self adViewAdFormatForAdUnitIdentifier: adUnitIdentifier] atPosition: DEFAULT_AD_VIEW_POSITION withOffset: CGPointMake(xOffset, yOffset)];
}
- (void)loadBannerWithAdUnitIdentifier:(NSString *)adUnitIdentifier
{
[self loadAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: [self adViewAdFormatForAdUnitIdentifier: adUnitIdentifier]];
}
- (void)setBannerBackgroundColorForAdUnitIdentifier:(NSString *)adUnitIdentifier hexColorCode:(NSString *)hexColorCode
{
[self setAdViewBackgroundColorForAdUnitIdentifier: adUnitIdentifier adFormat: [self adViewAdFormatForAdUnitIdentifier: adUnitIdentifier] hexColorCode: hexColorCode];
@ -292,6 +310,11 @@ static ALUnityBackgroundCallback backgroundCallback;
[self createAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.mrec atPosition: DEFAULT_AD_VIEW_POSITION withOffset: CGPointMake(xOffset, yOffset)];
}
- (void)loadMRecWithAdUnitIdentifier:(NSString *)adUnitIdentifier
{
[self loadAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.mrec];
}
- (void)setMRecPlacement:(nullable NSString *)placement forAdUnitIdentifier:(NSString *)adUnitIdentifier
{
[self setAdViewPlacement: placement forAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.mrec];
@ -302,9 +325,9 @@ static ALUnityBackgroundCallback backgroundCallback;
[self startAdViewAutoRefreshForAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.mrec];
}
- (void)stopMRecAutoRefreshForAdUnitIdentifier:(NSString *)adUnitIdentifer
- (void)stopMRecAutoRefreshForAdUnitIdentifier:(NSString *)adUnitIdentifier
{
[self stopAdViewAutoRefreshForAdUnitIdentifier: adUnitIdentifer adFormat: MAAdFormat.mrec];
[self stopAdViewAutoRefreshForAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.mrec];
}
- (void)updateMRecPosition:(NSString *)mrecPosition forAdUnitIdentifier:(NSString *)adUnitIdentifier
@ -427,6 +450,38 @@ static ALUnityBackgroundCallback backgroundCallback;
[interstitial setLocalExtraParameterForKey: key value: value];
}
#pragma mark - App Open Ads
- (void)loadAppOpenAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier
{
MAAppOpenAd *appOpenAd = [self retrieveAppOpenAdForAdUnitIdentifier: adUnitIdentifier];
[appOpenAd loadAd];
}
- (BOOL)isAppOpenAdReadyWithAdUnitIdentifier:(NSString *)adUnitIdentifier
{
MAAppOpenAd *appOpenAd = [self retrieveAppOpenAdForAdUnitIdentifier: adUnitIdentifier];
return [appOpenAd isReady];
}
- (void)showAppOpenAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier placement:(nullable NSString *)placement customData:(nullable NSString *)customData
{
MAAppOpenAd *appOpenAd = [self retrieveAppOpenAdForAdUnitIdentifier: adUnitIdentifier];
[appOpenAd showAdForPlacement: placement customData: customData];
}
- (void)setAppOpenAdExtraParameterForAdUnitIdentifier:(NSString *)adUnitIdentifier key:(NSString *)key value:(nullable NSString *)value
{
MAAppOpenAd *appOpenAd = [self retrieveAppOpenAdForAdUnitIdentifier: adUnitIdentifier];
[appOpenAd setExtraParameterForKey: key value: value];
}
- (void)setAppOpenAdLocalExtraParameterForAdUnitIdentifier:(NSString *)adUnitIdentifier key:(NSString *)key value:(nullable id)value
{
MAAppOpenAd *appOpenAd = [self retrieveAppOpenAdForAdUnitIdentifier: adUnitIdentifier];
[appOpenAd setLocalExtraParameterForKey: key value: value];
}
#pragma mark - Rewarded
- (void)loadRewardedAdWithAdUnitIdentifier:(NSString *)adUnitIdentifier
@ -568,6 +623,7 @@ static ALUnityBackgroundCallback backgroundCallback;
}
networkResponseDict[@"credentials"] = response.credentials;
networkResponseDict[@"isBidding"] = @([response isBidding]);
MAError *error = response.error;
if ( error )
@ -636,6 +692,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialLoadedEvent";
}
else if ( MAAdFormat.appOpen == adFormat )
{
name = @"OnAppOpenAdLoadedEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdLoadedEvent";
@ -688,6 +748,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialLoadFailedEvent";
}
else if ( self.appOpenAds[adUnitIdentifier] )
{
name = @"OnAppOpenAdLoadFailedEvent";
}
else if ( self.rewardedAds[adUnitIdentifier] )
{
name = @"OnRewardedAdLoadFailedEvent";
@ -735,6 +799,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialClickedEvent";
}
else if ( MAAdFormat.appOpen == adFormat )
{
name = @"OnAppOpenAdClickedEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdClickedEvent";
@ -768,6 +836,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialDisplayedEvent";
}
else if ( MAAdFormat.appOpen == adFormat )
{
name = @"OnAppOpenAdDisplayedEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdDisplayedEvent";
@ -792,6 +864,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialAdFailedToDisplayEvent";
}
else if ( MAAdFormat.appOpen == adFormat )
{
name = @"OnAppOpenAdFailedToDisplayEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdFailedToDisplayEvent";
@ -825,6 +901,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialHiddenEvent";
}
else if ( MAAdFormat.appOpen == adFormat )
{
name = @"OnAppOpenAdHiddenEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdHiddenEvent";
@ -952,6 +1032,10 @@ static ALUnityBackgroundCallback backgroundCallback;
{
name = @"OnInterstitialAdRevenuePaidEvent";
}
else if ( MAAdFormat.appOpen == adFormat )
{
name = @"OnAppOpenAdRevenuePaidEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdRevenuePaidEvent";
@ -970,6 +1054,41 @@ static ALUnityBackgroundCallback backgroundCallback;
[MAUnityAdManager forwardUnityEventWithArgs: args forwardInBackground: [adFormat isFullscreenAd]];
}
- (void)didGenerateCreativeIdentifier:(NSString *)creativeIdentifier forAd:(MAAd *)ad
{
NSString *name;
MAAdFormat *adFormat = ad.format;
if ( MAAdFormat.banner == adFormat || MAAdFormat.leader == adFormat )
{
name = @"OnBannerAdReviewCreativeIdGeneratedEvent";
}
else if ( MAAdFormat.mrec == adFormat )
{
name = @"OnMRecAdReviewCreativeIdGeneratedEvent";
}
else if ( MAAdFormat.interstitial == adFormat )
{
name = @"OnInterstitialAdReviewCreativeIdGeneratedEvent";
}
else if ( MAAdFormat.rewarded == adFormat )
{
name = @"OnRewardedAdReviewCreativeIdGeneratedEvent";
}
else if ( MAAdFormat.rewardedInterstitial == adFormat )
{
name = @"OnRewardedInterstitialAdReviewCreativeIdGeneratedEvent";
}
else
{
[self logInvalidAdFormat: adFormat];
return;
}
NSMutableDictionary<NSString *, id> *args = [self defaultAdEventParametersForName: name withAd: ad];
args[@"adReviewCreativeId"] = creativeIdentifier;
[MAUnityAdManager forwardUnityEventWithArgs: args];
}
- (NSMutableDictionary<NSString *, id> *)defaultAdEventParametersForName:(NSString *)name withAd:(MAAd *)ad
{
NSMutableDictionary<NSString *, id> *args = [[self adInfoForAd: ad] mutableCopy];
@ -985,6 +1104,11 @@ static ALUnityBackgroundCallback backgroundCallback;
max_unity_dispatch_on_main_thread(^{
[self log: @"Creating %@ with ad unit identifier \"%@\" and position: \"%@\"", adFormat, adUnitIdentifier, adViewPosition];
if ( self.adViews[adUnitIdentifier] )
{
[self log: @"Trying to create a %@ that was already created. This will cause the current ad to be hidden.", adFormat.label];
}
// Retrieve ad view from the map
MAAdView *adView = [self retrieveAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat atPosition: adViewPosition withOffset: offset];
adView.hidden = YES;
@ -1040,6 +1164,12 @@ static ALUnityBackgroundCallback backgroundCallback;
[adView loadAd];
// Disable auto-refresh if publisher sets it before creating the ad view.
if ( [self.disabledAutoRefreshAdViewAdUnitIdentifiers containsObject: adUnitIdentifier] )
{
[adView stopAutoRefresh];
}
// The publisher may have requested to show the banner before it was created. Now that the banner is created, show it.
if ( [self.adUnitIdentifiersToShowAfterCreate containsObject: adUnitIdentifier] )
{
@ -1049,6 +1179,32 @@ static ALUnityBackgroundCallback backgroundCallback;
});
}
- (void)loadAdViewWithAdUnitIdentifier:(NSString *)adUnitIdentifier adFormat:(MAAdFormat *)adFormat
{
max_unity_dispatch_on_main_thread(^{
MAAdView *adView = [self retrieveAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat];
if ( !adView )
{
[self log: @"%@ does not exist for ad unit identifier %@.", adFormat.label, adUnitIdentifier];
return;
}
if ( ![self.disabledAutoRefreshAdViewAdUnitIdentifiers containsObject: adUnitIdentifier] )
{
if ( [adView isHidden] )
{
[self log: @"Auto-refresh will resume when the %@ ad is shown. You should only call LoadBanner() or LoadMRec() if you explicitly pause auto-refresh and want to manually load an ad.", adFormat.label];
return;
}
[self log: @"You must stop auto-refresh if you want to manually load %@ ads.", adFormat.label];
return;
}
[adView loadAd];
});
}
- (void)setAdViewBackgroundColorForAdUnitIdentifier:(NSString *)adUnitIdentifier adFormat:(MAAdFormat *)adFormat hexColorCode:(NSString *)hexColorCode
{
max_unity_dispatch_on_main_thread(^{
@ -1082,6 +1238,8 @@ static ALUnityBackgroundCallback backgroundCallback;
max_unity_dispatch_on_main_thread(^{
[self log: @"Starting %@ auto refresh for ad unit identifier \"%@\"", adFormat.label, adUnitIdentifier];
[self.disabledAutoRefreshAdViewAdUnitIdentifiers removeObject: adUnitIdentifier];
MAAdView *adView = [self retrieveAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat];
if ( !adView )
{
@ -1098,6 +1256,8 @@ static ALUnityBackgroundCallback backgroundCallback;
max_unity_dispatch_on_main_thread(^{
[self log: @"Stopping %@ auto refresh for ad unit identifier \"%@\"", adFormat.label, adUnitIdentifier];
[self.disabledAutoRefreshAdViewAdUnitIdentifiers addObject: adUnitIdentifier];
MAAdView *adView = [self retrieveAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat];
if ( !adView )
{
@ -1272,7 +1432,10 @@ static ALUnityBackgroundCallback backgroundCallback;
self.safeAreaBackground.hidden = NO;
view.hidden = NO;
if ( ![self.disabledAutoRefreshAdViewAdUnitIdentifiers containsObject: adUnitIdentifier] )
{
[view startAutoRefresh];
}
});
}
@ -1317,6 +1480,7 @@ static ALUnityBackgroundCallback backgroundCallback;
MAAdView *view = [self retrieveAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat];
view.delegate = nil;
view.revenueDelegate = nil;
view.adReviewDelegate = nil;
[view removeFromSuperview];
@ -1355,6 +1519,7 @@ static ALUnityBackgroundCallback backgroundCallback;
result = [[MAInterstitialAd alloc] initWithAdUnitIdentifier: adUnitIdentifier sdk: self.sdk];
result.delegate = self;
result.revenueDelegate = self;
result.adReviewDelegate = self;
self.interstitials[adUnitIdentifier] = result;
}
@ -1362,6 +1527,21 @@ static ALUnityBackgroundCallback backgroundCallback;
return result;
}
- (MAAppOpenAd *)retrieveAppOpenAdForAdUnitIdentifier:(NSString *)adUnitIdentifier
{
MAAppOpenAd *result = self.appOpenAds[adUnitIdentifier];
if ( !result )
{
result = [[MAAppOpenAd alloc] initWithAdUnitIdentifier: adUnitIdentifier sdk: self.sdk];
result.delegate = self;
result.revenueDelegate = self;
self.appOpenAds[adUnitIdentifier] = result;
}
return result;
}
- (MARewardedAd *)retrieveRewardedAdForAdUnitIdentifier:(NSString *)adUnitIdentifier
{
MARewardedAd *result = self.rewardedAds[adUnitIdentifier];
@ -1370,6 +1550,7 @@ static ALUnityBackgroundCallback backgroundCallback;
result = [MARewardedAd sharedWithAdUnitIdentifier: adUnitIdentifier sdk: self.sdk];
result.delegate = self;
result.revenueDelegate = self;
result.adReviewDelegate = self;
self.rewardedAds[adUnitIdentifier] = result;
}
@ -1385,6 +1566,7 @@ static ALUnityBackgroundCallback backgroundCallback;
result = [[MARewardedInterstitialAd alloc] initWithAdUnitIdentifier: adUnitIdentifier sdk: self.sdk];
result.delegate = self;
result.revenueDelegate = self;
result.adReviewDelegate = self;
self.rewardedInterstitialAds[adUnitIdentifier] = result;
}
@ -1408,6 +1590,7 @@ static ALUnityBackgroundCallback backgroundCallback;
result.translatesAutoresizingMaskIntoConstraints = NO;
result.delegate = self;
result.revenueDelegate = self;
result.adReviewDelegate = self;
self.adViews[adUnitIdentifier] = result;
self.adViewPositions[adUnitIdentifier] = adViewPosition;
@ -1415,6 +1598,9 @@ static ALUnityBackgroundCallback backgroundCallback;
UIViewController *rootViewController = [self unityViewController];
[rootViewController.view addSubview: result];
// Allow pubs to pause auto-refresh immediately, by default.
[result setExtraParameterForKey: @"allow_pause_auto_refresh_immediately" value: @"true"];
}
return result;
@ -1829,6 +2015,25 @@ static ALUnityBackgroundCallback backgroundCallback;
[MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkConsentDialogDismissedEvent"}];
}
#pragma mark - Consent Flow
- (void)startConsentFlow
{
[self.sdk.cfService scfWithCompletionHander:^(ALCFError * _Nullable error) {
NSMutableDictionary<NSString *, id> *args = [NSMutableDictionary dictionaryWithCapacity: 3];
args[@"name"] = @"OnSdkConsentFlowCompletedEvent";
if ( error )
{
args[@"code"] = @(error.code);
args[@"message"] = error.message;
}
[MAUnityAdManager forwardUnityEventWithArgs: args];
}];
}
#pragma mark - Variable Service (Deprecated)
- (void)loadVariables

View File

@ -3,7 +3,6 @@ guid: 2973e70bd2fa74984b35aea07ae9db52
labels:
- al_max
- al_max_export_path-MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m
- al_max_export_path-MaxSdk\AppLovin\Plugins\iOS\MAUnityAdManager.m
PluginImporter:
externalObjects: {}
serializedVersion: 2
@ -16,7 +15,7 @@ PluginImporter:
validateReferences: 1
platformData:
- first:
: Any
'': Any
second:
enabled: 0
settings:

View File

@ -37,11 +37,20 @@ extern "C"
static NSNumber *_creativeDebuggerEnabledToSet;
static NSNumber *_exceptionHandlerEnabledToSet;
static NSNumber *_locationCollectionEnabledToSet;
static NSNumber *_targetingYearOfBirth;
static NSString *_targetingGender;
static NSNumber *_targetingMaximumAdContentRating;
static NSString *_targetingEmail;
static NSString *_targetingPhoneNumber;
static NSArray<NSString *> *_targetingKeywords;
static NSArray<NSString *> *_targetingInterests;
static NSMutableDictionary<NSString *, NSString *> *_extraParametersToSet = [NSMutableDictionary dictionary];
static NSObject *_extraParametersToSetLock = [[NSObject alloc] init];
// Helper method to create C string copy
static const char * cStringCopy(NSString *string);
// Helper method to log errors
void logUninitializedAccessError(char *callingMethod);
bool isPluginInitialized()
{
@ -67,6 +76,42 @@ extern "C"
return array;
}
ALGender getAppLovinGender(NSString *genderString)
{
if ( [@"F" al_isEqualToStringIgnoringCase: genderString] )
{
return ALGenderFemale;
}
else if ( [@"M" al_isEqualToStringIgnoringCase: genderString] )
{
return ALGenderMale;
}
else if ( [@"O" al_isEqualToStringIgnoringCase: genderString] )
{
return ALGenderOther;
}
return ALGenderUnknown;
}
ALAdContentRating getAppLovinAdContentRating(int maximumAdContentRating)
{
if ( maximumAdContentRating == 1 )
{
return ALAdContentRatingAllAudiences;
}
else if ( maximumAdContentRating == 2 )
{
return ALAdContentRatingEveryoneOverTwelve;
}
else if ( maximumAdContentRating == 3 )
{
return ALAdContentRatingMatureAudiences;
}
return ALAdContentRatingNone;
}
void setPendingExtraParametersIfNeeded(ALSdkSettings *settings)
{
NSDictionary *extraParameters;
@ -129,7 +174,7 @@ extern "C"
if ( _verboseLoggingToSet )
{
_sdk.settings.isVerboseLogging = _verboseLoggingToSet.boolValue;
_sdk.settings.verboseLoggingEnabled = _verboseLoggingToSet.boolValue;
_verboseLoggingToSet = nil;
}
@ -151,6 +196,48 @@ extern "C"
_locationCollectionEnabledToSet = nil;
}
if ( _targetingYearOfBirth )
{
_sdk.targetingData.yearOfBirth = _targetingYearOfBirth.intValue <= 0 ? nil : _targetingYearOfBirth;
_targetingYearOfBirth = nil;
}
if ( _targetingGender )
{
_sdk.targetingData.gender = getAppLovinGender(_targetingGender);
_targetingGender = nil;
}
if ( _targetingMaximumAdContentRating )
{
_sdk.targetingData.maximumAdContentRating = getAppLovinAdContentRating(_targetingMaximumAdContentRating.intValue);
_targetingMaximumAdContentRating = nil;
}
if ( _targetingEmail )
{
_sdk.targetingData.email = _targetingEmail;
_targetingEmail = nil;
}
if ( _targetingPhoneNumber )
{
_sdk.targetingData.phoneNumber = _targetingPhoneNumber;
_targetingPhoneNumber = nil;
}
if ( _targetingKeywords )
{
_sdk.targetingData.keywords = _targetingKeywords;
_targetingKeywords = nil;
}
if ( _targetingInterests )
{
_sdk.targetingData.interests = _targetingInterests;
_targetingInterests = nil;
}
setPendingExtraParametersIfNeeded( _sdk.settings );
}
@ -195,6 +282,17 @@ extern "C"
[_sdk showMediationDebugger];
}
void _MaxShowCreativeDebugger()
{
if ( !_sdk )
{
NSLog(@"[%@] Failed to show creative debugger - please ensure the AppLovin MAX Unity Plugin has been initialized by calling 'MaxSdk.InitializeSdk();'!", TAG);
return;
}
[_sdk showCreativeDebugger];
}
void _MaxShowConsentDialog()
{
NSLog(@"[%@] Failed to show consent dialog - Unavailable on iOS, please use the consent flow: https://dash.applovin.com/documentation/mediation/unity/getting-started/consent-flow", TAG);
@ -236,82 +334,98 @@ extern "C"
void _MaxSetTargetingDataYearOfBirth(const int yearOfBirth)
{
if ( !isPluginInitialized() ) return;
if ( !_sdk )
{
_targetingYearOfBirth = @(yearOfBirth);
return;
}
_sdk.targetingData.yearOfBirth = yearOfBirth <= 0 ? nil : @(yearOfBirth);
}
void _MaxSetTargetingDataGender(const char *gender)
void _MaxSetTargetingDataGender(char *gender)
{
if ( !isPluginInitialized() ) return;
if ( !_sdk )
{
_targetingGender = NSSTRING(gender);
return;
}
NSString *genderString = NSSTRING(gender);
ALGender alGender = ALGenderUnknown;
if ( [genderString isEqualToString: @"F"] )
{
alGender = ALGenderFemale;
}
else if ( [genderString isEqualToString: @"M"] )
{
alGender = ALGenderMale;
}
else if ( [genderString isEqualToString: @"O"] )
{
alGender = ALGenderOther;
}
_sdk.targetingData.gender = alGender;
_sdk.targetingData.gender = getAppLovinGender(genderString);
}
void _MaxSetTargetingDataMaximumAdContentRating(const int maximumAdContentRating)
{
if ( !isPluginInitialized() ) return;
ALAdContentRating rating = ALAdContentRatingNone;
if ( maximumAdContentRating == 1 )
if ( !_sdk )
{
rating = ALAdContentRatingAllAudiences;
}
else if ( maximumAdContentRating == 2 )
{
rating = ALAdContentRatingEveryoneOverTwelve;
}
else if ( maximumAdContentRating == 3 )
{
rating = ALAdContentRatingMatureAudiences;
_targetingMaximumAdContentRating = @(maximumAdContentRating);
return;
}
_sdk.targetingData.maximumAdContentRating = rating;
_sdk.targetingData.maximumAdContentRating = getAppLovinAdContentRating(maximumAdContentRating);
}
void _MaxSetTargetingDataEmail(const char *email)
void _MaxSetTargetingDataEmail(char *email)
{
if ( !isPluginInitialized() ) return;
if ( !_sdk )
{
_targetingEmail = NSSTRING(email);
return;
}
_sdk.targetingData.email = NSSTRING(email);
}
void _MaxSetTargetingDataPhoneNumber(const char *phoneNumber)
void _MaxSetTargetingDataPhoneNumber(char *phoneNumber)
{
if ( !isPluginInitialized() ) return;
if ( !_sdk )
{
_targetingPhoneNumber = NSSTRING(phoneNumber);
return;
}
_sdk.targetingData.phoneNumber = NSSTRING(phoneNumber);
}
void _MaxSetTargetingDataKeywords(char **keywords, int size)
{
if ( !isPluginInitialized() ) return;
_sdk.targetingData.keywords = toStringArray(keywords, size);
NSArray<NSString *> *keywordsArray = keywords ? toStringArray(keywords, size) : nil;
if ( !_sdk )
{
_targetingKeywords = keywordsArray;
return;
}
_sdk.targetingData.keywords = keywordsArray;
}
void _MaxSetTargetingDataInterests(char **interests, int size)
{
if ( !isPluginInitialized() ) return;
_sdk.targetingData.interests = toStringArray(interests, size);
NSArray<NSString *> *interestsArray = interests ? toStringArray(interests, size) : nil;
if ( !_sdk )
{
_targetingInterests = interestsArray;
return;
}
_sdk.targetingData.interests = interestsArray;
}
void _MaxClearAllTargetingData()
{
if ( !isPluginInitialized() ) return;
if ( !_sdk )
{
_targetingYearOfBirth = nil;
_targetingGender = nil;
_targetingMaximumAdContentRating = nil;
_targetingEmail = nil;
_targetingPhoneNumber = nil;
_targetingKeywords = nil;
_targetingInterests = nil;
return;
}
[_sdk.targetingData clearAll];
}
@ -319,7 +433,7 @@ extern "C"
{
if ( !_sdk )
{
NSLog(@"[%@] Failed to get SDK configuration - please ensure the AppLovin MAX Unity Plugin has been initialized by calling 'MaxSdk.InitializeSdk();'!", TAG);
logUninitializedAccessError("_MaxGetSdkConfiguration");
return cStringCopy(@"");
}
@ -329,7 +443,8 @@ extern "C"
return cStringCopy([MAUnityAdManager serializeParameters: @{@"consentDialogState" : consentDialogStateStr,
@"countryCode" : _sdk.configuration.countryCode,
@"appTrackingStatus" : appTrackingStatus,
@"isSuccessfullyInitialized" : ([_sdk isInitialized] ? @"true" : @"false")}]);
@"isSuccessfullyInitialized" : @([_sdk isInitialized]),
@"isTestModeEnabled" : @([_sdk.configuration isTestModeEnabled])}]);
}
void _MaxSetHasUserConsent(bool hasUserConsent)
@ -391,6 +506,13 @@ extern "C"
[_adManager createBannerWithAdUnitIdentifier: NSSTRING(adUnitIdentifier) x: x y: y];
}
void _MaxLoadBanner(const char *adUnitIdentifier)
{
if (!isPluginInitialized()) return;
[_adManager loadBannerWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)];
}
void _MaxSetBannerBackgroundColor(const char *adUnitIdentifier, const char *hexColorCode)
{
if (!isPluginInitialized()) return;
@ -493,6 +615,13 @@ extern "C"
[_adManager createMRecWithAdUnitIdentifier: NSSTRING(adUnitIdentifier) x: x y: y];
}
void _MaxLoadMRec(const char *adUnitIdentifier)
{
if (!isPluginInitialized()) return;
[_adManager loadMRecWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)];
}
void _MaxSetMRecPlacement(const char *adUnitIdentifier, const char *placement)
{
[_adManager setMRecPlacement: NSSTRING(placement) forAdUnitIdentifier: NSSTRING(adUnitIdentifier)];
@ -649,6 +778,41 @@ extern "C"
[_adManager showInterstitialWithAdUnitIdentifier: NSSTRING(adUnitIdentifier) placement: NSSTRING(placement) customData: NSSTRING(customData)];
}
void _MaxLoadAppOpenAd(const char *adUnitIdentifier)
{
if (!isPluginInitialized()) return;
[_adManager loadAppOpenAdWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)];
}
void _MaxSetAppOpenAdExtraParameter(const char *adUnitIdentifier, const char *key, const char *value)
{
[_adManager setAppOpenAdExtraParameterForAdUnitIdentifier: NSSTRING(adUnitIdentifier)
key: NSSTRING(key)
value: NSSTRING(value)];
}
void _MaxSetAppOpenAdLocalExtraParameter(const char *adUnitIdentifier, const char *key, MAUnityRef value)
{
[_adManager setAppOpenAdLocalExtraParameterForAdUnitIdentifier: NSSTRING(adUnitIdentifier)
key: NSSTRING(key)
value: (__bridge id)value];
}
bool _MaxIsAppOpenAdReady(const char *adUnitIdentifier)
{
if (!isPluginInitialized()) return false;
return [_adManager isAppOpenAdReadyWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)];
}
void _MaxShowAppOpenAd(const char *adUnitIdentifier, const char *placement, const char *customData)
{
if (!isPluginInitialized()) return;
[_adManager showAppOpenAdWithAdUnitIdentifier: NSSTRING(adUnitIdentifier) placement: NSSTRING(placement) customData: NSSTRING(customData)];
}
void _MaxLoadRewardedAd(const char *adUnitIdentifier)
{
if (!isPluginInitialized()) return;
@ -789,7 +953,7 @@ extern "C"
{
if ( _sdk )
{
_sdk.settings.isVerboseLogging = enabled;
_sdk.settings.verboseLoggingEnabled = enabled;
_verboseLoggingToSet = nil;
}
else
@ -802,7 +966,7 @@ extern "C"
{
if ( _sdk )
{
return _sdk.settings.isVerboseLogging;
return [_sdk.settings isVerboseLoggingEnabled];
}
else if ( _verboseLoggingToSet )
{
@ -890,11 +1054,38 @@ extern "C"
}
}
const char * _MaxGetCFType()
{
if ( !_sdk )
{
NSLog(@"[%@] Failed to get available mediated networks - please ensure the AppLovin MAX Unity Plugin has been initialized by calling 'MaxSdk.InitializeSdk();'!", TAG);
return cStringCopy(@(ALCFTypeUnknown).stringValue);
}
return cStringCopy(@(_sdk.cfService.cfType).stringValue);
}
void _MaxStartConsentFlow()
{
if (!isPluginInitialized())
{
logUninitializedAccessError("_MaxStartConsentFlow");
return;
}
[_adManager startConsentFlow];
}
float _MaxGetAdaptiveBannerHeight(const float width)
{
return [MAUnityAdManager adaptiveBannerHeightForWidth: width];
}
void logUninitializedAccessError(char *callingMethod)
{
NSLog(@"[%@] Failed to execute: %s - please ensure the AppLovin MAX Unity Plugin has been initialized by calling 'MaxSdk.InitializeSdk();'!", TAG, callingMethod);
}
[[deprecated("This API has been deprecated. Please use our SDK's initialization callback to retrieve variables instead.")]]
void _MaxLoadVariables()
{

Some files were not shown because too many files have changed in this diff Show More