From b5fd9bfb25082293f524574641621e06f2a17ff8 Mon Sep 17 00:00:00 2001 From: huyfei Date: Fri, 1 Mar 2024 13:15:22 +0800 Subject: [PATCH 01/30] =?UTF-8?q?update:=20=E6=B7=BB=E5=8A=A0=20Tradplus?= =?UTF-8?q?=20=E5=B9=BF=E5=91=8A=E6=B8=A0=E9=81=93=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus.meta | 8 ++ TradPlus/Editor.meta | 8 ++ TradPlus/Editor/TradPlusDependencies.xml | 10 +++ TradPlus/Editor/TradPlusDependencies.xml.meta | 7 ++ TradPlus/Editor/TradPlusProguards.txt | 3 + TradPlus/Editor/TradPlusProguards.txt.meta | 3 + TradPlus/Plugins.meta | 8 ++ TradPlus/Plugins/Android.meta | 8 ++ .../Plugins/Android/customsdk_ads_1.0.1.aar | Bin 0 -> 20192 bytes .../Android/customsdk_ads_1.0.1.aar.meta | 32 +++++++ TradPlus/Plugins/iOS.meta | 8 ++ .../iOS/ALMCMediationAdapter.framework.meta | 80 ++++++++++++++++++ .../ALMCMediationAdapter | Bin 0 -> 834048 bytes .../Headers/ALMCMediationAdapter.h | 12 +++ .../ALMCMediationAdapter.framework/Info.plist | Bin 0 -> 770 bytes .../Modules/module.modulemap | 6 ++ 16 files changed, 193 insertions(+) create mode 100644 TradPlus.meta create mode 100644 TradPlus/Editor.meta create mode 100644 TradPlus/Editor/TradPlusDependencies.xml create mode 100644 TradPlus/Editor/TradPlusDependencies.xml.meta create mode 100644 TradPlus/Editor/TradPlusProguards.txt create mode 100644 TradPlus/Editor/TradPlusProguards.txt.meta create mode 100644 TradPlus/Plugins.meta create mode 100644 TradPlus/Plugins/Android.meta create mode 100755 TradPlus/Plugins/Android/customsdk_ads_1.0.1.aar create mode 100644 TradPlus/Plugins/Android/customsdk_ads_1.0.1.aar.meta create mode 100644 TradPlus/Plugins/iOS.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/ALMCMediationAdapter create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap diff --git a/TradPlus.meta b/TradPlus.meta new file mode 100644 index 0000000..e349572 --- /dev/null +++ b/TradPlus.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 847129090316e467da07d301d7fe2d6a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Editor.meta b/TradPlus/Editor.meta new file mode 100644 index 0000000..6c84103 --- /dev/null +++ b/TradPlus/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 69cd91ede3fae4b81ad4140db9a8cca5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml new file mode 100644 index 0000000..2084bb7 --- /dev/null +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/TradPlus/Editor/TradPlusDependencies.xml.meta b/TradPlus/Editor/TradPlusDependencies.xml.meta new file mode 100644 index 0000000..32f20b7 --- /dev/null +++ b/TradPlus/Editor/TradPlusDependencies.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1405ccdb3982d419293e71b7e1a12c4e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Editor/TradPlusProguards.txt b/TradPlus/Editor/TradPlusProguards.txt new file mode 100644 index 0000000..088a00a --- /dev/null +++ b/TradPlus/Editor/TradPlusProguards.txt @@ -0,0 +1,3 @@ +-keep public class com.tradplus.** { *; } +-keep class com.tradplus.ads.** { *; } +-keep class com.applovin.mediation.adapters.** { *; } \ No newline at end of file diff --git a/TradPlus/Editor/TradPlusProguards.txt.meta b/TradPlus/Editor/TradPlusProguards.txt.meta new file mode 100644 index 0000000..51e41f2 --- /dev/null +++ b/TradPlus/Editor/TradPlusProguards.txt.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8513cd65de204676993b21103ed7f456 +timeCreated: 1709172758 \ No newline at end of file diff --git a/TradPlus/Plugins.meta b/TradPlus/Plugins.meta new file mode 100644 index 0000000..33f4212 --- /dev/null +++ b/TradPlus/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41d3732c46b754419835a90e185809c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/Android.meta b/TradPlus/Plugins/Android.meta new file mode 100644 index 0000000..157a237 --- /dev/null +++ b/TradPlus/Plugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d03bc529bb55c463cb001cf6806b9df4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/Android/customsdk_ads_1.0.1.aar b/TradPlus/Plugins/Android/customsdk_ads_1.0.1.aar new file mode 100755 index 0000000000000000000000000000000000000000..b97ea3e28892d53b9b8231d48132b8fa754f4a89 GIT binary patch literal 20192 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 oL#r;LR405!+I6aAP;i$A9D(3TrX^6s@ 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%0AqH8 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 Y<1CC3>s8>PKOse>`V0I&+Pr)BfBb#SMF0Q* literal 0 HcmV?d00001 diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h new file mode 100644 index 0000000..947b01d --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h @@ -0,0 +1,12 @@ + + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ALMCMediationAdapter : ALMediationAdapter + +@end + +NS_ASSUME_NONNULL_END diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..7289ec96c2653a5a3cd209f5e09ff35f61fa3042 GIT binary patch literal 770 zcmZuu%Wl&^6!i=gS{{kpq)%Gfls5&-c0+&#i!@G9l!S)Zc>qz(#GWLhjvqL7MWlid zE5wcuU{Tg=_yK-^6;k(nKv(<$c48}CFq?bNJ?D(>oaxw<3|yZ7!_EVE=IqqD^V2gI zE?&AEi?g$HiRApk;?nZU(v{V<^^Mf#wbb<+H*ekEQrX0gN2p#wTA!GBR~{jiUCtGD zJX5Dw!UvdIwt-EzhI_;^Rdz1o@^7)`xu`?&sbNv~rKC%+qq1v}vS@ZKiD<6xN6xT; zoq^xABla0G{2LMxtRih6^{_Iu{pm_HmHU?ChECaah}k<$dbaJ;Sg%s#b}h#ksBAoP zhNhR2lCun(&|tH;q(suui}xmYyv^)nF!9S$X{3H3DSjIWo08JfEFHJQ8pg*~h)E33 z*p)-`UcKliNiD&#tdEHtvQdXn;u1Wli{jIV=^FOKPG-xMTm|a{ z1>t3NWV^xsi`g>wKSs`Qyi%w%OLc+cIpOGPi&Xno@UhPYmEF`VgG07WG3R%qC0T09)V*D1+BvA9&y$_zb>+@8B2s4UWMHoPskj q29t0BuEP{8zzS@@SFjHa=)oa8gzw=8_>mbM2*#DUAJ(wIPyYa9Na`2> literal 0 HcmV?d00001 diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap new file mode 100644 index 0000000..00e8b3f --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module ALMCMediationAdapter { + umbrella header "ALMCMediationAdapter.h" + + export * + module * { export * } +} From bbd46fc3276af345b64175f90112293f41cdbc94 Mon Sep 17 00:00:00 2001 From: huyfei Date: Fri, 1 Mar 2024 15:47:45 +0800 Subject: [PATCH 02/30] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 47cc287..c375735 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.guru.unity.max", "displayName": "Guru Max", - "version": "1.1.1", + "version": "1.2.0", "description": "Guru 整合 AppLovinMax 插件", "unity": "2020.3", "author": { From 6970aae7a14c47fdb2f709ecd06f76f22f813f10 Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 7 Mar 2024 10:08:29 +0800 Subject: [PATCH 03/30] =?UTF-8?q?update:=20=E3=80=90Unity=E3=80=91-?= =?UTF-8?q?=E3=80=90=E5=8F=98=E7=8E=B0=E3=80=91Verve=20=E5=8F=8C=E7=AB=AF?= =?UTF-8?q?=20MAX=20Adapter=E5=8D=87=E7=BA=A7=E5=88=B0=202.21.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mediation/Verve/Editor/Dependencies.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mediation/Verve/Editor/Dependencies.xml b/Mediation/Verve/Editor/Dependencies.xml index 3bf7c22..bd63e62 100644 --- a/Mediation/Verve/Editor/Dependencies.xml +++ b/Mediation/Verve/Editor/Dependencies.xml @@ -1,12 +1,12 @@ - + https://verve.jfrog.io/artifactory/verve-gradle-release - + From 3cb66461e0908d6fa7c04d695bb43b75ee9e0c67 Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 7 Mar 2024 10:12:14 +0800 Subject: [PATCH 04/30] =?UTF-8?q?=E3=80=90Unity=E3=80=91-=E3=80=90?= =?UTF-8?q?=E5=8F=98=E7=8E=B0=E3=80=91Moloco=20iOS=20=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=88=B0=201.4.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Moloco/Editor/ALMolocoAdapterDependencies.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Moloco/Editor/ALMolocoAdapterDependencies.xml b/Moloco/Editor/ALMolocoAdapterDependencies.xml index ae7de97..0b24e7a 100644 --- a/Moloco/Editor/ALMolocoAdapterDependencies.xml +++ b/Moloco/Editor/ALMolocoAdapterDependencies.xml @@ -5,6 +5,6 @@ - + From 5ae5f096d340d007244db7420561c3ebdb905f44 Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 7 Mar 2024 12:56:35 +0800 Subject: [PATCH 05/30] fix: add meta files For framework files --- TradPlus/Editor/TradPlusProguards.txt.meta | 6 +++++- .../ALMCMediationAdapter.meta | 7 +++++++ .../iOS/ALMCMediationAdapter.framework/Headers.meta | 8 ++++++++ .../Headers/ALMCMediationAdapter.h.meta | 7 +++++++ .../iOS/ALMCMediationAdapter.framework/Info.plist.meta | 7 +++++++ .../iOS/ALMCMediationAdapter.framework/Modules.meta | 8 ++++++++ .../Modules/module.modulemap.meta | 7 +++++++ 7 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/ALMCMediationAdapter.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules.meta create mode 100644 TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap.meta diff --git a/TradPlus/Editor/TradPlusProguards.txt.meta b/TradPlus/Editor/TradPlusProguards.txt.meta index 51e41f2..04717a6 100644 --- a/TradPlus/Editor/TradPlusProguards.txt.meta +++ b/TradPlus/Editor/TradPlusProguards.txt.meta @@ -1,3 +1,7 @@ fileFormatVersion: 2 guid: 8513cd65de204676993b21103ed7f456 -timeCreated: 1709172758 \ No newline at end of file +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/ALMCMediationAdapter.meta b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/ALMCMediationAdapter.meta new file mode 100644 index 0000000..c8f8c38 --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/ALMCMediationAdapter.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1405ccdb3982d419293e71b7e1a12c00 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers.meta b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers.meta new file mode 100644 index 0000000..8f9fbb1 --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b51eede93c8924b12b0f4db859902101 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h.meta b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h.meta new file mode 100644 index 0000000..be5a493 --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Headers/ALMCMediationAdapter.h.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1405ccdb3982d419293e71b7e1a11c00 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist.meta b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist.meta new file mode 100644 index 0000000..6e707cf --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Info.plist.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1405ccdb3982d419293e71b7e1a11c03 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules.meta b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules.meta new file mode 100644 index 0000000..dde32ca --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b51eede93c8924b12b0f4db859902102 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap.meta b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap.meta new file mode 100644 index 0000000..e8d0885 --- /dev/null +++ b/TradPlus/Plugins/iOS/ALMCMediationAdapter.framework/Modules/module.modulemap.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1405ccdb3982d419293e71b7e1a11c01 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 9d9d10e7a21dd817ebd59a251052dfd346fc0f88 Mon Sep 17 00:00:00 2001 From: huyufei Date: Tue, 26 Mar 2024 15:33:48 +0800 Subject: [PATCH 06/30] =?UTF-8?q?update:=20=E6=B7=BB=E5=8A=A0Tradplus?= =?UTF-8?q?=E5=BA=93=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus/Editor/TradPlusDependencies.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml index 2084bb7..3845cc3 100644 --- a/TradPlus/Editor/TradPlusDependencies.xml +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -3,6 +3,9 @@ + + + From 02a4610910c49371d3c8e92aff22272d8bc63385 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 27 Mar 2024 11:19:24 +0800 Subject: [PATCH 07/30] =?UTF-8?q?update:=20=E5=A2=9E=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus/Editor/TradPlusDependencies.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml index 3845cc3..d3a8084 100644 --- a/TradPlus/Editor/TradPlusDependencies.xml +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -3,6 +3,7 @@ + From 81460975c6a41daa652c8f5dd3175bf8b83d4cc6 Mon Sep 17 00:00:00 2001 From: huyufei Date: Fri, 29 Mar 2024 00:15:02 +0800 Subject: [PATCH 08/30] =?UTF-8?q?update:=20=E4=BF=AE=E6=AD=A3=20TP=20?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E5=8F=B7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus/Editor/TradPlusDependencies.xml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml index d3a8084..9f539df 100644 --- a/TradPlus/Editor/TradPlusDependencies.xml +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -1,11 +1,14 @@ + - - - + + + + + From e2ca3de692f9cae572cac19712d94fe967fad03c Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 11 Apr 2024 11:47:43 +0800 Subject: [PATCH 09/30] =?UTF-8?q?update:=20=E5=88=A0=E9=99=A4=E4=BA=86=20H?= =?UTF-8?q?yprMX=20=20=E5=B9=BF=E5=91=8A=E6=BA=90=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mediation/HyprMX.meta | 11 ----------- Mediation/HyprMX/Editor.meta | 11 ----------- Mediation/HyprMX/Editor/Dependencies.xml | 9 --------- Mediation/HyprMX/Editor/Dependencies.xml.meta | 10 ---------- package.json | 2 +- 5 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 Mediation/HyprMX.meta delete mode 100644 Mediation/HyprMX/Editor.meta delete mode 100644 Mediation/HyprMX/Editor/Dependencies.xml delete mode 100644 Mediation/HyprMX/Editor/Dependencies.xml.meta diff --git a/Mediation/HyprMX.meta b/Mediation/HyprMX.meta deleted file mode 100644 index 262c90a..0000000 --- a/Mediation/HyprMX.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8dc9535583b704b6b99d4a8611b2bf58 -labels: -- al_max -- al_max_export_path-MaxSdk/Mediation/HyprMX -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Mediation/HyprMX/Editor.meta b/Mediation/HyprMX/Editor.meta deleted file mode 100644 index d8c9fb1..0000000 --- a/Mediation/HyprMX/Editor.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: a2df7812aaa2840828da41d0ea199d2a -labels: -- al_max -- al_max_export_path-MaxSdk/Mediation/HyprMX/Editor -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Mediation/HyprMX/Editor/Dependencies.xml b/Mediation/HyprMX/Editor/Dependencies.xml deleted file mode 100644 index 1aedbe4..0000000 --- a/Mediation/HyprMX/Editor/Dependencies.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/Mediation/HyprMX/Editor/Dependencies.xml.meta b/Mediation/HyprMX/Editor/Dependencies.xml.meta deleted file mode 100644 index c114479..0000000 --- a/Mediation/HyprMX/Editor/Dependencies.xml.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 3cea11a37596149ce9dfb88bf2317b2d -labels: -- al_max -- al_max_export_path-MaxSdk/Mediation/HyprMX/Editor/Dependencies.xml -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/package.json b/package.json index c375735..eb7917e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "com.guru.unity.max", "displayName": "Guru Max", "version": "1.2.0", - "description": "Guru 整合 AppLovinMax 插件", + "description": "Guru 整合 AppLovin Max 插件", "unity": "2020.3", "author": { "name": "Guru Games" From 3fede100452d964e96ea1ec0e28e4f989dbd0b0f Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 11 Apr 2024 13:39:45 +0800 Subject: [PATCH 10/30] =?UTF-8?q?update:=20=E5=8D=87=E7=BA=A7=20Tradplus?= =?UTF-8?q?=20=E8=87=B3=2011.2.0.1=20=E6=B7=BB=E5=8A=A0=20Meta=20=E5=B9=BF?= =?UTF-8?q?=E5=91=8A=E4=BE=9D=E8=B5=96=206.16.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus/Editor/TradPlusDependencies.xml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml index 9f539df..2247d37 100644 --- a/TradPlus/Editor/TradPlusDependencies.xml +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -1,15 +1,22 @@ + - + + + + + + - - + + + From cf894936b028618def101a61482ae5c5b5b6c1ff Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 11 Apr 2024 15:03:09 +0800 Subject: [PATCH 11/30] =?UTF-8?q?update:=20=E5=8D=87=E7=BA=A7=20Tradplus?= =?UTF-8?q?=20=E7=9A=84=20iOS=20=E7=89=88=E6=9C=AC,=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E9=9A=90=E7=A7=81=E6=B8=85=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus/Editor/TradPlusDependencies.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml index 2247d37..1f59354 100644 --- a/TradPlus/Editor/TradPlusDependencies.xml +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -19,6 +19,6 @@ - + \ No newline at end of file From a71a9f0a49f88cae90582c84756d95b0f502f613 Mon Sep 17 00:00:00 2001 From: huyufei Date: Fri, 31 May 2024 13:56:48 +0800 Subject: [PATCH 12/30] =?UTF-8?q?update:=20=E5=BB=BA=E7=AB=8B=E5=86=85?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=20Mediation=20=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/CodeMods/AmazonMod.cs | 2 +- MaxSdk/Mediation | 1 + MaxSdk/Mediation.meta | 11 +++++++++++ Mediation/BidMachine.meta | 2 +- Mediation/BidMachine/Editor.meta | 2 +- Mediation/BidMachine/Editor/Dependencies.xml.meta | 2 +- Mediation/ByteDance.meta | 2 +- Mediation/ByteDance/Editor.meta | 2 +- Mediation/ByteDance/Editor/Dependencies.xml.meta | 2 +- Mediation/Chartboost.meta | 2 +- Mediation/Chartboost/Editor.meta | 2 +- Mediation/Chartboost/Editor/Dependencies.xml.meta | 2 +- Mediation/Facebook.meta | 2 +- Mediation/Facebook/Editor.meta | 2 +- Mediation/Facebook/Editor/Dependencies.xml.meta | 2 +- Mediation/Fyber.meta | 2 +- Mediation/Fyber/Editor.meta | 2 +- Mediation/Fyber/Editor/Dependencies.xml.meta | 2 +- Mediation/Google.meta | 2 +- Mediation/Google/Editor.meta | 2 +- Mediation/Google/Editor/Dependencies.xml.meta | 2 +- Mediation/GoogleAdManager.meta | 2 +- Mediation/GoogleAdManager/Editor.meta | 2 +- .../GoogleAdManager/Editor/Dependencies.xml.meta | 2 +- Mediation/InMobi.meta | 2 +- Mediation/InMobi/Editor.meta | 2 +- Mediation/InMobi/Editor/Dependencies.xml.meta | 2 +- Mediation/IronSource.meta | 2 +- Mediation/IronSource/Editor.meta | 2 +- Mediation/IronSource/Editor/Dependencies.xml.meta | 2 +- Mediation/MediationAdapters.txt.meta | 2 +- Mediation/Mintegral.meta | 2 +- Mediation/Mintegral/Editor.meta | 2 +- Mediation/Mintegral/Editor/Dependencies.xml.meta | 2 +- Mediation/MobileFuse.meta | 2 +- Mediation/MobileFuse/Editor.meta | 2 +- Mediation/MobileFuse/Editor/Dependencies.xml.meta | 2 +- Mediation/OguryPresage.meta | 2 +- Mediation/OguryPresage/Editor.meta | 2 +- Mediation/OguryPresage/Editor/Dependencies.xml.meta | 2 +- Mediation/Smaato.meta | 2 +- Mediation/Smaato/Editor.meta | 2 +- Mediation/Smaato/Editor/Dependencies.xml.meta | 2 +- Mediation/UnityAds.meta | 2 +- Mediation/UnityAds/Editor.meta | 2 +- Mediation/UnityAds/Editor/Dependencies.xml.meta | 2 +- Mediation/Verve.meta | 2 +- Mediation/Verve/Editor.meta | 2 +- Mediation/Verve/Editor/Dependencies.xml.meta | 2 +- Mediation/Vungle.meta | 2 +- Mediation/Vungle/Editor.meta | 2 +- Mediation/Vungle/Editor/Dependencies.xml.meta | 2 +- Mediation/Yandex.meta | 2 +- Mediation/Yandex/Editor.meta | 2 +- Mediation/Yandex/Editor/Dependencies.xml.meta | 2 +- 55 files changed, 65 insertions(+), 53 deletions(-) create mode 120000 MaxSdk/Mediation create mode 100644 MaxSdk/Mediation.meta diff --git a/Editor/CodeMods/AmazonMod.cs b/Editor/CodeMods/AmazonMod.cs index a9a7fe1..cbf5fb9 100644 --- a/Editor/CodeMods/AmazonMod.cs +++ b/Editor/CodeMods/AmazonMod.cs @@ -23,7 +23,7 @@ namespace Guru.Editor.Max #region 修复依赖 - [Test] + // [Test] public void FixDepsViaPackage() { string path = GetFullPath(TargetPath); diff --git a/MaxSdk/Mediation b/MaxSdk/Mediation new file mode 120000 index 0000000..0315c00 --- /dev/null +++ b/MaxSdk/Mediation @@ -0,0 +1 @@ +../Mediation \ No newline at end of file diff --git a/MaxSdk/Mediation.meta b/MaxSdk/Mediation.meta new file mode 100644 index 0000000..2b5c46b --- /dev/null +++ b/MaxSdk/Mediation.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8ba4aafafc4142d8872c03c93ed10e2 +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mediation/BidMachine.meta b/Mediation/BidMachine.meta index 886f559..a155a34 100644 --- a/Mediation/BidMachine.meta +++ b/Mediation/BidMachine.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2517d55f5a88f4df0a0ad7ccb9536bbd +guid: 4ccf8335cbe894733893a99506649d64 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine diff --git a/Mediation/BidMachine/Editor.meta b/Mediation/BidMachine/Editor.meta index ed614b2..0f55f8a 100644 --- a/Mediation/BidMachine/Editor.meta +++ b/Mediation/BidMachine/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a403837a1ff2b43a48d27bc3d8c38e0b +guid: 6875d282ab1814beda9a74c83a1e2033 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor diff --git a/Mediation/BidMachine/Editor/Dependencies.xml.meta b/Mediation/BidMachine/Editor/Dependencies.xml.meta index e19405f..728410b 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml.meta +++ b/Mediation/BidMachine/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ed022982473dc449790acd436b75f069 +guid: 6716f57979abe40d0ac67d47ff3f4ee9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml diff --git a/Mediation/ByteDance.meta b/Mediation/ByteDance.meta index 8e3115a..0701b09 100644 --- a/Mediation/ByteDance.meta +++ b/Mediation/ByteDance.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8d26d491d3a3a49099fa24d0661bc679 +guid: abf03c4d1a17b410ea1c5ef898b463b3 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance diff --git a/Mediation/ByteDance/Editor.meta b/Mediation/ByteDance/Editor.meta index e24e5a1..6c0f350 100644 --- a/Mediation/ByteDance/Editor.meta +++ b/Mediation/ByteDance/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 134dbb9ef89ad4ce8903caf7e3521068 +guid: efe6f613a3858440a91a6a98aa956a10 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor diff --git a/Mediation/ByteDance/Editor/Dependencies.xml.meta b/Mediation/ByteDance/Editor/Dependencies.xml.meta index 41d1ed1..09fe3f9 100644 --- a/Mediation/ByteDance/Editor/Dependencies.xml.meta +++ b/Mediation/ByteDance/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9e62a8eeacf00427189ab365487c6788 +guid: 14ba36d772bb24ac69a91182ad06eeae labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml diff --git a/Mediation/Chartboost.meta b/Mediation/Chartboost.meta index a37e1ee..9d97017 100644 --- a/Mediation/Chartboost.meta +++ b/Mediation/Chartboost.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cdf0a0280532549aa8edd2572cf9f30a +guid: 453dd0617df0e409a8a9ed0abbc6737b labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost diff --git a/Mediation/Chartboost/Editor.meta b/Mediation/Chartboost/Editor.meta index 2e2a4b2..df27492 100644 --- a/Mediation/Chartboost/Editor.meta +++ b/Mediation/Chartboost/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d9b83756149e3450fbe7adaef44acc7c +guid: ee962b63a5f4f4d78a373d7205499eb9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor diff --git a/Mediation/Chartboost/Editor/Dependencies.xml.meta b/Mediation/Chartboost/Editor/Dependencies.xml.meta index a5b328e..5e570f9 100644 --- a/Mediation/Chartboost/Editor/Dependencies.xml.meta +++ b/Mediation/Chartboost/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cc8d96477a13b42e6bfd4ae014091839 +guid: db27c65062da54385b9e5f8253d44fd9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml diff --git a/Mediation/Facebook.meta b/Mediation/Facebook.meta index da1c256..32b2af8 100644 --- a/Mediation/Facebook.meta +++ b/Mediation/Facebook.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ec86cd1d78d9c4578b1b3d0b9f90a710 +guid: 3631317a15a4247f1bae15b693dab21e labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook diff --git a/Mediation/Facebook/Editor.meta b/Mediation/Facebook/Editor.meta index 268e637..715eeba 100644 --- a/Mediation/Facebook/Editor.meta +++ b/Mediation/Facebook/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9ac0f69a1efee49ce8d4cd94def5f714 +guid: d29c6fda808fe495d9f3727818b8f97d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor diff --git a/Mediation/Facebook/Editor/Dependencies.xml.meta b/Mediation/Facebook/Editor/Dependencies.xml.meta index 53d8169..8dd1a67 100644 --- a/Mediation/Facebook/Editor/Dependencies.xml.meta +++ b/Mediation/Facebook/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2a0ec38138ef947f5b754b5bad86f92b +guid: 031c1b1fb9c434dcb97856235ffc08ea labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor/Dependencies.xml diff --git a/Mediation/Fyber.meta b/Mediation/Fyber.meta index faa443b..9ce13f2 100644 --- a/Mediation/Fyber.meta +++ b/Mediation/Fyber.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e71b6f14515d24ef888a2154168d7dd1 +guid: 06dc5a5a3dde144c1aacb6d136b8fcc4 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber diff --git a/Mediation/Fyber/Editor.meta b/Mediation/Fyber/Editor.meta index 9f2ae2d..4276c07 100644 --- a/Mediation/Fyber/Editor.meta +++ b/Mediation/Fyber/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c295f0d2d07ef40d0b0ee0b7dc588112 +guid: 9ecf3e9844cc94fe0acaa2ba6124c9af labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor diff --git a/Mediation/Fyber/Editor/Dependencies.xml.meta b/Mediation/Fyber/Editor/Dependencies.xml.meta index f9d4b50..42313cb 100644 --- a/Mediation/Fyber/Editor/Dependencies.xml.meta +++ b/Mediation/Fyber/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bcfbfa8036e6743f494cf165c5d9ebbd +guid: c66b8dc9619a24cf9ac0a151845f0973 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor/Dependencies.xml diff --git a/Mediation/Google.meta b/Mediation/Google.meta index 9132c5a..3e7a41e 100644 --- a/Mediation/Google.meta +++ b/Mediation/Google.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 65bddcfa0d4724edc9f072db3d50619b +guid: 833c5c3d5d74547c9b4985e1e36c7f28 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google diff --git a/Mediation/Google/Editor.meta b/Mediation/Google/Editor.meta index c37cd69..2f6b4b6 100644 --- a/Mediation/Google/Editor.meta +++ b/Mediation/Google/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 64d03e7c67a984b1aad2985e257164a3 +guid: b63080205b7a64df3a9c9141e56b71b7 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor diff --git a/Mediation/Google/Editor/Dependencies.xml.meta b/Mediation/Google/Editor/Dependencies.xml.meta index 22bd0a8..4f7df1e 100644 --- a/Mediation/Google/Editor/Dependencies.xml.meta +++ b/Mediation/Google/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 582315940e87e43119fceac61149e436 +guid: 8a57a52c9cc4745c7a02fc6344cbc11d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor/Dependencies.xml diff --git a/Mediation/GoogleAdManager.meta b/Mediation/GoogleAdManager.meta index e2fcd86..ad35b04 100644 --- a/Mediation/GoogleAdManager.meta +++ b/Mediation/GoogleAdManager.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d1f3261de05ff44b683b375ef22f9d02 +guid: cc989ab7258cf470dabc6bb035458c85 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager diff --git a/Mediation/GoogleAdManager/Editor.meta b/Mediation/GoogleAdManager/Editor.meta index 141895d..3a6a19a 100644 --- a/Mediation/GoogleAdManager/Editor.meta +++ b/Mediation/GoogleAdManager/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 19fca049bce7e47ac996d2880fbc43a0 +guid: 06fcb234230844144a02bad06939aad1 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor diff --git a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta index 73a1ed8..a0305fe 100644 --- a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta +++ b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86f0d2d61d3814f31be3b92dc006eaa5 +guid: 86a7b7bed8785495b922ec92fbdaf521 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml diff --git a/Mediation/InMobi.meta b/Mediation/InMobi.meta index b084c24..3a9a8de 100644 --- a/Mediation/InMobi.meta +++ b/Mediation/InMobi.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c255b9935f2d34e549f2952442ba179a +guid: 5a3626a87ed5f4dabbfe5bcf8f5cda36 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi diff --git a/Mediation/InMobi/Editor.meta b/Mediation/InMobi/Editor.meta index fa200df..451b503 100644 --- a/Mediation/InMobi/Editor.meta +++ b/Mediation/InMobi/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6f8cceba06be048318f1772ff089513e +guid: 7c03479be5d9147bc9d9c63603c79be2 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor diff --git a/Mediation/InMobi/Editor/Dependencies.xml.meta b/Mediation/InMobi/Editor/Dependencies.xml.meta index 8a92321..442e972 100644 --- a/Mediation/InMobi/Editor/Dependencies.xml.meta +++ b/Mediation/InMobi/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f1c75ebcc7d8043369cbacd2c0931f64 +guid: f80123953786449aaa52d673669920f8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor/Dependencies.xml diff --git a/Mediation/IronSource.meta b/Mediation/IronSource.meta index 071b8fc..e807526 100644 --- a/Mediation/IronSource.meta +++ b/Mediation/IronSource.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4cd1f6dac423e46c6b945be9139840a1 +guid: 314cdd15fa87b41c5afc065573691c90 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource diff --git a/Mediation/IronSource/Editor.meta b/Mediation/IronSource/Editor.meta index 82f21e5..ad3198e 100644 --- a/Mediation/IronSource/Editor.meta +++ b/Mediation/IronSource/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 07ba0da9896ba451cb315e594d1a5cf7 +guid: 325cfcc591fb94ce38d6308401ec420d labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor diff --git a/Mediation/IronSource/Editor/Dependencies.xml.meta b/Mediation/IronSource/Editor/Dependencies.xml.meta index 8ec4264..1e4cfb8 100644 --- a/Mediation/IronSource/Editor/Dependencies.xml.meta +++ b/Mediation/IronSource/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7bd4c81ab75f74fa58d9b63ee1bb171b +guid: 1c6a5ce7591ae4d37b6d0f675f3766bc labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor/Dependencies.xml diff --git a/Mediation/MediationAdapters.txt.meta b/Mediation/MediationAdapters.txt.meta index 9c21d7c..00db338 100644 --- a/Mediation/MediationAdapters.txt.meta +++ b/Mediation/MediationAdapters.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6dbc0916533df44558be0780f1cdee2d +guid: 22c882201eabb49fca41cac01eebfe73 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MediationAdapters.txt diff --git a/Mediation/Mintegral.meta b/Mediation/Mintegral.meta index c8af0f1..fd74d91 100644 --- a/Mediation/Mintegral.meta +++ b/Mediation/Mintegral.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b179b418a7c854c959f267998d69c97f +guid: f5f25718ee94847cb8188362f460601c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral diff --git a/Mediation/Mintegral/Editor.meta b/Mediation/Mintegral/Editor.meta index f1e3e91..a4cbdc3 100644 --- a/Mediation/Mintegral/Editor.meta +++ b/Mediation/Mintegral/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cb6cec540610743ef8013fd81dac62d5 +guid: 886757cd19e98412eaa46e17c58b37a1 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor diff --git a/Mediation/Mintegral/Editor/Dependencies.xml.meta b/Mediation/Mintegral/Editor/Dependencies.xml.meta index f4c975f..01081bc 100644 --- a/Mediation/Mintegral/Editor/Dependencies.xml.meta +++ b/Mediation/Mintegral/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 601cce40ce64b4e67a94ce92bcb561ec +guid: 7657e222167e74034b81fd58aeea828d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml diff --git a/Mediation/MobileFuse.meta b/Mediation/MobileFuse.meta index c9812a8..1301f12 100644 --- a/Mediation/MobileFuse.meta +++ b/Mediation/MobileFuse.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 658575d78393447b7ab83cad98afe7ff +guid: f6bdf438e26e34c5c86b3a7c14c4478f labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse diff --git a/Mediation/MobileFuse/Editor.meta b/Mediation/MobileFuse/Editor.meta index 7c34371..47dc350 100644 --- a/Mediation/MobileFuse/Editor.meta +++ b/Mediation/MobileFuse/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e7d20afe7dca4408681433ab54b1b872 +guid: d3763fddfba914a28aa1f87814dbb955 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor diff --git a/Mediation/MobileFuse/Editor/Dependencies.xml.meta b/Mediation/MobileFuse/Editor/Dependencies.xml.meta index 0f6bc74..04cf3f5 100644 --- a/Mediation/MobileFuse/Editor/Dependencies.xml.meta +++ b/Mediation/MobileFuse/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 02f8fb577300f42f7908aa5e9b21d4d5 +guid: 1e58dce275fc54ce88493ff5ccfeae31 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml diff --git a/Mediation/OguryPresage.meta b/Mediation/OguryPresage.meta index c3931cc..32dabd7 100644 --- a/Mediation/OguryPresage.meta +++ b/Mediation/OguryPresage.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ae3d550243f384da69dbc99904010d5f +guid: e320c9b94b2ef4d24a2d335d7e8e6af0 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage diff --git a/Mediation/OguryPresage/Editor.meta b/Mediation/OguryPresage/Editor.meta index 632b915..ceec5db 100644 --- a/Mediation/OguryPresage/Editor.meta +++ b/Mediation/OguryPresage/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e2b7e456bd328406faed59484e5eb362 +guid: 030c47ad9a8b6496fba34f69149871a1 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor diff --git a/Mediation/OguryPresage/Editor/Dependencies.xml.meta b/Mediation/OguryPresage/Editor/Dependencies.xml.meta index 5f7a630..f3d02bc 100644 --- a/Mediation/OguryPresage/Editor/Dependencies.xml.meta +++ b/Mediation/OguryPresage/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 279ded09ad5324bffa3c5d6e7db9578e +guid: 758c237e329904088954457fdb87ba8b labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml diff --git a/Mediation/Smaato.meta b/Mediation/Smaato.meta index af45ef7..6ab1ad7 100644 --- a/Mediation/Smaato.meta +++ b/Mediation/Smaato.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6ee2d333aa7f94a828058d15045acd07 +guid: 31fb39f0ce4cb45149e2be734afe2eee labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato diff --git a/Mediation/Smaato/Editor.meta b/Mediation/Smaato/Editor.meta index cccfbaa..79cdb72 100644 --- a/Mediation/Smaato/Editor.meta +++ b/Mediation/Smaato/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0c78826a6fec148b5af5c462901e43cf +guid: f6c06ea6d08f540a2b44494d2045c3a9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor diff --git a/Mediation/Smaato/Editor/Dependencies.xml.meta b/Mediation/Smaato/Editor/Dependencies.xml.meta index 8f3f98c..73d460f 100644 --- a/Mediation/Smaato/Editor/Dependencies.xml.meta +++ b/Mediation/Smaato/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c62a04e9cb46340ceb7a59499814bffa +guid: 14d0359f4b97c49e58e758c0d433d586 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor/Dependencies.xml diff --git a/Mediation/UnityAds.meta b/Mediation/UnityAds.meta index 1232f22..23abdd2 100644 --- a/Mediation/UnityAds.meta +++ b/Mediation/UnityAds.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 525c0162ec7244372a8704eb492d9f0d +guid: 7657c3bbbae364431a4018fceb3e73ea labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds diff --git a/Mediation/UnityAds/Editor.meta b/Mediation/UnityAds/Editor.meta index ddb0128..64e0ea6 100644 --- a/Mediation/UnityAds/Editor.meta +++ b/Mediation/UnityAds/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b3f594e1b5ca4ae79e0071e013628b5 +guid: 4a45c598371f04e8a8dd6e3ba0c32248 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor diff --git a/Mediation/UnityAds/Editor/Dependencies.xml.meta b/Mediation/UnityAds/Editor/Dependencies.xml.meta index 1d3f503..912b685 100644 --- a/Mediation/UnityAds/Editor/Dependencies.xml.meta +++ b/Mediation/UnityAds/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 75d07a832b65343819cfc8a20c396c9a +guid: 526cf04e4feaf4094b1c8e0a81d05989 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml diff --git a/Mediation/Verve.meta b/Mediation/Verve.meta index bdb8631..168765d 100644 --- a/Mediation/Verve.meta +++ b/Mediation/Verve.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bc61dbb6bba8940b597a8452dc6c556c +guid: 26cae42a44e95431e915f219696565a6 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve diff --git a/Mediation/Verve/Editor.meta b/Mediation/Verve/Editor.meta index 4a4e87e..b9970b5 100644 --- a/Mediation/Verve/Editor.meta +++ b/Mediation/Verve/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a141b3a8042714fefb4174419ec3ac7d +guid: a61f04d64a4c94cc6bc60e577a5fd7f1 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor diff --git a/Mediation/Verve/Editor/Dependencies.xml.meta b/Mediation/Verve/Editor/Dependencies.xml.meta index efe782f..47ab1c9 100644 --- a/Mediation/Verve/Editor/Dependencies.xml.meta +++ b/Mediation/Verve/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8d2df032f9cc949f39137a9fd862e50d +guid: 809e66e9d21584530a785ef7ce60ab7c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor/Dependencies.xml diff --git a/Mediation/Vungle.meta b/Mediation/Vungle.meta index 3132bbb..3efcbe4 100644 --- a/Mediation/Vungle.meta +++ b/Mediation/Vungle.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8526f823ec3ed46629c70d981bd740c2 +guid: e9a68256f45ee4d84b431b7ed7cc82da labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle diff --git a/Mediation/Vungle/Editor.meta b/Mediation/Vungle/Editor.meta index 49b1f35..40be2ef 100644 --- a/Mediation/Vungle/Editor.meta +++ b/Mediation/Vungle/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 871241ce4cd6b4f12bcf910851ea900a +guid: d66b464cf19b44d3f98ef564767077ac labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor diff --git a/Mediation/Vungle/Editor/Dependencies.xml.meta b/Mediation/Vungle/Editor/Dependencies.xml.meta index a320489..2b8eda6 100644 --- a/Mediation/Vungle/Editor/Dependencies.xml.meta +++ b/Mediation/Vungle/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f7c80d40bbfa64c91acbde53d1725d85 +guid: 68cfd6c0d3a7a4302a65c6c42b861224 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor/Dependencies.xml diff --git a/Mediation/Yandex.meta b/Mediation/Yandex.meta index d2e675b..a102cce 100644 --- a/Mediation/Yandex.meta +++ b/Mediation/Yandex.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 37406383ebad04e3894254d6259d8b47 +guid: 77b6e7cdc6fc34b94bc778bc3a084822 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex diff --git a/Mediation/Yandex/Editor.meta b/Mediation/Yandex/Editor.meta index 2fa244c..970da3a 100644 --- a/Mediation/Yandex/Editor.meta +++ b/Mediation/Yandex/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: da5c76032402241c2a0e09285c2efeaf +guid: 597d8c56b3c7547fa888d8495d7e4e6a labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor diff --git a/Mediation/Yandex/Editor/Dependencies.xml.meta b/Mediation/Yandex/Editor/Dependencies.xml.meta index 643f1d2..68db3dc 100644 --- a/Mediation/Yandex/Editor/Dependencies.xml.meta +++ b/Mediation/Yandex/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 47944d4ffaaab4067a1d8ce5cab191dc +guid: 4129c39361e094c5da0494d3911ee236 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor/Dependencies.xml From b2303bb334847ef7d3dedf93017e7f705a5b9344 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 5 Jun 2024 15:57:06 +0800 Subject: [PATCH 13/30] =?UTF-8?q?update:=20=E5=88=B7=E6=96=B0Mediation=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=A4=B9=E5=86=85=E7=9A=84=20meta=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mediation/BidMachine.meta | 2 +- Mediation/BidMachine/Editor.meta | 2 +- Mediation/BidMachine/Editor/Dependencies.xml.meta | 2 +- Mediation/ByteDance.meta | 2 +- Mediation/ByteDance/Editor.meta | 2 +- Mediation/ByteDance/Editor/Dependencies.xml.meta | 2 +- Mediation/Chartboost.meta | 2 +- Mediation/Chartboost/Editor.meta | 2 +- Mediation/Chartboost/Editor/Dependencies.xml.meta | 2 +- Mediation/Facebook.meta | 2 +- Mediation/Facebook/Editor.meta | 2 +- Mediation/Facebook/Editor/Dependencies.xml.meta | 2 +- Mediation/Fyber.meta | 2 +- Mediation/Fyber/Editor.meta | 2 +- Mediation/Fyber/Editor/Dependencies.xml.meta | 2 +- Mediation/Google.meta | 2 +- Mediation/Google/Editor.meta | 2 +- Mediation/Google/Editor/Dependencies.xml.meta | 2 +- Mediation/GoogleAdManager.meta | 2 +- Mediation/GoogleAdManager/Editor.meta | 2 +- Mediation/GoogleAdManager/Editor/Dependencies.xml.meta | 2 +- Mediation/InMobi.meta | 2 +- Mediation/InMobi/Editor.meta | 2 +- Mediation/InMobi/Editor/Dependencies.xml.meta | 2 +- Mediation/IronSource.meta | 2 +- Mediation/IronSource/Editor.meta | 2 +- Mediation/IronSource/Editor/Dependencies.xml.meta | 2 +- Mediation/MediationAdapters.txt.meta | 2 +- Mediation/Mintegral.meta | 2 +- Mediation/Mintegral/Editor.meta | 2 +- Mediation/Mintegral/Editor/Dependencies.xml.meta | 2 +- Mediation/MobileFuse.meta | 2 +- Mediation/MobileFuse/Editor.meta | 2 +- Mediation/MobileFuse/Editor/Dependencies.xml.meta | 2 +- Mediation/OguryPresage.meta | 2 +- Mediation/OguryPresage/Editor.meta | 2 +- Mediation/OguryPresage/Editor/Dependencies.xml.meta | 2 +- Mediation/Smaato.meta | 2 +- Mediation/Smaato/Editor.meta | 2 +- Mediation/Smaato/Editor/Dependencies.xml.meta | 2 +- Mediation/UnityAds.meta | 2 +- Mediation/UnityAds/Editor.meta | 2 +- Mediation/UnityAds/Editor/Dependencies.xml.meta | 2 +- Mediation/Verve.meta | 2 +- Mediation/Verve/Editor.meta | 2 +- Mediation/Verve/Editor/Dependencies.xml.meta | 2 +- Mediation/Vungle.meta | 2 +- Mediation/Vungle/Editor.meta | 2 +- Mediation/Vungle/Editor/Dependencies.xml.meta | 2 +- Mediation/Yandex.meta | 2 +- Mediation/Yandex/Editor.meta | 2 +- Mediation/Yandex/Editor/Dependencies.xml.meta | 2 +- 52 files changed, 52 insertions(+), 52 deletions(-) diff --git a/Mediation/BidMachine.meta b/Mediation/BidMachine.meta index a155a34..0db1a77 100644 --- a/Mediation/BidMachine.meta +++ b/Mediation/BidMachine.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4ccf8335cbe894733893a99506649d64 +guid: 5a4e6c1e82db1462f8a77b375f310066 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine diff --git a/Mediation/BidMachine/Editor.meta b/Mediation/BidMachine/Editor.meta index 0f55f8a..367076e 100644 --- a/Mediation/BidMachine/Editor.meta +++ b/Mediation/BidMachine/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6875d282ab1814beda9a74c83a1e2033 +guid: ab3608d83ecb4446a81e1f3cceda3413 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor diff --git a/Mediation/BidMachine/Editor/Dependencies.xml.meta b/Mediation/BidMachine/Editor/Dependencies.xml.meta index 728410b..90f8b70 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml.meta +++ b/Mediation/BidMachine/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6716f57979abe40d0ac67d47ff3f4ee9 +guid: 123f162bdccf1417d8283effdde4fdbd labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml diff --git a/Mediation/ByteDance.meta b/Mediation/ByteDance.meta index 0701b09..02d0de6 100644 --- a/Mediation/ByteDance.meta +++ b/Mediation/ByteDance.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: abf03c4d1a17b410ea1c5ef898b463b3 +guid: b8e9d79594b7846daaa13430b88ceafd labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance diff --git a/Mediation/ByteDance/Editor.meta b/Mediation/ByteDance/Editor.meta index 6c0f350..aa89af8 100644 --- a/Mediation/ByteDance/Editor.meta +++ b/Mediation/ByteDance/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: efe6f613a3858440a91a6a98aa956a10 +guid: b88237e7390c0473caf663fb2ec2093a labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor diff --git a/Mediation/ByteDance/Editor/Dependencies.xml.meta b/Mediation/ByteDance/Editor/Dependencies.xml.meta index 09fe3f9..d5e47bf 100644 --- a/Mediation/ByteDance/Editor/Dependencies.xml.meta +++ b/Mediation/ByteDance/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 14ba36d772bb24ac69a91182ad06eeae +guid: e40f7461260e84fce92b6baa166d3ac5 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml diff --git a/Mediation/Chartboost.meta b/Mediation/Chartboost.meta index 9d97017..9241140 100644 --- a/Mediation/Chartboost.meta +++ b/Mediation/Chartboost.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 453dd0617df0e409a8a9ed0abbc6737b +guid: 736e27be8f4514d63bb1f9e77e789d71 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost diff --git a/Mediation/Chartboost/Editor.meta b/Mediation/Chartboost/Editor.meta index df27492..82ec3c2 100644 --- a/Mediation/Chartboost/Editor.meta +++ b/Mediation/Chartboost/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ee962b63a5f4f4d78a373d7205499eb9 +guid: 5fc6a042b090a4a41af5345f13644aef labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor diff --git a/Mediation/Chartboost/Editor/Dependencies.xml.meta b/Mediation/Chartboost/Editor/Dependencies.xml.meta index 5e570f9..485897b 100644 --- a/Mediation/Chartboost/Editor/Dependencies.xml.meta +++ b/Mediation/Chartboost/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: db27c65062da54385b9e5f8253d44fd9 +guid: ce9cd7b936c30476a80116051627795e labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml diff --git a/Mediation/Facebook.meta b/Mediation/Facebook.meta index 32b2af8..f402243 100644 --- a/Mediation/Facebook.meta +++ b/Mediation/Facebook.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3631317a15a4247f1bae15b693dab21e +guid: c12845df8707d4636928493032036922 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook diff --git a/Mediation/Facebook/Editor.meta b/Mediation/Facebook/Editor.meta index 715eeba..f28dd12 100644 --- a/Mediation/Facebook/Editor.meta +++ b/Mediation/Facebook/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d29c6fda808fe495d9f3727818b8f97d +guid: d41a4deeadbbe49b4abdb8c33ed8adff labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor diff --git a/Mediation/Facebook/Editor/Dependencies.xml.meta b/Mediation/Facebook/Editor/Dependencies.xml.meta index 8dd1a67..457996c 100644 --- a/Mediation/Facebook/Editor/Dependencies.xml.meta +++ b/Mediation/Facebook/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 031c1b1fb9c434dcb97856235ffc08ea +guid: 6b42926a78dd2468db1fc059229e6fa2 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor/Dependencies.xml diff --git a/Mediation/Fyber.meta b/Mediation/Fyber.meta index 9ce13f2..e2489ac 100644 --- a/Mediation/Fyber.meta +++ b/Mediation/Fyber.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 06dc5a5a3dde144c1aacb6d136b8fcc4 +guid: 2ddb16b7ed77641b0b48e4dcb5eb9313 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber diff --git a/Mediation/Fyber/Editor.meta b/Mediation/Fyber/Editor.meta index 4276c07..a1acfa3 100644 --- a/Mediation/Fyber/Editor.meta +++ b/Mediation/Fyber/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9ecf3e9844cc94fe0acaa2ba6124c9af +guid: d1f48f8173f79496ab742e75fc4cbc93 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor diff --git a/Mediation/Fyber/Editor/Dependencies.xml.meta b/Mediation/Fyber/Editor/Dependencies.xml.meta index 42313cb..d377240 100644 --- a/Mediation/Fyber/Editor/Dependencies.xml.meta +++ b/Mediation/Fyber/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c66b8dc9619a24cf9ac0a151845f0973 +guid: ab63c200561ab4506b77e71f6019ca9a labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor/Dependencies.xml diff --git a/Mediation/Google.meta b/Mediation/Google.meta index 3e7a41e..e448707 100644 --- a/Mediation/Google.meta +++ b/Mediation/Google.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 833c5c3d5d74547c9b4985e1e36c7f28 +guid: 4c314c382c139449288577824fed1f00 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google diff --git a/Mediation/Google/Editor.meta b/Mediation/Google/Editor.meta index 2f6b4b6..7135f87 100644 --- a/Mediation/Google/Editor.meta +++ b/Mediation/Google/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b63080205b7a64df3a9c9141e56b71b7 +guid: 81a5cd1881bd74bb18b6a4e152979ad9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor diff --git a/Mediation/Google/Editor/Dependencies.xml.meta b/Mediation/Google/Editor/Dependencies.xml.meta index 4f7df1e..13d9fb6 100644 --- a/Mediation/Google/Editor/Dependencies.xml.meta +++ b/Mediation/Google/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8a57a52c9cc4745c7a02fc6344cbc11d +guid: ac3c45d913a734c548c6a8a224624bc9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor/Dependencies.xml diff --git a/Mediation/GoogleAdManager.meta b/Mediation/GoogleAdManager.meta index ad35b04..41cf27a 100644 --- a/Mediation/GoogleAdManager.meta +++ b/Mediation/GoogleAdManager.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cc989ab7258cf470dabc6bb035458c85 +guid: 0f32d9bbb13cf4fca977f251fe8ae54e labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager diff --git a/Mediation/GoogleAdManager/Editor.meta b/Mediation/GoogleAdManager/Editor.meta index 3a6a19a..3c86239 100644 --- a/Mediation/GoogleAdManager/Editor.meta +++ b/Mediation/GoogleAdManager/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 06fcb234230844144a02bad06939aad1 +guid: 309e4978918794c339a5b06630ca4380 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor diff --git a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta index a0305fe..33b6e61 100644 --- a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta +++ b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86a7b7bed8785495b922ec92fbdaf521 +guid: ec7fdc0ed9424436a9dc4b3ec60c4d45 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml diff --git a/Mediation/InMobi.meta b/Mediation/InMobi.meta index 3a9a8de..d9c7c4f 100644 --- a/Mediation/InMobi.meta +++ b/Mediation/InMobi.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5a3626a87ed5f4dabbfe5bcf8f5cda36 +guid: d1f591c6c71fe43c39ebd8362cdee42f labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi diff --git a/Mediation/InMobi/Editor.meta b/Mediation/InMobi/Editor.meta index 451b503..342a48d 100644 --- a/Mediation/InMobi/Editor.meta +++ b/Mediation/InMobi/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7c03479be5d9147bc9d9c63603c79be2 +guid: f0ca013590c6e4cada30f485e014d804 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor diff --git a/Mediation/InMobi/Editor/Dependencies.xml.meta b/Mediation/InMobi/Editor/Dependencies.xml.meta index 442e972..e473693 100644 --- a/Mediation/InMobi/Editor/Dependencies.xml.meta +++ b/Mediation/InMobi/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f80123953786449aaa52d673669920f8 +guid: fc006bb35419a4f759875a1db7b0c002 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor/Dependencies.xml diff --git a/Mediation/IronSource.meta b/Mediation/IronSource.meta index e807526..2a8455f 100644 --- a/Mediation/IronSource.meta +++ b/Mediation/IronSource.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 314cdd15fa87b41c5afc065573691c90 +guid: 29324d5f5bc2a4b25a629f8172371077 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource diff --git a/Mediation/IronSource/Editor.meta b/Mediation/IronSource/Editor.meta index ad3198e..afadae6 100644 --- a/Mediation/IronSource/Editor.meta +++ b/Mediation/IronSource/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 325cfcc591fb94ce38d6308401ec420d +guid: bc7cc0a01f21649f5beb12578ad01088 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor diff --git a/Mediation/IronSource/Editor/Dependencies.xml.meta b/Mediation/IronSource/Editor/Dependencies.xml.meta index 1e4cfb8..814c463 100644 --- a/Mediation/IronSource/Editor/Dependencies.xml.meta +++ b/Mediation/IronSource/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1c6a5ce7591ae4d37b6d0f675f3766bc +guid: 3877ffad630d74094a5bc7f0ce771e9d labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor/Dependencies.xml diff --git a/Mediation/MediationAdapters.txt.meta b/Mediation/MediationAdapters.txt.meta index 00db338..629fd0b 100644 --- a/Mediation/MediationAdapters.txt.meta +++ b/Mediation/MediationAdapters.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 22c882201eabb49fca41cac01eebfe73 +guid: 9a04a93e5a00046f498986cbab8a41ce labels: - al_max - al_max_export_path-MaxSdk/Mediation/MediationAdapters.txt diff --git a/Mediation/Mintegral.meta b/Mediation/Mintegral.meta index fd74d91..8ddb06b 100644 --- a/Mediation/Mintegral.meta +++ b/Mediation/Mintegral.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f5f25718ee94847cb8188362f460601c +guid: 6f2161264cc274e589af866b30e9c171 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral diff --git a/Mediation/Mintegral/Editor.meta b/Mediation/Mintegral/Editor.meta index a4cbdc3..20640a0 100644 --- a/Mediation/Mintegral/Editor.meta +++ b/Mediation/Mintegral/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 886757cd19e98412eaa46e17c58b37a1 +guid: 050a1eb04323a43ae89766193d45c211 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor diff --git a/Mediation/Mintegral/Editor/Dependencies.xml.meta b/Mediation/Mintegral/Editor/Dependencies.xml.meta index 01081bc..55781cf 100644 --- a/Mediation/Mintegral/Editor/Dependencies.xml.meta +++ b/Mediation/Mintegral/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7657e222167e74034b81fd58aeea828d +guid: 424c8ca120d1c445fa71535de1415d06 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml diff --git a/Mediation/MobileFuse.meta b/Mediation/MobileFuse.meta index 1301f12..a653835 100644 --- a/Mediation/MobileFuse.meta +++ b/Mediation/MobileFuse.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f6bdf438e26e34c5c86b3a7c14c4478f +guid: cdd55135b2b1445ff98507c60a6e8fb3 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse diff --git a/Mediation/MobileFuse/Editor.meta b/Mediation/MobileFuse/Editor.meta index 47dc350..80d7226 100644 --- a/Mediation/MobileFuse/Editor.meta +++ b/Mediation/MobileFuse/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d3763fddfba914a28aa1f87814dbb955 +guid: a428cd8127ca14c1eb4c36b44d66c00d labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor diff --git a/Mediation/MobileFuse/Editor/Dependencies.xml.meta b/Mediation/MobileFuse/Editor/Dependencies.xml.meta index 04cf3f5..351ee30 100644 --- a/Mediation/MobileFuse/Editor/Dependencies.xml.meta +++ b/Mediation/MobileFuse/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1e58dce275fc54ce88493ff5ccfeae31 +guid: 4b1c644f7bf454f848c5d23b2f83f994 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml diff --git a/Mediation/OguryPresage.meta b/Mediation/OguryPresage.meta index 32dabd7..5a49830 100644 --- a/Mediation/OguryPresage.meta +++ b/Mediation/OguryPresage.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e320c9b94b2ef4d24a2d335d7e8e6af0 +guid: 1498439a98d054421a655f46c1b0a979 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage diff --git a/Mediation/OguryPresage/Editor.meta b/Mediation/OguryPresage/Editor.meta index ceec5db..4de35f7 100644 --- a/Mediation/OguryPresage/Editor.meta +++ b/Mediation/OguryPresage/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 030c47ad9a8b6496fba34f69149871a1 +guid: 89202f48ff6c24437ab9b72c14e6592c labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor diff --git a/Mediation/OguryPresage/Editor/Dependencies.xml.meta b/Mediation/OguryPresage/Editor/Dependencies.xml.meta index f3d02bc..636a78e 100644 --- a/Mediation/OguryPresage/Editor/Dependencies.xml.meta +++ b/Mediation/OguryPresage/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 758c237e329904088954457fdb87ba8b +guid: 44e217a01f9b04d3c9a17d8e95b9e2c8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml diff --git a/Mediation/Smaato.meta b/Mediation/Smaato.meta index 6ab1ad7..8d062a3 100644 --- a/Mediation/Smaato.meta +++ b/Mediation/Smaato.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 31fb39f0ce4cb45149e2be734afe2eee +guid: f03bf15dfdfd444a7a8ef23206461549 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato diff --git a/Mediation/Smaato/Editor.meta b/Mediation/Smaato/Editor.meta index 79cdb72..1ede9d2 100644 --- a/Mediation/Smaato/Editor.meta +++ b/Mediation/Smaato/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f6c06ea6d08f540a2b44494d2045c3a9 +guid: 55478c656b4ea4a1b9fa81760007214c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor diff --git a/Mediation/Smaato/Editor/Dependencies.xml.meta b/Mediation/Smaato/Editor/Dependencies.xml.meta index 73d460f..ef60ec1 100644 --- a/Mediation/Smaato/Editor/Dependencies.xml.meta +++ b/Mediation/Smaato/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 14d0359f4b97c49e58e758c0d433d586 +guid: b74b1ad0814994aef880c11dc374a1b3 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor/Dependencies.xml diff --git a/Mediation/UnityAds.meta b/Mediation/UnityAds.meta index 23abdd2..ffed24d 100644 --- a/Mediation/UnityAds.meta +++ b/Mediation/UnityAds.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7657c3bbbae364431a4018fceb3e73ea +guid: 34596ba2f74a64f4692da45ed21c7d2f labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds diff --git a/Mediation/UnityAds/Editor.meta b/Mediation/UnityAds/Editor.meta index 64e0ea6..dc727f1 100644 --- a/Mediation/UnityAds/Editor.meta +++ b/Mediation/UnityAds/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4a45c598371f04e8a8dd6e3ba0c32248 +guid: 66b580ac41d5c4e9f8b96348f42cdef6 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor diff --git a/Mediation/UnityAds/Editor/Dependencies.xml.meta b/Mediation/UnityAds/Editor/Dependencies.xml.meta index 912b685..8b61ec3 100644 --- a/Mediation/UnityAds/Editor/Dependencies.xml.meta +++ b/Mediation/UnityAds/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 526cf04e4feaf4094b1c8e0a81d05989 +guid: d5d70db07cd3d4c90866131f5ff2ec5e labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml diff --git a/Mediation/Verve.meta b/Mediation/Verve.meta index 168765d..8d4004b 100644 --- a/Mediation/Verve.meta +++ b/Mediation/Verve.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 26cae42a44e95431e915f219696565a6 +guid: 465b78190ecd34d2ebb66bbdb663b8f7 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve diff --git a/Mediation/Verve/Editor.meta b/Mediation/Verve/Editor.meta index b9970b5..ac65b44 100644 --- a/Mediation/Verve/Editor.meta +++ b/Mediation/Verve/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a61f04d64a4c94cc6bc60e577a5fd7f1 +guid: 1c0f8f4536e924c7daeb4e07b8a89fbd labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor diff --git a/Mediation/Verve/Editor/Dependencies.xml.meta b/Mediation/Verve/Editor/Dependencies.xml.meta index 47ab1c9..fdab316 100644 --- a/Mediation/Verve/Editor/Dependencies.xml.meta +++ b/Mediation/Verve/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 809e66e9d21584530a785ef7ce60ab7c +guid: ecb5509aa8c6f4e1781b9658779c7f70 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor/Dependencies.xml diff --git a/Mediation/Vungle.meta b/Mediation/Vungle.meta index 3efcbe4..eb5cffa 100644 --- a/Mediation/Vungle.meta +++ b/Mediation/Vungle.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e9a68256f45ee4d84b431b7ed7cc82da +guid: 08ce07f8736a1441499e151152b0a8c8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle diff --git a/Mediation/Vungle/Editor.meta b/Mediation/Vungle/Editor.meta index 40be2ef..2614207 100644 --- a/Mediation/Vungle/Editor.meta +++ b/Mediation/Vungle/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d66b464cf19b44d3f98ef564767077ac +guid: 415ba661fb43149518f25c225fc5486a labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor diff --git a/Mediation/Vungle/Editor/Dependencies.xml.meta b/Mediation/Vungle/Editor/Dependencies.xml.meta index 2b8eda6..79d2da0 100644 --- a/Mediation/Vungle/Editor/Dependencies.xml.meta +++ b/Mediation/Vungle/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 68cfd6c0d3a7a4302a65c6c42b861224 +guid: d8eb42a2c132f43e59186bc28da6006e labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor/Dependencies.xml diff --git a/Mediation/Yandex.meta b/Mediation/Yandex.meta index a102cce..d280060 100644 --- a/Mediation/Yandex.meta +++ b/Mediation/Yandex.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 77b6e7cdc6fc34b94bc778bc3a084822 +guid: 927af5b2250834fd5be82687e53be6ba labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex diff --git a/Mediation/Yandex/Editor.meta b/Mediation/Yandex/Editor.meta index 970da3a..02d78cd 100644 --- a/Mediation/Yandex/Editor.meta +++ b/Mediation/Yandex/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 597d8c56b3c7547fa888d8495d7e4e6a +guid: 57d88d0ec30464840aa603ef3533b7f6 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor diff --git a/Mediation/Yandex/Editor/Dependencies.xml.meta b/Mediation/Yandex/Editor/Dependencies.xml.meta index 68db3dc..faadb36 100644 --- a/Mediation/Yandex/Editor/Dependencies.xml.meta +++ b/Mediation/Yandex/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4129c39361e094c5da0494d3911ee236 +guid: eac827b694b384eedb459cbb1637e3f1 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor/Dependencies.xml From 62762e29f7dc5106f928b8afe5024c9c6395088e Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 17 Apr 2024 10:21:05 +0800 Subject: [PATCH 14/30] =?UTF-8?q?update:=20=E5=8D=87=E7=BA=A7=20tradplus?= =?UTF-8?q?=20=E7=9A=84=20iOS=20Adapter=20->=20=2011.2.0=20+=20facebook=20?= =?UTF-8?q?adapter=206.15.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TradPlus/Editor/TradPlusDependencies.xml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/TradPlus/Editor/TradPlusDependencies.xml b/TradPlus/Editor/TradPlusDependencies.xml index 1f59354..832c8a3 100644 --- a/TradPlus/Editor/TradPlusDependencies.xml +++ b/TradPlus/Editor/TradPlusDependencies.xml @@ -19,6 +19,9 @@ - + + + + - \ No newline at end of file + From f5bedf497933595361b1aac367871884262afffb Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 17 Apr 2024 10:21:30 +0800 Subject: [PATCH 15/30] =?UTF-8?q?update:=20=E5=8D=87=E7=BA=A7=20moloco=20a?= =?UTF-8?q?dapter=20(iOS)=20->=202.1.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Moloco/Editor/ALMolocoAdapterDependencies.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Moloco/Editor/ALMolocoAdapterDependencies.xml b/Moloco/Editor/ALMolocoAdapterDependencies.xml index 0b24e7a..3f14858 100644 --- a/Moloco/Editor/ALMolocoAdapterDependencies.xml +++ b/Moloco/Editor/ALMolocoAdapterDependencies.xml @@ -5,6 +5,6 @@ - + From cd00d7bda0f4e8c0524e25dd0d08d4ca7210f2c9 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 17 Apr 2024 10:29:11 +0800 Subject: [PATCH 16/30] update: pubmatic sdk -> 3.1.0 iOS+Android -> 3.4.0 --- .../Editor/OpenWrapSDKDependencies.xml | 21 ++++---- .../Android/Models/POBDataProviderClient.cs | 2 +- .../Android/Models/POBRequestClient.cs | 7 ++- .../Android/Models/POBUserInfoClient.cs | 14 ------ .../Platform/Android/OpenWrapSDKClient.cs | 44 ----------------- OpenWrapSDK/Platform/Android/POBConstants.cs | 2 + .../Common/Interfaces/IPOBUserInfoClient.cs | 5 -- .../Platform/iOS/Models/POBUserInfoClient.cs | 17 ------- OpenWrapSDK/Platform/iOS/OpenWrapSDKClient.cs | 24 ---------- .../Plugins/OpenWrapSDK/iOS/POBUInterface.m | 15 ------ .../OpenWrapSDK/iOS/POBUModelsInterface.m | 7 +-- OpenWrapSDK/Public/Models/POBUserInfo.cs | 18 ------- OpenWrapSDK/Public/POBOpenWrapSDK.cs | 48 +------------------ 13 files changed, 21 insertions(+), 203 deletions(-) diff --git a/OpenWrapSDK/Editor/OpenWrapSDKDependencies.xml b/OpenWrapSDK/Editor/OpenWrapSDKDependencies.xml index bdbc57e..6df94d9 100644 --- a/OpenWrapSDK/Editor/OpenWrapSDKDependencies.xml +++ b/OpenWrapSDK/Editor/OpenWrapSDKDependencies.xml @@ -1,19 +1,20 @@ - + - + + https://github.com/CocoaPods/Specs - - - - https://repo.pubmatic.com/artifactory/public-repos - - - - + + + + + https://repo.pubmatic.com/artifactory/public-repos + + + diff --git a/OpenWrapSDK/Platform/Android/Models/POBDataProviderClient.cs b/OpenWrapSDK/Platform/Android/Models/POBDataProviderClient.cs index 2baa717..33fa93e 100644 --- a/OpenWrapSDK/Platform/Android/Models/POBDataProviderClient.cs +++ b/OpenWrapSDK/Platform/Android/Models/POBDataProviderClient.cs @@ -116,7 +116,7 @@ namespace OpenWrapSDK.Android if (dataProvider != null && segment != null) { POBLog.Info(Tag, POBLogStrings.ClientRemoveSegmentLog); - dataProvider.Call("removeSegment", segment.Identifier); + dataProvider.Call("removeSegment", segment.Identifier); } else { diff --git a/OpenWrapSDK/Platform/Android/Models/POBRequestClient.cs b/OpenWrapSDK/Platform/Android/Models/POBRequestClient.cs index 00d7d6d..dc30e48 100644 --- a/OpenWrapSDK/Platform/Android/Models/POBRequestClient.cs +++ b/OpenWrapSDK/Platform/Android/Models/POBRequestClient.cs @@ -134,7 +134,9 @@ namespace OpenWrapSDK.Android { if (RequestObject != null) { - return RequestObject.Call("getVersionId"); + AndroidJavaObject versionIdObj = RequestObject.Call("getVersionId"); + return versionIdObj.Call("intValue"); + } return 0; } @@ -210,7 +212,8 @@ namespace OpenWrapSDK.Android { if (RequestObject != null) { - RequestObject.Call("setVersionId", versionId); + AndroidJavaObject versionIdObj = new AndroidJavaObject(POBConstants.IntegerClassName,versionId); + RequestObject.Call("setVersionId", versionIdObj); } } } diff --git a/OpenWrapSDK/Platform/Android/Models/POBUserInfoClient.cs b/OpenWrapSDK/Platform/Android/Models/POBUserInfoClient.cs index f3468e8..c4a2d76 100644 --- a/OpenWrapSDK/Platform/Android/Models/POBUserInfoClient.cs +++ b/OpenWrapSDK/Platform/Android/Models/POBUserInfoClient.cs @@ -87,20 +87,6 @@ namespace OpenWrapSDK.Android } } - ///

- /// Country code using ISO-3166-1-alpha-3. - /// - public string Country - { - set - { - if (userInfo != null) - { - userInfo.Call("setCountry", value); - } - } - } - /// /// City of user /// diff --git a/OpenWrapSDK/Platform/Android/OpenWrapSDKClient.cs b/OpenWrapSDK/Platform/Android/OpenWrapSDKClient.cs index 54d4e75..6e31703 100644 --- a/OpenWrapSDK/Platform/Android/OpenWrapSDKClient.cs +++ b/OpenWrapSDK/Platform/Android/OpenWrapSDKClient.cs @@ -75,22 +75,6 @@ namespace OpenWrapSDK.Android OpenWrapSDKClass.CallStatic("allowLocationAccess", allow); } - /// - /// Set the CCPA compliant string, it helps publisher toward compliance with the California Consumer Privacy Act (CCPA). - /// For more details refer https://www.iab.com/guidelines/ccpa-framework/ - /// Make sure that the string value you use is compliant with the IAB Specification, refer - /// https://iabtechlab.com/wp-content/uploads/2019/11/U.S.-Privacy-String-v1.0-IAB-Tech-Lab.pdf - ///

- /// If this is not set, SDK looks for app's default SharedPreference with key 'IABUSPrivacy_String' - /// If CCPA is applied through both options, the SDK will honour only API property. - /// If both are not set then CCPA parameter is omitted from an ad request. - ///

- /// is the CCPA compliant string - public static void SetCCPA(string ccpaString) - { - OpenWrapSDKClass.CallStatic("setCCPA", ccpaString); - } - /// /// Indicates whether the visitor is COPPA-specific or not. /// For COPPA(Children's Online Privacy Protection Act) compliance, if the visitor's age is @@ -105,34 +89,6 @@ namespace OpenWrapSDK.Android OpenWrapSDKClass.CallStatic("setCoppa", enable); } - /// - /// Sets GDPR consent string, A valid Base64 encoded consent string as per - /// https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework. - /// The user consent string is optional, but highly recommended if the request is subject to GDPR - /// regulations(i.e.gdpr = true). The default sense of consent under GDPR is "opt-out" and - /// as such, an omitted consent string in a request subject to GDPR would be interpreted as - /// equivalent to the user fully opting out of all defined purposes for data use by all parties. - /// - /// consent string to convey user consent when GDPR regulations are in effect. - public static void SetGDPRConsent(string gdprConsent) - { - OpenWrapSDKClass.CallStatic("setGDPRConsent", gdprConsent); - } - - /// - /// Sets GDPR compliance, it indicates whether or not the ad request is GDPR(General Data Protection Regulation) compliant. - /// - /// - /// boolean value - /// - true : indicates GDPR compliant requests - /// - false : indicates that the request is not GDPR compliant - /// By default, this parameter is omitted in the ad request, indicating Unknown. - /// - public static void SetGDPREnabled(bool enable) - { - OpenWrapSDKClass.CallStatic("setGDPREnabled", enable); - } - /// /// Sets user's location and its source. It is useful in delivering geographically relevant ads. ///

diff --git a/OpenWrapSDK/Platform/Android/POBConstants.cs b/OpenWrapSDK/Platform/Android/POBConstants.cs index 489c3e1..e9f3eba 100644 --- a/OpenWrapSDK/Platform/Android/POBConstants.cs +++ b/OpenWrapSDK/Platform/Android/POBConstants.cs @@ -43,6 +43,8 @@ namespace OpenWrapSDK.Android internal readonly static string POBRewardedAdCallbackInterfaceName = "com.pubmatic.unity.openwrapsdk.POBUnityRewardedAdListener"; internal readonly static string POBExternalUserIdClassName = "com.pubmatic.sdk.common.models.POBExternalUserId"; internal readonly static string POBDataProviderClassName = "com.pubmatic.sdk.common.models.POBDataProvider"; + internal readonly static string IntegerClassName = "java.lang.Integer"; + } } #endif diff --git a/OpenWrapSDK/Platform/Common/Interfaces/IPOBUserInfoClient.cs b/OpenWrapSDK/Platform/Common/Interfaces/IPOBUserInfoClient.cs index b840771..ea10f98 100644 --- a/OpenWrapSDK/Platform/Common/Interfaces/IPOBUserInfoClient.cs +++ b/OpenWrapSDK/Platform/Common/Interfaces/IPOBUserInfoClient.cs @@ -45,11 +45,6 @@ namespace OpenWrapSDK.Common ///

POBGender Gender { set; } - /// - /// Country code using ISO-3166-1-alpha-3. - /// - string Country { set; } - /// /// City of user /// diff --git a/OpenWrapSDK/Platform/iOS/Models/POBUserInfoClient.cs b/OpenWrapSDK/Platform/iOS/Models/POBUserInfoClient.cs index 1175d17..f21e558 100644 --- a/OpenWrapSDK/Platform/iOS/Models/POBUserInfoClient.cs +++ b/OpenWrapSDK/Platform/iOS/Models/POBUserInfoClient.cs @@ -56,9 +56,6 @@ namespace OpenWrapSDK.iOS [DllImport("__Internal")] internal static extern void POBUSetUserInfoRegion(IntPtr userInfo, string region); - [DllImport("__Internal")] - internal static extern void POBUSetUserInfoCountry(IntPtr userInfo, string country); - [DllImport("__Internal")] internal static extern void POBUSetUserInfoKeywords(IntPtr userInfo, string keywords); @@ -127,20 +124,6 @@ namespace OpenWrapSDK.iOS } } - /// - /// Country code using ISO-3166-1-alpha-3. - /// - public string Country - { - set - { - if (userInfoPtr != IntPtr.Zero) - { - POBUSetUserInfoCountry(userInfoPtr, value); - } - } - } - /// /// City of user /// diff --git a/OpenWrapSDK/Platform/iOS/OpenWrapSDKClient.cs b/OpenWrapSDK/Platform/iOS/OpenWrapSDKClient.cs index 0835ad3..8cd465b 100644 --- a/OpenWrapSDK/Platform/iOS/OpenWrapSDKClient.cs +++ b/OpenWrapSDK/Platform/iOS/OpenWrapSDKClient.cs @@ -50,12 +50,6 @@ namespace OpenWrapSDK.iOS [DllImport("__Internal")] internal static extern void POBUSetLogLevel(int logLevel); - [DllImport("__Internal")] - internal static extern void POBUSetGDPREnabled(bool enable); - - [DllImport("__Internal")] - internal static extern void POBUSetGDPRConsent(string gdprConsent); - [DllImport("__Internal")] internal static extern void POBUAllowLocationAccess(bool enable); @@ -77,9 +71,6 @@ namespace OpenWrapSDK.iOS [DllImport("__Internal")] internal static extern void POBUAllowAVAudioSessionAccess(bool allow); - [DllImport("__Internal")] - internal static extern void POBUSetCCPA(string ccpaString); - [DllImport("__Internal")] internal static extern void POBUSetApplicationInfo(ref POBApplicationInfoInternal appInfoInternal); @@ -123,26 +114,11 @@ namespace OpenWrapSDK.iOS POBUAllowLocationAccess(allow); } - public static void SetCCPA(string ccpaString) - { - POBUSetCCPA(ccpaString); - } - public static void SetCOPPAEnabled(bool enable) { POBUSetCOPPAEnabled(enable); } - public static void SetGDPRConsent(string gdprConsent) - { - POBUSetGDPRConsent(gdprConsent); - } - - public static void SetGDPREnabled(bool enable) - { - POBUSetGDPREnabled(enable); - } - public static void SetLocation(double longitude, double latitude, POBLocSource source) { POBUSetLocation(longitude, latitude, ((int)source)); diff --git a/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUInterface.m b/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUInterface.m index d1b5b4b..ca918b3 100644 --- a/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUInterface.m +++ b/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUInterface.m @@ -38,16 +38,6 @@ void POBUSetLogLevel(NSInteger logLevel) { } } -// Set GDPR enabled -void POBUSetGDPREnabled(BOOL enable) { - [OpenWrapSDK setGDPREnabled:enable]; -} - -// Set GDPR consent -void POBUSetGDPRConsent(const char* gdprConsent) { - [OpenWrapSDK setGDPRConsent:[POBUUtil POBUNSStringFromCharsArray:gdprConsent]]; -} - // Set allow location access void POBUAllowLocationAccess(BOOL enable) { [OpenWrapSDK allowLocationAccess:enable]; @@ -86,11 +76,6 @@ void POBUAllowAVAudioSessionAccess(BOOL allow) { [OpenWrapSDK allowAVAudioSessionAccess:allow]; } -// Set CCPA -void POBUSetCCPA(const char *ccpaString) { - [OpenWrapSDK setCCPA:[POBUUtil POBUNSStringFromCharsArray:ccpaString]]; -} - // Set POBApplicationInfo void POBUSetApplicationInfo(POBApplicationInfoInternal *appInfoInternal) { POBApplicationInfo *applicationInfo = [[POBApplicationInfo alloc] init]; diff --git a/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUModelsInterface.m b/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUModelsInterface.m index fee9e54..66b45bd 100644 --- a/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUModelsInterface.m +++ b/OpenWrapSDK/Plugins/OpenWrapSDK/iOS/POBUModelsInterface.m @@ -57,11 +57,6 @@ void POBUSetUserInfoRegion(POBUUserInfoRef userInfo, const char *region) { internalUserInfo.region = [POBUUtil POBUNSStringFromCharsArray:region]; } -void POBUSetUserInfoCountry(POBUUserInfoRef userInfo, const char *country) { - POBUserInfo *internalUserInfo = (__bridge POBUserInfo *)userInfo; - internalUserInfo.country = [POBUUtil POBUNSStringFromCharsArray:country]; -} - void POBUSetUserInfoKeywords(POBUUserInfoRef userInfo, const char *keywords) { POBUserInfo *internalUserInfo = (__bridge POBUserInfo *)userInfo; internalUserInfo.keywords = [POBUUtil POBUNSStringFromCharsArray:keywords]; @@ -178,7 +173,7 @@ void POBUBidSetHasWon(POBUTypeBidRef bid, bool hasWon) { // Get the PubMatic partner id const char* POBUBidGetPubMaticPartnerId(POBUTypeBidRef bid) { POBBid *internalBid = (__bridge POBBid *)bid; - return [POBUUtil POBUCharArrayFromNSString:internalBid.pubmaticPartnerId]; + return [POBUUtil POBUCharArrayFromNSString:internalBid.partner]; } /// Get targeting information diff --git a/OpenWrapSDK/Public/Models/POBUserInfo.cs b/OpenWrapSDK/Public/Models/POBUserInfo.cs index b9850d9..f1d396c 100644 --- a/OpenWrapSDK/Public/Models/POBUserInfo.cs +++ b/OpenWrapSDK/Public/Models/POBUserInfo.cs @@ -38,7 +38,6 @@ namespace OpenWrapSDK private string zip; private string city; private string region; - private string country; private string keywords; #endregion @@ -130,23 +129,6 @@ namespace OpenWrapSDK } } - /// - /// Country code using ISO-3166-1-alpha-3. - /// - public string Country - { - get => country; - - set - { - country = value; - if (client != null) - { - client.Country = value; - } - } - } - /// /// City of user /// diff --git a/OpenWrapSDK/Public/POBOpenWrapSDK.cs b/OpenWrapSDK/Public/POBOpenWrapSDK.cs index 6c2924c..997819a 100644 --- a/OpenWrapSDK/Public/POBOpenWrapSDK.cs +++ b/OpenWrapSDK/Public/POBOpenWrapSDK.cs @@ -31,7 +31,7 @@ namespace OpenWrapSDK private static List externalUserIds = new List(); // OpenWrap SDK plugin version. Please make sure to update it with every release. - private static readonly string OpenWrapSDKPluginVersion = "3.0.0"; + private static readonly string OpenWrapSDKPluginVersion = "3.1.0"; private static readonly string Tag = "POBOpenWrapSDK"; @@ -70,34 +70,6 @@ namespace OpenWrapSDK #endif } - /// - /// Sets GDPR compliance, it indicates whether or not the ad request is GDPR(General Data Protection Regulation) compliant. - /// - true : indicates GDPR compliant requests - ///
- false : indicates that the request is not GDPR compliant
- ///
- /// bool value - public static void SetGDPREnabled(bool enable) - { -#if UNITY_IOS - iOS.OpenWrapSDKClient.SetGDPREnabled(enable); -#else - Android.OpenWrapSDKClient.SetGDPREnabled(enable); -#endif - } - - /// - /// Sets GDPR consent string, A valid Base64 encoded consent string as per - /// - /// - public static void SetGDPRConsent(string gdprConsent) - { -#if UNITY_IOS - iOS.OpenWrapSDKClient.SetGDPRConsent(gdprConsent); -#else - Android.OpenWrapSDKClient.SetGDPRConsent(gdprConsent); -#endif - } - /// /// Used to enable/disable location access. ///
This value decides whether the OpenWrap SDK should access device location usings Core Location APIs to serve location-based ads. When set to NO, the SDK will not attempt to access device location. When set to YES, the SDK will periodically try to fetch location efficiently. @@ -202,24 +174,6 @@ namespace OpenWrapSDK } #endif - /// - /// Set the CCPA compliant string, it helps publisher toward compliance with the California Consumer Privacy Act (CCPA). - ///
For more details refer https://www.iab.com/guidelines/ccpa-framework/ - ///
Make sure that the string value you use is compliant with the IAB Specification, refer https://iabtechlab.com/wp-content/uploads/2019/11/U.S.-Privacy-String-v1.0-IAB-Tech-Lab.pdf - ///
If this is not set, SDK looks for app's NSUserDefault with key 'IABUSPrivacy_String' - ///
If CCPA is applied through both options, the SDK will honour only API property. - ///
If both are not set then CCPA parameter is omitted from an ad request. - ///
- /// The CCPA compliant string - public static void SetCCPA(string ccpaString) - { -#if UNITY_IOS - iOS.OpenWrapSDKClient.SetCCPA(ccpaString); -#else - Android.OpenWrapSDKClient.SetCCPA(ccpaString); -#endif - } - /// /// Sets Application information, which contains various attributes about app, such as ///
application category, store URL, domain, etc for more relevant ads. From 6a5002f40a3a2b156a1003531c31491891d5b8f3 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 17 Apr 2024 10:50:35 +0800 Subject: [PATCH 17/30] =?UTF-8?q?update:=20=E5=8D=87=E7=BA=A7=20MAXSDK=20?= =?UTF-8?q?=E8=87=B3=206.4.1=20=E5=8F=8C=E7=AB=AF=20=20a:12.4.2=20=20=20?= =?UTF-8?q?=20i:=2012.4.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Conflicts: # MaxSdk/Mediation.meta # MaxSdk/Mediation/BidMachine.meta # MaxSdk/Mediation/BidMachine/Editor.meta # MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml.meta # MaxSdk/Mediation/ByteDance.meta # MaxSdk/Mediation/ByteDance/Editor.meta # MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Chartboost.meta # MaxSdk/Mediation/Chartboost/Editor.meta # MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Facebook.meta # MaxSdk/Mediation/Facebook/Editor.meta # MaxSdk/Mediation/Facebook/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Fyber.meta # MaxSdk/Mediation/Fyber/Editor.meta # MaxSdk/Mediation/Fyber/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Google.meta # MaxSdk/Mediation/Google/Editor.meta # MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta # MaxSdk/Mediation/GoogleAdManager.meta # MaxSdk/Mediation/GoogleAdManager/Editor.meta # MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta # MaxSdk/Mediation/InMobi.meta # MaxSdk/Mediation/InMobi/Editor.meta # MaxSdk/Mediation/InMobi/Editor/Dependencies.xml.meta # MaxSdk/Mediation/IronSource.meta # MaxSdk/Mediation/IronSource/Editor.meta # MaxSdk/Mediation/IronSource/Editor/Dependencies.xml.meta # MaxSdk/Mediation/MediationAdapters.txt.meta # MaxSdk/Mediation/Mintegral.meta # MaxSdk/Mediation/Mintegral/Editor.meta # MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml.meta # MaxSdk/Mediation/MobileFuse.meta # MaxSdk/Mediation/MobileFuse/Editor.meta # MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml.meta # MaxSdk/Mediation/OguryPresage.meta # MaxSdk/Mediation/OguryPresage/Editor.meta # MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Smaato.meta # MaxSdk/Mediation/Smaato/Editor.meta # MaxSdk/Mediation/Smaato/Editor/Dependencies.xml.meta # MaxSdk/Mediation/UnityAds.meta # MaxSdk/Mediation/UnityAds/Editor.meta # MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Verve.meta # MaxSdk/Mediation/Verve/Editor.meta # MaxSdk/Mediation/Verve/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Vungle.meta # MaxSdk/Mediation/Vungle/Editor.meta # MaxSdk/Mediation/Vungle/Editor/Dependencies.xml.meta # MaxSdk/Mediation/Yandex.meta # MaxSdk/Mediation/Yandex/Editor.meta # MaxSdk/Mediation/Yandex/Editor/Dependencies.xml.meta # MaxSdk/Mediation~HEAD --- MaxSdk/AppLovin/Editor/Dependencies.xml | 4 +- .../Android/applovin-max-unity-plugin.aar | Bin 77731 -> 72375 bytes .../AppLovin/Plugins/iOS/MAUnityAdManager.h | 8 - .../AppLovin/Plugins/iOS/MAUnityAdManager.m | 763 +++++++++--------- MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm | 104 +-- MaxSdk/Mediation.meta | 2 +- .../Mediation}/BidMachine.meta | 2 +- .../Mediation}/BidMachine/Editor.meta | 2 +- .../BidMachine/Editor/Dependencies.xml | 4 +- .../BidMachine/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/ByteDance.meta | 2 +- .../Mediation}/ByteDance/Editor.meta | 2 +- .../ByteDance/Editor/Dependencies.xml | 4 +- .../ByteDance/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/Chartboost.meta | 2 +- .../Mediation}/Chartboost/Editor.meta | 2 +- .../Chartboost/Editor/Dependencies.xml | 4 +- .../Chartboost/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Facebook.meta | 2 +- .../Mediation}/Facebook/Editor.meta | 2 +- .../Facebook/Editor/Dependencies.xml | 4 +- .../Facebook/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Fyber.meta | 2 +- .../Mediation}/Fyber/Editor.meta | 2 +- .../Mediation}/Fyber/Editor/Dependencies.xml | 4 +- .../Fyber/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Google.meta | 2 +- .../Mediation}/Google/Editor.meta | 2 +- .../Mediation}/Google/Editor/Dependencies.xml | 4 +- .../Google/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/GoogleAdManager.meta | 2 +- .../Mediation}/GoogleAdManager/Editor.meta | 2 +- .../GoogleAdManager/Editor/Dependencies.xml | 4 +- .../Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/InMobi.meta | 2 +- .../Mediation}/InMobi/Editor.meta | 2 +- .../Mediation}/InMobi/Editor/Dependencies.xml | 4 +- .../InMobi/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/IronSource.meta | 2 +- .../Mediation}/IronSource/Editor.meta | 2 +- .../IronSource/Editor/Dependencies.xml | 4 +- .../IronSource/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/MediationAdapters.txt | 0 .../Mediation}/MediationAdapters.txt.meta | 2 +- .../Mediation}/Mintegral.meta | 2 +- .../Mediation}/Mintegral/Editor.meta | 2 +- .../Mintegral/Editor/Dependencies.xml | 4 +- .../Mintegral/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/MobileFuse.meta | 2 +- .../Mediation}/MobileFuse/Editor.meta | 2 +- .../MobileFuse/Editor/Dependencies.xml | 4 +- .../MobileFuse/Editor/Dependencies.xml.meta | 2 +- .../Mediation}/OguryPresage.meta | 2 +- .../Mediation}/OguryPresage/Editor.meta | 2 +- .../OguryPresage/Editor/Dependencies.xml | 4 +- .../OguryPresage/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Smaato.meta | 2 +- .../Mediation}/Smaato/Editor.meta | 2 +- .../Mediation}/Smaato/Editor/Dependencies.xml | 4 +- .../Smaato/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/UnityAds.meta | 2 +- .../Mediation}/UnityAds/Editor.meta | 2 +- .../UnityAds/Editor/Dependencies.xml | 4 +- .../UnityAds/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Verve.meta | 2 +- .../Mediation}/Verve/Editor.meta | 2 +- .../Mediation}/Verve/Editor/Dependencies.xml | 4 +- .../Verve/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Vungle.meta | 2 +- .../Mediation}/Vungle/Editor.meta | 2 +- .../Mediation}/Vungle/Editor/Dependencies.xml | 4 +- .../Vungle/Editor/Dependencies.xml.meta | 2 +- {Mediation => MaxSdk/Mediation}/Yandex.meta | 2 +- .../Mediation}/Yandex/Editor.meta | 2 +- .../Mediation}/Yandex/Editor/Dependencies.xml | 4 +- .../Yandex/Editor/Dependencies.xml.meta | 2 +- MaxSdk/{Mediation => Mediation~HEAD} | 0 MaxSdk/Scripts/Editor.meta | 11 - .../Editor/MaxPostProcessBuildAndroid.cs.meta | 14 - .../Scripts/Editor/MaxPostProcessBuildiOS.cs | 590 -------------- .../Editor/MaxPostProcessBuildiOS.cs.meta | 14 - .../Editor/MaxSdk.Scripts.Editor.asmdef | 11 - .../Editor/MaxSdk.Scripts.Editor.asmdef.meta | 6 - .../Editor/AppLovinAutoUpdater.cs | 2 - .../Editor/AppLovinInitialize.cs} | 15 +- .../Editor/AppLovinIntegrationManager.cs | 30 +- .../AppLovinIntegrationManagerWindow.cs | 36 +- ...nuItems.cs.backup => AppLovinMenuItems.cs} | 0 .../Editor/AppLovinMenuItems.cs.backup.meta | 10 - .../Editor/AppLovinPostProcessAndroid.cs} | 151 +++- .../Editor/AppLovinPostProcessiOS.cs | 631 ++++++++++++++- .../Editor/AppLovinProcessGradleBuildFile.cs | 2 +- .../Editor/AppLovinSettings.cs | 31 +- MaxSdk/Scripts/MaxEventExecutor.cs | 108 +++ ...ation.cs.meta => MaxEventExecutor.cs.meta} | 4 +- MaxSdk/Scripts/MaxSdk.cs | 2 +- MaxSdk/Scripts/MaxSdkAndroid.cs | 264 +++--- MaxSdk/Scripts/MaxSdkBase.cs | 53 +- MaxSdk/Scripts/MaxSdkCallbacks.cs | 385 ++++----- MaxSdk/Scripts/MaxSdkUnityEditor.cs | 279 +++---- MaxSdk/Scripts/MaxSdkUtils.cs | 115 ++- MaxSdk/Scripts/MaxSdkiOS.cs | 286 +++---- Mediation.meta | 11 - 103 files changed, 2037 insertions(+), 2077 deletions(-) rename {Mediation => MaxSdk/Mediation}/BidMachine.meta (83%) rename {Mediation => MaxSdk/Mediation}/BidMachine/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/BidMachine/Editor/Dependencies.xml (92%) rename {Mediation => MaxSdk/Mediation}/BidMachine/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/ByteDance.meta (83%) rename {Mediation => MaxSdk/Mediation}/ByteDance/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/ByteDance/Editor/Dependencies.xml (92%) rename {Mediation => MaxSdk/Mediation}/ByteDance/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/Chartboost.meta (83%) rename {Mediation => MaxSdk/Mediation}/Chartboost/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/Chartboost/Editor/Dependencies.xml (94%) rename {Mediation => MaxSdk/Mediation}/Chartboost/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/Facebook.meta (83%) rename {Mediation => MaxSdk/Mediation}/Facebook/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Facebook/Editor/Dependencies.xml (95%) rename {Mediation => MaxSdk/Mediation}/Facebook/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/Fyber.meta (83%) rename {Mediation => MaxSdk/Mediation}/Fyber/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Fyber/Editor/Dependencies.xml (92%) rename {Mediation => MaxSdk/Mediation}/Fyber/Editor/Dependencies.xml.meta (83%) rename {Mediation => MaxSdk/Mediation}/Google.meta (83%) rename {Mediation => MaxSdk/Mediation}/Google/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Google/Editor/Dependencies.xml (92%) rename {Mediation => MaxSdk/Mediation}/Google/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/GoogleAdManager.meta (83%) rename {Mediation => MaxSdk/Mediation}/GoogleAdManager/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/GoogleAdManager/Editor/Dependencies.xml (88%) rename {Mediation => MaxSdk/Mediation}/GoogleAdManager/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/InMobi.meta (83%) rename {Mediation => MaxSdk/Mediation}/InMobi/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/InMobi/Editor/Dependencies.xml (94%) rename {Mediation => MaxSdk/Mediation}/InMobi/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/IronSource.meta (83%) rename {Mediation => MaxSdk/Mediation}/IronSource/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/IronSource/Editor/Dependencies.xml (91%) rename {Mediation => MaxSdk/Mediation}/IronSource/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/MediationAdapters.txt (100%) rename {Mediation => MaxSdk/Mediation}/MediationAdapters.txt.meta (75%) rename {Mediation => MaxSdk/Mediation}/Mintegral.meta (83%) rename {Mediation => MaxSdk/Mediation}/Mintegral/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/Mintegral/Editor/Dependencies.xml (93%) rename {Mediation => MaxSdk/Mediation}/Mintegral/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/MobileFuse.meta (83%) rename {Mediation => MaxSdk/Mediation}/MobileFuse/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/MobileFuse/Editor/Dependencies.xml (88%) rename {Mediation => MaxSdk/Mediation}/MobileFuse/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/OguryPresage.meta (83%) rename {Mediation => MaxSdk/Mediation}/OguryPresage/Editor.meta (84%) rename {Mediation => MaxSdk/Mediation}/OguryPresage/Editor/Dependencies.xml (91%) rename {Mediation => MaxSdk/Mediation}/OguryPresage/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/Smaato.meta (83%) rename {Mediation => MaxSdk/Mediation}/Smaato/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Smaato/Editor/Dependencies.xml (94%) rename {Mediation => MaxSdk/Mediation}/Smaato/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/UnityAds.meta (83%) rename {Mediation => MaxSdk/Mediation}/UnityAds/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/UnityAds/Editor/Dependencies.xml (89%) rename {Mediation => MaxSdk/Mediation}/UnityAds/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/Verve.meta (83%) rename {Mediation => MaxSdk/Mediation}/Verve/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Verve/Editor/Dependencies.xml (79%) rename {Mediation => MaxSdk/Mediation}/Verve/Editor/Dependencies.xml.meta (83%) rename {Mediation => MaxSdk/Mediation}/Vungle.meta (83%) rename {Mediation => MaxSdk/Mediation}/Vungle/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Vungle/Editor/Dependencies.xml (90%) rename {Mediation => MaxSdk/Mediation}/Vungle/Editor/Dependencies.xml.meta (84%) rename {Mediation => MaxSdk/Mediation}/Yandex.meta (83%) rename {Mediation => MaxSdk/Mediation}/Yandex/Editor.meta (83%) rename {Mediation => MaxSdk/Mediation}/Yandex/Editor/Dependencies.xml (69%) rename {Mediation => MaxSdk/Mediation}/Yandex/Editor/Dependencies.xml.meta (84%) rename MaxSdk/{Mediation => Mediation~HEAD} (100%) delete mode 100644 MaxSdk/Scripts/Editor.meta delete mode 100644 MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs.meta delete mode 100644 MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs delete mode 100644 MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs.meta delete mode 100644 MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef delete mode 100644 MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef.meta rename MaxSdk/Scripts/{Editor/MaxInitialization.cs => IntegrationManager/Editor/AppLovinInitialize.cs} (93%) rename MaxSdk/Scripts/IntegrationManager/Editor/{AppLovinMenuItems.cs.backup => AppLovinMenuItems.cs} (100%) delete mode 100644 MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta rename MaxSdk/Scripts/{Editor/MaxPostProcessBuildAndroid.cs => IntegrationManager/Editor/AppLovinPostProcessAndroid.cs} (59%) create mode 100644 MaxSdk/Scripts/MaxEventExecutor.cs rename MaxSdk/Scripts/{Editor/MaxInitialization.cs.meta => MaxEventExecutor.cs.meta} (68%) delete mode 100644 Mediation.meta diff --git a/MaxSdk/AppLovin/Editor/Dependencies.xml b/MaxSdk/AppLovin/Editor/Dependencies.xml index e94d30e..0bb9011 100644 --- a/MaxSdk/AppLovin/Editor/Dependencies.xml +++ b/MaxSdk/AppLovin/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar b/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar index 7575a83f9d679fe478789f7cdf453f3e5970ae4b..60a43f07cd4eee29e02484e0f310f2861e7a1492 100644 GIT binary patch delta 72063 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 IQDlkXYfa?fAUye9r0cc6dxz7V<`^XAKSElJ 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
    mHEVX2ao=;|dhO$Io8u0; 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 delta 77483 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%0AP&Nl4^a0Dc4p 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 *adViewPositions; @property (nonatomic, strong) NSMutableDictionary *adViewOffsets; @property (nonatomic, strong) NSMutableDictionary *adViewWidths; -@property (nonatomic, strong) NSMutableDictionary *crossPromoAdViewHeights; -@property (nonatomic, strong) NSMutableDictionary *crossPromoAdViewRotations; @property (nonatomic, strong) NSMutableDictionary *verticalAdViewFormats; @property (nonatomic, strong) NSMutableDictionary *> *adViewConstraints; @property (nonatomic, strong) NSMutableDictionary *> *adViewExtraParametersToSetAfterCreate; @@ -117,8 +121,6 @@ static ALUnityBackgroundCallback backgroundCallback; self.adViewPositions = [NSMutableDictionary dictionaryWithCapacity: 2]; self.adViewOffsets = [NSMutableDictionary dictionaryWithCapacity: 2]; self.adViewWidths = [NSMutableDictionary dictionaryWithCapacity: 2]; - self.crossPromoAdViewHeights = [NSMutableDictionary dictionaryWithCapacity: 2]; - self.crossPromoAdViewRotations = [NSMutableDictionary dictionaryWithCapacity: 2]; self.verticalAdViewFormats = [NSMutableDictionary dictionaryWithCapacity: 2]; self.adViewConstraints = [NSMutableDictionary dictionaryWithCapacity: 2]; self.adViewExtraParametersToSetAfterCreate = [NSMutableDictionary dictionaryWithCapacity: 1]; @@ -188,19 +190,21 @@ static ALUnityBackgroundCallback backgroundCallback; self.sdk.mediationProvider = @"max"; [self.sdk initializeSdkWithCompletionHandler:^(ALSdkConfiguration *configuration) { - // Note: internal state should be updated first - completionHandler( configuration ); - - NSString *consentFlowUserGeographyStr = @(configuration.consentFlowUserGeography).stringValue; - NSString *consentDialogStateStr = @(configuration.consentDialogState).stringValue; - NSString *appTrackingStatus = @(configuration.appTrackingTransparencyStatus).stringValue; // Deliberately name it `appTrackingStatus` to be a bit more generic (in case Android introduces a similar concept) - [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkInitializedEvent", - @"consentFlowUserGeography" : consentFlowUserGeographyStr, - @"consentDialogState" : consentDialogStateStr, - @"countryCode" : configuration.countryCode, - @"appTrackingStatus" : appTrackingStatus, - @"isSuccessfullyInitialized" : @([self.sdk isInitialized]), - @"isTestModeEnabled" : @([configuration isTestModeEnabled])}]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + // Note: internal state should be updated first + completionHandler( configuration ); + + NSString *consentFlowUserGeographyStr = @(configuration.consentFlowUserGeography).stringValue; + NSString *consentDialogStateStr = @(configuration.consentDialogState).stringValue; + NSString *appTrackingStatus = @(configuration.appTrackingTransparencyStatus).stringValue; // Deliberately name it `appTrackingStatus` to be a bit more generic (in case Android introduces a similar concept) + [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkInitializedEvent", + @"consentFlowUserGeography" : consentFlowUserGeographyStr, + @"consentDialogState" : consentDialogStateStr, + @"countryCode" : configuration.countryCode, + @"appTrackingStatus" : appTrackingStatus, + @"isSuccessfullyInitialized" : @([self.sdk isInitialized]), + @"isTestModeEnabled" : @([configuration isTestModeEnabled])}]; + }); }]; return self.sdk; @@ -387,49 +391,6 @@ static ALUnityBackgroundCallback backgroundCallback; return [self adViewLayoutForAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.mrec]; } -#pragma mark - Cross Promo Ads - -- (void)createCrossPromoAdWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier x:(CGFloat)xOffset y:(CGFloat)yOffset width:(CGFloat)width height:(CGFloat)height rotation:(CGFloat)rotation -{ - self.adViewWidths[adUnitIdentifier] = @(width); - self.crossPromoAdViewHeights[adUnitIdentifier] = @(height); - self.crossPromoAdViewRotations[adUnitIdentifier] = @(rotation); - [self createAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo atPosition: DEFAULT_AD_VIEW_POSITION withOffset: CGPointMake(xOffset, yOffset)]; -} - -- (void)setCrossPromoAdPlacement:(nullable NSString *)placement forAdUnitIdentifier:(nullable NSString *)adUnitIdentifier -{ - [self setAdViewPlacement: placement forAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo]; -} - -- (void)updateCrossPromoAdPositionForAdUnitIdentifier:(nullable NSString *)adUnitIdentifier x:(CGFloat)xOffset y:(CGFloat)yOffset width:(CGFloat)width height:(CGFloat)height rotation:(CGFloat)rotation -{ - self.adViewWidths[adUnitIdentifier] = @(width); - self.crossPromoAdViewHeights[adUnitIdentifier] = @(height); - self.crossPromoAdViewRotations[adUnitIdentifier] = @(rotation); - [self updateAdViewPosition: DEFAULT_AD_VIEW_POSITION withOffset: CGPointMake(xOffset, yOffset) forAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo]; -} - -- (void)showCrossPromoAdWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier -{ - [self showAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo]; -} - -- (void)destroyCrossPromoAdWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier -{ - [self destroyAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo]; -} - -- (void)hideCrossPromoAdWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier -{ - [self hideAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo]; -} - -- (NSString *)crossPromoAdLayoutForAdUnitIdentifier:(nullable NSString *)adUnitIdentifier -{ - return [self adViewLayoutForAdUnitIdentifier: adUnitIdentifier adFormat: MAAdFormat.crossPromo]; -} - #pragma mark - Interstitials - (void)loadInterstitialWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier @@ -594,7 +555,7 @@ static ALUnityBackgroundCallback backgroundCallback; - (NSString *)adInfoForAdUnitIdentifier:(nullable NSString *)adUnitIdentifier { - if ( [adUnitIdentifier al_isValidString] ) return @""; + if ( ![adUnitIdentifier al_isValidString] ) return @""; MAAd *ad = [self adWithAdUnitIdentifier: adUnitIdentifier]; if ( !ad ) return @""; @@ -613,6 +574,7 @@ static ALUnityBackgroundCallback backgroundCallback; @"revenue" : [@(ad.revenue) stringValue], @"revenuePrecision" : ad.revenuePrecision, @"waterfallInfo" : [self createAdWaterfallInfo: ad.waterfall], + @"latencyMillis" : [self requestLatencyMillisFromRequestLatency: ad.requestLatency], @"dspName" : ad.DSPName ?: @""}; } @@ -631,11 +593,9 @@ static ALUnityBackgroundCallback backgroundCallback; { [networkResponsesArray addObject: [self createNetworkResponseInfo: response]]; } - waterfallInfoDict[@"networkResponses"] = networkResponsesArray; - // Convert latency from seconds to milliseconds to match Android. - long latencyMillis = waterfallInfo.latency * 1000; - waterfallInfoDict[@"latencyMillis"] = @(latencyMillis).stringValue; + waterfallInfoDict[@"networkResponses"] = networkResponsesArray; + waterfallInfoDict[@"latencyMillis"] = [self requestLatencyMillisFromRequestLatency: waterfallInfo.latency]; return waterfallInfoDict; } @@ -668,13 +628,12 @@ static ALUnityBackgroundCallback backgroundCallback; errorObject[@"errorMessage"] = error.message; errorObject[@"adLoadFailure"] = error.adLoadFailureInfo; errorObject[@"errorCode"] = @(error.code).stringValue; + errorObject[@"latencyMillis"] = [self requestLatencyMillisFromRequestLatency: error.requestLatency]; networkResponseDict[@"error"] = errorObject; } - // Convert latency from seconds to milliseconds to match Android. - long latencySeconds = response.latency * 1000; - networkResponseDict[@"latencyMillis"] = @(latencySeconds).stringValue; + networkResponseDict[@"latencyMillis"] = [self requestLatencyMillisFromRequestLatency: response.latency]; return networkResponseDict; } @@ -708,10 +667,6 @@ static ALUnityBackgroundCallback backgroundCallback; { name = @"OnMRecAdLoadedEvent"; } - else if ( MAAdFormat.crossPromo == adFormat ) - { - name = @"OnCrossPromoAdLoadedEvent"; - } else { name = @"OnBannerAdLoadedEvent"; @@ -747,115 +702,117 @@ static ALUnityBackgroundCallback backgroundCallback; return; } - @synchronized ( self.adInfoDictLock ) - { - self.adInfoDict[ad.adUnitIdentifier] = ad; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + @synchronized ( self.adInfoDictLock ) + { + self.adInfoDict[ad.adUnitIdentifier] = ad; + } + + NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didFailToLoadAdForAdUnitIdentifier:(NSString *)adUnitIdentifier withError:(MAError *)error { - if ( !adUnitIdentifier ) - { - [self log: @"adUnitIdentifier cannot be nil from %@", [NSThread callStackSymbols]]; - return; - } - - NSString *name; - if ( self.adViews[adUnitIdentifier] ) - { - MAAdFormat *adFormat = self.adViewAdFormats[adUnitIdentifier]; - if ( MAAdFormat.mrec == adFormat ) + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + if ( !adUnitIdentifier ) { - name = @"OnMRecAdLoadFailedEvent"; + [self log: @"adUnitIdentifier cannot be nil from %@", [NSThread callStackSymbols]]; + return; } - else if ( MAAdFormat.crossPromo == adFormat ) + + NSString *name; + if ( self.adViews[adUnitIdentifier] ) { - name = @"OnCrossPromoAdLoadFailedEvent"; + MAAdFormat *adFormat = self.adViewAdFormats[adUnitIdentifier]; + if ( MAAdFormat.mrec == adFormat ) + { + name = @"OnMRecAdLoadFailedEvent"; + } + else + { + name = @"OnBannerAdLoadFailedEvent"; + } + } + else if ( self.interstitials[adUnitIdentifier] ) + { + name = @"OnInterstitialLoadFailedEvent"; + } + else if ( self.appOpenAds[adUnitIdentifier] ) + { + name = @"OnAppOpenAdLoadFailedEvent"; + } + else if ( self.rewardedAds[adUnitIdentifier] ) + { + name = @"OnRewardedAdLoadFailedEvent"; + } + else if ( self.rewardedInterstitialAds[adUnitIdentifier] ) + { + name = @"OnRewardedInterstitialAdLoadFailedEvent"; } else { - name = @"OnBannerAdLoadFailedEvent"; + [self log: @"invalid adUnitId from %@", [NSThread callStackSymbols]]; + return; } - } - else if ( self.interstitials[adUnitIdentifier] ) - { - name = @"OnInterstitialLoadFailedEvent"; - } - else if ( self.appOpenAds[adUnitIdentifier] ) - { - name = @"OnAppOpenAdLoadFailedEvent"; - } - else if ( self.rewardedAds[adUnitIdentifier] ) - { - name = @"OnRewardedAdLoadFailedEvent"; - } - else if ( self.rewardedInterstitialAds[adUnitIdentifier] ) - { - name = @"OnRewardedInterstitialAdLoadFailedEvent"; - } - else - { - [self log: @"invalid adUnitId from %@", [NSThread callStackSymbols]]; - return; - } - - @synchronized ( self.adInfoDictLock ) - { - [self.adInfoDict removeObjectForKey: adUnitIdentifier]; - } - - [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : name, - @"adUnitId" : adUnitIdentifier, - @"errorCode" : [@(error.code) stringValue], - @"errorMessage" : error.message, - @"waterfallInfo" : [self createAdWaterfallInfo: error.waterfall], - @"adLoadFailureInfo" : error.adLoadFailureInfo ?: @""}]; + + @synchronized ( self.adInfoDictLock ) + { + [self.adInfoDict removeObjectForKey: adUnitIdentifier]; + } + + [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : name, + @"adUnitId" : adUnitIdentifier, + @"errorCode" : [@(error.code) stringValue], + @"errorMessage" : error.message, + @"waterfallInfo" : [self createAdWaterfallInfo: error.waterfall], + @"adLoadFailureInfo" : error.adLoadFailureInfo ?: @"", + @"latencyMillis" : [self requestLatencyMillisFromRequestLatency: error.requestLatency]}]; + }); } - (void)didClickAd:(MAAd *)ad { - NSString *name; - MAAdFormat *adFormat = ad.format; - if ( MAAdFormat.banner == adFormat || MAAdFormat.leader == adFormat ) - { - name = @"OnBannerAdClickedEvent"; - } - else if ( MAAdFormat.mrec == adFormat ) - { - name = @"OnMRecAdClickedEvent"; - } - else if ( MAAdFormat.crossPromo == adFormat ) - { - name = @"OnCrossPromoAdClickedEvent"; - } - else if ( MAAdFormat.interstitial == adFormat ) - { - name = @"OnInterstitialClickedEvent"; - } - else if ( MAAdFormat.appOpen == adFormat ) - { - name = @"OnAppOpenAdClickedEvent"; - } - else if ( MAAdFormat.rewarded == adFormat ) - { - name = @"OnRewardedAdClickedEvent"; - } - else if ( MAAdFormat.rewardedInterstitial == adFormat ) - { - name = @"OnRewardedInterstitialAdClickedEvent"; - } - else - { - [self logInvalidAdFormat: adFormat]; - return; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSString *name; + MAAdFormat *adFormat = ad.format; + if ( MAAdFormat.banner == adFormat || MAAdFormat.leader == adFormat ) + { + name = @"OnBannerAdClickedEvent"; + } + else if ( MAAdFormat.mrec == adFormat ) + { + name = @"OnMRecAdClickedEvent"; + } + else if ( MAAdFormat.interstitial == adFormat ) + { + name = @"OnInterstitialClickedEvent"; + } + else if ( MAAdFormat.appOpen == adFormat ) + { + name = @"OnAppOpenAdClickedEvent"; + } + else if ( MAAdFormat.rewarded == adFormat ) + { + name = @"OnRewardedAdClickedEvent"; + } + else if ( MAAdFormat.rewardedInterstitial == adFormat ) + { + name = @"OnRewardedInterstitialAdClickedEvent"; + } + else + { + [self logInvalidAdFormat: adFormat]; + return; + } + + NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didDisplayAd:(MAAd *)ad @@ -864,63 +821,71 @@ static ALUnityBackgroundCallback backgroundCallback; MAAdFormat *adFormat = ad.format; if ( ![adFormat isFullscreenAd] ) return; + // UnityPause needs to be called on the main thread. #if !IS_TEST_APP UnityPause(1); #endif - NSString *name; - if ( MAAdFormat.interstitial == adFormat ) - { - name = @"OnInterstitialDisplayedEvent"; - } - else if ( MAAdFormat.appOpen == adFormat ) - { - name = @"OnAppOpenAdDisplayedEvent"; - } - else if ( MAAdFormat.rewarded == adFormat ) - { - name = @"OnRewardedAdDisplayedEvent"; - } - else // rewarded inters - { - name = @"OnRewardedInterstitialAdDisplayedEvent"; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSString *name; + if ( MAAdFormat.interstitial == adFormat ) + { + name = @"OnInterstitialDisplayedEvent"; + } + else if ( MAAdFormat.appOpen == adFormat ) + { + name = @"OnAppOpenAdDisplayedEvent"; + } + else if ( MAAdFormat.rewarded == adFormat ) + { + name = @"OnRewardedAdDisplayedEvent"; + } + else // rewarded inters + { + name = @"OnRewardedInterstitialAdDisplayedEvent"; + } + + NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didFailToDisplayAd:(MAAd *)ad withError:(MAError *)error { - // BMLs do not support [DISPLAY] events in Unity - MAAdFormat *adFormat = ad.format; - if ( ![adFormat isFullscreenAd] ) return; - - NSString *name; - if ( MAAdFormat.interstitial == adFormat ) - { - name = @"OnInterstitialAdFailedToDisplayEvent"; - } - else if ( MAAdFormat.appOpen == adFormat ) - { - name = @"OnAppOpenAdFailedToDisplayEvent"; - } - else if ( MAAdFormat.rewarded == adFormat ) - { - name = @"OnRewardedAdFailedToDisplayEvent"; - } - else // rewarded inters - { - name = @"OnRewardedInterstitialAdFailedToDisplayEvent"; - } - - NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - args[@"errorCode"] = [@(error.code) stringValue]; - args[@"errorMessage"] = error.message; - args[@"mediatedNetworkErrorCode"] = [@(error.mediatedNetworkErrorCode) stringValue]; - args[@"mediatedNetworkErrorMessage"] = error.mediatedNetworkErrorMessage; - args[@"waterfallInfo"] = [self createAdWaterfallInfo: error.waterfall]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + // BMLs do not support [DISPLAY] events in Unity + MAAdFormat *adFormat = ad.format; + if ( ![adFormat isFullscreenAd] ) return; + + NSString *name; + if ( MAAdFormat.interstitial == adFormat ) + { + name = @"OnInterstitialAdFailedToDisplayEvent"; + } + else if ( MAAdFormat.appOpen == adFormat ) + { + name = @"OnAppOpenAdFailedToDisplayEvent"; + } + else if ( MAAdFormat.rewarded == adFormat ) + { + name = @"OnRewardedAdFailedToDisplayEvent"; + } + else // rewarded inters + { + name = @"OnRewardedInterstitialAdFailedToDisplayEvent"; + } + + NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + args[@"errorCode"] = [@(error.code) stringValue]; + args[@"errorMessage"] = error.message; + args[@"mediatedNetworkErrorCode"] = [@(error.mediatedNetworkErrorCode) stringValue]; + args[@"mediatedNetworkErrorMessage"] = error.mediatedNetworkErrorMessage; + args[@"waterfallInfo"] = [self createAdWaterfallInfo: error.waterfall]; + args[@"latencyMillis"] = [self requestLatencyMillisFromRequestLatency: error.requestLatency]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didHideAd:(MAAd *)ad @@ -929,30 +894,34 @@ static ALUnityBackgroundCallback backgroundCallback; MAAdFormat *adFormat = ad.format; if ( ![adFormat isFullscreenAd] ) return; + // UnityPause needs to be called on the main thread. #if !IS_TEST_APP UnityPause(0); #endif - NSString *name; - if ( MAAdFormat.interstitial == adFormat ) - { - name = @"OnInterstitialHiddenEvent"; - } - else if ( MAAdFormat.appOpen == adFormat ) - { - name = @"OnAppOpenAdHiddenEvent"; - } - else if ( MAAdFormat.rewarded == adFormat ) - { - name = @"OnRewardedAdHiddenEvent"; - } - else // rewarded inters - { - name = @"OnRewardedInterstitialAdHiddenEvent"; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSString *name; + if ( MAAdFormat.interstitial == adFormat ) + { + name = @"OnInterstitialHiddenEvent"; + } + else if ( MAAdFormat.appOpen == adFormat ) + { + name = @"OnAppOpenAdHiddenEvent"; + } + else if ( MAAdFormat.rewarded == adFormat ) + { + name = @"OnRewardedAdHiddenEvent"; + } + else // rewarded inters + { + name = @"OnRewardedInterstitialAdHiddenEvent"; + } + + NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didExpandAd:(MAAd *)ad @@ -964,26 +933,26 @@ static ALUnityBackgroundCallback backgroundCallback; return; } + // UnityPause needs to be called on the main thread. #if !IS_TEST_APP UnityPause(1); #endif - NSString *name; - if ( MAAdFormat.mrec == adFormat ) - { - name = @"OnMRecAdExpandedEvent"; - } - else if ( MAAdFormat.crossPromo == adFormat ) - { - name = @"OnCrossPromoAdExpandedEvent"; - } - else - { - name = @"OnBannerAdExpandedEvent"; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSString *name; + if ( MAAdFormat.mrec == adFormat ) + { + name = @"OnMRecAdExpandedEvent"; + } + else + { + name = @"OnBannerAdExpandedEvent"; + } + + NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didCollapseAd:(MAAd *)ad @@ -995,26 +964,26 @@ static ALUnityBackgroundCallback backgroundCallback; return; } + // UnityPause needs to be called on the main thread. #if !IS_TEST_APP UnityPause(0); #endif - NSString *name; - if ( MAAdFormat.mrec == adFormat ) - { - name = @"OnMRecAdCollapsedEvent"; - } - else if ( MAAdFormat.crossPromo == adFormat ) - { - name = @"OnCrossPromoAdCollapsedEvent"; - } - else - { - name = @"OnBannerAdCollapsedEvent"; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSString *name; + if ( MAAdFormat.mrec == adFormat ) + { + name = @"OnMRecAdCollapsedEvent"; + } + else + { + name = @"OnBannerAdCollapsedEvent"; + } + + NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didStartRewardedVideoForAd:(MAAd *)ad @@ -1029,103 +998,110 @@ static ALUnityBackgroundCallback backgroundCallback; - (void)didRewardUserForAd:(MAAd *)ad withReward:(MAReward *)reward { - MAAdFormat *adFormat = ad.format; - if ( adFormat != MAAdFormat.rewarded && adFormat != MAAdFormat.rewardedInterstitial ) - { - [self logInvalidAdFormat: adFormat]; - return; - } - - NSString *rewardLabel = reward ? reward.label : @""; - NSInteger rewardAmountInt = reward ? reward.amount : 0; - NSString *rewardAmount = [@(rewardAmountInt) stringValue]; - - NSString *name = (adFormat == MAAdFormat.rewarded) ? @"OnRewardedAdReceivedRewardEvent" : @"OnRewardedInterstitialAdReceivedRewardEvent"; - - - NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - args[@"rewardLabel"] = rewardLabel; - args[@"rewardAmount"] = rewardAmount; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + MAAdFormat *adFormat = ad.format; + if ( adFormat != MAAdFormat.rewarded && adFormat != MAAdFormat.rewardedInterstitial ) + { + [self logInvalidAdFormat: adFormat]; + return; + } + + NSString *rewardLabel = reward ? reward.label : @""; + NSInteger rewardAmountInt = reward ? reward.amount : 0; + NSString *rewardAmount = [@(rewardAmountInt) stringValue]; + + NSString *name = (adFormat == MAAdFormat.rewarded) ? @"OnRewardedAdReceivedRewardEvent" : @"OnRewardedInterstitialAdReceivedRewardEvent"; + + + NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + args[@"rewardLabel"] = rewardLabel; + args[@"rewardAmount"] = rewardAmount; + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (void)didPayRevenueForAd:(MAAd *)ad { - NSString *name; - MAAdFormat *adFormat = ad.format; - if ( MAAdFormat.banner == adFormat || MAAdFormat.leader == adFormat ) - { - name = @"OnBannerAdRevenuePaidEvent"; - } - else if ( MAAdFormat.mrec == adFormat ) - { - name = @"OnMRecAdRevenuePaidEvent"; - } - else if ( MAAdFormat.crossPromo == adFormat ) - { - name = @"OnCrossPromoAdRevenuePaidEvent"; - } - else if ( MAAdFormat.interstitial == adFormat ) - { - name = @"OnInterstitialAdRevenuePaidEvent"; - } - else if ( MAAdFormat.appOpen == adFormat ) - { - name = @"OnAppOpenAdRevenuePaidEvent"; - } - else if ( MAAdFormat.rewarded == adFormat ) - { - name = @"OnRewardedAdRevenuePaidEvent"; - } - else if ( MAAdFormat.rewardedInterstitial == adFormat ) - { - name = @"OnRewardedInterstitialAdRevenuePaidEvent"; - } - else - { - [self logInvalidAdFormat: adFormat]; - return; - } - - NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args forwardInBackground: [adFormat isFullscreenAd]]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + NSString *name; + MAAdFormat *adFormat = ad.format; + if ( MAAdFormat.banner == adFormat || MAAdFormat.leader == adFormat ) + { + name = @"OnBannerAdRevenuePaidEvent"; + } + else if ( MAAdFormat.mrec == adFormat ) + { + name = @"OnMRecAdRevenuePaidEvent"; + } + else if ( MAAdFormat.interstitial == adFormat ) + { + name = @"OnInterstitialAdRevenuePaidEvent"; + } + else if ( MAAdFormat.appOpen == adFormat ) + { + name = @"OnAppOpenAdRevenuePaidEvent"; + } + else if ( MAAdFormat.rewarded == adFormat ) + { + name = @"OnRewardedAdRevenuePaidEvent"; + } + else if ( MAAdFormat.rewardedInterstitial == adFormat ) + { + name = @"OnRewardedInterstitialAdRevenuePaidEvent"; + } + else + { + [self logInvalidAdFormat: adFormat]; + return; + } + + NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; + args[@"keepInBackground"] = @([adFormat isFullscreenAd]); + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (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 *args = [self defaultAdEventParametersForName: name withAd: ad]; - args[@"adReviewCreativeId"] = creativeIdentifier; - - // Forward the event in background for fullscreen ads so that the user gets the callback even while the ad is playing. - [MAUnityAdManager forwardUnityEventWithArgs: args forwardInBackground: [adFormat isFullscreenAd]]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + 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 *args = [self defaultAdEventParametersForName: name withAd: ad]; + args[@"adReviewCreativeId"] = creativeIdentifier; + args[@"keepInBackground"] = @([adFormat isFullscreenAd]); + + // Forward the event in background for fullscreen ads so that the user gets the callback even while the ad is playing. + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); } - (NSMutableDictionary *)defaultAdEventParametersForName:(NSString *)name withAd:(MAAd *)ad @@ -1537,8 +1513,6 @@ static ALUnityBackgroundCallback backgroundCallback; [self.adViewPositions removeObjectForKey: adUnitIdentifier]; [self.adViewOffsets removeObjectForKey: adUnitIdentifier]; [self.adViewWidths removeObjectForKey: adUnitIdentifier]; - [self.crossPromoAdViewHeights removeObjectForKey: adUnitIdentifier]; - [self.crossPromoAdViewRotations removeObjectForKey: adUnitIdentifier]; [self.verticalAdViewFormats removeObjectForKey: adUnitIdentifier]; [self.disabledAdaptiveBannerAdUnitIdentifiers removeObject: adUnitIdentifier]; }); @@ -1678,8 +1652,6 @@ static ALUnityBackgroundCallback backgroundCallback; CGPoint adViewOffset = [adViewPositionValue CGPointValue]; BOOL isAdaptiveBannerDisabled = [self.disabledAdaptiveBannerAdUnitIdentifiers containsObject: adUnitIdentifier]; BOOL isWidthPtsOverridden = self.adViewWidths[adUnitIdentifier] != nil; - BOOL isCrossPromoHeightPtsOverridden = self.crossPromoAdViewHeights[adUnitIdentifier] != nil; - BOOL isCrossPromoRotationOverridden = self.crossPromoAdViewRotations[adUnitIdentifier] != nil; UIView *superview = adView.superview; if ( !superview ) return; @@ -1727,11 +1699,7 @@ static ALUnityBackgroundCallback backgroundCallback; // CGFloat adViewHeight; - if ( isCrossPromoHeightPtsOverridden ) - { - adViewHeight = self.crossPromoAdViewHeights[adUnitIdentifier].floatValue; - } - else if ( (adFormat == MAAdFormat.banner || adFormat == MAAdFormat.leader) && !isAdaptiveBannerDisabled ) + if ( (adFormat == MAAdFormat.banner || adFormat == MAAdFormat.leader) && !isAdaptiveBannerDisabled ) { adViewHeight = [adFormat adaptiveSizeForWidth: adViewWidth].height; } @@ -1959,11 +1927,6 @@ static ALUnityBackgroundCallback backgroundCallback; } } - if ( isCrossPromoRotationOverridden ) - { - adView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, DEGREES_TO_RADIANS(self.crossPromoAdViewRotations[adUnitIdentifier].floatValue)); - } - self.adViewConstraints[adUnitIdentifier] = constraints; [NSLayoutConstraint activateConstraints: constraints]; @@ -1977,21 +1940,21 @@ static ALUnityBackgroundCallback backgroundCallback; } + (void)forwardUnityEventWithArgs:(NSDictionary *)args -{ - [MAUnityAdManager forwardUnityEventWithArgs: args forwardInBackground: NO]; -} - -+ (void)forwardUnityEventWithArgs:(NSDictionary *)args forwardInBackground:(BOOL)forwardInBackground { #if !IS_TEST_APP - char *serializedParameters = [self serializeParameters: args].UTF8String; - if ( forwardInBackground ) - { + void (^runnable)(void) = ^{ + const char *serializedParameters = cStringCopy([self serializeParameters: args]); backgroundCallback(serializedParameters); + }; + + // Always forward in background - we push it back to the main thread in Unity + if ( [NSThread isMainThread] ) + { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), runnable); } else { - UnitySendMessage("MaxSdkCallbacks", "ForwardEvent", serializedParameters); + runnable(); } #endif } @@ -2036,11 +1999,20 @@ static ALUnityBackgroundCallback backgroundCallback; } } +- (NSString *)requestLatencyMillisFromRequestLatency:(NSTimeInterval)requestLatency +{ + // Convert latency from seconds to milliseconds to match Android. + long requestLatencyMillis = requestLatency * 1000; + return @(requestLatencyMillis).stringValue; +} + #pragma mark - User Service - (void)didDismissUserConsentDialog { - [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkConsentDialogDismissedEvent"}]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkConsentDialogDismissedEvent"}]; + }); } #pragma mark - CMP Service @@ -2048,19 +2020,22 @@ static ALUnityBackgroundCallback backgroundCallback; - (void)showCMPForExistingUser { [self.sdk.cmpService showCMPForExistingUserWithCompletion:^(ALCMPError * _Nullable error) { - - NSMutableDictionary *args = [NSMutableDictionary dictionaryWithCapacity: 2]; - args[@"name"] = @"OnCmpCompletedEvent"; - - if ( error ) - { - args[@"error"] = @{@"code": @(error.code), - @"message": error.message, - @"cmpCode": @(error.cmpCode), - @"cmpMessage": error.cmpMessage}; - } - - [MAUnityAdManager forwardUnityEventWithArgs: args forwardInBackground: YES]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSMutableDictionary *args = [NSMutableDictionary dictionaryWithCapacity: 2]; + args[@"name"] = @"OnCmpCompletedEvent"; + + if ( error ) + { + args[@"error"] = @{@"code": @(error.code), + @"message": error.message, + @"cmpCode": @(error.cmpCode), + @"cmpMessage": error.cmpMessage, + @"keepInBackground": @(YES)}; + } + + [MAUnityAdManager forwardUnityEventWithArgs: args]; + }); }]; } diff --git a/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm b/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm index edac38f..5571964 100644 --- a/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm +++ b/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm @@ -15,13 +15,13 @@ @property (assign, readonly, getter=al_isValidString) BOOL al_validString; @end -UIView* UnityGetGLView(); - // When native code plugin is implemented in .mm / .cpp file, then functions // should be surrounded with extern "C" block to conform C function naming rules extern "C" { static NSString *const TAG = @"MAUnityPlugin"; + + UIView* UnityGetGLView(); static ALSdk *_sdk; static MAUnityAdManager *_adManager; @@ -52,6 +52,18 @@ extern "C" static const char * cStringCopy(NSString *string); // Helper method to log errors void logUninitializedAccessError(const char *callingMethod); + + int getConsentStatusValue(NSNumber *consentStatus) + { + if ( consentStatus ) + { + return consentStatus.intValue; + } + else + { + return -1; + } + } bool isPluginInitialized() { @@ -785,51 +797,6 @@ extern "C" return cStringCopy([_adManager mrecLayoutForAdUnitIdentifier: NSSTRING(adUnitIdentifier)]); } - - void _MaxCreateCrossPromoAd(const char *adUnitIdentifier, const float x, const float y, const float width, const float height, const float rotation) - { - if (!isPluginInitialized()) return; - - [_adManager createCrossPromoAdWithAdUnitIdentifier: NSSTRING(adUnitIdentifier) x: x y: y width: width height: height rotation: rotation]; - } - - void _MaxSetCrossPromoAdPlacement(const char *adUnitIdentifier, const char *placement) - { - [_adManager setCrossPromoAdPlacement: NSSTRING(placement) forAdUnitIdentifier: NSSTRING(adUnitIdentifier)]; - } - - void _MaxUpdateCrossPromoAdPosition(const char *adUnitIdentifier, const float x, const float y, const float width, const float height, const float rotation) - { - [_adManager updateCrossPromoAdPositionForAdUnitIdentifier: NSSTRING(adUnitIdentifier) x: x y: y width: width height: height rotation: rotation]; - } - - void _MaxShowCrossPromoAd(const char *adUnitIdentifier) - { - if (!isPluginInitialized()) return; - - [_adManager showCrossPromoAdWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)]; - } - - void _MaxDestroyCrossPromoAd(const char *adUnitIdentifier) - { - if (!isPluginInitialized()) return; - - [_adManager destroyCrossPromoAdWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)]; - } - - void _MaxHideCrossPromoAd(const char *adUnitIdentifier) - { - if (!isPluginInitialized()) return; - - [_adManager hideCrossPromoAdWithAdUnitIdentifier: NSSTRING(adUnitIdentifier)]; - } - - const char * _MaxGetCrossPromoAdLayout(const char *adUnitIdentifier) - { - if (!isPluginInitialized()) return cStringCopy(@""); - - return cStringCopy([_adManager crossPromoAdLayoutForAdUnitIdentifier: NSSTRING(adUnitIdentifier)]); - } void _MaxLoadInterstitial(const char *adUnitIdentifier) { @@ -1060,30 +1027,28 @@ extern "C" return !ALUtils.simulator; } - int _MaxGetTcfConsentStatus(int vendorIdentifier) + int _MaxGetTcfVendorConsentStatus(int vendorIdentifier) { - NSNumber *consentStatus = [ALUtils tcfConsentStatusForVendorIdentifier: vendorIdentifier]; - if ( consentStatus ) - { - return consentStatus.intValue; - } - else - { - return -1; - } + NSNumber *consentStatus = [ALPrivacySettings tcfVendorConsentStatusForIdentifier: vendorIdentifier]; + return getConsentStatusValue(consentStatus); } int _MaxGetAdditionalConsentStatus(int atpIdentifier) { - NSNumber *consentStatus = [ALUtils additionalConsentStatusForATPIdentifier: atpIdentifier]; - if ( consentStatus ) - { - return consentStatus.intValue; - } - else - { - return -1; - } + NSNumber *consentStatus = [ALPrivacySettings additionalConsentStatusForIdentifier: atpIdentifier]; + return getConsentStatusValue(consentStatus); + } + + int _MaxGetPurposeConsentStatus(int purposeIdentifier) + { + NSNumber *consentStatus = [ALPrivacySettings purposeConsentStatusForIdentifier: purposeIdentifier]; + return getConsentStatusValue(consentStatus); + } + + int _MaxGetSpecialFeatureOptInStatus(int specialFeatureIdentifier) + { + NSNumber *consentStatus = [ALPrivacySettings specialFeatureOptInStatusForIdentifier: specialFeatureIdentifier]; + return getConsentStatusValue(consentStatus); } static const char * cStringCopy(NSString *string) @@ -1229,6 +1194,13 @@ extern "C" } } } + + int * _MaxGetSafeAreaInsets() + { + UIEdgeInsets safeAreaInsets = UnityGetGLView().safeAreaInsets; + static int insets[4] = {(int) safeAreaInsets.left, (int) safeAreaInsets.top, (int) safeAreaInsets.right, (int) safeAreaInsets.bottom}; + return insets; + } void _MaxShowCmpForExistingUser() { diff --git a/MaxSdk/Mediation.meta b/MaxSdk/Mediation.meta index 2b5c46b..103dd6f 100644 --- a/MaxSdk/Mediation.meta +++ b/MaxSdk/Mediation.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a8ba4aafafc4142d8872c03c93ed10e2 +guid: dcf2020c4018447c9b91170c0f62d799 labels: - al_max - al_max_export_path-MaxSdk/Mediation diff --git a/Mediation/BidMachine.meta b/MaxSdk/Mediation/BidMachine.meta similarity index 83% rename from Mediation/BidMachine.meta rename to MaxSdk/Mediation/BidMachine.meta index 0db1a77..f6fac18 100644 --- a/Mediation/BidMachine.meta +++ b/MaxSdk/Mediation/BidMachine.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5a4e6c1e82db1462f8a77b375f310066 +guid: 6b9d9d3ca994442dcb2c1abcd31077ad labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine diff --git a/Mediation/BidMachine/Editor.meta b/MaxSdk/Mediation/BidMachine/Editor.meta similarity index 84% rename from Mediation/BidMachine/Editor.meta rename to MaxSdk/Mediation/BidMachine/Editor.meta index 367076e..0f3541e 100644 --- a/Mediation/BidMachine/Editor.meta +++ b/MaxSdk/Mediation/BidMachine/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab3608d83ecb4446a81e1f3cceda3413 +guid: 527c65004f8c84edbb4c14b8a2a04c5d labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor diff --git a/Mediation/BidMachine/Editor/Dependencies.xml b/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml similarity index 92% rename from Mediation/BidMachine/Editor/Dependencies.xml rename to MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml index 3374645..5257026 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://artifactory.bidmachine.io/bidmachine - + diff --git a/Mediation/BidMachine/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/BidMachine/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml.meta index 90f8b70..81f22af 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 123f162bdccf1417d8283effdde4fdbd +guid: 98a383532dccb495aa31190874842cbe labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml diff --git a/Mediation/ByteDance.meta b/MaxSdk/Mediation/ByteDance.meta similarity index 83% rename from Mediation/ByteDance.meta rename to MaxSdk/Mediation/ByteDance.meta index 02d0de6..386938c 100644 --- a/Mediation/ByteDance.meta +++ b/MaxSdk/Mediation/ByteDance.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b8e9d79594b7846daaa13430b88ceafd +guid: a0fd9165dea16454ea59da2bf05462d2 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance diff --git a/Mediation/ByteDance/Editor.meta b/MaxSdk/Mediation/ByteDance/Editor.meta similarity index 84% rename from Mediation/ByteDance/Editor.meta rename to MaxSdk/Mediation/ByteDance/Editor.meta index aa89af8..e54a766 100644 --- a/Mediation/ByteDance/Editor.meta +++ b/MaxSdk/Mediation/ByteDance/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b88237e7390c0473caf663fb2ec2093a +guid: ef8467ffb0e4447b79a8804884a7520a labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor diff --git a/Mediation/ByteDance/Editor/Dependencies.xml b/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml similarity index 92% rename from Mediation/ByteDance/Editor/Dependencies.xml rename to MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml index 1fede9e..24e33a8 100644 --- a/Mediation/ByteDance/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://artifact.bytedance.com/repository/pangle - + diff --git a/Mediation/ByteDance/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/ByteDance/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml.meta index d5e47bf..5205233 100644 --- a/Mediation/ByteDance/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e40f7461260e84fce92b6baa166d3ac5 +guid: 0828555cb1ce94702a4af6f3dce3d735 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml diff --git a/Mediation/Chartboost.meta b/MaxSdk/Mediation/Chartboost.meta similarity index 83% rename from Mediation/Chartboost.meta rename to MaxSdk/Mediation/Chartboost.meta index 9241140..fa1c98a 100644 --- a/Mediation/Chartboost.meta +++ b/MaxSdk/Mediation/Chartboost.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 736e27be8f4514d63bb1f9e77e789d71 +guid: 3647332764da440ae8d4de79ebf72832 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost diff --git a/Mediation/Chartboost/Editor.meta b/MaxSdk/Mediation/Chartboost/Editor.meta similarity index 84% rename from Mediation/Chartboost/Editor.meta rename to MaxSdk/Mediation/Chartboost/Editor.meta index 82ec3c2..38bff8d 100644 --- a/Mediation/Chartboost/Editor.meta +++ b/MaxSdk/Mediation/Chartboost/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5fc6a042b090a4a41af5345f13644aef +guid: a90f13141c35746f5a2996c8ad068fe9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor diff --git a/Mediation/Chartboost/Editor/Dependencies.xml b/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml similarity index 94% rename from Mediation/Chartboost/Editor/Dependencies.xml rename to MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml index eb84026..2cd6ec2 100644 --- a/Mediation/Chartboost/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml @@ -1,7 +1,7 @@ - + https://cboost.jfrog.io/artifactory/chartboost-ads/ @@ -9,6 +9,6 @@ - + diff --git a/Mediation/Chartboost/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Chartboost/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml.meta index 485897b..02628eb 100644 --- a/Mediation/Chartboost/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ce9cd7b936c30476a80116051627795e +guid: 93b0a4618bd884871af0981a7867bb2f labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml diff --git a/Mediation/Facebook.meta b/MaxSdk/Mediation/Facebook.meta similarity index 83% rename from Mediation/Facebook.meta rename to MaxSdk/Mediation/Facebook.meta index f402243..242605e 100644 --- a/Mediation/Facebook.meta +++ b/MaxSdk/Mediation/Facebook.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c12845df8707d4636928493032036922 +guid: 27b0caf5a05a845018297e973b16537e labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook diff --git a/Mediation/Facebook/Editor.meta b/MaxSdk/Mediation/Facebook/Editor.meta similarity index 83% rename from Mediation/Facebook/Editor.meta rename to MaxSdk/Mediation/Facebook/Editor.meta index f28dd12..4beff5e 100644 --- a/Mediation/Facebook/Editor.meta +++ b/MaxSdk/Mediation/Facebook/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d41a4deeadbbe49b4abdb8c33ed8adff +guid: 28880992a399a48b7abe95b66649d711 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor diff --git a/Mediation/Facebook/Editor/Dependencies.xml b/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml similarity index 95% rename from Mediation/Facebook/Editor/Dependencies.xml rename to MaxSdk/Mediation/Facebook/Editor/Dependencies.xml index 6bf87ae..e9c4ef1 100644 --- a/Mediation/Facebook/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml @@ -5,9 +5,9 @@ Since FAN SDK depends on older versions of a few support and play service versions `com.applovin.mediation:facebook-adapter:x.y.z.a` resolves to `com.applovin.mediation:facebook-adapter:+` which pulls down the beta versions of FAN SDK. Note that forcing the adapter is enough to stop Jar Resolver from pulling the latest FAN SDK. --> - + - + diff --git a/Mediation/Facebook/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Facebook/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Facebook/Editor/Dependencies.xml.meta index 457996c..69b5d2c 100644 --- a/Mediation/Facebook/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6b42926a78dd2468db1fc059229e6fa2 +guid: aea9bdf974328420db5ae118ef0d2b87 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor/Dependencies.xml diff --git a/Mediation/Fyber.meta b/MaxSdk/Mediation/Fyber.meta similarity index 83% rename from Mediation/Fyber.meta rename to MaxSdk/Mediation/Fyber.meta index e2489ac..eddbcb6 100644 --- a/Mediation/Fyber.meta +++ b/MaxSdk/Mediation/Fyber.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2ddb16b7ed77641b0b48e4dcb5eb9313 +guid: 6aac123ddaf4f490f95b78bf39ca18d1 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber diff --git a/Mediation/Fyber/Editor.meta b/MaxSdk/Mediation/Fyber/Editor.meta similarity index 83% rename from Mediation/Fyber/Editor.meta rename to MaxSdk/Mediation/Fyber/Editor.meta index a1acfa3..315e8c8 100644 --- a/Mediation/Fyber/Editor.meta +++ b/MaxSdk/Mediation/Fyber/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d1f48f8173f79496ab742e75fc4cbc93 +guid: e076e4ef7e2874ba69b108cc7a346c2a labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor diff --git a/Mediation/Fyber/Editor/Dependencies.xml b/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml similarity index 92% rename from Mediation/Fyber/Editor/Dependencies.xml rename to MaxSdk/Mediation/Fyber/Editor/Dependencies.xml index 4634674..9f5f74e 100644 --- a/Mediation/Fyber/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Mediation/Fyber/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml.meta similarity index 83% rename from Mediation/Fyber/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Fyber/Editor/Dependencies.xml.meta index d377240..fd0bbbf 100644 --- a/Mediation/Fyber/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab63c200561ab4506b77e71f6019ca9a +guid: 5e123cdc08e804dffb2c40c4fbc83caf labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor/Dependencies.xml diff --git a/Mediation/Google.meta b/MaxSdk/Mediation/Google.meta similarity index 83% rename from Mediation/Google.meta rename to MaxSdk/Mediation/Google.meta index e448707..6d09844 100644 --- a/Mediation/Google.meta +++ b/MaxSdk/Mediation/Google.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4c314c382c139449288577824fed1f00 +guid: 5b3d3bc3aa8a546de8fdd5ded2b7e050 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google diff --git a/Mediation/Google/Editor.meta b/MaxSdk/Mediation/Google/Editor.meta similarity index 83% rename from Mediation/Google/Editor.meta rename to MaxSdk/Mediation/Google/Editor.meta index 7135f87..ea8dd55 100644 --- a/Mediation/Google/Editor.meta +++ b/MaxSdk/Mediation/Google/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 81a5cd1881bd74bb18b6a4e152979ad9 +guid: e8015bd045cea462c8f39c8a05867d08 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor diff --git a/Mediation/Google/Editor/Dependencies.xml b/MaxSdk/Mediation/Google/Editor/Dependencies.xml similarity index 92% rename from Mediation/Google/Editor/Dependencies.xml rename to MaxSdk/Mediation/Google/Editor/Dependencies.xml index e46e764..fa65a71 100644 --- a/Mediation/Google/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Google/Editor/Dependencies.xml @@ -2,9 +2,9 @@ - + - + diff --git a/Mediation/Google/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Google/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta index 13d9fb6..36bef72 100644 --- a/Mediation/Google/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ac3c45d913a734c548c6a8a224624bc9 +guid: 053b810d3594744e38b6fd0fa378fb57 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor/Dependencies.xml diff --git a/Mediation/GoogleAdManager.meta b/MaxSdk/Mediation/GoogleAdManager.meta similarity index 83% rename from Mediation/GoogleAdManager.meta rename to MaxSdk/Mediation/GoogleAdManager.meta index 41cf27a..522b98a 100644 --- a/Mediation/GoogleAdManager.meta +++ b/MaxSdk/Mediation/GoogleAdManager.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0f32d9bbb13cf4fca977f251fe8ae54e +guid: 468d376e1f39442e8a96601e563b7e2a labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager diff --git a/Mediation/GoogleAdManager/Editor.meta b/MaxSdk/Mediation/GoogleAdManager/Editor.meta similarity index 84% rename from Mediation/GoogleAdManager/Editor.meta rename to MaxSdk/Mediation/GoogleAdManager/Editor.meta index 3c86239..7b0912c 100644 --- a/Mediation/GoogleAdManager/Editor.meta +++ b/MaxSdk/Mediation/GoogleAdManager/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 309e4978918794c339a5b06630ca4380 +guid: 3e1635bfb5b164c389d38eb1e5e6e909 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor diff --git a/Mediation/GoogleAdManager/Editor/Dependencies.xml b/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml similarity index 88% rename from Mediation/GoogleAdManager/Editor/Dependencies.xml rename to MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml index 189df74..4b09798 100644 --- a/Mediation/GoogleAdManager/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml @@ -2,9 +2,9 @@ - + - + diff --git a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/GoogleAdManager/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta index 33b6e61..71b0087 100644 --- a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ec7fdc0ed9424436a9dc4b3ec60c4d45 +guid: aebbf5e9af66e431fa6078021b2f762f labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml diff --git a/Mediation/InMobi.meta b/MaxSdk/Mediation/InMobi.meta similarity index 83% rename from Mediation/InMobi.meta rename to MaxSdk/Mediation/InMobi.meta index d9c7c4f..b674c95 100644 --- a/Mediation/InMobi.meta +++ b/MaxSdk/Mediation/InMobi.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d1f591c6c71fe43c39ebd8362cdee42f +guid: 5b17efb66f23c412ca4516e426406bdc labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi diff --git a/Mediation/InMobi/Editor.meta b/MaxSdk/Mediation/InMobi/Editor.meta similarity index 83% rename from Mediation/InMobi/Editor.meta rename to MaxSdk/Mediation/InMobi/Editor.meta index 342a48d..a998cfd 100644 --- a/Mediation/InMobi/Editor.meta +++ b/MaxSdk/Mediation/InMobi/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f0ca013590c6e4cada30f485e014d804 +guid: a141703acd55a48c2a3e6e6599f90c64 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor diff --git a/Mediation/InMobi/Editor/Dependencies.xml b/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml similarity index 94% rename from Mediation/InMobi/Editor/Dependencies.xml rename to MaxSdk/Mediation/InMobi/Editor/Dependencies.xml index a1ed4d1..e0cc0e3 100644 --- a/Mediation/InMobi/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml @@ -1,12 +1,12 @@ - + - + diff --git a/Mediation/InMobi/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/InMobi/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/InMobi/Editor/Dependencies.xml.meta index e473693..1b62e82 100644 --- a/Mediation/InMobi/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fc006bb35419a4f759875a1db7b0c002 +guid: bc66a0ef4503843ee9b1bf1b1e867367 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor/Dependencies.xml diff --git a/Mediation/IronSource.meta b/MaxSdk/Mediation/IronSource.meta similarity index 83% rename from Mediation/IronSource.meta rename to MaxSdk/Mediation/IronSource.meta index 2a8455f..151cb4b 100644 --- a/Mediation/IronSource.meta +++ b/MaxSdk/Mediation/IronSource.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 29324d5f5bc2a4b25a629f8172371077 +guid: 7e5d22a01f68c4ee49f7ae312d187aa9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource diff --git a/Mediation/IronSource/Editor.meta b/MaxSdk/Mediation/IronSource/Editor.meta similarity index 84% rename from Mediation/IronSource/Editor.meta rename to MaxSdk/Mediation/IronSource/Editor.meta index afadae6..327f5d6 100644 --- a/Mediation/IronSource/Editor.meta +++ b/MaxSdk/Mediation/IronSource/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bc7cc0a01f21649f5beb12578ad01088 +guid: 531d860cac61f47d19e32f526470ae43 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor diff --git a/Mediation/IronSource/Editor/Dependencies.xml b/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml similarity index 91% rename from Mediation/IronSource/Editor/Dependencies.xml rename to MaxSdk/Mediation/IronSource/Editor/Dependencies.xml index 80ca59a..099c417 100644 --- a/Mediation/IronSource/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://android-sdk.is.com/ - + diff --git a/Mediation/IronSource/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/IronSource/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/IronSource/Editor/Dependencies.xml.meta index 814c463..f77e6f0 100644 --- a/Mediation/IronSource/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3877ffad630d74094a5bc7f0ce771e9d +guid: 19262406303f04f05b14b31b3c734d35 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor/Dependencies.xml diff --git a/Mediation/MediationAdapters.txt b/MaxSdk/Mediation/MediationAdapters.txt similarity index 100% rename from Mediation/MediationAdapters.txt rename to MaxSdk/Mediation/MediationAdapters.txt diff --git a/Mediation/MediationAdapters.txt.meta b/MaxSdk/Mediation/MediationAdapters.txt.meta similarity index 75% rename from Mediation/MediationAdapters.txt.meta rename to MaxSdk/Mediation/MediationAdapters.txt.meta index 629fd0b..41fb994 100644 --- a/Mediation/MediationAdapters.txt.meta +++ b/MaxSdk/Mediation/MediationAdapters.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9a04a93e5a00046f498986cbab8a41ce +guid: 9a8f83e97729443c86120be3bb24190d labels: - al_max - al_max_export_path-MaxSdk/Mediation/MediationAdapters.txt diff --git a/Mediation/Mintegral.meta b/MaxSdk/Mediation/Mintegral.meta similarity index 83% rename from Mediation/Mintegral.meta rename to MaxSdk/Mediation/Mintegral.meta index 8ddb06b..fd3d83c 100644 --- a/Mediation/Mintegral.meta +++ b/MaxSdk/Mediation/Mintegral.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6f2161264cc274e589af866b30e9c171 +guid: 3efc678797bb440b4b754a4593b4a7bc labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral diff --git a/Mediation/Mintegral/Editor.meta b/MaxSdk/Mediation/Mintegral/Editor.meta similarity index 84% rename from Mediation/Mintegral/Editor.meta rename to MaxSdk/Mediation/Mintegral/Editor.meta index 20640a0..d189ce0 100644 --- a/Mediation/Mintegral/Editor.meta +++ b/MaxSdk/Mediation/Mintegral/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 050a1eb04323a43ae89766193d45c211 +guid: db1de4066dc4e4290b3879b34fa87de2 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor diff --git a/Mediation/Mintegral/Editor/Dependencies.xml b/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml similarity index 93% rename from Mediation/Mintegral/Editor/Dependencies.xml rename to MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml index aab67f1..0d71bb6 100644 --- a/Mediation/Mintegral/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml @@ -1,7 +1,7 @@ - + https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea @@ -9,6 +9,6 @@ - + diff --git a/Mediation/Mintegral/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Mintegral/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml.meta index 55781cf..415c4ab 100644 --- a/Mediation/Mintegral/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 424c8ca120d1c445fa71535de1415d06 +guid: 221b2a20a58a04f2cb4afb0779587206 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml diff --git a/Mediation/MobileFuse.meta b/MaxSdk/Mediation/MobileFuse.meta similarity index 83% rename from Mediation/MobileFuse.meta rename to MaxSdk/Mediation/MobileFuse.meta index a653835..af0bbc6 100644 --- a/Mediation/MobileFuse.meta +++ b/MaxSdk/Mediation/MobileFuse.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cdd55135b2b1445ff98507c60a6e8fb3 +guid: 1f51aa0efd73a4c5dabd3bd20504fd98 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse diff --git a/Mediation/MobileFuse/Editor.meta b/MaxSdk/Mediation/MobileFuse/Editor.meta similarity index 84% rename from Mediation/MobileFuse/Editor.meta rename to MaxSdk/Mediation/MobileFuse/Editor.meta index 80d7226..d19defa 100644 --- a/Mediation/MobileFuse/Editor.meta +++ b/MaxSdk/Mediation/MobileFuse/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a428cd8127ca14c1eb4c36b44d66c00d +guid: 5b294b15bf20e4100bb8fd4f2865870a labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor diff --git a/Mediation/MobileFuse/Editor/Dependencies.xml b/MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml similarity index 88% rename from Mediation/MobileFuse/Editor/Dependencies.xml rename to MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml index a7bffb7..d3e7ffa 100644 --- a/Mediation/MobileFuse/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Mediation/MobileFuse/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/MobileFuse/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml.meta index 351ee30..0286953 100644 --- a/Mediation/MobileFuse/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4b1c644f7bf454f848c5d23b2f83f994 +guid: 4dd9dbd046b334929bcb7f80b7ae9eb4 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml diff --git a/Mediation/OguryPresage.meta b/MaxSdk/Mediation/OguryPresage.meta similarity index 83% rename from Mediation/OguryPresage.meta rename to MaxSdk/Mediation/OguryPresage.meta index 5a49830..75709d7 100644 --- a/Mediation/OguryPresage.meta +++ b/MaxSdk/Mediation/OguryPresage.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1498439a98d054421a655f46c1b0a979 +guid: 09a110e66ea38428a8a388a48813529f labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage diff --git a/Mediation/OguryPresage/Editor.meta b/MaxSdk/Mediation/OguryPresage/Editor.meta similarity index 84% rename from Mediation/OguryPresage/Editor.meta rename to MaxSdk/Mediation/OguryPresage/Editor.meta index 4de35f7..af2d23b 100644 --- a/Mediation/OguryPresage/Editor.meta +++ b/MaxSdk/Mediation/OguryPresage/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 89202f48ff6c24437ab9b72c14e6592c +guid: deb1bc473b7934f93b82938ea36d0878 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor diff --git a/Mediation/OguryPresage/Editor/Dependencies.xml b/MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml similarity index 91% rename from Mediation/OguryPresage/Editor/Dependencies.xml rename to MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml index 2d5d6e4..fe086c8 100644 --- a/Mediation/OguryPresage/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://maven.ogury.co - + diff --git a/Mediation/OguryPresage/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/OguryPresage/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml.meta index 636a78e..1b56b07 100644 --- a/Mediation/OguryPresage/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 44e217a01f9b04d3c9a17d8e95b9e2c8 +guid: 4733055cb7d01490e9c36862b7d10163 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml diff --git a/Mediation/Smaato.meta b/MaxSdk/Mediation/Smaato.meta similarity index 83% rename from Mediation/Smaato.meta rename to MaxSdk/Mediation/Smaato.meta index 8d062a3..eed48d7 100644 --- a/Mediation/Smaato.meta +++ b/MaxSdk/Mediation/Smaato.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f03bf15dfdfd444a7a8ef23206461549 +guid: 6035ebab3b5094cc2851242130f8724b labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato diff --git a/Mediation/Smaato/Editor.meta b/MaxSdk/Mediation/Smaato/Editor.meta similarity index 83% rename from Mediation/Smaato/Editor.meta rename to MaxSdk/Mediation/Smaato/Editor.meta index 1ede9d2..48d1804 100644 --- a/Mediation/Smaato/Editor.meta +++ b/MaxSdk/Mediation/Smaato/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 55478c656b4ea4a1b9fa81760007214c +guid: d6ab91d259c064997b6b26c1739ef87d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor diff --git a/Mediation/Smaato/Editor/Dependencies.xml b/MaxSdk/Mediation/Smaato/Editor/Dependencies.xml similarity index 94% rename from Mediation/Smaato/Editor/Dependencies.xml rename to MaxSdk/Mediation/Smaato/Editor/Dependencies.xml index f748272..195176e 100644 --- a/Mediation/Smaato/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Smaato/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://s3.amazonaws.com/smaato-sdk-releases/ - + diff --git a/Mediation/Smaato/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Smaato/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Smaato/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Smaato/Editor/Dependencies.xml.meta index ef60ec1..c76c78b 100644 --- a/Mediation/Smaato/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Smaato/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b74b1ad0814994aef880c11dc374a1b3 +guid: f6c345cc57a514902ba5fb68436f852f labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor/Dependencies.xml diff --git a/Mediation/UnityAds.meta b/MaxSdk/Mediation/UnityAds.meta similarity index 83% rename from Mediation/UnityAds.meta rename to MaxSdk/Mediation/UnityAds.meta index ffed24d..8c49e51 100644 --- a/Mediation/UnityAds.meta +++ b/MaxSdk/Mediation/UnityAds.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 34596ba2f74a64f4692da45ed21c7d2f +guid: 7fb60924642d44bed95c2cc730a87327 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds diff --git a/Mediation/UnityAds/Editor.meta b/MaxSdk/Mediation/UnityAds/Editor.meta similarity index 83% rename from Mediation/UnityAds/Editor.meta rename to MaxSdk/Mediation/UnityAds/Editor.meta index dc727f1..b66e846 100644 --- a/Mediation/UnityAds/Editor.meta +++ b/MaxSdk/Mediation/UnityAds/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 66b580ac41d5c4e9f8b96348f42cdef6 +guid: 30751f2dc322a40e588edfb7c978c9c0 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor diff --git a/Mediation/UnityAds/Editor/Dependencies.xml b/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml similarity index 89% rename from Mediation/UnityAds/Editor/Dependencies.xml rename to MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml index 2307475..80bd63e 100644 --- a/Mediation/UnityAds/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Mediation/UnityAds/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/UnityAds/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml.meta index 8b61ec3..937df6e 100644 --- a/Mediation/UnityAds/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d5d70db07cd3d4c90866131f5ff2ec5e +guid: 9950f1cb0da1e43efbeca604db142076 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml diff --git a/Mediation/Verve.meta b/MaxSdk/Mediation/Verve.meta similarity index 83% rename from Mediation/Verve.meta rename to MaxSdk/Mediation/Verve.meta index 8d4004b..f249843 100644 --- a/Mediation/Verve.meta +++ b/MaxSdk/Mediation/Verve.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 465b78190ecd34d2ebb66bbdb663b8f7 +guid: a988eefd0908441f799ba02f389b0164 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve diff --git a/Mediation/Verve/Editor.meta b/MaxSdk/Mediation/Verve/Editor.meta similarity index 83% rename from Mediation/Verve/Editor.meta rename to MaxSdk/Mediation/Verve/Editor.meta index ac65b44..9ddb48f 100644 --- a/Mediation/Verve/Editor.meta +++ b/MaxSdk/Mediation/Verve/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1c0f8f4536e924c7daeb4e07b8a89fbd +guid: 942a73b8f38284e55849bd9986aefee8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor diff --git a/Mediation/Verve/Editor/Dependencies.xml b/MaxSdk/Mediation/Verve/Editor/Dependencies.xml similarity index 79% rename from Mediation/Verve/Editor/Dependencies.xml rename to MaxSdk/Mediation/Verve/Editor/Dependencies.xml index bd63e62..af063bc 100644 --- a/Mediation/Verve/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Verve/Editor/Dependencies.xml @@ -1,12 +1,12 @@ - + https://verve.jfrog.io/artifactory/verve-gradle-release - + diff --git a/Mediation/Verve/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Verve/Editor/Dependencies.xml.meta similarity index 83% rename from Mediation/Verve/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Verve/Editor/Dependencies.xml.meta index fdab316..7edac19 100644 --- a/Mediation/Verve/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Verve/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ecb5509aa8c6f4e1781b9658779c7f70 +guid: bce11a786f6b54963a8085520a643ce8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor/Dependencies.xml diff --git a/Mediation/Vungle.meta b/MaxSdk/Mediation/Vungle.meta similarity index 83% rename from Mediation/Vungle.meta rename to MaxSdk/Mediation/Vungle.meta index eb5cffa..7214e2e 100644 --- a/Mediation/Vungle.meta +++ b/MaxSdk/Mediation/Vungle.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 08ce07f8736a1441499e151152b0a8c8 +guid: e5a58f58ec6b64f2d8c8061c4051244c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle diff --git a/Mediation/Vungle/Editor.meta b/MaxSdk/Mediation/Vungle/Editor.meta similarity index 83% rename from Mediation/Vungle/Editor.meta rename to MaxSdk/Mediation/Vungle/Editor.meta index 2614207..1ea75cc 100644 --- a/Mediation/Vungle/Editor.meta +++ b/MaxSdk/Mediation/Vungle/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 415ba661fb43149518f25c225fc5486a +guid: 77b6ea05736a9458f8ef8762ee9b64bb labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor diff --git a/Mediation/Vungle/Editor/Dependencies.xml b/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml similarity index 90% rename from Mediation/Vungle/Editor/Dependencies.xml rename to MaxSdk/Mediation/Vungle/Editor/Dependencies.xml index 6cf8c87..1823def 100644 --- a/Mediation/Vungle/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Mediation/Vungle/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Vungle/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Vungle/Editor/Dependencies.xml.meta index 79d2da0..7038186 100644 --- a/Mediation/Vungle/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d8eb42a2c132f43e59186bc28da6006e +guid: 0d8ad3a6ddc4f44fab2efe607fe14f26 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor/Dependencies.xml diff --git a/Mediation/Yandex.meta b/MaxSdk/Mediation/Yandex.meta similarity index 83% rename from Mediation/Yandex.meta rename to MaxSdk/Mediation/Yandex.meta index d280060..bc0cabf 100644 --- a/Mediation/Yandex.meta +++ b/MaxSdk/Mediation/Yandex.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 927af5b2250834fd5be82687e53be6ba +guid: 5d02f768bae96461c9a46ed20e652f8d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex diff --git a/Mediation/Yandex/Editor.meta b/MaxSdk/Mediation/Yandex/Editor.meta similarity index 83% rename from Mediation/Yandex/Editor.meta rename to MaxSdk/Mediation/Yandex/Editor.meta index 02d78cd..96a880c 100644 --- a/Mediation/Yandex/Editor.meta +++ b/MaxSdk/Mediation/Yandex/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 57d88d0ec30464840aa603ef3533b7f6 +guid: 277e2383262e844708fc74a6104f4985 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor diff --git a/Mediation/Yandex/Editor/Dependencies.xml b/MaxSdk/Mediation/Yandex/Editor/Dependencies.xml similarity index 69% rename from Mediation/Yandex/Editor/Dependencies.xml rename to MaxSdk/Mediation/Yandex/Editor/Dependencies.xml index ac5cd5a..10c0495 100644 --- a/Mediation/Yandex/Editor/Dependencies.xml +++ b/MaxSdk/Mediation/Yandex/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Mediation/Yandex/Editor/Dependencies.xml.meta b/MaxSdk/Mediation/Yandex/Editor/Dependencies.xml.meta similarity index 84% rename from Mediation/Yandex/Editor/Dependencies.xml.meta rename to MaxSdk/Mediation/Yandex/Editor/Dependencies.xml.meta index faadb36..495dede 100644 --- a/Mediation/Yandex/Editor/Dependencies.xml.meta +++ b/MaxSdk/Mediation/Yandex/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: eac827b694b384eedb459cbb1637e3f1 +guid: a77aaf886990c4e6ba469a4f083b9284 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation b/MaxSdk/Mediation~HEAD similarity index 100% rename from MaxSdk/Mediation rename to MaxSdk/Mediation~HEAD diff --git a/MaxSdk/Scripts/Editor.meta b/MaxSdk/Scripts/Editor.meta deleted file mode 100644 index 7adfefb..0000000 --- a/MaxSdk/Scripts/Editor.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b6903b66cb8984df289e6d66f9c52ddc -labels: -- al_max -- al_max_export_path-MaxSdk/Scripts/Editor -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs.meta b/MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs.meta deleted file mode 100644 index 07e4133..0000000 --- a/MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 75fed160a41749d4990cee871ee618a4 -labels: -- al_max -- al_max_export_path-MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs b/MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs deleted file mode 100644 index 816c336..0000000 --- a/MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs +++ /dev/null @@ -1,590 +0,0 @@ -// -// MaxPostProcessBuildiOS.cs -// AppLovin MAX Unity Plugin -// -// Created by Santosh Bagadi on 8/5/20. -// Copyright © 2020 AppLovin. All rights reserved. -// - -#if UNITY_IOS || UNITY_IPHONE - -using AppLovinMax.Scripts.IntegrationManager.Editor; -#if UNITY_2019_3_OR_NEWER -using UnityEditor.iOS.Xcode.Extensions; -#endif -using UnityEngine.Networking; -using System; -using System.Linq; -using System.Collections.Generic; -using System.IO; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEditor.iOS.Xcode; -using UnityEngine; - -namespace AppLovinMax.Scripts.Editor -{ - [Serializable] - public class SkAdNetworkData - { - [SerializeField] public string[] SkAdNetworkIds; - } - - public class MaxPostProcessBuildiOS - { -#if !UNITY_2019_3_OR_NEWER - private const string UnityMainTargetName = "Unity-iPhone"; -#endif - private const string TargetUnityIphonePodfileLine = "target 'Unity-iPhone' do"; - private const string LegacyResourcesDirectoryName = "Resources"; - private const string AppLovinMaxResourcesDirectoryName = "AppLovinMAXResources"; - private const string AppLovinAdvertisingAttributionEndpoint = "https://postbacks-app.com"; - - private const string AppLovinSettingsPlistFileName = "AppLovin-Settings.plist"; - private const string KeyConsentFlowInfo = "ConsentFlowInfo"; - private const string KeyConsentFlowEnabled = "ConsentFlowEnabled"; - private const string KeyConsentFlowTermsOfService = "ConsentFlowTermsOfService"; - private const string KeyConsentFlowPrivacyPolicy = "ConsentFlowPrivacyPolicy"; - private const string KeyConsentFlowDebugUserGeography = "ConsentFlowDebugUserGeography"; - - private static readonly List DynamicLibrariesToEmbed = new List - { - "DTBiOSSDK.xcframework", - "FBAEMKit.xcframework", - "FBSDKCoreKit_Basics.xcframework", - "FBSDKCoreKit.xcframework", - "FBSDKGamingServicesKit.xcframework", - "FBSDKLoginKit.xcframework", - "FBSDKShareKit.xcframework", - "HyprMX.xcframework", - "LinkedinAudienceNetwork.xcframework", - "IASDKCore.xcframework", - "Maio.xcframework", - "MobileFuseSDK.xcframework", - "OMSDK_Appodeal.xcframework", - "OMSDK_Ogury.xcframework", - "OMSDK_Pubnativenet.xcframework", - "OMSDK_Smaato.xcframework" - }; - - private static string PluginMediationDirectory - { - get - { - var pluginParentDir = AppLovinIntegrationManager.MediationSpecificPluginParentDirectory; - return Path.Combine(pluginParentDir, "MaxSdk/Mediation/"); - } - } - - [PostProcessBuildAttribute(int.MaxValue)] - public static void MaxPostProcessPbxProject(BuildTarget buildTarget, string buildPath) - { - var projectPath = PBXProject.GetPBXProjectPath(buildPath); - var project = new PBXProject(); - project.ReadFromFile(projectPath); - -#if UNITY_2019_3_OR_NEWER - var unityMainTargetGuid = project.GetUnityMainTargetGuid(); - var unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); -#else - var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); - var unityFrameworkTargetGuid = project.TargetGuidByName(UnityMainTargetName); -#endif - EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid); - - var internalSettingsEnabled = AppLovinInternalSettings.Instance.ConsentFlowEnabled; - var userTrackingUsageDescriptionDe = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionDe : AppLovinSettings.Instance.UserTrackingUsageDescriptionDe; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionDe, "de", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionEn = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionEn : AppLovinSettings.Instance.UserTrackingUsageDescriptionEn; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionEn, "en", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionEs = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionEs : AppLovinSettings.Instance.UserTrackingUsageDescriptionEs; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionEs, "es", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionFr = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionFr : AppLovinSettings.Instance.UserTrackingUsageDescriptionFr; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionFr, "fr", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionJa = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionJa : AppLovinSettings.Instance.UserTrackingUsageDescriptionJa; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionJa, "ja", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionKo = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionKo : AppLovinSettings.Instance.UserTrackingUsageDescriptionKo; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionKo, "ko", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionZhHans = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionZhHans : AppLovinSettings.Instance.UserTrackingUsageDescriptionZhHans; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionZhHans, "zh-Hans", buildPath, project, unityMainTargetGuid); - var userTrackingUsageDescriptionZhHant = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionZhHant : AppLovinSettings.Instance.UserTrackingUsageDescriptionZhHant; - LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionZhHant, "zh-Hant", buildPath, project, unityMainTargetGuid); - - AddSwiftSupport(buildPath, project, unityFrameworkTargetGuid, unityMainTargetGuid); - AddYandexSettingsIfNeeded(project, unityMainTargetGuid); - - project.WriteToFile(projectPath); - } - - private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid) - { - // Check that the Pods directory exists (it might not if a publisher is building with Generate Podfile setting disabled in EDM). - var podsDirectory = Path.Combine(buildPath, "Pods"); - if (!Directory.Exists(podsDirectory)) return; - - var dynamicLibraryPathsPresentInProject = new List(); - foreach (var dynamicLibraryToSearch in DynamicLibrariesToEmbed) - { - // both .framework and .xcframework are directories, not files - var directories = Directory.GetDirectories(podsDirectory, dynamicLibraryToSearch, SearchOption.AllDirectories); - if (directories.Length <= 0) continue; - - var dynamicLibraryAbsolutePath = directories[0]; - var index = dynamicLibraryAbsolutePath.LastIndexOf("Pods"); - var relativePath = dynamicLibraryAbsolutePath.Substring(index); - dynamicLibraryPathsPresentInProject.Add(relativePath); - } - - if (dynamicLibraryPathsPresentInProject.Count <= 0) return; - -#if UNITY_2019_3_OR_NEWER - // Embed framework only if the podfile does not contain target `Unity-iPhone`. - if (!ContainsUnityIphoneTargetInPodfile(buildPath)) - { - foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject) - { - var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath); - project.AddFileToEmbedFrameworks(targetGuid, fileGuid); - } - } -#else - string runpathSearchPaths; - runpathSearchPaths = project.GetBuildPropertyForAnyConfig(targetGuid, "LD_RUNPATH_SEARCH_PATHS"); - runpathSearchPaths += string.IsNullOrEmpty(runpathSearchPaths) ? "" : " "; - - // Check if runtime search paths already contains the required search paths for dynamic libraries. - if (runpathSearchPaths.Contains("@executable_path/Frameworks")) return; - - runpathSearchPaths += "@executable_path/Frameworks"; - project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", runpathSearchPaths); -#endif - } - - private static void LocalizeUserTrackingDescriptionIfNeeded(string localizedUserTrackingDescription, string localeCode, string buildPath, PBXProject project, string targetGuid) - { - // Use the legacy resources directory name if the build is being appended (the "Resources" directory already exists if it is an incremental build). - var resourcesDirectoryName = Directory.Exists(Path.Combine(buildPath, LegacyResourcesDirectoryName)) ? LegacyResourcesDirectoryName : AppLovinMaxResourcesDirectoryName; - var resourcesDirectoryPath = Path.Combine(buildPath, resourcesDirectoryName); - var localeSpecificDirectoryName = localeCode + ".lproj"; - var localeSpecificDirectoryPath = Path.Combine(resourcesDirectoryPath, localeSpecificDirectoryName); - var infoPlistStringsFilePath = Path.Combine(localeSpecificDirectoryPath, "InfoPlist.strings"); - - // Check if localization has been disabled between builds, and remove them as needed. - if (ShouldRemoveLocalization(localizedUserTrackingDescription)) - { - if (!File.Exists(infoPlistStringsFilePath)) return; - - File.Delete(infoPlistStringsFilePath); - return; - } - - // Create intermediate directories as needed. - if (!Directory.Exists(resourcesDirectoryPath)) - { - Directory.CreateDirectory(resourcesDirectoryPath); - } - - if (!Directory.Exists(localeSpecificDirectoryPath)) - { - Directory.CreateDirectory(localeSpecificDirectoryPath); - } - - var localizedDescriptionLine = "\"NSUserTrackingUsageDescription\" = \"" + localizedUserTrackingDescription + "\";\n"; - // File already exists, update it in case the value changed between builds. - if (File.Exists(infoPlistStringsFilePath)) - { - var output = new List(); - var lines = File.ReadAllLines(infoPlistStringsFilePath); - var keyUpdated = false; - foreach (var line in lines) - { - if (line.Contains("NSUserTrackingUsageDescription")) - { - output.Add(localizedDescriptionLine); - keyUpdated = true; - } - else - { - output.Add(line); - } - } - - if (!keyUpdated) - { - output.Add(localizedDescriptionLine); - } - - File.WriteAllText(infoPlistStringsFilePath, string.Join("\n", output.ToArray()) + "\n"); - } - // File doesn't exist, create one. - else - { - File.WriteAllText(infoPlistStringsFilePath, "/* Localized versions of Info.plist keys - Generated by AL MAX plugin */\n" + localizedDescriptionLine); - } - - var localeSpecificDirectoryRelativePath = Path.Combine(resourcesDirectoryName, localeSpecificDirectoryName); - var guid = project.AddFolderReference(localeSpecificDirectoryRelativePath, localeSpecificDirectoryRelativePath); - project.AddFileToBuild(targetGuid, guid); - } - - private static bool ShouldRemoveLocalization(string localizedUserTrackingDescription) - { - if (string.IsNullOrEmpty(localizedUserTrackingDescription)) return true; - - var settings = AppLovinSettings.Instance; - var internalSettings = AppLovinInternalSettings.Instance; - - return (!internalSettings.ConsentFlowEnabled || !internalSettings.UserTrackingUsageLocalizationEnabled) - && !settings.ConsentFlowEnabled || !settings.UserTrackingUsageLocalizationEnabled; - } - - private static void AddSwiftSupport(string buildPath, PBXProject project, string unityFrameworkTargetGuid, string unityMainTargetGuid) - { - var swiftFileRelativePath = "Classes/MAXSwiftSupport.swift"; - var swiftFilePath = Path.Combine(buildPath, swiftFileRelativePath); - - // Add Swift file - CreateSwiftFile(swiftFilePath); - var swiftFileGuid = project.AddFile(swiftFileRelativePath, swiftFileRelativePath, PBXSourceTree.Source); - project.AddFileToBuild(unityFrameworkTargetGuid, swiftFileGuid); - - // Add Swift version property if needed - var swiftVersion = project.GetBuildPropertyForAnyConfig(unityFrameworkTargetGuid, "SWIFT_VERSION"); - if (string.IsNullOrEmpty(swiftVersion)) - { - project.SetBuildProperty(unityFrameworkTargetGuid, "SWIFT_VERSION", "5.0"); - } - - // Enable Swift modules - project.AddBuildProperty(unityFrameworkTargetGuid, "CLANG_ENABLE_MODULES", "YES"); - project.AddBuildProperty(unityMainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES"); - } - - private static void CreateSwiftFile(string swiftFilePath) - { - if (File.Exists(swiftFilePath)) return; - - // Create a file to write to. - using (var writer = File.CreateText(swiftFilePath)) - { - writer.WriteLine("//\n// MAXSwiftSupport.swift\n//"); - writer.WriteLine("\nimport Foundation\n"); - writer.WriteLine("// This file ensures the project includes Swift support."); - writer.WriteLine("// It is automatically generated by the MAX Unity Plugin."); - writer.Close(); - } - } - - [PostProcessBuildAttribute(int.MaxValue)] - public static void MaxPostProcessPlist(BuildTarget buildTarget, string path) - { - var plistPath = Path.Combine(path, "Info.plist"); - var plist = new PlistDocument(); - plist.ReadFromFile(plistPath); - - SetSdkKeyIfNeeded(plist); - SetAttributionReportEndpointIfNeeded(plist); - - EnableVerboseLoggingIfNeeded(plist); - AddGoogleApplicationIdIfNeeded(plist); - - AddSdkSettingsIfNeeded(plist, path); - EnableTermsFlowIfNeeded(plist); - AddSkAdNetworksInfoIfNeeded(plist); - - plist.WriteToFile(plistPath); - } - - private static void SetSdkKeyIfNeeded(PlistDocument plist) - { - var sdkKey = AppLovinSettings.Instance.SdkKey; - if (string.IsNullOrEmpty(sdkKey)) return; - - const string AppLovinVerboseLoggingOnKey = "AppLovinSdkKey"; - plist.root.SetString(AppLovinVerboseLoggingOnKey, sdkKey); - } - - private static void SetAttributionReportEndpointIfNeeded(PlistDocument plist) - { - if (AppLovinSettings.Instance.SetAttributionReportEndpoint) - { - plist.root.SetString("NSAdvertisingAttributionReportEndpoint", AppLovinAdvertisingAttributionEndpoint); - } - else - { - PlistElement attributionReportEndPoint; - plist.root.values.TryGetValue("NSAdvertisingAttributionReportEndpoint", out attributionReportEndPoint); - - // Check if we had previously set the attribution endpoint and un-set it. - if (attributionReportEndPoint != null && AppLovinAdvertisingAttributionEndpoint.Equals(attributionReportEndPoint.AsString())) - { - plist.root.values.Remove("NSAdvertisingAttributionReportEndpoint"); - } - } - } - - private static void EnableVerboseLoggingIfNeeded(PlistDocument plist) - { - if (!EditorPrefs.HasKey(MaxSdkLogger.KeyVerboseLoggingEnabled)) return; - - var enabled = EditorPrefs.GetBool(MaxSdkLogger.KeyVerboseLoggingEnabled); - const string AppLovinVerboseLoggingOnKey = "AppLovinVerboseLoggingOn"; - if (enabled) - { - plist.root.SetBoolean(AppLovinVerboseLoggingOnKey, enabled); - } - else - { - plist.root.values.Remove(AppLovinVerboseLoggingOnKey); - } - } - - private static void AddGoogleApplicationIdIfNeeded(PlistDocument plist) - { - if (!AppLovinIntegrationManager.IsAdapterInstalled("Google") && !AppLovinIntegrationManager.IsAdapterInstalled("GoogleAdManager")) return; - - const string googleApplicationIdentifier = "GADApplicationIdentifier"; - var appId = AppLovinSettings.Instance.AdMobIosAppId; - // Log error if the App ID is not set. - if (string.IsNullOrEmpty(appId) || !appId.StartsWith("ca-app-pub-")) - { - Debug.LogError("[AppLovin MAX] Google App ID is not set. Please enter a valid app ID within the AppLovin Integration Manager window."); - return; - } - - plist.root.SetString(googleApplicationIdentifier, appId); - } - - private static void AddYandexSettingsIfNeeded(PBXProject project, string unityMainTargetGuid) - { - if (!AppLovinIntegrationManager.IsAdapterInstalled("Yandex")) return; - - if (MaxSdkUtils.CompareVersions(PlayerSettings.iOS.targetOSVersionString, "12.0") == MaxSdkUtils.VersionComparisonResult.Lesser) - { - Debug.LogWarning("Your iOS target version is under the minimum required version by Yandex. Please update it to 12.0 or newer in your ProjectSettings and rebuild your project."); - return; - } - - project.SetBuildProperty(unityMainTargetGuid, "GENERATE_INFOPLIST_FILE", "NO"); - } - - private static void AddSdkSettingsIfNeeded(PlistDocument infoPlist, string buildPath) - { - // Right now internal settings is only needed for Consent Flow. Remove this setting once we add more settings. - if (!AppLovinInternalSettings.Instance.ConsentFlowEnabled) return; - - var sdkSettingsPlistPath = Path.Combine(buildPath, AppLovinSettingsPlistFileName); - var sdkSettingsPlist = new PlistDocument(); - if (File.Exists(sdkSettingsPlistPath)) - { - sdkSettingsPlist.ReadFromFile(sdkSettingsPlistPath); - } - - EnableConsentFlowIfNeeded(sdkSettingsPlist, infoPlist); - - sdkSettingsPlist.WriteToFile(sdkSettingsPlistPath); - - var projectPath = PBXProject.GetPBXProjectPath(buildPath); - var project = new PBXProject(); - project.ReadFromFile(projectPath); - -#if UNITY_2019_3_OR_NEWER - var unityMainTargetGuid = project.GetUnityMainTargetGuid(); -#else - var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); -#endif - - var guid = project.AddFile(AppLovinSettingsPlistFileName, AppLovinSettingsPlistFileName, PBXSourceTree.Source); - project.AddFileToBuild(unityMainTargetGuid, guid); - project.WriteToFile(projectPath); - } - - private static void EnableConsentFlowIfNeeded(PlistDocument applovinSettingsPlist, PlistDocument infoPlist) - { - var consentFlowEnabled = AppLovinInternalSettings.Instance.ConsentFlowEnabled; - var userTrackingUsageDescription = AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionEn; - var privacyPolicyUrl = AppLovinInternalSettings.Instance.ConsentFlowPrivacyPolicyUrl; - if (string.IsNullOrEmpty(userTrackingUsageDescription) || string.IsNullOrEmpty(privacyPolicyUrl)) - { - AppLovinIntegrationManager.ShowBuildFailureDialog("You cannot use the AppLovin SDK's consent flow without defining a Privacy Policy URL and the `User Tracking Usage Description` in the AppLovin Integration Manager. \n\n" + - "Both values must be included to enable the SDK's consent flow."); - - // No need to update the info.plist here. Default consent flow state will be determined on the SDK side. - return; - } - - var consentFlowInfoRoot = applovinSettingsPlist.root.CreateDict(KeyConsentFlowInfo); - consentFlowInfoRoot.SetBoolean(KeyConsentFlowEnabled, consentFlowEnabled); - consentFlowInfoRoot.SetString(KeyConsentFlowPrivacyPolicy, privacyPolicyUrl); - - var termsOfServiceUrl = AppLovinInternalSettings.Instance.ConsentFlowTermsOfServiceUrl; - if (MaxSdkUtils.IsValidString(termsOfServiceUrl)) - { - consentFlowInfoRoot.SetString(KeyConsentFlowTermsOfService, termsOfServiceUrl); - } - - var debugUserGeography = AppLovinInternalSettings.Instance.DebugUserGeography; - if (debugUserGeography == MaxSdkBase.ConsentFlowUserGeography.Gdpr) - { - consentFlowInfoRoot.SetString(KeyConsentFlowDebugUserGeography, "gdpr"); - } - - infoPlist.root.SetString("NSUserTrackingUsageDescription", userTrackingUsageDescription); - } - - private static void EnableTermsFlowIfNeeded(PlistDocument plist) - { - // Check if terms flow is enabled. No need to update info.plist if consent flow is disabled. - var consentFlowEnabled = AppLovinSettings.Instance.ConsentFlowEnabled; - if (!consentFlowEnabled) return; - - // Check if terms flow is enabled for this format. - var consentFlowPlatform = AppLovinSettings.Instance.ConsentFlowPlatform; - if (consentFlowPlatform != Platform.All && consentFlowPlatform != Platform.iOS) return; - - var userTrackingUsageDescription = AppLovinSettings.Instance.UserTrackingUsageDescriptionEn; - var privacyPolicyUrl = AppLovinSettings.Instance.ConsentFlowPrivacyPolicyUrl; - if (string.IsNullOrEmpty(userTrackingUsageDescription) || string.IsNullOrEmpty(privacyPolicyUrl)) - { - AppLovinIntegrationManager.ShowBuildFailureDialog("You cannot use the AppLovin SDK's consent flow without defining a Privacy Policy URL and the `User Tracking Usage Description` in the AppLovin Integration Manager. \n\n" + - "Both values must be included to enable the SDK's consent flow."); - - // No need to update the info.plist here. Default consent flow state will be determined on the SDK side. - return; - } - - var consentFlowInfoRoot = plist.root.CreateDict("AppLovinConsentFlowInfo"); - consentFlowInfoRoot.SetBoolean("AppLovinConsentFlowEnabled", consentFlowEnabled); - consentFlowInfoRoot.SetString("AppLovinConsentFlowPrivacyPolicy", privacyPolicyUrl); - - var termsOfServiceUrl = AppLovinSettings.Instance.ConsentFlowTermsOfServiceUrl; - if (!string.IsNullOrEmpty(termsOfServiceUrl)) - { - consentFlowInfoRoot.SetString("AppLovinConsentFlowTermsOfService", termsOfServiceUrl); - } - - plist.root.SetString("NSUserTrackingUsageDescription", userTrackingUsageDescription); - } - - private static void AddSkAdNetworksInfoIfNeeded(PlistDocument plist) - { - var skAdNetworkData = GetSkAdNetworkData(); - var skAdNetworkIds = skAdNetworkData.SkAdNetworkIds; - // Check if we have a valid list of SKAdNetworkIds that need to be added. - if (skAdNetworkIds == null || skAdNetworkIds.Length < 1) return; - - // - // Add the SKAdNetworkItems to the plist. It should look like following: - // - // SKAdNetworkItems - // - // - // SKAdNetworkIdentifier - // ABC123XYZ.skadnetwork - // - // - // SKAdNetworkIdentifier - // 123QWE456.skadnetwork - // - // - // SKAdNetworkIdentifier - // 987XYZ123.skadnetwork - // - // - // - PlistElement skAdNetworkItems; - plist.root.values.TryGetValue("SKAdNetworkItems", out skAdNetworkItems); - var existingSkAdNetworkIds = new HashSet(); - // Check if SKAdNetworkItems array is already in the Plist document and collect all the IDs that are already present. - if (skAdNetworkItems != null && skAdNetworkItems.GetType() == typeof(PlistElementArray)) - { - var plistElementDictionaries = skAdNetworkItems.AsArray().values.Where(plistElement => plistElement.GetType() == typeof(PlistElementDict)); - foreach (var plistElement in plistElementDictionaries) - { - PlistElement existingId; - plistElement.AsDict().values.TryGetValue("SKAdNetworkIdentifier", out existingId); - if (existingId == null || existingId.GetType() != typeof(PlistElementString) || string.IsNullOrEmpty(existingId.AsString())) continue; - - existingSkAdNetworkIds.Add(existingId.AsString()); - } - } - // Else, create an array of SKAdNetworkItems into which we will add our IDs. - else - { - skAdNetworkItems = plist.root.CreateArray("SKAdNetworkItems"); - } - - foreach (var skAdNetworkId in skAdNetworkIds) - { - // Skip adding IDs that are already in the array. - if (existingSkAdNetworkIds.Contains(skAdNetworkId)) continue; - - var skAdNetworkItemDict = skAdNetworkItems.AsArray().AddDict(); - skAdNetworkItemDict.SetString("SKAdNetworkIdentifier", skAdNetworkId); - } - } - - private static SkAdNetworkData GetSkAdNetworkData() - { - var uriBuilder = new UriBuilder("https://unity.applovin.com/max/1.0/skadnetwork_ids"); - - // Get the list of installed ad networks to be passed up - var maxMediationDirectory = PluginMediationDirectory; - if (Directory.Exists(maxMediationDirectory)) - { - var mediationNetworkDirectories = Directory.GetDirectories(maxMediationDirectory); - var installedNetworks = mediationNetworkDirectories.Select(Path.GetFileName).ToList(); - if (AppLovinSettings.Instance.AddApsSkAdNetworkIds) - { - installedNetworks.Add("AmazonPublisherServices"); - } - - var adNetworks = string.Join(",", installedNetworks.ToArray()); - if (!string.IsNullOrEmpty(adNetworks)) - { - uriBuilder.Query += string.Format("ad_networks={0}", adNetworks); - } - } - - using (var unityWebRequest = UnityWebRequest.Get(uriBuilder.ToString())) - { - var operation = unityWebRequest.SendWebRequest(); - // Wait for the download to complete or the request to timeout. - while (!operation.isDone) { } - -#if UNITY_2020_1_OR_NEWER - if (unityWebRequest.result != UnityWebRequest.Result.Success) -#else - if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError) -#endif - { - MaxSdkLogger.UserError("Failed to retrieve SKAdNetwork IDs with error: " + unityWebRequest.error); - return new SkAdNetworkData(); - } - - try - { - return JsonUtility.FromJson(unityWebRequest.downloadHandler.text); - } - catch (Exception exception) - { - MaxSdkLogger.UserError("Failed to parse data '" + unityWebRequest.downloadHandler.text + "' with exception: " + exception); - return new SkAdNetworkData(); - } - } - } - -#if UNITY_2019_3_OR_NEWER - private static bool ContainsUnityIphoneTargetInPodfile(string buildPath) - { - var podfilePath = Path.Combine(buildPath, "Podfile"); - if (!File.Exists(podfilePath)) return false; - - var lines = File.ReadAllLines(podfilePath); - return lines.Any(line => line.Contains(TargetUnityIphonePodfileLine)); - } -#endif - } -} - -#endif diff --git a/MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs.meta b/MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs.meta deleted file mode 100644 index 78d2f6d..0000000 --- a/MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs.meta +++ /dev/null @@ -1,14 +0,0 @@ -fileFormatVersion: 2 -guid: 29959b3cd36c484a9d57d6b7ca7f7bfa -labels: -- al_max -- al_max_export_path-MaxSdk/Scripts/Editor/MaxPostProcessBuildiOS.cs -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef b/MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef deleted file mode 100644 index e4bb2e0..0000000 --- a/MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "MaxSdk.Scripts.Editor", - "references": [ - "MaxSdk.Scripts", - "MaxSdk.Scripts.IntegrationManager.Editor" - ], - "includePlatforms": [ - "Editor" - ], - "excludePlatforms": [] -} diff --git a/MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef.meta b/MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef.meta deleted file mode 100644 index b13c71a..0000000 --- a/MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef.meta +++ /dev/null @@ -1,6 +0,0 @@ -fileFormatVersion: 2 -guid: 691e0eb4b7a542dba2219d48c3254f1c -labels: -- al_max -- al_max_export_path-MaxSdk/Scripts/Editor/MaxSdk.Scripts.Editor.asmdef -timeCreated: 1591749791 diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinAutoUpdater.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinAutoUpdater.cs index 2b3e87b..c1e8ed3 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinAutoUpdater.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinAutoUpdater.cs @@ -26,7 +26,6 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor // TODO: Make this list dynamic. public static readonly Dictionary MinAdapterVersions = new Dictionary() { - {"ADCOLONY_NETWORK", "android_4.2.3.1_ios_4.3.1.1"}, {"ADMOB_NETWORK", "android_19.3.0.3_ios_7.65.0.0"}, {"CHARTBOOST_NETWORK", "android_8.1.0.7_ios_8.2.1.3"}, {"FACEBOOK_MEDIATE", "android_6.0.0.1_ios_6.0.0.3"}, @@ -38,7 +37,6 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor {"SMAATO_NETWORK", "android_21.5.2.5_ios_21.5.2.3"}, {"TIKTOK_NETWORK", "android_3.1.0.1.6_ios_3.2.5.1.1"}, {"UNITY_NETWORK", "android_3.4.8.2_ios_3.4.8.2"}, - {"VERIZON_NETWORK", "android_1.6.0.5_ios_1.7.1.1"}, {"VUNGLE_NETWORK", "android_6.7.1.2_ios_6.7.1.3"}, {"YANDEX_NETWORK", "android_2.170.2_ios_2.18.0.1"} }; diff --git a/MaxSdk/Scripts/Editor/MaxInitialization.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs similarity index 93% rename from MaxSdk/Scripts/Editor/MaxInitialization.cs rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs index a1dc1df..4f61d97 100644 --- a/MaxSdk/Scripts/Editor/MaxInitialization.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs @@ -12,13 +12,16 @@ using System.IO; using System.Linq; using UnityEditor; -namespace AppLovinMax.Scripts.Editor +namespace AppLovinMax.Scripts.IntegrationManager.Editor { [InitializeOnLoad] - public class MaxInitialize + public class AppLovinInitialize { private static readonly List ObsoleteNetworks = new List { + "AdColony", + "Criteo", + "Nend", "Snap", "Tapjoy", "VerizonAds", @@ -27,6 +30,10 @@ namespace AppLovinMax.Scripts.Editor private static readonly List ObsoleteFileExportPathsToDelete = new List { + // The `MaxSdk/Scripts/Editor` folder contents have been moved into `MaxSdk/Scripts/IntegrationManager/Editor`. + "MaxSdk/Scripts/Editor", + "MaxSdk/Scripts/Editor.meta", + // The `EventSystemChecker` has been renamed to `MaxEventSystemChecker`. "MaxSdk/Scripts/EventSystemChecker.cs", "MaxSdk/Scripts/EventSystemChecker.cs.meta", @@ -54,7 +61,7 @@ namespace AppLovinMax.Scripts.Editor "MaxSdk/Mediation/GoogleAdManager/Editor/MaxSdk.Mediation.GoogleAdManager.Editor.asmdef.meta", "Plugins/Android/MaxMediationGoogleAdManager.androidlib", "Plugins/Android/MaxMediationGoogleAdManager.androidlib.meta", - + // The `VariableService` has been removed. "MaxSdk/Scripts/MaxVariableServiceAndroid.cs", "MaxSdk/Scripts/MaxVariableServiceAndroid.cs.meta", @@ -64,7 +71,7 @@ namespace AppLovinMax.Scripts.Editor "MaxSdk/Scripts/MaxVariableServiceUnityEditor.cs.meta" }; - static MaxInitialize() + static AppLovinInitialize() { #if UNITY_IOS // Check that the publisher is targeting iOS 9.0+ diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs index 3b1b9d9..1536e66 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs @@ -467,19 +467,37 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor /// Checks whether or not an adapter with the given version or newer exists. ///
/// The name of the network (the root adapter folder name in "MaxSdk/Mediation/" folder. - /// The min adapter version to check for. Can be null if we want to check for any version. + /// The min adapter version to check for. Can be null if we want to check for any version. /// true if an adapter with the min version is installed. - public static bool IsAdapterInstalled(string adapterName, string version = null) + public static bool IsAdapterInstalled(string adapterName, string iosVersion = null) // TODO: Add Android version check. { var dependencyFilePath = MaxSdkUtils.GetAssetPathForExportPath("MaxSdk/Mediation/" + adapterName + "/Editor/Dependencies.xml"); if (!File.Exists(dependencyFilePath)) return false; // If version is null, we just need the adapter installed. We don't have to check for a specific version. - if (version == null) return true; + if (iosVersion == null) return true; - var currentVersion = AppLovinIntegrationManager.GetCurrentVersions(dependencyFilePath); - var iosVersionComparison = MaxSdkUtils.CompareVersions(currentVersion.Ios, version); - return iosVersionComparison != MaxSdkUtils.VersionComparisonResult.Lesser; + var currentVersion = GetCurrentVersions(dependencyFilePath); + var iosVersionComparison = MaxSdkUtils.CompareVersions(currentVersion.Ios, iosVersion); + return iosVersionComparison != VersionComparisonResult.Lesser; + } + + /// + /// Checks whether or not an adapter older than the given version exists. + /// + /// TODO: Consolidate this method with and return a state enum. + /// + /// The name of the network (the root adapter folder name in "MaxSdk/Mediation/" folder. + /// The adapter version to check for. + /// true if an adapter older than the provided version is installed. + public static bool IsAdapterOlderThanMinVersionInstalled(string adapterName, string iosVersion) // TODO: Add Android version check. + { + var dependencyFilePath = MaxSdkUtils.GetAssetPathForExportPath("MaxSdk/Mediation/" + adapterName + "/Editor/Dependencies.xml"); + if (!File.Exists(dependencyFilePath)) return false; + + var currentVersion = GetCurrentVersions(dependencyFilePath); + var iosVersionComparison = MaxSdkUtils.CompareVersions(currentVersion.Ios, iosVersion); + return iosVersionComparison == VersionComparisonResult.Lesser; } #region Utility Methods diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs index 5c3f2d1..8598f30 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs @@ -35,6 +35,9 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor private const string qualityServiceRequiresGradleBuildErrorMsg = "AppLovin Quality Service integration via AppLovin Integration Manager requires Custom Gradle Template enabled or Unity 2018.2 or higher.\n" + "If you would like to continue using your existing setup, please add Quality Service Plugin to your build.gradle manually."; + private const string customGradleVersionTooltip = "To set the version to 6.9.3, set the field to: https://services.gradle.org/distributions/gradle-6.9.3-bin.zip"; + private const string customGradleToolsVersionTooltip = "To set the version to 4.2.0, set the field to: 4.2.0"; + private readonly string[] termsFlowPlatforms = new string[3] {"Both", "Android", "iOS"}; private readonly string[] debugUserGeographies = new string[2] {"Not Set", "GDPR"}; @@ -142,6 +145,26 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor } private void OnEnable() + { + // Script reloads can cause AppLovinSettings.Instance to be null for one frame, + // so we load the Integration Manager on the following frame + if (AppLovinSettings.Instance == null) + { + AppLovinEditorCoroutine.StartCoroutine(WaitForNextFrameForEnable()); + } + else + { + OnWindowEnabled(); + } + } + + private IEnumerator WaitForNextFrameForEnable() + { + yield return new WaitForEndOfFrame(); + OnWindowEnabled(); + } + + private void OnWindowEnabled() { AppLovinIntegrationManager.downloadPluginProgressCallback = OnDownloadPluginProgress; @@ -431,7 +454,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor private void DrawNetworkDetailRow(Network network) { string action; - var currentVersion = network.CurrentVersions.Unity; + var currentVersion = network.CurrentVersions != null ? network.CurrentVersions.Unity : ""; var latestVersion = network.LatestVersions.Unity; bool isActionEnabled; bool isInstalled; @@ -621,11 +644,12 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor GUILayout.EndHorizontal(); } - private string DrawTextField(string fieldTitle, string text, GUILayoutOption labelWidth, GUILayoutOption textFieldWidthOption = null, bool isTextFieldEditable = true) + private string DrawTextField(string fieldTitle, string text, GUILayoutOption labelWidth, GUILayoutOption textFieldWidthOption = null, bool isTextFieldEditable = true, string tooltip = "") { GUILayout.BeginHorizontal(); GUILayout.Space(4); - EditorGUILayout.LabelField(new GUIContent(fieldTitle), labelWidth); + var guiContent = MaxSdkUtils.IsValidString(tooltip) ? new GUIContent(fieldTitle, tooltip) : new GUIContent(fieldTitle); + EditorGUILayout.LabelField(guiContent, labelWidth); GUILayout.Space(4); if (isTextFieldEditable) { @@ -687,6 +711,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor AppLovinInternalSettings.Instance.ConsentFlowEnabled = true; AppLovinSettings.Instance.ConsentFlowEnabled = false; } + GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(4); @@ -750,7 +775,6 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor Application.OpenURL(userTrackingUsageDescriptionDocsLink); } - GUILayout.Space(4); GUILayout.EndHorizontal(); GUILayout.Space(4); @@ -782,6 +806,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor { Application.OpenURL(documentationTermsAndPrivacyPolicyFlow); } + GUILayout.Space(4); GUILayout.EndHorizontal(); @@ -880,6 +905,9 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor var verboseLoggingEnabled = DrawOtherSettingsToggle(EditorPrefs.GetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, false), " Enable Verbose Logging"); EditorPrefs.SetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, verboseLoggingEnabled); GUILayout.Space(5); + AppLovinSettings.Instance.CustomGradleVersionUrl = DrawTextField("Custom Gradle Version URL", AppLovinSettings.Instance.CustomGradleVersionUrl, GUILayout.Width(privacySettingLabelWidth), privacySettingFieldWidthOption, tooltip: customGradleVersionTooltip); + AppLovinSettings.Instance.CustomGradleToolsVersion = DrawTextField("Custom Gradle Tools Version", AppLovinSettings.Instance.CustomGradleToolsVersion, GUILayout.Width(privacySettingLabelWidth), privacySettingFieldWidthOption, tooltip: customGradleToolsVersionTooltip); + EditorGUILayout.HelpBox("This will overwrite the gradle build tools version in your base gradle template.", MessageType.Info); } GUILayout.Space(5); diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs similarity index 100% rename from MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta deleted file mode 100644 index 0749642..0000000 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta +++ /dev/null @@ -1,10 +0,0 @@ -fileFormatVersion: 2 -guid: 028aec80942df459ab226487b786042c -labels: -- al_max -- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs similarity index 59% rename from MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs index c0d1e13..1c34801 100644 --- a/MaxSdk/Scripts/Editor/MaxPostProcessBuildAndroid.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs @@ -12,8 +12,8 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; +using System.Text.RegularExpressions; using System.Xml.Linq; -using AppLovinMax.ThirdParty.MiniJson; using UnityEditor; using UnityEditor.Android; using UnityEngine; @@ -23,7 +23,7 @@ namespace AppLovinMax.Scripts.Editor /// /// A post processor used to update the Android project once it is generated. /// - public class MaxPostProcessBuildAndroid : IPostGenerateGradleAndroidProject + public class AppLovinPostProcessAndroid : IPostGenerateGradleAndroidProject { #if UNITY_2019_3_OR_NEWER private const string PropertyAndroidX = "android.useAndroidX"; @@ -36,7 +36,23 @@ namespace AppLovinMax.Scripts.Editor private const string KeyMetaDataAppLovinSdkKey = "applovin.sdk.key"; private const string KeyMetaDataAppLovinVerboseLoggingOn = "applovin.sdk.verbose_logging"; private const string KeyMetaDataGoogleApplicationId = "com.google.android.gms.ads.APPLICATION_ID"; - private const string KeyMetaDataGoogleAdManagerApp = "com.google.android.gms.ads.AD_MANAGER_APP"; + private const string KeyMetaDataGoogleOptimizeInitialization = "com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"; + private const string KeyMetaDataGoogleOptimizeAdLoading = "com.google.android.gms.ads.flag.OPTIMIZE_AD_LOADING"; + + private const string KeyMetaDataMobileFuseAutoInit = "com.mobilefuse.sdk.disable_auto_init"; + private const string KeyMetaDataMyTargetAutoInit = "com.my.target.autoInitMode"; + +#if UNITY_2022_3_OR_NEWER + // To match "'com.android.library' version '7.3.1'" line in build.gradle + private static readonly Regex TokenGradleVersionLibrary = new Regex(".*id ['\"]com\\.android\\.library['\"] version"); + private static readonly Regex TokenGradleVersion = new Regex(".*id ['\"]com\\.android\\.application['\"] version"); +#else + // To match "classpath 'com.android.tools.build:gradle:4.0.1'" line in build.gradle + private static readonly Regex TokenGradleVersion = new Regex(".*classpath ['\"]com\\.android\\.tools\\.build:gradle:.*"); +#endif + + // To match "distributionUrl=..." in gradle-wrapper.properties file + private static readonly Regex TokenDistributionUrl = new Regex(".*distributionUrl.*"); private static readonly XNamespace AndroidNamespace = "http://schemas.android.com/apk/res/android"; @@ -52,10 +68,17 @@ namespace AppLovinMax.Scripts.Editor public void OnPostGenerateGradleAndroidProject(string path) { #if UNITY_2019_3_OR_NEWER + var rootGradleBuildFilePath = Path.Combine(path, "../build.gradle"); var gradlePropertiesPath = Path.Combine(path, "../gradle.properties"); + var gradleWrapperPropertiesPath = Path.Combine(path, "../gradle/wrapper/gradle-wrapper.properties"); #else + var rootGradleBuildFilePath = Path.Combine(path, "build.gradle"); var gradlePropertiesPath = Path.Combine(path, "gradle.properties"); + var gradleWrapperPropertiesPath = Path.Combine(path, "gradle/wrapper/gradle-wrapper.properties"); #endif + + UpdateGradleVersionsIfNeeded(gradleWrapperPropertiesPath, rootGradleBuildFilePath); + var gradlePropertiesUpdated = new List(); // If the gradle properties file already exists, make sure to add any previous properties. @@ -144,6 +167,8 @@ namespace AppLovinMax.Scripts.Editor AddSdkKeyIfNeeded(elementApplication); EnableVerboseLoggingIfNeeded(elementApplication); AddGoogleApplicationIdIfNeeded(elementApplication, metaDataElements); + AddGoogleOptimizationFlagsIfNeeded(elementApplication, metaDataElements); + DisableAutoInitIfNeeded(elementApplication, metaDataElements); // Save the updated manifest file. manifest.Save(manifestPath); @@ -235,6 +260,101 @@ namespace AppLovinMax.Scripts.Editor } } + private static void AddGoogleOptimizationFlagsIfNeeded(XElement elementApplication, IEnumerable metaDataElements) + { + if (!AppLovinIntegrationManager.IsAdapterInstalled("Google") && !AppLovinIntegrationManager.IsAdapterInstalled("GoogleAdManager")) return; + + var googleOptimizeInitializationMetaData = GetMetaDataElement(metaDataElements, KeyMetaDataGoogleOptimizeInitialization); + // If meta data doesn't exist, add it + if (googleOptimizeInitializationMetaData == null) + { + elementApplication.Add(CreateMetaDataElement(KeyMetaDataGoogleOptimizeInitialization, true)); + } + + var googleOptimizeAdLoadingMetaData = GetMetaDataElement(metaDataElements, KeyMetaDataGoogleOptimizeAdLoading); + // If meta data doesn't exist, add it + if (googleOptimizeAdLoadingMetaData == null) + { + elementApplication.Add(CreateMetaDataElement(KeyMetaDataGoogleOptimizeAdLoading, true)); + } + } + + private static void DisableAutoInitIfNeeded(XElement elementApplication, IEnumerable metaDataElements) + { + if (AppLovinIntegrationManager.IsAdapterInstalled("MobileFuse")) + { + var mobileFuseMetaData = GetMetaDataElement(metaDataElements, KeyMetaDataMobileFuseAutoInit); + // If MobileFuse meta data doesn't exist, add it + if (mobileFuseMetaData == null) + { + elementApplication.Add(CreateMetaDataElement(KeyMetaDataMobileFuseAutoInit, true)); + } + } + + if (AppLovinIntegrationManager.IsAdapterInstalled("MyTarget")) + { + var myTargetMetaData = GetMetaDataElement(metaDataElements, KeyMetaDataMyTargetAutoInit); + // If MyTarget meta data doesn't exist, add it + if (myTargetMetaData == null) + { + elementApplication.Add(CreateMetaDataElement(KeyMetaDataMyTargetAutoInit, 0)); + } + } + } + + private static void UpdateGradleVersionsIfNeeded(string gradleWrapperPropertiesPath, string rootGradleBuildFilePath) + { + var customGradleVersionUrl = AppLovinSettings.Instance.CustomGradleVersionUrl; + var customGradleToolsVersion = AppLovinSettings.Instance.CustomGradleToolsVersion; + + if (MaxSdkUtils.IsValidString(customGradleVersionUrl)) + { + var newDistributionUrl = string.Format("distributionUrl={0}", customGradleVersionUrl); + if (ReplaceStringInFile(gradleWrapperPropertiesPath, TokenDistributionUrl, newDistributionUrl)) + { + MaxSdkLogger.D("Distribution url set to " + newDistributionUrl); + } + else + { + MaxSdkLogger.E("Failed to set distribution URL"); + } + } + + if (MaxSdkUtils.IsValidString(customGradleToolsVersion)) + { +#if UNITY_2022_3_OR_NEWER + // Unity 2022.3+ requires Gradle Plugin version 7.1.2+. + if (MaxSdkUtils.CompareVersions(customGradleToolsVersion, "7.1.2") == MaxSdkUtils.VersionComparisonResult.Lesser) + { + MaxSdkLogger.E("Failed to set gradle plugin version. Unity 2022.3+ requires gradle plugin version 7.1.2+"); + return; + } + + var newGradleVersionLibraryLine = AppLovinProcessGradleBuildFile.GetFormattedBuildScriptLine(string.Format("id 'com.android.library' version '{0}' apply false", customGradleToolsVersion)); + if (ReplaceStringInFile(rootGradleBuildFilePath, TokenGradleVersionLibrary, newGradleVersionLibraryLine)) + { + MaxSdkLogger.D("Gradle library version set to " + newGradleVersionLibraryLine); + } + else + { + MaxSdkLogger.E("Failed to set gradle library version"); + } + + var newGradleVersionLine = AppLovinProcessGradleBuildFile.GetFormattedBuildScriptLine(string.Format("id 'com.android.application' version '{0}' apply false", customGradleToolsVersion)); +#else + var newGradleVersionLine = AppLovinProcessGradleBuildFile.GetFormattedBuildScriptLine(string.Format("classpath 'com.android.tools.build:gradle:{0}'", customGradleToolsVersion)); +#endif + if (ReplaceStringInFile(rootGradleBuildFilePath, TokenGradleVersion, newGradleVersionLine)) + { + MaxSdkLogger.D("Gradle version set to " + newGradleVersionLine); + } + else + { + MaxSdkLogger.E("Failed to set gradle plugin version"); + } + } + } + /// /// Creates and returns a meta-data element with the given name and value. /// @@ -265,6 +385,31 @@ namespace AppLovinMax.Scripts.Editor return null; } + + /// + /// Finds the first line that contains regexToMatch and replaces the whole line with replacement + /// + /// Path to the file you want to replace a line in + /// Regex to search for in the line you want to replace + /// String that you want as the new line + /// Returns whether the string was successfully replaced or not + private static bool ReplaceStringInFile(string path, Regex regexToMatch, string replacement) + { + if (!File.Exists(path)) return false; + + var lines = File.ReadAllLines(path); + for (var i = 0; i < lines.Length; i++) + { + if (regexToMatch.IsMatch(lines[i])) + { + lines[i] = replacement; + File.WriteAllLines(path, lines); + return true; + } + } + + return false; + } } } diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs index 41c1561..2620739 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs @@ -8,25 +8,107 @@ #if UNITY_IOS || UNITY_IPHONE -using System.Text; -using UnityEngine.Networking; -using Debug = UnityEngine.Debug; +using System; +using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Text; using UnityEditor; using UnityEditor.Callbacks; +#if UNITY_2019_3_OR_NEWER +using UnityEditor.iOS.Xcode.Extensions; +#endif +using UnityEditor.iOS.Xcode; +using UnityEngine; +using Debug = UnityEngine.Debug; +using UnityEngine.Networking; namespace AppLovinMax.Scripts.IntegrationManager.Editor { - /// - /// Adds AppLovin Quality Service to the iOS project once the project has been exported. - /// - /// 1. Downloads the Quality Service ruby script. - /// 2. Runs the script using Ruby which integrates AppLovin Quality Service to the project. - /// + [Serializable] + public class SkAdNetworkData + { + [SerializeField] public string[] SkAdNetworkIds; + } + public class AppLovinPostProcessiOS { private const string OutputFileName = "AppLovinQualityServiceSetup.rb"; +#if UNITY_2019_3_OR_NEWER + private const string TargetUnityIphonePodfileLine = "target 'Unity-iPhone' do"; + private const string UseFrameworksPodfileLine = "use_frameworks!"; + private const string UseFrameworksDynamicPodfileLine = "use_frameworks! :linkage => :dynamic"; + private const string UseFrameworksStaticPodfileLine = "use_frameworks! :linkage => :static"; +#else + private const string UnityMainTargetName = "Unity-iPhone"; +#endif + private const string LegacyResourcesDirectoryName = "Resources"; + private const string AppLovinMaxResourcesDirectoryName = "AppLovinMAXResources"; + private const string AppLovinAdvertisingAttributionEndpoint = "https://postbacks-app.com"; + + private const string AppLovinSettingsPlistFileName = "AppLovin-Settings.plist"; + private const string KeyConsentFlowInfo = "ConsentFlowInfo"; + private const string KeyConsentFlowEnabled = "ConsentFlowEnabled"; + private const string KeyConsentFlowTermsOfService = "ConsentFlowTermsOfService"; + private const string KeyConsentFlowPrivacyPolicy = "ConsentFlowPrivacyPolicy"; + private const string KeyConsentFlowDebugUserGeography = "ConsentFlowDebugUserGeography"; + + private static List DynamicLibrariesToEmbed + { + get + { + var dynamicLibrariesToEmbed = new List + { + "AppLovinSDK.xcframework", + "DTBiOSSDK.xcframework", + "FBAEMKit.xcframework", + "FBSDKCoreKit_Basics.xcframework", + "FBSDKCoreKit.xcframework", + "FBSDKGamingServicesKit.xcframework", + "FBSDKLoginKit.xcframework", + "FBSDKShareKit.xcframework", + "HyprMX.xcframework", + "Maio.xcframework", + "MobileFuseSDK.xcframework", + "MolocoSDK.xcframework", + "OMSDK_Appodeal.xcframework", + "OMSDK_Ogury.xcframework", + "OMSDK_Pubnativenet.xcframework", + "OMSDK_Smaato.xcframework" + }; + + // LinkedIn Audience Network SDK is distributed as a static library starting version 1.2.0 + if (AppLovinIntegrationManager.IsAdapterOlderThanMinVersionInstalled("LinkedIn", "1.2.0.0")) + { + dynamicLibrariesToEmbed.Add("LinkedinAudienceNetwork.xcframework"); + } + + // Fyber/IA SDK is distributed as a static library starting version 8.2.7 + if (AppLovinIntegrationManager.IsAdapterOlderThanMinVersionInstalled("Fyber", "8.2.7.0")) + { + dynamicLibrariesToEmbed.Add("IASDKCore.xcframework"); + } + + return dynamicLibrariesToEmbed; + } + } + + private static string PluginMediationDirectory + { + get + { + var pluginParentDir = AppLovinIntegrationManager.MediationSpecificPluginParentDirectory; + return Path.Combine(pluginParentDir, "MaxSdk/Mediation/"); + } + } + + /// + /// Adds AppLovin Quality Service to the iOS project once the project has been exported. + /// + /// 1. Downloads the Quality Service ruby script. + /// 2. Runs the script using Ruby which integrates AppLovin Quality Service to the project. + /// [PostProcessBuild(int.MaxValue)] // We want to run Quality Service script last. public static void OnPostProcessBuild(BuildTarget buildTarget, string buildPath) { @@ -92,6 +174,537 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor MaxSdkLogger.UserDebug(result.Message); } } + + [PostProcessBuildAttribute(int.MaxValue)] + public static void MaxPostProcessPbxProject(BuildTarget buildTarget, string buildPath) + { + var projectPath = PBXProject.GetPBXProjectPath(buildPath); + var project = new PBXProject(); + project.ReadFromFile(projectPath); + +#if UNITY_2019_3_OR_NEWER + var unityMainTargetGuid = project.GetUnityMainTargetGuid(); + var unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); +#else + var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); + var unityFrameworkTargetGuid = project.TargetGuidByName(UnityMainTargetName); +#endif + EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid); + + var internalSettingsEnabled = AppLovinInternalSettings.Instance.ConsentFlowEnabled; + var userTrackingUsageDescriptionDe = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionDe : AppLovinSettings.Instance.UserTrackingUsageDescriptionDe; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionDe, "de", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionEn = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionEn : AppLovinSettings.Instance.UserTrackingUsageDescriptionEn; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionEn, "en", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionEs = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionEs : AppLovinSettings.Instance.UserTrackingUsageDescriptionEs; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionEs, "es", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionFr = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionFr : AppLovinSettings.Instance.UserTrackingUsageDescriptionFr; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionFr, "fr", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionJa = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionJa : AppLovinSettings.Instance.UserTrackingUsageDescriptionJa; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionJa, "ja", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionKo = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionKo : AppLovinSettings.Instance.UserTrackingUsageDescriptionKo; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionKo, "ko", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionZhHans = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionZhHans : AppLovinSettings.Instance.UserTrackingUsageDescriptionZhHans; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionZhHans, "zh-Hans", buildPath, project, unityMainTargetGuid); + var userTrackingUsageDescriptionZhHant = internalSettingsEnabled ? AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionZhHant : AppLovinSettings.Instance.UserTrackingUsageDescriptionZhHant; + LocalizeUserTrackingDescriptionIfNeeded(userTrackingUsageDescriptionZhHant, "zh-Hant", buildPath, project, unityMainTargetGuid); + + AddSwiftSupport(buildPath, project, unityFrameworkTargetGuid, unityMainTargetGuid); + AddYandexSettingsIfNeeded(project, unityMainTargetGuid); + + project.WriteToFile(projectPath); + } + + private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid) + { + // Check that the Pods directory exists (it might not if a publisher is building with Generate Podfile setting disabled in EDM). + var podsDirectory = Path.Combine(buildPath, "Pods"); + if (!Directory.Exists(podsDirectory)) return; + + var dynamicLibraryPathsPresentInProject = new List(); + foreach (var dynamicLibraryToSearch in DynamicLibrariesToEmbed) + { + // both .framework and .xcframework are directories, not files + var directories = Directory.GetDirectories(podsDirectory, dynamicLibraryToSearch, SearchOption.AllDirectories); + if (directories.Length <= 0) continue; + + var dynamicLibraryAbsolutePath = directories[0]; + var index = dynamicLibraryAbsolutePath.LastIndexOf("Pods"); + var relativePath = dynamicLibraryAbsolutePath.Substring(index); + dynamicLibraryPathsPresentInProject.Add(relativePath); + } + + if (dynamicLibraryPathsPresentInProject.Count <= 0) return; + +#if UNITY_2019_3_OR_NEWER + if (ShouldEmbedDynamicLibraries(buildPath)) + { + foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject) + { + var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath); + project.AddFileToEmbedFrameworks(targetGuid, fileGuid); + } + } +#else + string runpathSearchPaths; + runpathSearchPaths = project.GetBuildPropertyForAnyConfig(targetGuid, "LD_RUNPATH_SEARCH_PATHS"); + runpathSearchPaths += string.IsNullOrEmpty(runpathSearchPaths) ? "" : " "; + + // Check if runtime search paths already contains the required search paths for dynamic libraries. + if (runpathSearchPaths.Contains("@executable_path/Frameworks")) return; + + runpathSearchPaths += "@executable_path/Frameworks"; + project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", runpathSearchPaths); +#endif + } + + private static void LocalizeUserTrackingDescriptionIfNeeded(string localizedUserTrackingDescription, string localeCode, string buildPath, PBXProject project, string targetGuid) + { + // Use the legacy resources directory name if the build is being appended (the "Resources" directory already exists if it is an incremental build). + var resourcesDirectoryName = Directory.Exists(Path.Combine(buildPath, LegacyResourcesDirectoryName)) ? LegacyResourcesDirectoryName : AppLovinMaxResourcesDirectoryName; + var resourcesDirectoryPath = Path.Combine(buildPath, resourcesDirectoryName); + var localeSpecificDirectoryName = localeCode + ".lproj"; + var localeSpecificDirectoryPath = Path.Combine(resourcesDirectoryPath, localeSpecificDirectoryName); + var infoPlistStringsFilePath = Path.Combine(localeSpecificDirectoryPath, "InfoPlist.strings"); + + // Check if localization has been disabled between builds, and remove them as needed. + if (ShouldRemoveLocalization(localizedUserTrackingDescription)) + { + if (!File.Exists(infoPlistStringsFilePath)) return; + + File.Delete(infoPlistStringsFilePath); + return; + } + + // Create intermediate directories as needed. + if (!Directory.Exists(resourcesDirectoryPath)) + { + Directory.CreateDirectory(resourcesDirectoryPath); + } + + if (!Directory.Exists(localeSpecificDirectoryPath)) + { + Directory.CreateDirectory(localeSpecificDirectoryPath); + } + + var localizedDescriptionLine = "\"NSUserTrackingUsageDescription\" = \"" + localizedUserTrackingDescription + "\";\n"; + // File already exists, update it in case the value changed between builds. + if (File.Exists(infoPlistStringsFilePath)) + { + var output = new List(); + var lines = File.ReadAllLines(infoPlistStringsFilePath); + var keyUpdated = false; + foreach (var line in lines) + { + if (line.Contains("NSUserTrackingUsageDescription")) + { + output.Add(localizedDescriptionLine); + keyUpdated = true; + } + else + { + output.Add(line); + } + } + + if (!keyUpdated) + { + output.Add(localizedDescriptionLine); + } + + File.WriteAllText(infoPlistStringsFilePath, string.Join("\n", output.ToArray()) + "\n"); + } + // File doesn't exist, create one. + else + { + File.WriteAllText(infoPlistStringsFilePath, "/* Localized versions of Info.plist keys - Generated by AL MAX plugin */\n" + localizedDescriptionLine); + } + + var localeSpecificDirectoryRelativePath = Path.Combine(resourcesDirectoryName, localeSpecificDirectoryName); + var guid = project.AddFolderReference(localeSpecificDirectoryRelativePath, localeSpecificDirectoryRelativePath); + project.AddFileToBuild(targetGuid, guid); + } + + private static bool ShouldRemoveLocalization(string localizedUserTrackingDescription) + { + if (string.IsNullOrEmpty(localizedUserTrackingDescription)) return true; + + var settings = AppLovinSettings.Instance; + var internalSettings = AppLovinInternalSettings.Instance; + + return (!internalSettings.ConsentFlowEnabled || !internalSettings.UserTrackingUsageLocalizationEnabled) + && (!settings.ConsentFlowEnabled || !settings.UserTrackingUsageLocalizationEnabled); + } + + private static void AddSwiftSupport(string buildPath, PBXProject project, string unityFrameworkTargetGuid, string unityMainTargetGuid) + { + var swiftFileRelativePath = "Classes/MAXSwiftSupport.swift"; + var swiftFilePath = Path.Combine(buildPath, swiftFileRelativePath); + + // Add Swift file + CreateSwiftFile(swiftFilePath); + var swiftFileGuid = project.AddFile(swiftFileRelativePath, swiftFileRelativePath, PBXSourceTree.Source); + project.AddFileToBuild(unityFrameworkTargetGuid, swiftFileGuid); + + // Add Swift version property if needed + var swiftVersion = project.GetBuildPropertyForAnyConfig(unityFrameworkTargetGuid, "SWIFT_VERSION"); + if (string.IsNullOrEmpty(swiftVersion)) + { + project.SetBuildProperty(unityFrameworkTargetGuid, "SWIFT_VERSION", "5.0"); + } + + // Enable Swift modules + project.AddBuildProperty(unityFrameworkTargetGuid, "CLANG_ENABLE_MODULES", "YES"); + project.AddBuildProperty(unityMainTargetGuid, "ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES", "YES"); + } + + private static void CreateSwiftFile(string swiftFilePath) + { + if (File.Exists(swiftFilePath)) return; + + // Create a file to write to. + using (var writer = File.CreateText(swiftFilePath)) + { + writer.WriteLine("//\n// MAXSwiftSupport.swift\n//"); + writer.WriteLine("\nimport Foundation\n"); + writer.WriteLine("// This file ensures the project includes Swift support."); + writer.WriteLine("// It is automatically generated by the MAX Unity Plugin."); + writer.Close(); + } + } + + [PostProcessBuildAttribute(int.MaxValue)] + public static void MaxPostProcessPlist(BuildTarget buildTarget, string path) + { + var plistPath = Path.Combine(path, "Info.plist"); + var plist = new PlistDocument(); + plist.ReadFromFile(plistPath); + + SetSdkKeyIfNeeded(plist); + SetAttributionReportEndpointIfNeeded(plist); + + EnableVerboseLoggingIfNeeded(plist); + AddGoogleApplicationIdIfNeeded(plist); + + AddSdkSettingsIfNeeded(plist, path); + EnableTermsFlowIfNeeded(plist); + AddSkAdNetworksInfoIfNeeded(plist); + + plist.WriteToFile(plistPath); + } + + private static void SetSdkKeyIfNeeded(PlistDocument plist) + { + var sdkKey = AppLovinSettings.Instance.SdkKey; + if (string.IsNullOrEmpty(sdkKey)) return; + + const string AppLovinVerboseLoggingOnKey = "AppLovinSdkKey"; + plist.root.SetString(AppLovinVerboseLoggingOnKey, sdkKey); + } + + private static void SetAttributionReportEndpointIfNeeded(PlistDocument plist) + { + if (AppLovinSettings.Instance.SetAttributionReportEndpoint) + { + plist.root.SetString("NSAdvertisingAttributionReportEndpoint", AppLovinAdvertisingAttributionEndpoint); + } + else + { + PlistElement attributionReportEndPoint; + plist.root.values.TryGetValue("NSAdvertisingAttributionReportEndpoint", out attributionReportEndPoint); + + // Check if we had previously set the attribution endpoint and un-set it. + if (attributionReportEndPoint != null && AppLovinAdvertisingAttributionEndpoint.Equals(attributionReportEndPoint.AsString())) + { + plist.root.values.Remove("NSAdvertisingAttributionReportEndpoint"); + } + } + } + + private static void EnableVerboseLoggingIfNeeded(PlistDocument plist) + { + if (!EditorPrefs.HasKey(MaxSdkLogger.KeyVerboseLoggingEnabled)) return; + + var enabled = EditorPrefs.GetBool(MaxSdkLogger.KeyVerboseLoggingEnabled); + const string AppLovinVerboseLoggingOnKey = "AppLovinVerboseLoggingOn"; + if (enabled) + { + plist.root.SetBoolean(AppLovinVerboseLoggingOnKey, enabled); + } + else + { + plist.root.values.Remove(AppLovinVerboseLoggingOnKey); + } + } + + private static void AddGoogleApplicationIdIfNeeded(PlistDocument plist) + { + if (!AppLovinIntegrationManager.IsAdapterInstalled("Google") && !AppLovinIntegrationManager.IsAdapterInstalled("GoogleAdManager")) return; + + const string googleApplicationIdentifier = "GADApplicationIdentifier"; + var appId = AppLovinSettings.Instance.AdMobIosAppId; + // Log error if the App ID is not set. + if (string.IsNullOrEmpty(appId) || !appId.StartsWith("ca-app-pub-")) + { + Debug.LogError("[AppLovin MAX] Google App ID is not set. Please enter a valid app ID within the AppLovin Integration Manager window."); + return; + } + + plist.root.SetString(googleApplicationIdentifier, appId); + } + + private static void AddYandexSettingsIfNeeded(PBXProject project, string unityMainTargetGuid) + { + if (!AppLovinIntegrationManager.IsAdapterInstalled("Yandex")) return; + + if (MaxSdkUtils.CompareVersions(PlayerSettings.iOS.targetOSVersionString, "12.0") == MaxSdkUtils.VersionComparisonResult.Lesser) + { + Debug.LogWarning("Your iOS target version is under the minimum required version by Yandex. Please update it to 12.0 or newer in your ProjectSettings and rebuild your project."); + return; + } + + project.SetBuildProperty(unityMainTargetGuid, "GENERATE_INFOPLIST_FILE", "NO"); + } + + private static void AddSdkSettingsIfNeeded(PlistDocument infoPlist, string buildPath) + { + // Right now internal settings is only needed for Consent Flow. Remove this setting once we add more settings. + if (!AppLovinInternalSettings.Instance.ConsentFlowEnabled) return; + + var sdkSettingsPlistPath = Path.Combine(buildPath, AppLovinSettingsPlistFileName); + var sdkSettingsPlist = new PlistDocument(); + if (File.Exists(sdkSettingsPlistPath)) + { + sdkSettingsPlist.ReadFromFile(sdkSettingsPlistPath); + } + + EnableConsentFlowIfNeeded(sdkSettingsPlist, infoPlist); + + sdkSettingsPlist.WriteToFile(sdkSettingsPlistPath); + + var projectPath = PBXProject.GetPBXProjectPath(buildPath); + var project = new PBXProject(); + project.ReadFromFile(projectPath); + +#if UNITY_2019_3_OR_NEWER + var unityMainTargetGuid = project.GetUnityMainTargetGuid(); +#else + var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); +#endif + + var guid = project.AddFile(AppLovinSettingsPlistFileName, AppLovinSettingsPlistFileName, PBXSourceTree.Source); + project.AddFileToBuild(unityMainTargetGuid, guid); + project.WriteToFile(projectPath); + } + + private static void EnableConsentFlowIfNeeded(PlistDocument applovinSettingsPlist, PlistDocument infoPlist) + { + var consentFlowEnabled = AppLovinInternalSettings.Instance.ConsentFlowEnabled; + var userTrackingUsageDescription = AppLovinInternalSettings.Instance.UserTrackingUsageDescriptionEn; + var privacyPolicyUrl = AppLovinInternalSettings.Instance.ConsentFlowPrivacyPolicyUrl; + if (string.IsNullOrEmpty(userTrackingUsageDescription) || string.IsNullOrEmpty(privacyPolicyUrl)) + { + AppLovinIntegrationManager.ShowBuildFailureDialog("You cannot use the AppLovin SDK's consent flow without defining a Privacy Policy URL and the `User Tracking Usage Description` in the AppLovin Integration Manager. \n\n" + + "Both values must be included to enable the SDK's consent flow."); + + // No need to update the info.plist here. Default consent flow state will be determined on the SDK side. + return; + } + + var consentFlowInfoRoot = applovinSettingsPlist.root.CreateDict(KeyConsentFlowInfo); + consentFlowInfoRoot.SetBoolean(KeyConsentFlowEnabled, consentFlowEnabled); + consentFlowInfoRoot.SetString(KeyConsentFlowPrivacyPolicy, privacyPolicyUrl); + + var termsOfServiceUrl = AppLovinInternalSettings.Instance.ConsentFlowTermsOfServiceUrl; + if (MaxSdkUtils.IsValidString(termsOfServiceUrl)) + { + consentFlowInfoRoot.SetString(KeyConsentFlowTermsOfService, termsOfServiceUrl); + } + + var debugUserGeography = AppLovinInternalSettings.Instance.DebugUserGeography; + if (debugUserGeography == MaxSdkBase.ConsentFlowUserGeography.Gdpr) + { + consentFlowInfoRoot.SetString(KeyConsentFlowDebugUserGeography, "gdpr"); + } + + infoPlist.root.SetString("NSUserTrackingUsageDescription", userTrackingUsageDescription); + } + + private static void EnableTermsFlowIfNeeded(PlistDocument plist) + { + // Check if terms flow is enabled. No need to update info.plist if consent flow is disabled. + var consentFlowEnabled = AppLovinSettings.Instance.ConsentFlowEnabled; + if (!consentFlowEnabled) return; + + // Check if terms flow is enabled for this format. + var consentFlowPlatform = AppLovinSettings.Instance.ConsentFlowPlatform; + if (consentFlowPlatform != Platform.All && consentFlowPlatform != Platform.iOS) return; + + var userTrackingUsageDescription = AppLovinSettings.Instance.UserTrackingUsageDescriptionEn; + var privacyPolicyUrl = AppLovinSettings.Instance.ConsentFlowPrivacyPolicyUrl; + if (string.IsNullOrEmpty(userTrackingUsageDescription) || string.IsNullOrEmpty(privacyPolicyUrl)) + { + AppLovinIntegrationManager.ShowBuildFailureDialog("You cannot use the AppLovin SDK's consent flow without defining a Privacy Policy URL and the `User Tracking Usage Description` in the AppLovin Integration Manager. \n\n" + + "Both values must be included to enable the SDK's consent flow."); + + // No need to update the info.plist here. Default consent flow state will be determined on the SDK side. + return; + } + + var consentFlowInfoRoot = plist.root.CreateDict("AppLovinConsentFlowInfo"); + consentFlowInfoRoot.SetBoolean("AppLovinConsentFlowEnabled", consentFlowEnabled); + consentFlowInfoRoot.SetString("AppLovinConsentFlowPrivacyPolicy", privacyPolicyUrl); + + var termsOfServiceUrl = AppLovinSettings.Instance.ConsentFlowTermsOfServiceUrl; + if (!string.IsNullOrEmpty(termsOfServiceUrl)) + { + consentFlowInfoRoot.SetString("AppLovinConsentFlowTermsOfService", termsOfServiceUrl); + } + + plist.root.SetString("NSUserTrackingUsageDescription", userTrackingUsageDescription); + } + + private static void AddSkAdNetworksInfoIfNeeded(PlistDocument plist) + { + var skAdNetworkData = GetSkAdNetworkData(); + var skAdNetworkIds = skAdNetworkData.SkAdNetworkIds; + // Check if we have a valid list of SKAdNetworkIds that need to be added. + if (skAdNetworkIds == null || skAdNetworkIds.Length < 1) return; + + // + // Add the SKAdNetworkItems to the plist. It should look like following: + // + // SKAdNetworkItems + // + // + // SKAdNetworkIdentifier + // ABC123XYZ.skadnetwork + // + // + // SKAdNetworkIdentifier + // 123QWE456.skadnetwork + // + // + // SKAdNetworkIdentifier + // 987XYZ123.skadnetwork + // + // + // + PlistElement skAdNetworkItems; + plist.root.values.TryGetValue("SKAdNetworkItems", out skAdNetworkItems); + var existingSkAdNetworkIds = new HashSet(); + // Check if SKAdNetworkItems array is already in the Plist document and collect all the IDs that are already present. + if (skAdNetworkItems != null && skAdNetworkItems.GetType() == typeof(PlistElementArray)) + { + var plistElementDictionaries = skAdNetworkItems.AsArray().values.Where(plistElement => plistElement.GetType() == typeof(PlistElementDict)); + foreach (var plistElement in plistElementDictionaries) + { + PlistElement existingId; + plistElement.AsDict().values.TryGetValue("SKAdNetworkIdentifier", out existingId); + if (existingId == null || existingId.GetType() != typeof(PlistElementString) || string.IsNullOrEmpty(existingId.AsString())) continue; + + existingSkAdNetworkIds.Add(existingId.AsString()); + } + } + // Else, create an array of SKAdNetworkItems into which we will add our IDs. + else + { + skAdNetworkItems = plist.root.CreateArray("SKAdNetworkItems"); + } + + foreach (var skAdNetworkId in skAdNetworkIds) + { + // Skip adding IDs that are already in the array. + if (existingSkAdNetworkIds.Contains(skAdNetworkId)) continue; + + var skAdNetworkItemDict = skAdNetworkItems.AsArray().AddDict(); + skAdNetworkItemDict.SetString("SKAdNetworkIdentifier", skAdNetworkId); + } + } + + private static SkAdNetworkData GetSkAdNetworkData() + { + var uriBuilder = new UriBuilder("https://unity.applovin.com/max/1.0/skadnetwork_ids"); + + // Get the list of installed ad networks to be passed up + var maxMediationDirectory = PluginMediationDirectory; + if (Directory.Exists(maxMediationDirectory)) + { + var mediationNetworkDirectories = Directory.GetDirectories(maxMediationDirectory); + var installedNetworks = mediationNetworkDirectories.Select(Path.GetFileName).ToList(); + if (AppLovinSettings.Instance.AddApsSkAdNetworkIds) + { + installedNetworks.Add("AmazonPublisherServices"); + } + + var adNetworks = string.Join(",", installedNetworks.ToArray()); + if (!string.IsNullOrEmpty(adNetworks)) + { + uriBuilder.Query += string.Format("ad_networks={0}", adNetworks); + } + } + + using (var unityWebRequest = UnityWebRequest.Get(uriBuilder.ToString())) + { + var operation = unityWebRequest.SendWebRequest(); + // Wait for the download to complete or the request to timeout. + while (!operation.isDone) { } + +#if UNITY_2020_1_OR_NEWER + if (unityWebRequest.result != UnityWebRequest.Result.Success) +#else + if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError) +#endif + { + MaxSdkLogger.UserError("Failed to retrieve SKAdNetwork IDs with error: " + unityWebRequest.error); + return new SkAdNetworkData(); + } + + try + { + return JsonUtility.FromJson(unityWebRequest.downloadHandler.text); + } + catch (Exception exception) + { + MaxSdkLogger.UserError("Failed to parse data '" + unityWebRequest.downloadHandler.text + "' with exception: " + exception); + return new SkAdNetworkData(); + } + } + } + +#if UNITY_2019_3_OR_NEWER + /// + /// |-----------------------------------------------------------------------------------------------------------------------------------------------------| + /// | embed | use_frameworks! (:linkage => :dynamic) | use_frameworks! :linkage => :static | `use_frameworks!` line not present | + /// |---------------------------|------------------------------------------|---------------------------------------|--------------------------------------| + /// | Unity-iPhone present | Do not embed dynamic libraries | Embed dynamic libraries | Do not embed dynamic libraries | + /// | Unity-iPhone not present | Embed dynamic libraries | Embed dynamic libraries | Embed dynamic libraries | + /// |-----------------------------------------------------------------------------------------------------------------------------------------------------| + /// + /// An iOS build path + /// Whether or not the dynamic libraries should be embedded. + private static bool ShouldEmbedDynamicLibraries(string buildPath) + { + var podfilePath = Path.Combine(buildPath, "Podfile"); + if (!File.Exists(podfilePath)) return false; + + // If the Podfile doesn't have a `Unity-iPhone` target, we should embed the dynamic libraries. + var lines = File.ReadAllLines(podfilePath); + var containsUnityIphoneTarget = lines.Any(line => line.Contains(TargetUnityIphonePodfileLine)); + if (!containsUnityIphoneTarget) return true; + + // If the Podfile does not have a `use_frameworks! :linkage => static` line, we should not embed the dynamic libraries. + var useFrameworksStaticLineIndex = Array.FindIndex(lines, line => line.Contains(UseFrameworksStaticPodfileLine)); + if (useFrameworksStaticLineIndex == -1) return false; + + // If more than one of the `use_frameworks!` lines are present, CocoaPods will use the last one. + var useFrameworksLineIndex = Array.FindIndex(lines, line => line.Trim() == UseFrameworksPodfileLine); // Check for exact line to avoid matching `use_frameworks! :linkage => static/dynamic` + var useFrameworksDynamicLineIndex = Array.FindIndex(lines, line => line.Contains(UseFrameworksDynamicPodfileLine)); + + // Check if `use_frameworks! :linkage => :static` is the last line of the three. If it is, we should embed the dynamic libraries. + return useFrameworksLineIndex < useFrameworksStaticLineIndex && useFrameworksDynamicLineIndex < useFrameworksStaticLineIndex; + } +#endif } } diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinProcessGradleBuildFile.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinProcessGradleBuildFile.cs index 48b4d0e..87152a9 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinProcessGradleBuildFile.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinProcessGradleBuildFile.cs @@ -544,7 +544,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor return outputLines; } - private static string GetFormattedBuildScriptLine(string buildScriptLine) + public static string GetFormattedBuildScriptLine(string buildScriptLine) { #if UNITY_2022_2_OR_NEWER return " " diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinSettings.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinSettings.cs index 540cbe8..df88d8d 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinSettings.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinSettings.cs @@ -60,6 +60,9 @@ public class AppLovinSettings : ScriptableObject [SerializeField] private bool setAttributionReportEndpoint; [SerializeField] private bool addApsSkAdNetworkIds; + [SerializeField] private string customGradleVersionUrl; + [SerializeField] private string customGradleToolsVersion; + [SerializeField] private bool consentFlowEnabled; [SerializeField] private Platform consentFlowPlatform; [SerializeField] private string consentFlowPrivacyPolicyUrl = string.Empty; @@ -128,9 +131,13 @@ public class AppLovinSettings : ScriptableObject Directory.CreateDirectory(settingsDir); } - instance = CreateInstance(); - AssetDatabase.CreateAsset(instance, settingsFilePath); - MaxSdkLogger.D("Creating new AppLovinSettings asset at path: " + settingsFilePath); + // On script reload AssetDatabase.FindAssets() can fail and will overwrite AppLovinSettings without this check + if (!File.Exists(settingsFilePath)) + { + instance = CreateInstance(); + AssetDatabase.CreateAsset(instance, settingsFilePath); + MaxSdkLogger.D("Creating new AppLovinSettings asset at path: " + settingsFilePath); + } } return instance; @@ -173,6 +180,24 @@ public class AppLovinSettings : ScriptableObject set { Instance.addApsSkAdNetworkIds = value; } } + /// + /// A URL to set the distributionUrl in the gradle-wrapper.properties file (ex: https\://services.gradle.org/distributions/gradle-6.9.3-bin.zip) + /// + public string CustomGradleVersionUrl + { + get { return Instance.customGradleVersionUrl; } + set { Instance.customGradleVersionUrl = value; } + } + + /// + /// A string to set the custom gradle tools version (ex: com.android.tools.build:gradle:4.2.0) + /// + public string CustomGradleToolsVersion + { + get { return Instance.customGradleToolsVersion; } + set { Instance.customGradleToolsVersion = value; } + } + /// /// Whether or not AppLovin Consent Flow is enabled. /// diff --git a/MaxSdk/Scripts/MaxEventExecutor.cs b/MaxSdk/Scripts/MaxEventExecutor.cs new file mode 100644 index 0000000..ee229be --- /dev/null +++ b/MaxSdk/Scripts/MaxEventExecutor.cs @@ -0,0 +1,108 @@ +// +// MaxEventExecutor.cs +// Max Unity Plugin +// +// Created by Jonathan Liu on 1/22/2024. +// Copyright © 2024 AppLovin. All rights reserved. +// + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Events; + +namespace AppLovinMax.Internal +{ + public class MaxEventExecutor : MonoBehaviour + { + private static MaxEventExecutor instance; + private static List adEventsQueue = new List(); + + private static volatile bool adEventsQueueEmpty = true; + + struct MaxAction + { + public Action action; + public string eventName; + + public MaxAction(Action actionToExecute, string nameOfEvent) + { + action = actionToExecute; + eventName = nameOfEvent; + } + } + + public static void InitializeIfNeeded() + { + if (instance != null) return; + + var executor = new GameObject("MaxEventExecutor"); + executor.hideFlags = HideFlags.HideAndDontSave; + DontDestroyOnLoad(executor); + instance = executor.AddComponent(); + } + + #region Public API + +#if UNITY_EDITOR + public static MaxEventExecutor Instance + { + get + { + InitializeIfNeeded(); + return instance; + } + } +#endif + + public static void ExecuteOnMainThread(Action action, string eventName) + { + lock (adEventsQueue) + { + adEventsQueue.Add(new MaxAction(action, eventName)); + adEventsQueueEmpty = false; + } + } + + public static void InvokeOnMainThread(UnityEvent unityEvent, string eventName) + { + ExecuteOnMainThread(() => unityEvent.Invoke(), eventName); + } + + #endregion + + public void Update() + { + if (adEventsQueueEmpty) return; + + var actionsToExecute = new List(); + lock (adEventsQueue) + { + actionsToExecute.AddRange(adEventsQueue); + adEventsQueue.Clear(); + adEventsQueueEmpty = true; + } + + foreach (var maxAction in actionsToExecute) + { + if (maxAction.action.Target != null) + { + try + { + maxAction.action.Invoke(); + } + catch (Exception exception) + { + MaxSdkLogger.UserError("Caught exception in publisher event: " + maxAction.eventName + ", exception: " + exception); + Debug.LogException(exception); + } + } + } + } + + public void Disable() + { + instance = null; + } + } +} diff --git a/MaxSdk/Scripts/Editor/MaxInitialization.cs.meta b/MaxSdk/Scripts/MaxEventExecutor.cs.meta similarity index 68% rename from MaxSdk/Scripts/Editor/MaxInitialization.cs.meta rename to MaxSdk/Scripts/MaxEventExecutor.cs.meta index a96a577..18ba126 100644 --- a/MaxSdk/Scripts/Editor/MaxInitialization.cs.meta +++ b/MaxSdk/Scripts/MaxEventExecutor.cs.meta @@ -1,8 +1,8 @@ fileFormatVersion: 2 -guid: bc0c5693335e0408a95293c0d7b61137 +guid: 4715dd62632564dc4810a4dc98243f4a labels: - al_max -- al_max_export_path-MaxSdk/Scripts/Editor/MaxInitialization.cs +- al_max_export_path-MaxSdk/Scripts/MaxEventExecutor.cs MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/MaxSdk/Scripts/MaxSdk.cs b/MaxSdk/Scripts/MaxSdk.cs index 9d24ee3..0620166 100644 --- a/MaxSdk/Scripts/MaxSdk.cs +++ b/MaxSdk/Scripts/MaxSdk.cs @@ -18,7 +18,7 @@ public class MaxSdk : MaxSdkUnityEditor #endif { - private const string _version = "6.1.2"; + private const string _version = "6.4.3"; /// /// Returns the current plugin version. diff --git a/MaxSdk/Scripts/MaxSdkAndroid.cs b/MaxSdk/Scripts/MaxSdkAndroid.cs index 0ed7612..fd38238 100644 --- a/MaxSdk/Scripts/MaxSdkAndroid.cs +++ b/MaxSdk/Scripts/MaxSdkAndroid.cs @@ -20,7 +20,7 @@ public class MaxSdkAndroid : MaxSdkBase static MaxSdkAndroid() { - InitCallbacks(); + InitializeEventExecutor(); } #region Initialization @@ -30,6 +30,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// This method must be called before any other SDK operation /// + /// AppLovin SDK Key. Must not be null. public static void SetSdkKey(string sdkKey) { MaxUnityPluginClass.CallStatic("setSdkKey", sdkKey); @@ -69,7 +70,7 @@ public class MaxSdkAndroid : MaxSdkBase /// For example, a username or email. We'll include this in the postback when we ping your currency endpoint from our server. ///
/// - /// The user identifier to be set. + /// The user identifier to be set. Must not be null. public static void SetUserId(string userId) { MaxUnityPluginClass.CallStatic("setUserId", userId); @@ -131,8 +132,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Returns the arbitrary ad value for a given ad unit identifier with key. Returns null if no ad is loaded. /// - /// - /// Ad value key + /// Ad unit identifier for which to get the ad value for. Must not be null. + /// Ad value key. Must not be null. /// Arbitrary ad value for a given key, or null if no ad is loaded. public static string GetAdValue(string adUnitIdentifier, string key) { @@ -247,8 +248,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Create a new banner. /// - /// Ad unit identifier of the banner to create - /// Banner position + /// Ad unit identifier of the banner to create. Must not be null. + /// Banner position. Must not be null. public static void CreateBanner(string adUnitIdentifier, BannerPosition bannerPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "create banner"); @@ -258,7 +259,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Create a new banner with a custom position. /// - /// Ad unit identifier of the banner to create + /// Ad unit identifier of the banner to create. Must not be null. /// The X coordinate (horizontal position) of the banner relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the banner relative to the top left corner of the screen. /// @@ -275,7 +276,7 @@ public class MaxSdkAndroid : MaxSdkBase /// NOTE: The method loads the first banner ad and initiates an automated banner refresh process. /// You only need to call this method if you pause banner refresh. ///
- /// Ad unit identifier of the banner to load + /// Ad unit identifier of the banner to load. Must not be null. public static void LoadBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load banner"); @@ -285,7 +286,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set the banner placement for an ad unit identifier to tie the future ad events to. /// - /// Ad unit identifier of the banner to set the placement for + /// Ad unit identifier of the banner to set the placement for. Must not be null. /// Placement to set public static void SetBannerPlacement(string adUnitIdentifier, string placement) { @@ -296,7 +297,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Starts or resumes auto-refreshing of the banner for the given ad unit identifier. /// - /// Ad unit identifier of the banner for which to start auto-refresh + /// Ad unit identifier of the banner for which to start auto-refresh. Must not be null. public static void StartBannerAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "start banner auto-refresh"); @@ -306,7 +307,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Pauses auto-refreshing of the banner for the given ad unit identifier. /// - /// Ad unit identifier of the banner for which to stop auto-refresh + /// Ad unit identifier of the banner for which to stop auto-refresh. Must not be null. public static void StopBannerAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "stop banner auto-refresh"); @@ -316,8 +317,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Updates the position of the banner to the new position provided. /// - /// The ad unit identifier of the banner for which to update the position - /// A new position for the banner + /// The ad unit identifier of the banner for which to update the position. Must not be null. + /// A new position for the banner. Must not be null. public static void UpdateBannerPosition(string adUnitIdentifier, BannerPosition bannerPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "update banner position"); @@ -327,7 +328,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Updates the position of the banner to the new coordinates provided. /// - /// The ad unit identifier of the banner for which to update the position + /// The ad unit identifier of the banner for which to update the position. Must not be null. /// The X coordinate (horizontal position) of the banner relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the banner relative to the top left corner of the screen. /// @@ -342,7 +343,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Overrides the width of the banner in dp. /// - /// The ad unit identifier of the banner for which to override the width for + /// The ad unit identifier of the banner for which to override the width for. Must not be null. /// The desired width of the banner in dp public static void SetBannerWidth(string adUnitIdentifier, float width) { @@ -353,7 +354,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Show banner at a position determined by the 'CreateBanner' call. /// - /// Ad unit identifier of the banner to show + /// Ad unit identifier of the banner to show. Must not be null. public static void ShowBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "show banner"); @@ -363,7 +364,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Remove banner from the ad view and destroy it. /// - /// Ad unit identifier of the banner to destroy + /// Ad unit identifier of the banner to destroy. Must not be null. public static void DestroyBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "destroy banner"); @@ -373,8 +374,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Hide banner. /// - /// Ad unit identifier of the banner to hide - /// + /// Ad unit identifier of the banner to hide. Must not be null. public static void HideBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "hide banner"); @@ -384,9 +384,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set non-transparent background color for banners to be fully functional. /// - /// Ad unit identifier of the banner to set background color for - /// A background color to set for the ad - /// + /// Ad unit identifier of the banner to set background color for. Must not be null. + /// A background color to set for the ad. Must not be null. public static void SetBannerBackgroundColor(string adUnitIdentifier, Color color) { ValidateAdUnitIdentifier(adUnitIdentifier, "set background color"); @@ -396,8 +395,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set an extra parameter for the banner ad. /// - /// Ad unit identifier of the banner to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the banner to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetBannerExtraParameter(string adUnitIdentifier, string key, string value) { @@ -408,8 +407,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set a local extra parameter for the banner ad. /// - /// Ad unit identifier of the banner to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the banner to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetBannerLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -428,7 +427,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// The custom data to tie the showing banner ad to, for ILRD and rewarded postbacks via the {CUSTOM_DATA} macro. Maximum size is 8KB. /// - /// Banner ad unit identifier of the banner to set the custom data for. + /// Banner ad unit identifier of the banner to set the custom data for. Must not be null. /// The custom data to be set. public static void SetBannerCustomData(string adUnitIdentifier, string customData) { @@ -440,7 +439,7 @@ public class MaxSdkAndroid : MaxSdkBase /// The banner position on the screen. When setting the banner position via or , /// the banner is placed within the safe area of the screen. This returns the absolute position of the banner on screen. /// - /// Ad unit identifier of the banner for which to get the position on screen. + /// Ad unit identifier of the banner for which to get the position on screen. Must not be null. /// A representing the banner position on screen. public static Rect GetBannerLayout(string adUnitIdentifier) { @@ -456,8 +455,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Create a new MREC. /// - /// Ad unit identifier of the MREC to create - /// MREC position + /// Ad unit identifier of the MREC to create. Must not be null. + /// MREC position. Must not be null. public static void CreateMRec(string adUnitIdentifier, AdViewPosition mrecPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "create MREC"); @@ -467,7 +466,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Create a new MREC with a custom position. /// - /// Ad unit identifier of the MREC to create + /// Ad unit identifier of the MREC to create. Must not be null. /// The X coordinate (horizontal position) of the MREC relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the MREC relative to the top left corner of the screen. /// @@ -484,7 +483,7 @@ public class MaxSdkAndroid : MaxSdkBase /// NOTE: The method loads the first MREC ad and initiates an automated MREC refresh process. /// You only need to call this method if you pause MREC refresh. /// - /// Ad unit identifier of the MREC to load + /// Ad unit identifier of the MREC to load. Must not be null. public static void LoadMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load MREC"); @@ -494,7 +493,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set the MREC placement for an ad unit identifier to tie the future ad events to. /// - /// Ad unit identifier of the MREC to set the placement for + /// Ad unit identifier of the MREC to set the placement for. Must not be null. /// Placement to set public static void SetMRecPlacement(string adUnitIdentifier, string placement) { @@ -505,7 +504,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Starts or resumes auto-refreshing of the MREC for the given ad unit identifier. /// - /// Ad unit identifier of the MREC for which to start auto-refresh + /// Ad unit identifier of the MREC for which to start auto-refresh. Must not be null. public static void StartMRecAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "start MREC auto-refresh"); @@ -515,7 +514,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Pauses auto-refreshing of the MREC for the given ad unit identifier. /// - /// Ad unit identifier of the MREC for which to stop auto-refresh + /// Ad unit identifier of the MREC for which to stop auto-refresh. Must not be null. public static void StopMRecAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "stop MREC auto-refresh"); @@ -525,8 +524,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Updates the position of the MREC to the new position provided. /// - /// The ad unit identifier of the MREC for which to update the position - /// A new position for the MREC + /// The ad unit identifier of the MREC for which to update the position. Must not be null. + /// A new position for the MREC. Must not be null. public static void UpdateMRecPosition(string adUnitIdentifier, AdViewPosition mrecPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "update MREC position"); @@ -536,7 +535,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Updates the position of the MREC to the new coordinates provided. /// - /// The ad unit identifier of the MREC for which to update the position + /// The ad unit identifier of the MREC for which to update the position. Must not be null. /// The X coordinate (horizontal position) of the MREC relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the MREC relative to the top left corner of the screen. /// @@ -551,7 +550,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Show MREC at a position determined by the 'CreateMRec' call. /// - /// Ad unit identifier of the MREC to show + /// Ad unit identifier of the MREC to show. Must not be null. public static void ShowMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "show MREC"); @@ -561,7 +560,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Remove MREC from the ad view and destroy it. /// - /// Ad unit identifier of the MREC to destroy + /// Ad unit identifier of the MREC to destroy. Must not be null. public static void DestroyMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "destroy MREC"); @@ -571,7 +570,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Hide MREC. /// - /// Ad unit identifier of the MREC to hide + /// Ad unit identifier of the MREC to hide. Must not be null. public static void HideMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "hide MREC"); @@ -581,8 +580,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set an extra parameter for the MREC ad. /// - /// Ad unit identifier of the MREC to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the MREC to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetMRecExtraParameter(string adUnitIdentifier, string key, string value) { @@ -593,8 +592,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set a local extra parameter for the MREC ad. /// - /// Ad unit identifier of the MREC to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the MREC to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetMRecLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -613,7 +612,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// The custom data to tie the showing MREC ad to, for ILRD and rewarded postbacks via the {CUSTOM_DATA} macro. Maximum size is 8KB. /// - /// MREC Ad unit identifier of the banner to set the custom data for. + /// MREC Ad unit identifier of the banner to set the custom data for. Must not be null. /// The custom data to be set. public static void SetMRecCustomData(string adUnitIdentifier, string customData) { @@ -625,7 +624,7 @@ public class MaxSdkAndroid : MaxSdkBase /// The MREC position on the screen. When setting the banner position via or , /// the banner is placed within the safe area of the screen. This returns the absolute position of the MREC on screen. /// - /// Ad unit identifier of the MREC for which to get the position on screen. + /// Ad unit identifier of the MREC for which to get the position on screen. Must not be null. /// A representing the banner position on screen. public static Rect GetMRecLayout(string adUnitIdentifier) { @@ -636,106 +635,12 @@ public class MaxSdkAndroid : MaxSdkBase #endregion - #region Cross Promo Ads - - /// - /// Create a new cross promo ad with a custom position. - /// - /// Ad unit identifier of the cross promo ad to create - /// The X coordinate (horizontal position) of the cross promo ad relative to the top left corner of the screen. - /// The Y coordinate (vertical position) of the cross promo ad relative to the top left corner of the screen. - /// The width of the cross promo ad. - /// The height of the cross promo ad. - /// The rotation of the cross promo ad in degrees. - /// - /// The cross promo is placed within the safe area of the screen. You can use this to get the absolute position Rect of the cross promo ad on screen. - /// - public static void CreateCrossPromoAd(string adUnitIdentifier, float x, float y, float width, float height, float rotation) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "create cross promo ad"); - MaxUnityPluginClass.CallStatic("createCrossPromoAd", adUnitIdentifier, x, y, width, height, rotation); - } - - /// - /// Set the cross promo ad placement for an ad unit identifier to tie the future ad events to. - /// - /// Ad unit identifier of the cross promo ad to set the placement for - /// Placement to set - public static void SetCrossPromoAdPlacement(string adUnitIdentifier, string placement) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "set cross promo ad placement"); - MaxUnityPluginClass.CallStatic("setCrossPromoAdPlacement", adUnitIdentifier, placement); - } - - /// - /// Updates the position of the cross promo ad to the new coordinates provided. - /// - /// The ad unit identifier of the cross promo ad for which to update the position - /// The X coordinate (horizontal position) of the cross promo ad relative to the top left corner of the screen. - /// The Y coordinate (vertical position) of the cross promo ad relative to the top left corner of the screen. - /// The width of the cross promo ad. - /// The height of the cross promo ad. - /// The rotation of the cross promo ad in degrees. - /// - /// The cross promo ad is placed within the safe area of the screen. You can use this to get the absolute position Rect of the cross promo ad on screen. - /// - public static void UpdateCrossPromoAdPosition(string adUnitIdentifier, float x, float y, float width, float height, float rotation) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "update cross promo ad position"); - MaxUnityPluginClass.CallStatic("updateCrossPromoAdPosition", adUnitIdentifier, x, y, width, height, rotation); - } - - /// - /// Show cross promo ad at a position determined by the 'CreateCrossPromoAd' call. - /// - /// Ad unit identifier of the cross promo ad to show - public static void ShowCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "show cross promo ad"); - MaxUnityPluginClass.CallStatic("showCrossPromoAd", adUnitIdentifier); - } - - /// - /// Remove cross promo ad from the ad view and destroy it. - /// - /// Ad unit identifier of the cross promo ad to destroy - public static void DestroyCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "destroy cross promo ad"); - MaxUnityPluginClass.CallStatic("destroyCrossPromoAd", adUnitIdentifier); - } - - /// - /// Hide cross promo ad. - /// - /// Ad unit identifier of the cross promo ad to hide - public static void HideCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "hide cross promo ad"); - MaxUnityPluginClass.CallStatic("hideCrossPromoAd", adUnitIdentifier); - } - - /// - /// The cross promo ad position on the screen. When setting the cross promo ad position via or , - /// the cross promo ad is placed within the safe area of the screen. This returns the absolute position of the cross promo ad on screen. - /// - /// Ad unit identifier of the cross promo ad for which to get the position on screen. - /// A representing the banner position on screen. - public static Rect GetCrossPromoAdLayout(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "get cross promo ad layout"); - var positionRect = MaxUnityPluginClass.CallStatic("getCrossPromoAdLayout", adUnitIdentifier); - return GetRectFromString(positionRect); - } - - #endregion - #region Interstitials /// /// Start loading an interstitial. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. public static void LoadInterstitial(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load interstitial"); @@ -745,7 +650,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Check if interstitial ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsInterstitialReady(string adUnitIdentifier) { @@ -756,7 +661,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Present loaded interstitial for a given placement to tie ad events to. Note: if the interstitial is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowInterstitial(string adUnitIdentifier, string placement = null, string customData = null) @@ -776,8 +681,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the interstitial to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the interstitial to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetInterstitialExtraParameter(string adUnitIdentifier, string key, string value) { @@ -788,8 +693,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the interstitial to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the interstitial to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetInterstitialLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -812,7 +717,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Start loading an app open ad. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. public static void LoadAppOpenAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load app open ad"); @@ -822,7 +727,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Check if app open ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsAppOpenAdReady(string adUnitIdentifier) { @@ -833,7 +738,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Present loaded app open ad for a given placement to tie ad events to. Note: if the app open ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowAppOpenAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -853,8 +758,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the app open ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the app open ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetAppOpenAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -865,8 +770,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the app open ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the app open ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetAppOpenAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -889,7 +794,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Start loading an rewarded ad. /// - /// Ad unit identifier of the rewarded ad to load + /// Ad unit identifier of the rewarded ad to load. Must not be null. public static void LoadRewardedAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load rewarded ad"); @@ -899,7 +804,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Check if rewarded ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the rewarded ad to load + /// Ad unit identifier of the rewarded ad to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsRewardedAdReady(string adUnitIdentifier) { @@ -910,7 +815,7 @@ public class MaxSdkAndroid : MaxSdkBase /// ready to be /// Present loaded rewarded ad for a given placement to tie ad events to. Note: if the rewarded ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowRewardedAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -930,8 +835,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the rewarded to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the rewarded to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetRewardedAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -942,8 +847,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the rewarded to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the rewarded to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetRewardedAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -966,7 +871,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Start loading an rewarded interstitial ad. /// - /// Ad unit identifier of the rewarded interstitial ad to load + /// Ad unit identifier of the rewarded interstitial ad to load. Must not be null. public static void LoadRewardedInterstitialAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load rewarded interstitial ad"); @@ -976,7 +881,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Check if rewarded interstitial ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the rewarded interstitial ad to load + /// Ad unit identifier of the rewarded interstitial ad to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsRewardedInterstitialAdReady(string adUnitIdentifier) { @@ -987,7 +892,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Present loaded rewarded interstitial ad for a given placement to tie ad events to. Note: if the rewarded interstitial ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the rewarded interstitial to show + /// Ad unit identifier of the rewarded interstitial to show. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowRewardedInterstitialAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1007,8 +912,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the rewarded interstitial to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the rewarded interstitial to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetRewardedInterstitialAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1019,8 +924,8 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the rewarded interstitial to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the rewarded interstitial to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetRewardedInterstitialAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1043,7 +948,7 @@ public class MaxSdkAndroid : MaxSdkBase /// /// Track an event using AppLovin. /// - /// An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework. + /// An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework. Must not be null. /// A dictionary containing key-value pairs further describing this event. public static void TrackEvent(string name, IDictionary parameters = null) { @@ -1149,6 +1054,25 @@ public class MaxSdkAndroid : MaxSdkBase MaxUnityPluginClass.CallStatic("setExtraParameter", key, value); } + /// + /// Get the native insets in pixels for the safe area. + /// These insets are used to position ads within the safe area of the screen. + /// + public static SafeAreaInsets GetSafeAreaInsets() + { + // Use an int array instead of json serialization for performance + var insets = MaxUnityPluginClass.CallStatic("getSafeAreaInsets"); + + // Convert from points to pixels + var screenDensity = MaxSdkUtils.GetScreenDensity(); + for (var i = 0; i < insets.Length; i++) + { + insets[i] *= (int) screenDensity; + } + + return new SafeAreaInsets(insets); + } + #endregion #region Private diff --git a/MaxSdk/Scripts/MaxSdkBase.cs b/MaxSdk/Scripts/MaxSdkBase.cs index dfe1228..ebd9864 100644 --- a/MaxSdk/Scripts/MaxSdkBase.cs +++ b/MaxSdk/Scripts/MaxSdkBase.cs @@ -5,6 +5,7 @@ using System.Globalization; using System.Linq; using System.Text; using AppLovinMax.ThirdParty.MiniJson; +using AppLovinMax.Internal; using UnityEngine; #if UNITY_IOS && !UNITY_EDITOR @@ -168,7 +169,6 @@ public abstract class MaxSdkBase sdkConfiguration.ConsentFlowUserGeography = ConsentFlowUserGeography.Unknown; } - #pragma warning disable 0618 var consentDialogStateStr = MaxSdkUtils.GetStringFromDictionary(eventProps, "consentDialogState", ""); if ("1".Equals(consentDialogStateStr)) @@ -325,6 +325,7 @@ public abstract class MaxSdkBase public double Revenue { get; private set; } public string RevenuePrecision { get; private set; } public WaterfallInfo WaterfallInfo { get; private set; } + public long LatencyMillis { get; private set; } public string DspName { get; private set; } public AdInfo(IDictionary adInfoDictionary) @@ -338,6 +339,7 @@ public abstract class MaxSdkBase Revenue = MaxSdkUtils.GetDoubleFromDictionary(adInfoDictionary, "revenue", -1); RevenuePrecision = MaxSdkUtils.GetStringFromDictionary(adInfoDictionary, "revenuePrecision"); WaterfallInfo = new WaterfallInfo(MaxSdkUtils.GetDictionaryFromDictionary(adInfoDictionary, "waterfallInfo", new Dictionary())); + LatencyMillis = MaxSdkUtils.GetLongFromDictionary(adInfoDictionary, "latencyMillis"); DspName = MaxSdkUtils.GetStringFromDictionary(adInfoDictionary, "dspName"); } @@ -351,6 +353,7 @@ public abstract class MaxSdkBase ", placement: " + Placement + ", revenue: " + Revenue + ", revenuePrecision: " + RevenuePrecision + + ", latency: " + LatencyMillis + ", dspName: " + DspName + "]"; } } @@ -469,6 +472,7 @@ public abstract class MaxSdkBase public string MediatedNetworkErrorMessage { get; private set; } public string AdLoadFailureInfo { get; private set; } public WaterfallInfo WaterfallInfo { get; private set; } + public long LatencyMillis { get; private set; } public ErrorInfo(IDictionary errorInfoDictionary) { @@ -478,6 +482,7 @@ public abstract class MaxSdkBase MediatedNetworkErrorMessage = MaxSdkUtils.GetStringFromDictionary(errorInfoDictionary, "mediatedNetworkErrorMessage", ""); AdLoadFailureInfo = MaxSdkUtils.GetStringFromDictionary(errorInfoDictionary, "adLoadFailureInfo", ""); WaterfallInfo = new WaterfallInfo(MaxSdkUtils.GetDictionaryFromDictionary(errorInfoDictionary, "waterfallInfo", new Dictionary())); + LatencyMillis = MaxSdkUtils.GetLongFromDictionary(errorInfoDictionary, "latencyMillis"); } public override string ToString() @@ -491,10 +496,42 @@ public abstract class MaxSdkBase stringbuilder.Append(", mediatedNetworkMessage: ").Append(MediatedNetworkErrorMessage); } + stringbuilder.Append(", latency: ").Append(LatencyMillis); return stringbuilder.Append(", adLoadFailureInfo: ").Append(AdLoadFailureInfo).Append("]").ToString(); } } + /// + /// Inset values for the safe area on the screen used to render banner ads. + /// + public class SafeAreaInsets + { + public int Left { get; private set; } + public int Top { get; private set; } + public int Right { get; private set; } + public int Bottom { get; private set; } + + /// + /// Creates a new instance of . + /// + /// An integer array with insets values in the order of left, top, right, and bottom + internal SafeAreaInsets(int[] insets) + { + Left = insets[0]; + Top = insets[1]; + Right = insets[2]; + Bottom = insets[3]; + } + + public override string ToString() + { + return "[SafeAreaInsets: Left: " + Left + + ", Top: " + Top + + ", Right: " + Right + + ", Bottom: " + Bottom + "]"; + } + } + /// /// The CMP service, which provides direct APIs for interfacing with the Google-certified CMP installed, if any. /// @@ -511,16 +548,10 @@ public abstract class MaxSdkBase } } - // Allocate the MaxSdkCallbacks singleton, which receives all callback events from the native SDKs. - protected static void InitCallbacks() + // Allocate the MaxEventExecutor singleton which handles pushing callbacks from the background to the main thread. + protected static void InitializeEventExecutor() { - var type = typeof(MaxSdkCallbacks); - var mgr = new GameObject("MaxSdkCallbacks", type) - .GetComponent(); // Its Awake() method sets Instance. - if (MaxSdkCallbacks.Instance != mgr) - { - MaxSdkLogger.UserWarning("It looks like you have the " + type.Name + " on a GameObject in your scene. Please remove the script from your scene."); - } + MaxEventExecutor.InitializeIfNeeded(); } /// @@ -562,7 +593,7 @@ public abstract class MaxSdkBase { try { - MaxSdkCallbacks.Instance.ForwardEvent(propsStr); + MaxSdkCallbacks.ForwardEvent(propsStr); } catch (Exception exception) { diff --git a/MaxSdk/Scripts/MaxSdkCallbacks.cs b/MaxSdk/Scripts/MaxSdkCallbacks.cs index bf3084f..8654dfb 100644 --- a/MaxSdk/Scripts/MaxSdkCallbacks.cs +++ b/MaxSdk/Scripts/MaxSdkCallbacks.cs @@ -7,30 +7,10 @@ using System.Collections.Generic; using System.Globalization; using UnityEngine; using AppLovinMax.ThirdParty.MiniJson; +using AppLovinMax.Internal; -public class MaxSdkCallbacks : MonoBehaviour +public static class MaxSdkCallbacks { -#if UNITY_EDITOR - private static MaxSdkCallbacks instance; -#endif - - public static MaxSdkCallbacks Instance - { -#if UNITY_EDITOR - get - { - if (instance != null) return instance; - - instance = new GameObject("MaxSdkCallbacks", typeof(MaxSdkCallbacks)).GetComponent(); - DontDestroyOnLoad(instance); - - return instance; - } -#else - get; private set; -#endif - } - // Fired when the SDK has finished initializing private static Action _onSdkInitializedEvent; public static event Action OnSdkInitializedEvent @@ -844,100 +824,6 @@ public class MaxSdkCallbacks : MonoBehaviour } } - private static Action _onCrossPromoAdLoadedEvent; - private static Action _onCrossPromoAdLoadFailedEvent; - private static Action _onCrossPromoAdClickedEvent; - private static Action _onCrossPromoAdRevenuePaidEvent; - private static Action _onCrossPromoAdExpandedEvent; - private static Action _onCrossPromoAdCollapsedEvent; - - public class CrossPromo - { - public static event Action OnAdLoadedEvent - { - add - { - LogSubscribedToEvent("OnCrossPromoAdLoadedEvent"); - _onCrossPromoAdLoadedEvent += value; - } - remove - { - LogUnsubscribedToEvent("OnCrossPromoAdLoadedEvent"); - _onCrossPromoAdLoadedEvent -= value; - } - } - - public static event Action OnAdLoadFailedEvent - { - add - { - LogSubscribedToEvent("OnCrossPromoAdLoadFailedEvent"); - _onCrossPromoAdLoadFailedEvent += value; - } - remove - { - LogUnsubscribedToEvent("OnCrossPromoAdLoadFailedEvent"); - _onCrossPromoAdLoadFailedEvent -= value; - } - } - - public static event Action OnAdClickedEvent - { - add - { - LogSubscribedToEvent("OnCrossPromoAdClickedEvent"); - _onCrossPromoAdClickedEvent += value; - } - remove - { - LogUnsubscribedToEvent("OnCrossPromoAdClickedEvent"); - _onCrossPromoAdClickedEvent -= value; - } - } - - public static event Action OnAdRevenuePaidEvent - { - add - { - LogSubscribedToEvent("OnCrossPromoAdRevenuePaidEvent"); - _onCrossPromoAdRevenuePaidEvent += value; - } - remove - { - LogUnsubscribedToEvent("OnCrossPromoAdRevenuePaidEvent"); - _onCrossPromoAdRevenuePaidEvent -= value; - } - } - - public static event Action OnAdExpandedEvent - { - add - { - LogSubscribedToEvent("OnCrossPromoAdExpandedEvent"); - _onCrossPromoAdExpandedEvent += value; - } - remove - { - LogUnsubscribedToEvent("OnCrossPromoAdExpandedEvent"); - _onCrossPromoAdExpandedEvent -= value; - } - } - - public static event Action OnAdCollapsedEvent - { - add - { - LogSubscribedToEvent("OnCrossPromoAdCollapsedEvent"); - _onCrossPromoAdCollapsedEvent += value; - } - remove - { - LogUnsubscribedToEvent("OnCrossPromoAdCollapsedEvent"); - _onCrossPromoAdCollapsedEvent -= value; - } - } - } - private static Action _onBannerAdLoadedEvent; private static Action _onBannerAdLoadFailedEvent; private static Action _onBannerAdClickedEvent; @@ -1312,18 +1198,7 @@ public class MaxSdkCallbacks : MonoBehaviour } } -#if !UNITY_EDITOR - void Awake() - { - if (Instance == null) - { - Instance = this; - DontDestroyOnLoad(gameObject); - } - } -#endif - - public void ForwardEvent(string eventPropsStr) + public static void ForwardEvent(string eventPropsStr) { var eventProps = Json.Deserialize(eventPropsStr) as Dictionary; if (eventProps == null) @@ -1332,6 +1207,7 @@ public class MaxSdkCallbacks : MonoBehaviour return; } + var keepInBackground = MaxSdkUtils.GetBoolFromDictionary(eventProps, "keepInBackground", false); var eventName = MaxSdkUtils.GetStringFromDictionary(eventProps, "name", ""); if (eventName == "OnInitialCallbackEvent") { @@ -1340,11 +1216,11 @@ public class MaxSdkCallbacks : MonoBehaviour else if (eventName == "OnSdkInitializedEvent") { var sdkConfiguration = MaxSdkBase.SdkConfiguration.Create(eventProps); - InvokeEvent(_onSdkInitializedEvent, sdkConfiguration, eventName); + InvokeEvent(_onSdkInitializedEvent, sdkConfiguration, eventName, keepInBackground); } else if (eventName == "OnSdkConsentDialogDismissedEvent") { - InvokeEvent(_onSdkConsentDialogDismissedEvent, eventName); + InvokeEvent(_onSdkConsentDialogDismissedEvent, eventName, keepInBackground); } else if (eventName == "OnCmpCompletedEvent") { @@ -1358,223 +1234,197 @@ public class MaxSdkCallbacks : MonoBehaviour var adUnitIdentifier = MaxSdkUtils.GetStringFromDictionary(eventProps, "adUnitId", ""); if (eventName == "OnBannerAdLoadedEvent") { - InvokeEvent(_onBannerAdLoadedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onBannerAdLoadedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onBannerAdLoadedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onBannerAdLoadedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnBannerAdLoadFailedEvent") { var errorCode = MaxSdkUtils.GetIntFromDictionary(eventProps, "errorCode", -1); - InvokeEvent(_onBannerAdLoadFailedEvent, adUnitIdentifier, errorCode, eventName); + InvokeEvent(_onBannerAdLoadFailedEvent, adUnitIdentifier, errorCode, eventName, keepInBackground); var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onBannerAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName); + InvokeEvent(_onBannerAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName, keepInBackground); } else if (eventName == "OnBannerAdClickedEvent") { - InvokeEvent(_onBannerAdClickedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onBannerAdClickedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onBannerAdClickedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onBannerAdClickedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnBannerAdRevenuePaidEvent") { - InvokeEvent(_onBannerAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onBannerAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnBannerAdReviewCreativeIdGeneratedEvent") { var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", ""); - InvokeEvent(_onBannerAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName); + InvokeEvent(_onBannerAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground); } else if (eventName == "OnBannerAdExpandedEvent") { - InvokeEvent(_onBannerAdExpandedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onBannerAdExpandedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onBannerAdExpandedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onBannerAdExpandedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnBannerAdCollapsedEvent") { - InvokeEvent(_onBannerAdCollapsedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onBannerAdCollapsedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onBannerAdCollapsedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onBannerAdCollapsedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdLoadedEvent") { - InvokeEvent(_onMRecAdLoadedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onMRecAdLoadedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onMRecAdLoadedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onMRecAdLoadedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdLoadFailedEvent") { var errorCode = MaxSdkUtils.GetIntFromDictionary(eventProps, "errorCode", -1); - InvokeEvent(_onMRecAdLoadFailedEvent, adUnitIdentifier, errorCode, eventName); + InvokeEvent(_onMRecAdLoadFailedEvent, adUnitIdentifier, errorCode, eventName, keepInBackground); var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onMRecAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName); + InvokeEvent(_onMRecAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdClickedEvent") { - InvokeEvent(_onMRecAdClickedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onMRecAdClickedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onMRecAdClickedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onMRecAdClickedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdRevenuePaidEvent") { - InvokeEvent(_onMRecAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onMRecAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdReviewCreativeIdGeneratedEvent") { var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", ""); - InvokeEvent(_onMRecAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName); + InvokeEvent(_onMRecAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdExpandedEvent") { - InvokeEvent(_onMRecAdExpandedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onMRecAdExpandedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onMRecAdExpandedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onMRecAdExpandedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnMRecAdCollapsedEvent") { - InvokeEvent(_onMRecAdCollapsedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onMRecAdCollapsedEventV2, adUnitIdentifier, adInfo, eventName); - } - else if (eventName == "OnCrossPromoAdLoadedEvent") - { - InvokeEvent(_onCrossPromoAdLoadedEvent, adUnitIdentifier, adInfo, eventName); - } - else if (eventName == "OnCrossPromoAdLoadFailedEvent") - { - var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - - InvokeEvent(_onCrossPromoAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName); - } - else if (eventName == "OnCrossPromoAdClickedEvent") - { - InvokeEvent(_onCrossPromoAdClickedEvent, adUnitIdentifier, adInfo, eventName); - } - else if (eventName == "OnCrossPromoAdRevenuePaidEvent") - { - InvokeEvent(_onCrossPromoAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); - } - else if (eventName == "OnCrossPromoAdExpandedEvent") - { - InvokeEvent(_onCrossPromoAdExpandedEvent, adUnitIdentifier, adInfo, eventName); - } - else if (eventName == "OnCrossPromoAdCollapsedEvent") - { - InvokeEvent(_onCrossPromoAdCollapsedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onMRecAdCollapsedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onMRecAdCollapsedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialLoadedEvent") { - InvokeEvent(_onInterstitialAdLoadedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onInterstitialAdLoadedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onInterstitialAdLoadedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onInterstitialAdLoadedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialLoadFailedEvent") { var errorCode = MaxSdkUtils.GetIntFromDictionary(eventProps, "errorCode", -1); - InvokeEvent(_onInterstitialLoadFailedEvent, adUnitIdentifier, errorCode, eventName); + InvokeEvent(_onInterstitialLoadFailedEvent, adUnitIdentifier, errorCode, eventName, keepInBackground); var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onInterstitialAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName); + InvokeEvent(_onInterstitialAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialHiddenEvent") { - InvokeEvent(_onInterstitialAdHiddenEvent, adUnitIdentifier, eventName); - InvokeEvent(_onInterstitialAdHiddenEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onInterstitialAdHiddenEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onInterstitialAdHiddenEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialDisplayedEvent") { - InvokeEvent(_onInterstitialAdDisplayedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onInterstitialAdDisplayedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onInterstitialAdDisplayedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onInterstitialAdDisplayedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialAdFailedToDisplayEvent") { var errorCode = MaxSdkUtils.GetIntFromDictionary(eventProps, "errorCode", -1); - InvokeEvent(_onInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorCode, eventName); + InvokeEvent(_onInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorCode, eventName, keepInBackground); var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onInterstitialAdFailedToDisplayEventV2, adUnitIdentifier, errorInfo, adInfo, eventName); + InvokeEvent(_onInterstitialAdFailedToDisplayEventV2, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialClickedEvent") { - InvokeEvent(_onInterstitialAdClickedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onInterstitialAdClickedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onInterstitialAdClickedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onInterstitialAdClickedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialAdRevenuePaidEvent") { - InvokeEvent(_onInterstitialAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onInterstitialAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnInterstitialAdReviewCreativeIdGeneratedEvent") { var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", ""); - InvokeEvent(_onInterstitialAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName); + InvokeEvent(_onInterstitialAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdLoadedEvent") { - InvokeEvent(_onAppOpenAdLoadedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onAppOpenAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdLoadFailedEvent") { var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onAppOpenAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName); + InvokeEvent(_onAppOpenAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdHiddenEvent") { - InvokeEvent(_onAppOpenAdHiddenEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onAppOpenAdHiddenEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdDisplayedEvent") { - InvokeEvent(_onAppOpenAdDisplayedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onAppOpenAdDisplayedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdFailedToDisplayEvent") { var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onAppOpenAdFailedToDisplayEvent, adUnitIdentifier, errorInfo, adInfo, eventName); + InvokeEvent(_onAppOpenAdFailedToDisplayEvent, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdClickedEvent") { - InvokeEvent(_onAppOpenAdClickedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onAppOpenAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnAppOpenAdRevenuePaidEvent") { - InvokeEvent(_onAppOpenAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onAppOpenAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdLoadedEvent") { - InvokeEvent(_onRewardedAdLoadedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onRewardedAdLoadedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedAdLoadedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onRewardedAdLoadedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdLoadFailedEvent") { var errorCode = MaxSdkUtils.GetIntFromDictionary(eventProps, "errorCode", -1); - InvokeEvent(_onRewardedAdLoadFailedEvent, adUnitIdentifier, errorCode, eventName); + InvokeEvent(_onRewardedAdLoadFailedEvent, adUnitIdentifier, errorCode, eventName, keepInBackground); var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onRewardedAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName); + InvokeEvent(_onRewardedAdLoadFailedEventV2, adUnitIdentifier, errorInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdDisplayedEvent") { - InvokeEvent(_onRewardedAdDisplayedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onRewardedAdDisplayedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedAdDisplayedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onRewardedAdDisplayedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdHiddenEvent") { - InvokeEvent(_onRewardedAdHiddenEvent, adUnitIdentifier, eventName); - InvokeEvent(_onRewardedAdHiddenEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedAdHiddenEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onRewardedAdHiddenEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdClickedEvent") { - InvokeEvent(_onRewardedAdClickedEvent, adUnitIdentifier, eventName); - InvokeEvent(_onRewardedAdClickedEventV2, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedAdClickedEvent, adUnitIdentifier, eventName, keepInBackground); + InvokeEvent(_onRewardedAdClickedEventV2, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdRevenuePaidEvent") { - InvokeEvent(_onRewardedAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdReviewCreativeIdGeneratedEvent") { var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", ""); - InvokeEvent(_onRewardedAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName); + InvokeEvent(_onRewardedAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdFailedToDisplayEvent") { var errorCode = MaxSdkUtils.GetIntFromDictionary(eventProps, "errorCode", -1); - InvokeEvent(_onRewardedAdFailedToDisplayEvent, adUnitIdentifier, errorCode, eventName); + InvokeEvent(_onRewardedAdFailedToDisplayEvent, adUnitIdentifier, errorCode, eventName, keepInBackground); var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onRewardedAdFailedToDisplayEventV2, adUnitIdentifier, errorInfo, adInfo, eventName); + InvokeEvent(_onRewardedAdFailedToDisplayEventV2, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedAdReceivedRewardEvent") { @@ -1584,45 +1434,45 @@ public class MaxSdkCallbacks : MonoBehaviour Amount = MaxSdkUtils.GetIntFromDictionary(eventProps, "rewardAmount", 0) }; - InvokeEvent(_onRewardedAdReceivedRewardEvent, adUnitIdentifier, reward, eventName); - InvokeEvent(_onRewardedAdReceivedRewardEventV2, adUnitIdentifier, reward, adInfo, eventName); + InvokeEvent(_onRewardedAdReceivedRewardEvent, adUnitIdentifier, reward, eventName, keepInBackground); + InvokeEvent(_onRewardedAdReceivedRewardEventV2, adUnitIdentifier, reward, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdLoadedEvent") { - InvokeEvent(_onRewardedInterstitialAdLoadedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdLoadedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdLoadFailedEvent") { var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onRewardedInterstitialAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdLoadFailedEvent, adUnitIdentifier, errorInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdDisplayedEvent") { - InvokeEvent(_onRewardedInterstitialAdDisplayedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdDisplayedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdHiddenEvent") { - InvokeEvent(_onRewardedInterstitialAdHiddenEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdHiddenEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdClickedEvent") { - InvokeEvent(_onRewardedInterstitialAdClickedEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdClickedEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdRevenuePaidEvent") { - InvokeEvent(_onRewardedInterstitialAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdRevenuePaidEvent, adUnitIdentifier, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdReviewCreativeIdGeneratedEvent") { var adReviewCreativeId = MaxSdkUtils.GetStringFromDictionary(eventProps, "adReviewCreativeId", ""); - InvokeEvent(_onRewardedInterstitialAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdReviewCreativeIdGeneratedEvent, adUnitIdentifier, adReviewCreativeId, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdFailedToDisplayEvent") { var errorInfo = new MaxSdkBase.ErrorInfo(eventProps); - InvokeEvent(_onRewardedInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorInfo, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdFailedToDisplayEvent, adUnitIdentifier, errorInfo, adInfo, eventName, keepInBackground); } else if (eventName == "OnRewardedInterstitialAdReceivedRewardEvent") { @@ -1632,7 +1482,7 @@ public class MaxSdkCallbacks : MonoBehaviour Amount = MaxSdkUtils.GetIntFromDictionary(eventProps, "rewardAmount", 0) }; - InvokeEvent(_onRewardedInterstitialAdReceivedRewardEvent, adUnitIdentifier, reward, adInfo, eventName); + InvokeEvent(_onRewardedInterstitialAdReceivedRewardEvent, adUnitIdentifier, reward, adInfo, eventName, keepInBackground); } else { @@ -1650,36 +1500,96 @@ public class MaxSdkCallbacks : MonoBehaviour } #endif - private static void InvokeEvent(Action evt, string eventName) + private static void InvokeEvent(Action evt, string eventName, bool keepInBackground) { if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName); - evt(); + if (keepInBackground) + { + try + { + evt(); + } + catch (Exception exception) + { + MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception); + Debug.LogException(exception); + } + } + else + { + MaxEventExecutor.ExecuteOnMainThread(evt, eventName); + } } - private static void InvokeEvent(Action evt, T param, string eventName) + private static void InvokeEvent(Action evt, T param, string eventName, bool keepInBackground) { if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Param: " + param); - evt(param); + if (keepInBackground) + { + try + { + evt(param); + } + catch (Exception exception) + { + MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception); + Debug.LogException(exception); + } + } + else + { + MaxEventExecutor.ExecuteOnMainThread(() => evt(param), eventName); + } } - private static void InvokeEvent(Action evt, T1 param1, T2 param2, string eventName) + private static void InvokeEvent(Action evt, T1 param1, T2 param2, string eventName, bool keepInBackground) { if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Params: " + param1 + ", " + param2); - evt(param1, param2); + if (keepInBackground) + { + try + { + evt(param1, param2); + } + catch (Exception exception) + { + MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception); + Debug.LogException(exception); + } + } + else + { + MaxEventExecutor.ExecuteOnMainThread(() => evt(param1, param2), eventName); + } } - private static void InvokeEvent(Action evt, T1 param1, T2 param2, T3 param3, string eventName) + private static void InvokeEvent(Action evt, T1 param1, T2 param2, T3 param3, string eventName, bool keepInBackground) { if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Params: " + param1 + ", " + param2 + ", " + param3); - evt(param1, param2, param3); + if (keepInBackground) + { + try + { + evt(param1, param2, param3); + } + catch (Exception exception) + { + MaxSdkLogger.UserError("Caught exception in publisher event: " + eventName + ", exception: " + exception); + Debug.LogException(exception); + } + } + else + { + MaxEventExecutor.ExecuteOnMainThread(() => evt(param1, param2, param3), eventName); + } } private static bool CanInvokeEvent(Delegate evt) @@ -1768,13 +1678,6 @@ public class MaxSdkCallbacks : MonoBehaviour _onMRecAdExpandedEventV2 = null; _onMRecAdCollapsedEventV2 = null; - _onCrossPromoAdLoadedEvent = null; - _onCrossPromoAdLoadFailedEvent = null; - _onCrossPromoAdClickedEvent = null; - _onCrossPromoAdRevenuePaidEvent = null; - _onCrossPromoAdExpandedEvent = null; - _onCrossPromoAdCollapsedEvent = null; - _onBannerAdLoadedEvent = null; _onBannerAdLoadFailedEvent = null; _onBannerAdClickedEvent = null; diff --git a/MaxSdk/Scripts/MaxSdkUnityEditor.cs b/MaxSdk/Scripts/MaxSdkUnityEditor.cs index 61c93b1..11ff89b 100644 --- a/MaxSdk/Scripts/MaxSdkUnityEditor.cs +++ b/MaxSdk/Scripts/MaxSdkUnityEditor.cs @@ -6,6 +6,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Globalization; +using AppLovinMax.Internal; using AppLovinMax.ThirdParty.MiniJson; #if UNITY_EDITOR using UnityEditor; @@ -28,6 +29,7 @@ public class MaxSdkUnityEditor : MaxSdkBase private static bool _doNotSell = false; private static bool _isDoNotSellSet = false; private static bool _showStubAds = true; + private static SafeAreaInsets _safeAreaInsets = new SafeAreaInsets(new int[] {0, 0, 0, 0}); private static readonly HashSet RequestedAdUnits = new HashSet(); private static readonly HashSet ReadyAdUnits = new HashSet(); private static readonly Dictionary StubBanners = new Dictionary(); @@ -49,6 +51,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// This method must be called before any other SDK operation /// + /// AppLovin SDK key. Must not be null. public static void SetSdkKey(string sdkKey) { _hasSdkKey = true; @@ -111,7 +114,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// For example, a username or email. We'll include this in the postback when we ping your currency endpoint from our server. /// /// - /// The user identifier to be set. + /// The user identifier to be set. Must not be null. public static void SetUserId(string userId) { } /// @@ -184,8 +187,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Returns the arbitrary ad value for a given ad unit identifier with key. Returns null if no ad is loaded. /// - /// - /// Ad value key + /// Ad unit identifier for which to get the ad value for. Must not be null. + /// Ad value key. Must not be null. /// Arbitrary ad value for a given key, or null if no ad is loaded. public static string GetAdValue(string adUnitIdentifier, string key) { @@ -297,8 +300,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Create a new banner. /// - /// Ad unit identifier of the banner to create - /// Banner position + /// Ad unit identifier of the banner to create. Must not be null. + /// Banner position. Must not be null. public static void CreateBanner(string adUnitIdentifier, BannerPosition bannerPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "create banner"); @@ -312,14 +315,14 @@ public class MaxSdkUnityEditor : MaxSdkBase ExecuteWithDelay(1f, () => { var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnBannerAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Create a new banner with a custom position. /// - /// Ad unit identifier of the banner to create + /// Ad unit identifier of the banner to create. Must not be null. /// The X coordinate (horizontal position) of the banner relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the banner relative to the top left corner of the screen. /// @@ -356,7 +359,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// NOTE: The method loads the first banner ad and initiates an automated banner refresh process. /// You only need to call this method if you pause banner refresh. /// - /// Ad unit identifier of the banner to load + /// Ad unit identifier of the banner to load. Must not be null. public static void LoadBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load banner"); @@ -364,14 +367,14 @@ public class MaxSdkUnityEditor : MaxSdkBase ExecuteWithDelay(1f, () => { var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnBannerAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Set the banner placement for an ad unit identifier to tie the future ad events to. /// - /// Ad unit identifier of the banner to set the placement for + /// Ad unit identifier of the banner to set the placement for. Must not be null. /// Placement to set public static void SetBannerPlacement(string adUnitIdentifier, string placement) { @@ -381,7 +384,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Starts or resumes auto-refreshing of the banner for the given ad unit identifier. /// - /// Ad unit identifier of the banner for which to start auto-refresh + /// Ad unit identifier of the banner for which to start auto-refresh. Must not be null. public static void StartBannerAutoRefresh(string adUnitIdentifier) { MaxSdkLogger.UserDebug("Starting banner auto refresh."); @@ -390,7 +393,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Pauses auto-refreshing of the banner for the given ad unit identifier. /// - /// Ad unit identifier of the banner for which to stop auto-refresh + /// Ad unit identifier of the banner for which to stop auto-refresh. Must not be null. public static void StopBannerAutoRefresh(string adUnitIdentifier) { MaxSdkLogger.UserDebug("Stopping banner auto refresh."); @@ -399,8 +402,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Updates the position of the banner to the new position provided. /// - /// The ad unit identifier of the banner for which to update the position - /// A new position for the banner + /// The ad unit identifier of the banner for which to update the position. Must not be null. + /// A new position for the banner. Must not be null. public static void UpdateBannerPosition(string adUnitIdentifier, BannerPosition bannerPosition) { Debug.Log("[AppLovin MAX] Updating banner position to '" + bannerPosition + "' for ad unit id '" + adUnitIdentifier + "'"); @@ -409,7 +412,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Updates the position of the banner to the new coordinates provided. /// - /// The ad unit identifier of the banner for which to update the position + /// The ad unit identifier of the banner for which to update the position. Must not be null. /// The X coordinate (horizontal position) of the banner relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the banner relative to the top left corner of the screen. /// @@ -423,7 +426,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Overrides the width of the banner in points/dp. /// - /// The ad unit identifier of the banner for which to override the width for + /// The ad unit identifier of the banner for which to override the width for. Must not be null. /// The desired width of the banner in points/dp public static void SetBannerWidth(string adUnitIdentifier, float width) { @@ -434,7 +437,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Show banner at a position determined by the 'CreateBanner' call. /// - /// Ad unit identifier of the banner to show + /// Ad unit identifier of the banner to show. Must not be null. public static void ShowBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "show banner"); @@ -456,7 +459,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Remove banner from the ad view and destroy it. /// - /// Ad unit identifier of the banner to destroy + /// Ad unit identifier of the banner to destroy. Must not be null. public static void DestroyBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "destroy banner"); @@ -472,8 +475,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Hide banner. /// - /// Ad unit identifier of the banner to hide - /// + /// Ad unit identifier of the banner to hide. Must not be null. public static void HideBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "hide banner"); @@ -488,9 +490,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set non-transparent background color for banners to be fully functional. /// - /// Ad unit identifier of the banner to set background color for - /// A background color to set for the ad - /// + /// Ad unit identifier of the banner to set background color for. Must not be null. + /// A background color to set for the ad. Must not be null. public static void SetBannerBackgroundColor(string adUnitIdentifier, Color color) { ValidateAdUnitIdentifier(adUnitIdentifier, "set background color"); @@ -505,8 +506,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set an extra parameter for the banner ad. /// - /// Ad unit identifier of the banner to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the banner to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetBannerExtraParameter(string adUnitIdentifier, string key, string value) { @@ -516,8 +517,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set a local extra parameter for the banner ad. /// - /// Ad unit identifier of the banner to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the banner to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. public static void SetBannerLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -527,7 +528,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// The custom data to tie the showing banner ad to, for ILRD and rewarded postbacks via the {CUSTOM_DATA} macro. Maximum size is 8KB. /// - /// Banner ad unit identifier of the banner to set the custom data for. + /// Banner ad unit identifier of the banner to set the custom data for. Must not be null. /// The custom data to be set. public static void SetBannerCustomData(string adUnitIdentifier, string customData) { @@ -538,7 +539,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// The banner position on the screen. When setting the banner position via or , /// the banner is placed within the safe area of the screen. This returns the absolute position of the banner on screen. /// - /// Ad unit identifier of the banner for which to get the position on screen. + /// Ad unit identifier of the banner for which to get the position on screen. Must not be null. /// A representing the banner position on screen. public static Rect GetBannerLayout(string adUnitIdentifier) { @@ -553,8 +554,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Create a new MREC. /// - /// Ad unit identifier of the MREC to create - /// MREC position + /// Ad unit identifier of the MREC to create. Must not be null. + /// MREC position. Must not be null. public static void CreateMRec(string adUnitIdentifier, AdViewPosition mrecPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "create MREC"); @@ -563,14 +564,14 @@ public class MaxSdkUnityEditor : MaxSdkBase ExecuteWithDelay(1f, () => { var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnMRecAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Create a new MREC with a custom position. /// - /// Ad unit identifier of the MREC to create + /// Ad unit identifier of the MREC to create. Must not be null. /// The X coordinate (horizontal position) of the MREC relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the MREC relative to the top left corner of the screen. /// @@ -587,7 +588,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// NOTE: The method loads the first MREC ad and initiates an automated MREC refresh process. /// You only need to call this method if you pause MREC refresh. /// - /// Ad unit identifier of the MREC to load + /// Ad unit identifier of the MREC to load. Must not be null. public static void LoadMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load MREC"); @@ -595,14 +596,14 @@ public class MaxSdkUnityEditor : MaxSdkBase ExecuteWithDelay(1f, () => { var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnMRecAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Set the MREC placement for an ad unit identifier to tie the future ad events to. /// - /// Ad unit identifier of the MREC to set the placement for + /// Ad unit identifier of the MREC to set the placement for. Must not be null. /// Placement to set public static void SetMRecPlacement(string adUnitIdentifier, string placement) { @@ -612,7 +613,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Starts or resumes auto-refreshing of the MREC for the given ad unit identifier. /// - /// Ad unit identifier of the MREC for which to start auto-refresh + /// Ad unit identifier of the MREC for which to start auto-refresh. Must not be null. public static void StartMRecAutoRefresh(string adUnitIdentifier) { MaxSdkLogger.UserDebug("Starting banner auto refresh."); @@ -621,7 +622,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Pauses auto-refreshing of the MREC for the given ad unit identifier. /// - /// Ad unit identifier of the MREC for which to stop auto-refresh + /// Ad unit identifier of the MREC for which to stop auto-refresh. Must not be null. public static void StopMRecAutoRefresh(string adUnitIdentifier) { MaxSdkLogger.UserDebug("Stopping banner auto refresh."); @@ -630,8 +631,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Updates the position of the MREC to the new position provided. /// - /// The ad unit identifier of the MREC for which to update the position - /// A new position for the MREC + /// The ad unit identifier of the MREC for which to update the position. Must not be null. + /// A new position for the MREC. Must not be null. public static void UpdateMRecPosition(string adUnitIdentifier, AdViewPosition mrecPosition) { MaxSdkLogger.UserDebug("Updating MREC position to '" + mrecPosition + "' for ad unit id '" + adUnitIdentifier + "'"); @@ -640,7 +641,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Updates the position of the MREC to the new coordinates provided. /// - /// The ad unit identifier of the MREC for which to update the position + /// The ad unit identifier of the MREC for which to update the position. Must not be null. /// The X coordinate (horizontal position) of the MREC relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the MREC relative to the top left corner of the screen. /// @@ -654,7 +655,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Show MREC at a position determined by the 'CreateMRec' call. /// - /// Ad unit identifier of the MREC to show + /// Ad unit identifier of the MREC to show. Must not be null. public static void ShowMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "show MREC"); @@ -668,7 +669,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Remove MREC from the ad view and destroy it. /// - /// Ad unit identifier of the MREC to destroy + /// Ad unit identifier of the MREC to destroy. Must not be null. public static void DestroyMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "destroy MREC"); @@ -677,7 +678,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Hide MREC. /// - /// Ad unit identifier of the MREC to hide + /// Ad unit identifier of the MREC to hide. Must not be null. public static void HideMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "hide MREC"); @@ -686,8 +687,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set an extra parameter for the MREC ad. /// - /// Ad unit identifier of the MREC to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the MREC to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetMRecExtraParameter(string adUnitIdentifier, string key, string value) { @@ -697,8 +698,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set a local extra parameter for the MREC ad. /// - /// Ad unit identifier of the MREC to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the MREC to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. public static void SetMRecLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -708,7 +709,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// The custom data to tie the showing MREC ad to, for ILRD and rewarded postbacks via the {CUSTOM_DATA} macro. Maximum size is 8KB. /// - /// MREC Ad unit identifier of the banner to set the custom data for. + /// MREC Ad unit identifier of the banner to set the custom data for. Must not be null. /// The custom data to be set. public static void SetMRecCustomData(string adUnitIdentifier, string customData) { @@ -719,7 +720,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// The MREC position on the screen. When setting the MREC position via or , /// the MREC is placed within the safe area of the screen. This returns the absolute position of the MREC on screen. /// - /// Ad unit identifier of the MREC for which to get the position on screen. + /// Ad unit identifier of the MREC for which to get the position on screen. Must not be null. /// A representing the banner position on screen. public static Rect GetMRecLayout(string adUnitIdentifier) { @@ -729,99 +730,6 @@ public class MaxSdkUnityEditor : MaxSdkBase #endregion - #region Cross Promo Ads - - /// - /// Create a new cross promo ad with a custom position. - /// - /// Ad unit identifier of the cross promo ad to create - /// The X coordinate (horizontal position) of the cross promo ad relative to the top left corner of the screen. - /// The Y coordinate (vertical position) of the cross promo ad relative to the top left corner of the screen. - /// The width of the cross promo ad. - /// The height of the cross promo ad. - /// The rotation of the cross promo ad in degrees. - /// - /// The cross promo is placed within the safe area of the screen. You can use this to get the absolute position Rect of the cross promo ad on screen. - /// - public static void CreateCrossPromoAd(string adUnitIdentifier, float x, float y, float width, float height, float rotation) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "create cross promo ad"); - RequestAdUnit(adUnitIdentifier); - } - - /// - /// Set the cross promo ad placement for an ad unit identifier to tie the future ad events to. - /// - /// Ad unit identifier of the cross promo ad to set the placement for - /// Placement to set - public static void SetCrossPromoAdPlacement(string adUnitIdentifier, string placement) - { - MaxSdkLogger.UserDebug("Setting cross promo ad placement to '" + placement + "' for ad unit id '" + adUnitIdentifier + "'"); - } - - /// - /// Updates the position of the cross promo ad to the new coordinates provided. - /// - /// The ad unit identifier of the cross promo ad for which to update the position - /// The X coordinate (horizontal position) of the cross promo ad relative to the top left corner of the screen. - /// The Y coordinate (vertical position) of the cross promo ad relative to the top left corner of the screen. - /// The width of the cross promo ad. - /// The height of the cross promo ad. - /// The rotation of the cross promo ad in degrees. - /// - /// The cross promo ad is placed within the safe area of the screen. You can use this to get the absolute position Rect of the cross promo ad on screen. - /// - public static void UpdateCrossPromoAdPosition(string adUnitIdentifier, float x, float y, float width, float height, float rotation) - { - MaxSdkLogger.UserDebug("Updating cross promo ad position to (" + x + "," + y + ") with size " + width + " x " + height + " and rotation of " + rotation + " degrees"); - } - - /// - /// Show cross promo ad at a position determined by the 'CreateCrossPromoAd' call. - /// - /// Ad unit identifier of the cross promo ad to show - public static void ShowCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "show cross promo ad"); - - if (!IsAdUnitRequested(adUnitIdentifier)) - { - MaxSdkLogger.UserWarning("Cross promo ad '" + adUnitIdentifier + "' was not created, can not show it"); - } - } - - /// - /// Remove cross promo ad from the ad view and destroy it. - /// - /// Ad unit identifier of the cross promo ad to destroy - public static void DestroyCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "destroy cross promo ad"); - } - - /// - /// Hide cross promo ad. - /// - /// Ad unit identifier of the cross promo ad to hide - public static void HideCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "hide cross promo ad"); - } - - /// - /// The cross promo ad position on the screen. When setting the cross promo ad position via or , - /// the cross promo ad is placed within the safe area of the screen. This returns the absolute position of the cross promo ad on screen. - /// - /// Ad unit identifier of the cross promo ad for which to get the position on screen. - /// A representing the banner position on screen. - public static Rect GetCrossPromoAdLayout(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "get cross promo ad layout"); - return Rect.zero; - } - - #endregion - #region Interstitials /// @@ -838,7 +746,7 @@ public class MaxSdkUnityEditor : MaxSdkBase AddReadyAdUnit(adUnitIdentifier); var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnInterstitialLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } @@ -906,12 +814,12 @@ public class MaxSdkUnityEditor : MaxSdkBase closeButton.onClick.AddListener(() => { var adHiddenEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnInterstitialHiddenEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adHiddenEventProps); + MaxSdkCallbacks.ForwardEvent(adHiddenEventProps); Object.Destroy(stubInterstitial); }); var adDisplayedEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnInterstitialDisplayedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adDisplayedEventProps); + MaxSdkCallbacks.ForwardEvent(adDisplayedEventProps); #endif } @@ -944,7 +852,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Start loading an app open ad. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. public static void LoadAppOpenAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load app open ad"); @@ -955,14 +863,14 @@ public class MaxSdkUnityEditor : MaxSdkBase AddReadyAdUnit(adUnitIdentifier); var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnAppOpenAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Check if app open ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsAppOpenAdReady(string adUnitIdentifier) { @@ -981,7 +889,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Present loaded app open ad for a given placement to tie ad events to. Note: if the app open ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowAppOpenAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1023,20 +931,20 @@ public class MaxSdkUnityEditor : MaxSdkBase closeButton.onClick.AddListener(() => { var adHiddenEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnAppOpenAdHiddenEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adHiddenEventProps); + MaxSdkCallbacks.ForwardEvent(adHiddenEventProps); Object.Destroy(stubAppOpenAd); }); var adDisplayedEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnAppOpenAdDisplayedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adDisplayedEventProps); + MaxSdkCallbacks.ForwardEvent(adDisplayedEventProps); #endif } /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the app open ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the app open ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetAppOpenAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1046,8 +954,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the app open ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the app open ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. public static void SetAppOpenAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1061,7 +969,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Start loading an rewarded ad. /// - /// Ad unit identifier of the rewarded ad to load + /// Ad unit identifier of the rewarded ad to load. Must not be null. public static void LoadRewardedAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load rewarded ad"); @@ -1071,14 +979,14 @@ public class MaxSdkUnityEditor : MaxSdkBase { AddReadyAdUnit(adUnitIdentifier); var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnRewardedAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Check if rewarded ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the rewarded ad to load + /// Ad unit identifier of the rewarded ad to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsRewardedAdReady(string adUnitIdentifier) { @@ -1097,7 +1005,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Present loaded rewarded ad for a given placement to tie ad events to. Note: if the rewarded ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowRewardedAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1147,11 +1055,11 @@ public class MaxSdkUnityEditor : MaxSdkBase rewardEventPropsDict["rewardLabel"] = "coins"; rewardEventPropsDict["rewardAmount"] = "5"; var rewardEventProps = Json.Serialize(rewardEventPropsDict); - MaxSdkCallbacks.Instance.ForwardEvent(rewardEventProps); + MaxSdkCallbacks.ForwardEvent(rewardEventProps); } var adHiddenEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnRewardedAdHiddenEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adHiddenEventProps); + MaxSdkCallbacks.ForwardEvent(adHiddenEventProps); Object.Destroy(stubRewardedAd); }); rewardButton.onClick.AddListener(() => @@ -1161,15 +1069,15 @@ public class MaxSdkUnityEditor : MaxSdkBase }); var adDisplayedEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnRewardedAdDisplayedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adDisplayedEventProps); + MaxSdkCallbacks.ForwardEvent(adDisplayedEventProps); #endif } /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the rewarded ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the rewarded ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetRewardedAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1179,8 +1087,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the rewarded ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the rewarded ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. public static void SetRewardedAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1194,7 +1102,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Start loading an rewarded interstitial ad. /// - /// Ad unit identifier of the rewarded interstitial ad to load + /// Ad unit identifier of the rewarded interstitial ad to load. Must not be null. public static void LoadRewardedInterstitialAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load rewarded interstitial ad"); @@ -1204,14 +1112,14 @@ public class MaxSdkUnityEditor : MaxSdkBase { AddReadyAdUnit(adUnitIdentifier); var eventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnRewardedInterstitialAdLoadedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(eventProps); + MaxSdkCallbacks.ForwardEvent(eventProps); }); } /// /// Check if rewarded interstitial ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the rewarded ad to load + /// Ad unit identifier of the rewarded ad to load. Must not be null. /// True if the ad is ready to be displayed public static bool IsRewardedInterstitialAdReady(string adUnitIdentifier) { @@ -1230,7 +1138,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Present loaded rewarded interstitial ad for a given placement to tie ad events to. Note: if the rewarded interstitial ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the rewarded interstitial to show + /// Ad unit identifier of the rewarded interstitial to show. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowRewardedInterstitialAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1280,11 +1188,11 @@ public class MaxSdkUnityEditor : MaxSdkBase rewardEventPropsDict["rewardLabel"] = "coins"; rewardEventPropsDict["rewardAmount"] = "5"; var rewardEventProps = Json.Serialize(rewardEventPropsDict); - MaxSdkCallbacks.Instance.ForwardEvent(rewardEventProps); + MaxSdkCallbacks.ForwardEvent(rewardEventProps); } var adHiddenEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnRewardedInterstitialAdHiddenEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adHiddenEventProps); + MaxSdkCallbacks.ForwardEvent(adHiddenEventProps); Object.Destroy(stubRewardedAd); }); rewardButton.onClick.AddListener(() => @@ -1294,15 +1202,15 @@ public class MaxSdkUnityEditor : MaxSdkBase }); var adDisplayedEventProps = Json.Serialize(CreateBaseEventPropsDictionary("OnRewardedAdDisplayedEvent", adUnitIdentifier)); - MaxSdkCallbacks.Instance.ForwardEvent(adDisplayedEventProps); + MaxSdkCallbacks.ForwardEvent(adDisplayedEventProps); #endif } /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the rewarded interstitial ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the rewarded interstitial ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetRewardedInterstitialAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1312,8 +1220,8 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the rewarded interstitial ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the rewarded interstitial ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. public static void SetRewardedInterstitialAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1327,7 +1235,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// Track an event using AppLovin. /// - /// An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework. + /// An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework. Must not be null. /// A dictionary containing key-value pairs further describing this event. public static void TrackEvent(string name, IDictionary parameters = null) { } @@ -1395,7 +1303,7 @@ public class MaxSdkUnityEditor : MaxSdkBase /// /// String list of advertising identifiers from devices to receive test ads. public static void SetTestDeviceAdvertisingIdentifiers(string[] advertisingIdentifiers) - { + { if (IsInitialized()) { MaxSdkLogger.UserError("Test Device Advertising Identifiers must be set before SDK initialization."); @@ -1421,6 +1329,15 @@ public class MaxSdkUnityEditor : MaxSdkBase /// The value for the extra parameter. May be null. public static void SetExtraParameter(string key, string value) { } + /// + /// Get the native insets in pixels for the safe area. + /// These insets are used to position ads within the safe area of the screen. + /// + public static SafeAreaInsets GetSafeAreaInsets() + { + return _safeAreaInsets; + } + #endregion #region Internal @@ -1481,7 +1398,7 @@ public class MaxSdkUnityEditor : MaxSdkBase private static void ExecuteWithDelay(float seconds, Action action) { - MaxSdkCallbacks.Instance.StartCoroutine(ExecuteAction(seconds, action)); + MaxEventExecutor.Instance.StartCoroutine(ExecuteAction(seconds, action)); } private static IEnumerator ExecuteAction(float seconds, Action action) diff --git a/MaxSdk/Scripts/MaxSdkUtils.cs b/MaxSdk/Scripts/MaxSdkUtils.cs index 063106d..cbab2d3 100644 --- a/MaxSdk/Scripts/MaxSdkUtils.cs +++ b/MaxSdk/Scripts/MaxSdkUtils.cs @@ -350,27 +350,21 @@ public class MaxSdkUtils } /// - /// Parses the IAB TCF String to determine the consent status for the IAB vendor with the provided ID. + /// Parses the IABTCF_VendorConsents string to determine the consent status of the IAB vendor with the provided ID. + /// NOTE: Must be called after AppLovin MAX SDK has been initialized. /// /// Vendor ID as defined in the Global Vendor List. - /// The consent status of the IAB vendor. Returns true if the vendor has consent, false if not, or null if no TCF string is available on disk. + /// true if the vendor has consent, false if not, or null if TC data is not available on disk. /// Current Version of Global Vendor List public static bool? GetTcfConsentStatus(int vendorId) { var tcfConsentStatus = GetPlatformSpecificTcfConsentStatus(vendorId); - if (tcfConsentStatus == -1) - { - return null; - } - else - { - return tcfConsentStatus == 1; - } + return GetConsentStatusValue(tcfConsentStatus); } #if UNITY_IOS [DllImport("__Internal")] - private static extern int _MaxGetTcfConsentStatus(int vendorIdentifier); + private static extern int _MaxGetTcfVendorConsentStatus(int vendorIdentifier); #endif private static int GetPlatformSpecificTcfConsentStatus(int vendorId) @@ -378,34 +372,28 @@ public class MaxSdkUtils #if UNITY_EDITOR return -1; #elif UNITY_IOS - return _MaxGetTcfConsentStatus(vendorId); + return _MaxGetTcfVendorConsentStatus(vendorId); #elif UNITY_ANDROID - return MaxUnityPluginClass.CallStatic("getTcfConsentStatus", vendorId); + return MaxUnityPluginClass.CallStatic("getTcfVendorConsentStatus", vendorId); #else return -1; #endif } /// - /// Parses the Google UMP's Additional Consent (AC) string to determine the consent status for the advertising entity represented by the provided Ad Technology Provider (ATP) ID. + /// Parses the IABTCF_AddtlConsent string to determine the consent status of the advertising entity with the provided Ad Technology Provider (ATP) ID. + /// NOTE: Must be called after AppLovin MAX SDK has been initialized. /// - /// The ID representing the advertising entity (e.g. 89 for Meta Audience Network). + /// ATP ID of the advertising entity (e.g. 89 for Meta Audience Network). /// - /// The consent status of the advertising entity. Returns true if the entity has consent, false if not, or null if no AC string is available on disk. + /// true if the advertising entity has consent, false if not, or null if no AC string is available on disk or the ATP network was not listed in the CMP flow. /// /// Google’s Additional Consent Mode technical specification /// List of Google ATPs and their IDs public static bool? GetAdditionalConsentStatus(int atpId) { var additionalConsentStatus = GetPlatformSpecificAdditionalConsentStatus(atpId); - if (additionalConsentStatus == -1) - { - return null; - } - else - { - return additionalConsentStatus == 1; - } + return GetConsentStatusValue(additionalConsentStatus); } #if UNITY_IOS @@ -426,6 +414,80 @@ public class MaxSdkUtils #endif } + /// + /// Parses the IABTCF_PurposeConsents String to determine the consent status of the IAB defined data processing purpose. + /// NOTE: Must be called after AppLovin MAX SDK has been initialized. + /// + /// Purpose ID. + /// true if the purpose has consent, false if not, or null if TC data is not available on disk. + /// see IAB Europe Transparency and Consent Framework Policies (Appendix A) for purpose definitions. + public static bool? GetPurposeConsentStatus(int purposeId) + { + var purposeConsentStatus = GetPlatformSpecificPurposeConsentStatus(purposeId); + return GetConsentStatusValue(purposeConsentStatus); + } + +#if UNITY_IOS + [DllImport("__Internal")] + private static extern int _MaxGetPurposeConsentStatus(int purposeIdentifier); +#endif + + private static int GetPlatformSpecificPurposeConsentStatus(int purposeId) + { +#if UNITY_EDITOR + return -1; +#elif UNITY_IOS + return _MaxGetPurposeConsentStatus(purposeId); +#elif UNITY_ANDROID + return MaxUnityPluginClass.CallStatic("getPurposeConsentStatus", purposeId); +#else + return -1; +#endif + } + + /// + /// Parses the IABTCF_SpecialFeaturesOptIns String to determine the opt-in status of the IAB defined special feature. + /// NOTE: Must be called after AppLovin MAX SDK has been initialized. + /// + /// Special feature ID. + /// true if the user opted in for the special feature, false if not, or null if TC data is not available on disk. + /// IAB Europe Transparency and Consent Framework Policies (Appendix A) for special features + public static bool? GetSpecialFeatureOptInStatus(int specialFeatureId) + { + var specialFeatureOptInStatus = GetPlatformSpecificSpecialFeatureOptInStatus(specialFeatureId); + return GetConsentStatusValue(specialFeatureOptInStatus); + } + +#if UNITY_IOS + [DllImport("__Internal")] + private static extern int _MaxGetSpecialFeatureOptInStatus(int specialFeatureIdentifier); +#endif + + private static int GetPlatformSpecificSpecialFeatureOptInStatus(int specialFeatureId) + { +#if UNITY_EDITOR + return -1; +#elif UNITY_IOS + return _MaxGetSpecialFeatureOptInStatus(specialFeatureId); +#elif UNITY_ANDROID + return MaxUnityPluginClass.CallStatic("getSpecialFeatureOptInStatus", specialFeatureId); +#else + return -1; +#endif + } + + private static bool? GetConsentStatusValue(int consentStatus) + { + if (consentStatus == -1) + { + return null; + } + else + { + return consentStatus == 1; + } + } + /// /// Compares AppLovin MAX Unity mediation adapter plugin versions. Returns , , /// or as the first version is less than, equal to, or greater than the second. @@ -493,7 +555,6 @@ public class MaxSdkUtils iosComparison = VersionComparisonResult.Lesser; } - // If either one of the Android or iOS version is greater, the entire version should be greater. return (androidComparison == VersionComparisonResult.Greater || iosComparison == VersionComparisonResult.Greater) ? VersionComparisonResult.Greater : VersionComparisonResult.Lesser; } @@ -520,7 +581,7 @@ public class MaxSdkUtils var versionABetaNumber = 0; if (isVersionABeta) { - var components = versionA.Split(new[] {"-beta"}, StringSplitOptions.None); + var components = versionA.Split(new[] { "-beta" }, StringSplitOptions.None); versionA = components[0]; versionABetaNumber = int.TryParse(components[1], out piece) ? piece : 0; } @@ -529,7 +590,7 @@ public class MaxSdkUtils var versionBBetaNumber = 0; if (isVersionBBeta) { - var components = versionB.Split(new[] {"-beta"}, StringSplitOptions.None); + var components = versionB.Split(new[] { "-beta" }, StringSplitOptions.None); versionB = components[0]; versionBBetaNumber = int.TryParse(components[1], out piece) ? piece : 0; } diff --git a/MaxSdk/Scripts/MaxSdkiOS.cs b/MaxSdk/Scripts/MaxSdkiOS.cs index 4254776..d128f1a 100644 --- a/MaxSdk/Scripts/MaxSdkiOS.cs +++ b/MaxSdk/Scripts/MaxSdkiOS.cs @@ -15,7 +15,7 @@ public class MaxSdkiOS : MaxSdkBase static MaxSdkiOS() { - InitCallbacks(); + InitializeEventExecutor(); } #if UNITY_IOS @@ -34,6 +34,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// This method must be called before any other SDK operation /// + /// AppLovin SDK key. Must not be null. public static void SetSdkKey(string sdkKey) { _MaxSetSdkKey(sdkKey); @@ -82,7 +83,7 @@ public class MaxSdkiOS : MaxSdkBase /// For example, a username or email. We'll include this in the postback when we ping your currency endpoint from our server. /// /// - /// The user identifier to be set. + /// The user identifier to be set. Must not be null. public static void SetUserId(string userId) { _MaxSetUserId(userId); @@ -156,8 +157,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Returns the arbitrary ad value for a given ad unit identifier with key. Returns null if no ad is loaded. /// - /// - /// Ad value key + /// Ad unit identifier for which to get the ad value for. Must not be null. + /// Ad value key. Must not be null. /// Arbitrary ad value for a given key, or null if no ad is loaded. public static string GetAdValue(string adUnitIdentifier, string key) { @@ -305,8 +306,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Create a new banner. /// - /// Ad unit identifier of the banner to create - /// Banner position + /// Ad unit identifier of the banner to create. Must not be null. + /// Banner position. Must not be null. public static void CreateBanner(string adUnitIdentifier, BannerPosition bannerPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "create banner"); @@ -319,7 +320,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Create a new banner with a custom position. /// - /// Ad unit identifier of the banner to create + /// Ad unit identifier of the banner to create. Must not be null. /// The X coordinate (horizontal position) of the banner relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the banner relative to the top left corner of the screen. /// @@ -339,7 +340,7 @@ public class MaxSdkiOS : MaxSdkBase /// NOTE: The method loads the first banner ad and initiates an automated banner refresh process. /// You only need to call this method if you pause banner refresh. /// - /// Ad unit identifier of the banner to load + /// Ad unit identifier of the banner to load. Must not be null. public static void LoadBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load banner"); @@ -352,7 +353,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set the banner placement for an ad unit identifier to tie the future ad events to. /// - /// Ad unit identifier of the banner to set the placement for + /// Ad unit identifier of the banner to set the placement for. Must not be null. /// Placement to set public static void SetBannerPlacement(string adUnitIdentifier, string placement) { @@ -366,7 +367,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Starts or resumes auto-refreshing of the banner for the given ad unit identifier. /// - /// Ad unit identifier of the banner for which to start auto-refresh + /// Ad unit identifier of the banner for which to start auto-refresh. Must not be null. public static void StartBannerAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "start banner auto-refresh"); @@ -379,7 +380,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Pauses auto-refreshing of the banner for the given ad unit identifier. /// - /// Ad unit identifier of the banner for which to stop auto-refresh + /// Ad unit identifier of the banner for which to stop auto-refresh. Must not be null. public static void StopBannerAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "stop banner auto-refresh"); @@ -392,8 +393,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Updates the position of the banner to the new position provided. /// - /// The ad unit identifier of the banner for which to update the position - /// A new position for the banner + /// The ad unit identifier of the banner for which to update the position. Must not be null. + /// A new position for the banner. Must not be null. public static void UpdateBannerPosition(string adUnitIdentifier, BannerPosition bannerPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "update banner position"); @@ -406,7 +407,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Updates the position of the banner to the new coordinates provided. /// - /// The ad unit identifier of the banner for which to update the position + /// The ad unit identifier of the banner for which to update the position. Must not be null. /// The X coordinate (horizontal position) of the banner relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the banner relative to the top left corner of the screen. /// @@ -424,7 +425,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Overrides the width of the banner in points. /// - /// The ad unit identifier of the banner for which to override the width for + /// The ad unit identifier of the banner for which to override the width for. Must not be null. /// The desired width of the banner in points public static void SetBannerWidth(string adUnitIdentifier, float width) { @@ -438,7 +439,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Show banner at a position determined by the 'CreateBanner' call. /// - /// Ad unit identifier of the banner to show + /// Ad unit identifier of the banner to show. Must not be null. public static void ShowBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "show banner"); @@ -451,7 +452,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Remove banner from the ad view and destroy it. /// - /// Ad unit identifier of the banner to destroy + /// Ad unit identifier of the banner to destroy. Must not be null. public static void DestroyBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "destroy banner"); @@ -464,7 +465,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Hide banner. /// - /// Ad unit identifier of the banner to hide + /// Ad unit identifier of the banner to hide. Must not be null. public static void HideBanner(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "hide banner"); @@ -477,7 +478,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set non-transparent background color for banners to be fully functional. /// - /// Ad unit identifier of the banner to set background color for + /// Ad unit identifier of the banner to set background color for. Must not be null. /// A background color to set for the ad public static void SetBannerBackgroundColor(string adUnitIdentifier, Color color) { @@ -491,8 +492,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set an extra parameter for the banner ad. /// - /// Ad unit identifier of the banner to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the banner to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetBannerExtraParameter(string adUnitIdentifier, string key, string value) { @@ -509,8 +510,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set a local extra parameter for the banner ad. /// - /// Ad unit identifier of the banner to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the banner to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetBannerLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -533,7 +534,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// The custom data to tie the showing banner ad to, for ILRD and rewarded postbacks via the {CUSTOM_DATA} macro. Maximum size is 8KB. /// - /// Banner ad unit identifier of the banner to set the custom data for. + /// Banner ad unit identifier of the banner to set the custom data for. Must not be null. /// The custom data to be set. public static void SetBannerCustomData(string adUnitIdentifier, string customData) { @@ -548,7 +549,7 @@ public class MaxSdkiOS : MaxSdkBase /// The banner position on the screen. When setting the banner position via or , /// the banner is placed within the safe area of the screen. This returns the absolute position of the banner on screen. /// - /// Ad unit identifier of the banner for which to get the position on screen. + /// Ad unit identifier of the banner for which to get the position on screen. Must not be null. /// A representing the banner position on screen. public static Rect GetBannerLayout(string adUnitIdentifier) { @@ -567,8 +568,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Create a new MREC. /// - /// Ad unit identifier of the MREC to create - /// MREC position + /// Ad unit identifier of the MREC to create. Must not be null. + /// MREC position. Must not be null. public static void CreateMRec(string adUnitIdentifier, AdViewPosition mrecPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "create MREC"); @@ -581,7 +582,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Create a new MREC with a custom position. /// - /// Ad unit identifier of the MREC to create + /// Ad unit identifier of the MREC to create. Must not be null. /// The X coordinate (horizontal position) of the MREC relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the MREC relative to the top left corner of the screen. /// @@ -601,7 +602,7 @@ public class MaxSdkiOS : MaxSdkBase /// NOTE: The method loads the first MREC ad and initiates an automated MREC refresh process. /// You only need to call this method if you pause MREC refresh. /// - /// Ad unit identifier of the MREC to load + /// Ad unit identifier of the MREC to load. Must not be null. public static void LoadMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load MREC"); @@ -614,7 +615,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set the MREC placement for an ad unit identifier to tie the future ad events to. /// - /// Ad unit identifier of the MREC to set the placement for + /// Ad unit identifier of the MREC to set the placement for. Must not be null. /// Placement to set public static void SetMRecPlacement(string adUnitIdentifier, string placement) { @@ -628,7 +629,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Starts or resumes auto-refreshing of the MREC for the given ad unit identifier. /// - /// Ad unit identifier of the MREC for which to start auto-refresh + /// Ad unit identifier of the MREC for which to start auto-refresh. Must not be null. public static void StartMRecAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "start MREC auto-refresh"); @@ -641,7 +642,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Pauses auto-refreshing of the MREC for the given ad unit identifier. /// - /// Ad unit identifier of the MREC for which to stop auto-refresh + /// Ad unit identifier of the MREC for which to stop auto-refresh. Must not be null. public static void StopMRecAutoRefresh(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "stop MREC auto-refresh"); @@ -654,8 +655,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Updates the position of the MREC to the new position provided. /// - /// The ad unit identifier of the MREC for which to update the position - /// A new position for the MREC + /// The ad unit identifier of the MREC for which to update the position. Must not be null. + /// A new position for the MREC. Must not be null. public static void UpdateMRecPosition(string adUnitIdentifier, AdViewPosition mrecPosition) { ValidateAdUnitIdentifier(adUnitIdentifier, "update MREC position"); @@ -668,7 +669,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Updates the position of the MREC to the new coordinates provided. /// - /// The ad unit identifier of the MREC for which to update the position + /// The ad unit identifier of the MREC for which to update the position. Must not be null. /// The X coordinate (horizontal position) of the MREC relative to the top left corner of the screen. /// The Y coordinate (vertical position) of the MREC relative to the top left corner of the screen. /// @@ -686,7 +687,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Show MREC at a position determined by the 'CreateMRec' call. /// - /// Ad unit identifier of the MREC to show + /// Ad unit identifier of the MREC to show. Must not be null. public static void ShowMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "show MREC"); @@ -699,7 +700,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Remove MREC from the ad view and destroy it. /// - /// Ad unit identifier of the MREC to destroy + /// Ad unit identifier of the MREC to destroy. Must not be null. public static void DestroyMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "destroy MREC"); @@ -712,7 +713,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Hide MREC. /// - /// Ad unit identifier of the MREC to hide + /// Ad unit identifier of the MREC to hide. Must not be null. public static void HideMRec(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "hide MREC"); @@ -725,8 +726,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set an extra parameter for the MREC ad. /// - /// Ad unit identifier of the MREC to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the MREC to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetMRecExtraParameter(string adUnitIdentifier, string key, string value) { @@ -743,8 +744,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set a local extra parameter for the MREC ad. /// - /// Ad unit identifier of the MREC to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the MREC to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetMRecLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -767,7 +768,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// The custom data to tie the showing MREC ad to, for ILRD and rewarded postbacks via the {CUSTOM_DATA} macro. Maximum size is 8KB. /// - /// MREC Ad unit identifier of the banner to set the custom data for. + /// MREC Ad unit identifier of the banner to set the custom data for. Must not be null. /// The custom data to be set. public static void SetMRecCustomData(string adUnitIdentifier, string customData) { @@ -782,7 +783,7 @@ public class MaxSdkiOS : MaxSdkBase /// The MREC position on the screen. When setting the banner position via or , /// the banner is placed within the safe area of the screen. This returns the absolute position of the MREC on screen. /// - /// Ad unit identifier of the MREC for which to get the position on screen. + /// Ad unit identifier of the MREC for which to get the position on screen. Must not be null. /// A representing the banner position on screen. public static Rect GetMRecLayout(string adUnitIdentifier) { @@ -793,121 +794,6 @@ public class MaxSdkiOS : MaxSdkBase #endregion - #region Cross Promo Ads - - [DllImport("__Internal")] - private static extern void _MaxCreateCrossPromoAd(string adUnitIdentifier, float x, float y, float width, float height, float rotation); - - /// - /// Create a new cross promo ad with a custom position. - /// - /// Ad unit identifier of the cross promo ad to create - /// The X coordinate (horizontal position) of the cross promo ad relative to the top left corner of the screen. - /// The Y coordinate (vertical position) of the cross promo ad relative to the top left corner of the screen. - /// The width of the cross promo ad. - /// The height of the cross promo ad. - /// The rotation of the cross promo ad in degrees. - /// - /// The cross promo is placed within the safe area of the screen. You can use this to get the absolute position Rect of the cross promo ad on screen. - /// - public static void CreateCrossPromoAd(string adUnitIdentifier, float x, float y, float width, float height, float rotation) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "create cross promo ad"); - _MaxCreateCrossPromoAd(adUnitIdentifier, x, y, width, height, rotation); - } - - [DllImport("__Internal")] - private static extern void _MaxSetCrossPromoAdPlacement(string adUnitIdentifier, string placement); - - /// - /// Set the cross promo ad placement for an ad unit identifier to tie the future ad events to. - /// - /// Ad unit identifier of the cross promo ad to set the placement for - /// Placement to set - public static void SetCrossPromoAdPlacement(string adUnitIdentifier, string placement) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "set cross promo ad placement"); - _MaxSetCrossPromoAdPlacement(adUnitIdentifier, placement); - } - - [DllImport("__Internal")] - private static extern void _MaxUpdateCrossPromoAdPosition(string adUnitIdentifier, float x, float y, float width, float height, float rotation); - - /// - /// Updates the position of the cross promo ad to the new coordinates provided. - /// - /// The ad unit identifier of the cross promo ad for which to update the position - /// The X coordinate (horizontal position) of the cross promo ad relative to the top left corner of the screen. - /// The Y coordinate (vertical position) of the cross promo ad relative to the top left corner of the screen. - /// The width of the cross promo ad. - /// The height of the cross promo ad. - /// The rotation of the cross promo ad in degrees. - /// - /// The cross promo ad is placed within the safe area of the screen. You can use this to get the absolute position Rect of the cross promo ad on screen. - /// - public static void UpdateCrossPromoAdPosition(string adUnitIdentifier, float x, float y, float width, float height, float rotation) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "update cross promo ad position"); - _MaxUpdateCrossPromoAdPosition(adUnitIdentifier, x, y, width, height, rotation); - } - - [DllImport("__Internal")] - private static extern void _MaxShowCrossPromoAd(string adUnitIdentifier); - - /// - /// Show cross promo ad at a position determined by the 'CreateCrossPromoAd' call. - /// - /// Ad unit identifier of the cross promo ad to show - public static void ShowCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "show cross promo ad"); - _MaxShowCrossPromoAd(adUnitIdentifier); - } - - [DllImport("__Internal")] - private static extern void _MaxDestroyCrossPromoAd(string adUnitIdentifier); - - /// - /// Remove cross promo ad from the ad view and destroy it. - /// - /// Ad unit identifier of the cross promo ad to destroy - public static void DestroyCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "destroy cross promo ad"); - _MaxDestroyCrossPromoAd(adUnitIdentifier); - } - - [DllImport("__Internal")] - private static extern void _MaxHideCrossPromoAd(string adUnitIdentifier); - - /// - /// Hide cross promo ad. - /// - /// Ad unit identifier of the cross promo ad to hide - public static void HideCrossPromoAd(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "hide cross promo ad"); - _MaxHideCrossPromoAd(adUnitIdentifier); - } - - [DllImport("__Internal")] - private static extern string _MaxGetCrossPromoAdLayout(string adUnitIdentifier); - - /// - /// The cross promo ad position on the screen. When setting the cross promo ad position via or , - /// the cross promo ad is placed within the safe area of the screen. This returns the absolute position of the cross promo ad on screen. - /// - /// Ad unit identifier of the cross promo ad for which to get the position on screen. - /// A representing the banner position on screen. - public static Rect GetCrossPromoAdLayout(string adUnitIdentifier) - { - ValidateAdUnitIdentifier(adUnitIdentifier, "get cross promo ad layout"); - var positionRect = _MaxGetCrossPromoAdLayout(adUnitIdentifier); - return GetRectFromString(positionRect); - } - - #endregion - #region Interstitials [DllImport("__Internal")] @@ -916,7 +802,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Start loading an interstitial. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. public static void LoadInterstitial(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load interstitial"); @@ -929,7 +815,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Check if interstitial ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the interstitial ad to check if it's ready to be displayed. + /// Ad unit identifier of the interstitial ad to check if it's ready to be displayed. Must not be null. /// True if the ad is ready to be displayed public static bool IsInterstitialReady(string adUnitIdentifier) { @@ -943,7 +829,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Present loaded interstitial for a given placement to tie ad events to. Note: if the interstitial is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowInterstitial(string adUnitIdentifier, string placement = null, string customData = null) @@ -966,8 +852,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the interstitial to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the interstitial to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetInterstitialExtraParameter(string adUnitIdentifier, string key, string value) { @@ -984,8 +870,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the interstitial to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the interstitial to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetInterstitialLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1012,7 +898,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Start loading an app open ad. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. public static void LoadAppOpenAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load app open ad"); @@ -1025,7 +911,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Check if app open ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the app open ad ad to check if it's ready to be displayed. + /// Ad unit identifier of the app open ad ad to check if it's ready to be displayed. Must not be null. /// True if the ad is ready to be displayed public static bool IsAppOpenAdReady(string adUnitIdentifier) { @@ -1039,7 +925,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Present loaded app open ad for a given placement to tie ad events to. Note: if the app open ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the app open ad to load + /// Ad unit identifier of the app open ad to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowAppOpenAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1062,8 +948,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the app open ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the app open ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetAppOpenAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1080,8 +966,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the app open ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the app open ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetAppOpenAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1108,7 +994,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Start loading an rewarded ad. /// - /// Ad unit identifier of the rewarded ad to load + /// Ad unit identifier of the rewarded ad to load. Must not be null. public static void LoadRewardedAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load rewarded ad"); @@ -1121,7 +1007,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Check if rewarded ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the rewarded ad to check if it's ready to be displayed. + /// Ad unit identifier of the rewarded ad to check if it's ready to be displayed. Must not be null. /// True if the ad is ready to be displayed public static bool IsRewardedAdReady(string adUnitIdentifier) { @@ -1135,7 +1021,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Present loaded rewarded ad for a given placement to tie ad events to. Note: if the rewarded ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the interstitial to load + /// Ad unit identifier of the interstitial to load. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowRewardedAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1158,8 +1044,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the rewarded ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the rewarded ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetRewardedAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1176,8 +1062,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the rewarded ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the rewarded ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetRewardedAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1204,7 +1090,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Start loading an rewarded interstitial ad. /// - /// Ad unit identifier of the rewarded interstitial ad to load + /// Ad unit identifier of the rewarded interstitial ad to load. Must not be null. public static void LoadRewardedInterstitialAd(string adUnitIdentifier) { ValidateAdUnitIdentifier(adUnitIdentifier, "load rewarded interstitial ad"); @@ -1217,7 +1103,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Check if rewarded interstitial ad ad is loaded and ready to be displayed. /// - /// Ad unit identifier of the rewarded interstitial ad to check if it's ready to be displayed + /// Ad unit identifier of the rewarded interstitial ad to check if it's ready to be displayed. Must not be null. /// True if the ad is ready to be displayed public static bool IsRewardedInterstitialAdReady(string adUnitIdentifier) { @@ -1231,7 +1117,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Present loaded rewarded interstitial ad for a given placement to tie ad events to. Note: if the rewarded interstitial ad is not ready to be displayed nothing will happen. /// - /// Ad unit identifier of the rewarded interstitial to show + /// Ad unit identifier of the rewarded interstitial to show. Must not be null. /// The placement to tie the showing ad's events to /// The custom data to tie the showing ad's events to. Maximum size is 8KB. public static void ShowRewardedInterstitialAd(string adUnitIdentifier, string placement = null, string customData = null) @@ -1254,8 +1140,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set an extra parameter for the ad. /// - /// Ad unit identifier of the rewarded interstitial ad to set the extra parameter for. - /// The key for the extra parameter. + /// Ad unit identifier of the rewarded interstitial ad to set the extra parameter for. Must not be null. + /// The key for the extra parameter. Must not be null. /// The value for the extra parameter. public static void SetRewardedInterstitialAdExtraParameter(string adUnitIdentifier, string key, string value) { @@ -1272,8 +1158,8 @@ public class MaxSdkiOS : MaxSdkBase /// /// Set a local extra parameter for the ad. /// - /// Ad unit identifier of the rewarded interstitial ad to set the local extra parameter for. - /// The key for the local extra parameter. + /// Ad unit identifier of the rewarded interstitial ad to set the local extra parameter for. Must not be null. + /// The key for the local extra parameter. Must not be null. /// The value for the local extra parameter. Accepts the following types: , null, IList, IDictionary, string, primitive types public static void SetRewardedInterstitialAdLocalExtraParameter(string adUnitIdentifier, string key, object value) { @@ -1300,7 +1186,7 @@ public class MaxSdkiOS : MaxSdkBase /// /// Track an event using AppLovin. /// - /// An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework. + /// An event from the list of pre-defined events may be found in MaxEvents.cs as part of the AppLovin SDK framework. Must not be null. /// A dictionary containing key-value pairs further describing this event. public static void TrackEvent(string name, IDictionary parameters = null) { @@ -1431,6 +1317,30 @@ public class MaxSdkiOS : MaxSdkBase _MaxSetExtraParameter(key, value); } + [DllImport("__Internal")] + private static extern IntPtr _MaxGetSafeAreaInsets(); + + /// + /// Get the native insets in pixels for the safe area. + /// These insets are used to position ads within the safe area of the screen. + /// + public static SafeAreaInsets GetSafeAreaInsets() + { + // Use an int array instead of json serialization for performance + var insetsPtr = _MaxGetSafeAreaInsets(); + var insets = new int[4]; + Marshal.Copy(insetsPtr, insets, 0, 4); + + // Convert from points to pixels + var screenDensity = MaxSdkUtils.GetScreenDensity(); + for (var i = 0; i < insets.Length; i++) + { + insets[i] *= (int) screenDensity; + } + + return new SafeAreaInsets(insets); + } + #endregion #region Private diff --git a/Mediation.meta b/Mediation.meta deleted file mode 100644 index 3f88ba8..0000000 --- a/Mediation.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bf43583e6cbdf4100992c490f06b0236 -labels: -- al_max -- al_max_export_path-MaxSdk/Mediation -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: From c4b9758d34d1479c19712d3f396aaf429c3e8d47 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 17 Apr 2024 13:09:43 +0800 Subject: [PATCH 18/30] =?UTF-8?q?update:=20=E8=B7=9F=E6=96=B0=20meta=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/AppLovinInitialize.cs.meta | 14 ++++++++++++++ .../Editor/AppLovinMenuItems.cs.meta | 14 ++++++++++++++ .../Editor/AppLovinPostProcessAndroid.cs.meta | 14 ++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs.meta create mode 100644 MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta create mode 100644 MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs.meta diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs.meta new file mode 100644 index 0000000..fb8a55c --- /dev/null +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 6b7dce7fe193a4058bc51d9f4d3a2aed +labels: +- al_max +- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta new file mode 100644 index 0000000..30fb834 --- /dev/null +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 02c2d277874f649d18a59d382420bf65 +labels: +- al_max +- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs.meta new file mode 100644 index 0000000..2877140 --- /dev/null +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: c01ea79d0cb2a43c093e2fd07201df9e +labels: +- al_max +- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 117ba6a042a340aadfa1094a56d99a9be88ff219 Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 18 Apr 2024 01:20:33 +0800 Subject: [PATCH 19/30] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=20Mediation?= =?UTF-8?q?=20=E6=96=87=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MaxSdk/Mediation.meta => Mediation.meta | 0 {MaxSdk/Mediation => Mediation}/BidMachine.meta | 0 {MaxSdk/Mediation => Mediation}/BidMachine/Editor.meta | 0 .../Mediation => Mediation}/BidMachine/Editor/Dependencies.xml | 0 .../BidMachine/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/ByteDance.meta | 0 {MaxSdk/Mediation => Mediation}/ByteDance/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/ByteDance/Editor/Dependencies.xml | 0 .../ByteDance/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Chartboost.meta | 0 {MaxSdk/Mediation => Mediation}/Chartboost/Editor.meta | 0 .../Mediation => Mediation}/Chartboost/Editor/Dependencies.xml | 0 .../Chartboost/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Facebook.meta | 0 {MaxSdk/Mediation => Mediation}/Facebook/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Facebook/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Facebook/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Fyber.meta | 0 {MaxSdk/Mediation => Mediation}/Fyber/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Fyber/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Fyber/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Google.meta | 0 {MaxSdk/Mediation => Mediation}/Google/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Google/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Google/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/GoogleAdManager.meta | 0 {MaxSdk/Mediation => Mediation}/GoogleAdManager/Editor.meta | 0 .../GoogleAdManager/Editor/Dependencies.xml | 0 .../GoogleAdManager/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/InMobi.meta | 0 {MaxSdk/Mediation => Mediation}/InMobi/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/InMobi/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/InMobi/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/IronSource.meta | 0 {MaxSdk/Mediation => Mediation}/IronSource/Editor.meta | 0 .../Mediation => Mediation}/IronSource/Editor/Dependencies.xml | 0 .../IronSource/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/MediationAdapters.txt | 0 {MaxSdk/Mediation => Mediation}/MediationAdapters.txt.meta | 0 {MaxSdk/Mediation => Mediation}/Mintegral.meta | 0 {MaxSdk/Mediation => Mediation}/Mintegral/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Mintegral/Editor/Dependencies.xml | 0 .../Mintegral/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/MobileFuse.meta | 0 {MaxSdk/Mediation => Mediation}/MobileFuse/Editor.meta | 0 .../Mediation => Mediation}/MobileFuse/Editor/Dependencies.xml | 0 .../MobileFuse/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/OguryPresage.meta | 0 {MaxSdk/Mediation => Mediation}/OguryPresage/Editor.meta | 0 .../Mediation => Mediation}/OguryPresage/Editor/Dependencies.xml | 0 .../OguryPresage/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Smaato.meta | 0 {MaxSdk/Mediation => Mediation}/Smaato/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Smaato/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Smaato/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/UnityAds.meta | 0 {MaxSdk/Mediation => Mediation}/UnityAds/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/UnityAds/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/UnityAds/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Verve.meta | 0 {MaxSdk/Mediation => Mediation}/Verve/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Verve/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Verve/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Vungle.meta | 0 {MaxSdk/Mediation => Mediation}/Vungle/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Vungle/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Vungle/Editor/Dependencies.xml.meta | 0 {MaxSdk/Mediation => Mediation}/Yandex.meta | 0 {MaxSdk/Mediation => Mediation}/Yandex/Editor.meta | 0 {MaxSdk/Mediation => Mediation}/Yandex/Editor/Dependencies.xml | 0 .../Mediation => Mediation}/Yandex/Editor/Dependencies.xml.meta | 0 71 files changed, 0 insertions(+), 0 deletions(-) rename MaxSdk/Mediation.meta => Mediation.meta (100%) rename {MaxSdk/Mediation => Mediation}/BidMachine.meta (100%) rename {MaxSdk/Mediation => Mediation}/BidMachine/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/BidMachine/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/BidMachine/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/ByteDance.meta (100%) rename {MaxSdk/Mediation => Mediation}/ByteDance/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/ByteDance/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/ByteDance/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Chartboost.meta (100%) rename {MaxSdk/Mediation => Mediation}/Chartboost/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Chartboost/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Chartboost/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Facebook.meta (100%) rename {MaxSdk/Mediation => Mediation}/Facebook/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Facebook/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Facebook/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Fyber.meta (100%) rename {MaxSdk/Mediation => Mediation}/Fyber/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Fyber/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Fyber/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Google.meta (100%) rename {MaxSdk/Mediation => Mediation}/Google/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Google/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Google/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/GoogleAdManager.meta (100%) rename {MaxSdk/Mediation => Mediation}/GoogleAdManager/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/GoogleAdManager/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/GoogleAdManager/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/InMobi.meta (100%) rename {MaxSdk/Mediation => Mediation}/InMobi/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/InMobi/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/InMobi/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/IronSource.meta (100%) rename {MaxSdk/Mediation => Mediation}/IronSource/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/IronSource/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/IronSource/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/MediationAdapters.txt (100%) rename {MaxSdk/Mediation => Mediation}/MediationAdapters.txt.meta (100%) rename {MaxSdk/Mediation => Mediation}/Mintegral.meta (100%) rename {MaxSdk/Mediation => Mediation}/Mintegral/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Mintegral/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Mintegral/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/MobileFuse.meta (100%) rename {MaxSdk/Mediation => Mediation}/MobileFuse/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/MobileFuse/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/MobileFuse/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/OguryPresage.meta (100%) rename {MaxSdk/Mediation => Mediation}/OguryPresage/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/OguryPresage/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/OguryPresage/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Smaato.meta (100%) rename {MaxSdk/Mediation => Mediation}/Smaato/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Smaato/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Smaato/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/UnityAds.meta (100%) rename {MaxSdk/Mediation => Mediation}/UnityAds/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/UnityAds/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/UnityAds/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Verve.meta (100%) rename {MaxSdk/Mediation => Mediation}/Verve/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Verve/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Verve/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Vungle.meta (100%) rename {MaxSdk/Mediation => Mediation}/Vungle/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Vungle/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Vungle/Editor/Dependencies.xml.meta (100%) rename {MaxSdk/Mediation => Mediation}/Yandex.meta (100%) rename {MaxSdk/Mediation => Mediation}/Yandex/Editor.meta (100%) rename {MaxSdk/Mediation => Mediation}/Yandex/Editor/Dependencies.xml (100%) rename {MaxSdk/Mediation => Mediation}/Yandex/Editor/Dependencies.xml.meta (100%) diff --git a/MaxSdk/Mediation.meta b/Mediation.meta similarity index 100% rename from MaxSdk/Mediation.meta rename to Mediation.meta diff --git a/MaxSdk/Mediation/BidMachine.meta b/Mediation/BidMachine.meta similarity index 100% rename from MaxSdk/Mediation/BidMachine.meta rename to Mediation/BidMachine.meta diff --git a/MaxSdk/Mediation/BidMachine/Editor.meta b/Mediation/BidMachine/Editor.meta similarity index 100% rename from MaxSdk/Mediation/BidMachine/Editor.meta rename to Mediation/BidMachine/Editor.meta diff --git a/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml b/Mediation/BidMachine/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml rename to Mediation/BidMachine/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml.meta b/Mediation/BidMachine/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml.meta rename to Mediation/BidMachine/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/ByteDance.meta b/Mediation/ByteDance.meta similarity index 100% rename from MaxSdk/Mediation/ByteDance.meta rename to Mediation/ByteDance.meta diff --git a/MaxSdk/Mediation/ByteDance/Editor.meta b/Mediation/ByteDance/Editor.meta similarity index 100% rename from MaxSdk/Mediation/ByteDance/Editor.meta rename to Mediation/ByteDance/Editor.meta diff --git a/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml b/Mediation/ByteDance/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml rename to Mediation/ByteDance/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml.meta b/Mediation/ByteDance/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml.meta rename to Mediation/ByteDance/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Chartboost.meta b/Mediation/Chartboost.meta similarity index 100% rename from MaxSdk/Mediation/Chartboost.meta rename to Mediation/Chartboost.meta diff --git a/MaxSdk/Mediation/Chartboost/Editor.meta b/Mediation/Chartboost/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Chartboost/Editor.meta rename to Mediation/Chartboost/Editor.meta diff --git a/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml b/Mediation/Chartboost/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml rename to Mediation/Chartboost/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml.meta b/Mediation/Chartboost/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml.meta rename to Mediation/Chartboost/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Facebook.meta b/Mediation/Facebook.meta similarity index 100% rename from MaxSdk/Mediation/Facebook.meta rename to Mediation/Facebook.meta diff --git a/MaxSdk/Mediation/Facebook/Editor.meta b/Mediation/Facebook/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Facebook/Editor.meta rename to Mediation/Facebook/Editor.meta diff --git a/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml b/Mediation/Facebook/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Facebook/Editor/Dependencies.xml rename to Mediation/Facebook/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml.meta b/Mediation/Facebook/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Facebook/Editor/Dependencies.xml.meta rename to Mediation/Facebook/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Fyber.meta b/Mediation/Fyber.meta similarity index 100% rename from MaxSdk/Mediation/Fyber.meta rename to Mediation/Fyber.meta diff --git a/MaxSdk/Mediation/Fyber/Editor.meta b/Mediation/Fyber/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Fyber/Editor.meta rename to Mediation/Fyber/Editor.meta diff --git a/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml b/Mediation/Fyber/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Fyber/Editor/Dependencies.xml rename to Mediation/Fyber/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml.meta b/Mediation/Fyber/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Fyber/Editor/Dependencies.xml.meta rename to Mediation/Fyber/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Google.meta b/Mediation/Google.meta similarity index 100% rename from MaxSdk/Mediation/Google.meta rename to Mediation/Google.meta diff --git a/MaxSdk/Mediation/Google/Editor.meta b/Mediation/Google/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Google/Editor.meta rename to Mediation/Google/Editor.meta diff --git a/MaxSdk/Mediation/Google/Editor/Dependencies.xml b/Mediation/Google/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Google/Editor/Dependencies.xml rename to Mediation/Google/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta b/Mediation/Google/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta rename to Mediation/Google/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/GoogleAdManager.meta b/Mediation/GoogleAdManager.meta similarity index 100% rename from MaxSdk/Mediation/GoogleAdManager.meta rename to Mediation/GoogleAdManager.meta diff --git a/MaxSdk/Mediation/GoogleAdManager/Editor.meta b/Mediation/GoogleAdManager/Editor.meta similarity index 100% rename from MaxSdk/Mediation/GoogleAdManager/Editor.meta rename to Mediation/GoogleAdManager/Editor.meta diff --git a/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml b/Mediation/GoogleAdManager/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml rename to Mediation/GoogleAdManager/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta rename to Mediation/GoogleAdManager/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/InMobi.meta b/Mediation/InMobi.meta similarity index 100% rename from MaxSdk/Mediation/InMobi.meta rename to Mediation/InMobi.meta diff --git a/MaxSdk/Mediation/InMobi/Editor.meta b/Mediation/InMobi/Editor.meta similarity index 100% rename from MaxSdk/Mediation/InMobi/Editor.meta rename to Mediation/InMobi/Editor.meta diff --git a/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml b/Mediation/InMobi/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/InMobi/Editor/Dependencies.xml rename to Mediation/InMobi/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml.meta b/Mediation/InMobi/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/InMobi/Editor/Dependencies.xml.meta rename to Mediation/InMobi/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/IronSource.meta b/Mediation/IronSource.meta similarity index 100% rename from MaxSdk/Mediation/IronSource.meta rename to Mediation/IronSource.meta diff --git a/MaxSdk/Mediation/IronSource/Editor.meta b/Mediation/IronSource/Editor.meta similarity index 100% rename from MaxSdk/Mediation/IronSource/Editor.meta rename to Mediation/IronSource/Editor.meta diff --git a/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml b/Mediation/IronSource/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/IronSource/Editor/Dependencies.xml rename to Mediation/IronSource/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml.meta b/Mediation/IronSource/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/IronSource/Editor/Dependencies.xml.meta rename to Mediation/IronSource/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/MediationAdapters.txt b/Mediation/MediationAdapters.txt similarity index 100% rename from MaxSdk/Mediation/MediationAdapters.txt rename to Mediation/MediationAdapters.txt diff --git a/MaxSdk/Mediation/MediationAdapters.txt.meta b/Mediation/MediationAdapters.txt.meta similarity index 100% rename from MaxSdk/Mediation/MediationAdapters.txt.meta rename to Mediation/MediationAdapters.txt.meta diff --git a/MaxSdk/Mediation/Mintegral.meta b/Mediation/Mintegral.meta similarity index 100% rename from MaxSdk/Mediation/Mintegral.meta rename to Mediation/Mintegral.meta diff --git a/MaxSdk/Mediation/Mintegral/Editor.meta b/Mediation/Mintegral/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Mintegral/Editor.meta rename to Mediation/Mintegral/Editor.meta diff --git a/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml b/Mediation/Mintegral/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml rename to Mediation/Mintegral/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml.meta b/Mediation/Mintegral/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml.meta rename to Mediation/Mintegral/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/MobileFuse.meta b/Mediation/MobileFuse.meta similarity index 100% rename from MaxSdk/Mediation/MobileFuse.meta rename to Mediation/MobileFuse.meta diff --git a/MaxSdk/Mediation/MobileFuse/Editor.meta b/Mediation/MobileFuse/Editor.meta similarity index 100% rename from MaxSdk/Mediation/MobileFuse/Editor.meta rename to Mediation/MobileFuse/Editor.meta diff --git a/MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml b/Mediation/MobileFuse/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml rename to Mediation/MobileFuse/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml.meta b/Mediation/MobileFuse/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml.meta rename to Mediation/MobileFuse/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/OguryPresage.meta b/Mediation/OguryPresage.meta similarity index 100% rename from MaxSdk/Mediation/OguryPresage.meta rename to Mediation/OguryPresage.meta diff --git a/MaxSdk/Mediation/OguryPresage/Editor.meta b/Mediation/OguryPresage/Editor.meta similarity index 100% rename from MaxSdk/Mediation/OguryPresage/Editor.meta rename to Mediation/OguryPresage/Editor.meta diff --git a/MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml b/Mediation/OguryPresage/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml rename to Mediation/OguryPresage/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml.meta b/Mediation/OguryPresage/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml.meta rename to Mediation/OguryPresage/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Smaato.meta b/Mediation/Smaato.meta similarity index 100% rename from MaxSdk/Mediation/Smaato.meta rename to Mediation/Smaato.meta diff --git a/MaxSdk/Mediation/Smaato/Editor.meta b/Mediation/Smaato/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Smaato/Editor.meta rename to Mediation/Smaato/Editor.meta diff --git a/MaxSdk/Mediation/Smaato/Editor/Dependencies.xml b/Mediation/Smaato/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Smaato/Editor/Dependencies.xml rename to Mediation/Smaato/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Smaato/Editor/Dependencies.xml.meta b/Mediation/Smaato/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Smaato/Editor/Dependencies.xml.meta rename to Mediation/Smaato/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/UnityAds.meta b/Mediation/UnityAds.meta similarity index 100% rename from MaxSdk/Mediation/UnityAds.meta rename to Mediation/UnityAds.meta diff --git a/MaxSdk/Mediation/UnityAds/Editor.meta b/Mediation/UnityAds/Editor.meta similarity index 100% rename from MaxSdk/Mediation/UnityAds/Editor.meta rename to Mediation/UnityAds/Editor.meta diff --git a/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml b/Mediation/UnityAds/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml rename to Mediation/UnityAds/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml.meta b/Mediation/UnityAds/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml.meta rename to Mediation/UnityAds/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Verve.meta b/Mediation/Verve.meta similarity index 100% rename from MaxSdk/Mediation/Verve.meta rename to Mediation/Verve.meta diff --git a/MaxSdk/Mediation/Verve/Editor.meta b/Mediation/Verve/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Verve/Editor.meta rename to Mediation/Verve/Editor.meta diff --git a/MaxSdk/Mediation/Verve/Editor/Dependencies.xml b/Mediation/Verve/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Verve/Editor/Dependencies.xml rename to Mediation/Verve/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Verve/Editor/Dependencies.xml.meta b/Mediation/Verve/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Verve/Editor/Dependencies.xml.meta rename to Mediation/Verve/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Vungle.meta b/Mediation/Vungle.meta similarity index 100% rename from MaxSdk/Mediation/Vungle.meta rename to Mediation/Vungle.meta diff --git a/MaxSdk/Mediation/Vungle/Editor.meta b/Mediation/Vungle/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Vungle/Editor.meta rename to Mediation/Vungle/Editor.meta diff --git a/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml b/Mediation/Vungle/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Vungle/Editor/Dependencies.xml rename to Mediation/Vungle/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml.meta b/Mediation/Vungle/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Vungle/Editor/Dependencies.xml.meta rename to Mediation/Vungle/Editor/Dependencies.xml.meta diff --git a/MaxSdk/Mediation/Yandex.meta b/Mediation/Yandex.meta similarity index 100% rename from MaxSdk/Mediation/Yandex.meta rename to Mediation/Yandex.meta diff --git a/MaxSdk/Mediation/Yandex/Editor.meta b/Mediation/Yandex/Editor.meta similarity index 100% rename from MaxSdk/Mediation/Yandex/Editor.meta rename to Mediation/Yandex/Editor.meta diff --git a/MaxSdk/Mediation/Yandex/Editor/Dependencies.xml b/Mediation/Yandex/Editor/Dependencies.xml similarity index 100% rename from MaxSdk/Mediation/Yandex/Editor/Dependencies.xml rename to Mediation/Yandex/Editor/Dependencies.xml diff --git a/MaxSdk/Mediation/Yandex/Editor/Dependencies.xml.meta b/Mediation/Yandex/Editor/Dependencies.xml.meta similarity index 100% rename from MaxSdk/Mediation/Yandex/Editor/Dependencies.xml.meta rename to Mediation/Yandex/Editor/Dependencies.xml.meta From 05e4151936a8cf2ddec2cda49bc9df1eab33264f Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 18 Apr 2024 01:59:46 +0800 Subject: [PATCH 20/30] update: fix Yandex ios version and add Fyber's PrivacyInfo --- Mediation/Fyber/Editor/PrivacyInfo.xcprivacy | 102 ++++++++++++++++++ .../Fyber/Editor/PrivacyInfo.xcprivacy.meta | 3 + 2 files changed, 105 insertions(+) create mode 100644 Mediation/Fyber/Editor/PrivacyInfo.xcprivacy create mode 100644 Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta diff --git a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..f33055a --- /dev/null +++ b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy @@ -0,0 +1,102 @@ + + + + + NSPrivacyTrackingDomains + + NSPrivacyCollectedDataTypes + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherDataTypes + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeCrashData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAppFunctionality + NSPrivacyCollectedDataTypePurposeAnalytics + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeOtherUsageData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeAdvertisingData + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeDeviceID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyCollectedDataType + NSPrivacyCollectedDataTypeUserID + NSPrivacyCollectedDataTypeLinked + + NSPrivacyCollectedDataTypeTracking + + NSPrivacyCollectedDataTypePurposes + + NSPrivacyCollectedDataTypePurposeAnalytics + NSPrivacyCollectedDataTypePurposeThirdPartyAdvertising + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPITypeReasons + + CA92.1 + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + + + NSPrivacyTracking + + + diff --git a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta new file mode 100644 index 0000000..f27906b --- /dev/null +++ b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 30d7cc218481416e8081eb5ddd21418a +timeCreated: 1713376528 \ No newline at end of file From 65db3fbab5a8b0f4c8bd8e9d74dcb7dddc91ecfe Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 18 Apr 2024 09:46:40 +0800 Subject: [PATCH 21/30] =?UTF-8?q?update:=20=E4=BF=AE=E6=94=B9=20Admob=20?= =?UTF-8?q?=E5=B9=BF=E5=91=8A=E7=89=88=E6=9C=AC,=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=AC=E6=89=93=E5=8C=85=E6=8A=A5=E9=94=99?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mediation/Google/Editor/Dependencies.xml | 2 +- Mediation/GoogleAdManager/Editor/Dependencies.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mediation/Google/Editor/Dependencies.xml b/Mediation/Google/Editor/Dependencies.xml index fa65a71..7117a84 100644 --- a/Mediation/Google/Editor/Dependencies.xml +++ b/Mediation/Google/Editor/Dependencies.xml @@ -5,6 +5,6 @@ - + diff --git a/Mediation/GoogleAdManager/Editor/Dependencies.xml b/Mediation/GoogleAdManager/Editor/Dependencies.xml index 4b09798..635f9cb 100644 --- a/Mediation/GoogleAdManager/Editor/Dependencies.xml +++ b/Mediation/GoogleAdManager/Editor/Dependencies.xml @@ -5,6 +5,6 @@ - + From b3b62bacacf2e46f4ff3593e7ce9465939a952aa Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 18 Apr 2024 17:42:45 +0800 Subject: [PATCH 22/30] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=20AppLovin?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81=E7=89=87=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Editor/AppLovinIntegrationManager.cs | 9 ++++++--- ...ppLovinMenuItems.cs => AppLovinMenuItems.cs.backup} | 0 ...uItems.cs.meta => AppLovinMenuItems.cs.backup.meta} | 10 +++------- 3 files changed, 9 insertions(+), 10 deletions(-) rename MaxSdk/Scripts/IntegrationManager/Editor/{AppLovinMenuItems.cs => AppLovinMenuItems.cs.backup} (100%) rename MaxSdk/Scripts/IntegrationManager/Editor/{AppLovinMenuItems.cs.meta => AppLovinMenuItems.cs.backup.meta} (52%) diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs index 1536e66..09634ae 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs @@ -184,10 +184,13 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor /// /// Whether or not the plugin is under the Assets/ folder. /// +//--- INJECT PluginOutside START --- public static bool IsPluginOutsideAssetsDirectory - { - get { return !PluginParentDirectory.StartsWith("Assets"); } - } + { get => !(PluginParentDirectory.StartsWith("Assets") || PluginParentDirectory.StartsWith("Packages")); } +//--- INJECT PluginOutside OVER --- +// { +// get { return !PluginParentDirectory.StartsWith("Assets"); } +// } ///
/// Whether or not gradle build system is enabled. diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup similarity index 100% rename from MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta similarity index 52% rename from MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta index 30fb834..0749642 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta @@ -1,14 +1,10 @@ fileFormatVersion: 2 -guid: 02c2d277874f649d18a59d382420bf65 +guid: 028aec80942df459ab226487b786042c labels: - al_max -- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs -MonoImporter: +- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup +DefaultImporter: externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: From f5d927536d9bbb61ca2ade5a8f28fcb31342cf96 Mon Sep 17 00:00:00 2001 From: huyufei Date: Mon, 17 Jun 2024 08:41:42 +0800 Subject: [PATCH 23/30] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0Mediation=20?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MaxSdk/{Mediation~HEAD => Mediation} | 0 MaxSdk/Mediation.meta | 11 +++++++ Mediation/BidMachine.meta | 3 +- Mediation/BidMachine/Editor.meta | 3 +- .../BidMachine/Editor/Dependencies.xml.meta | 3 +- Mediation/ByteDance.meta | 3 +- Mediation/ByteDance/Editor.meta | 3 +- .../ByteDance/Editor/Dependencies.xml.meta | 3 +- Mediation/Chartboost.meta | 3 +- Mediation/Chartboost/Editor.meta | 3 +- .../Chartboost/Editor/Dependencies.xml.meta | 3 +- Mediation/Facebook.meta | 3 +- Mediation/Facebook/Editor.meta | 3 +- .../Facebook/Editor/Dependencies.xml.meta | 3 +- Mediation/Fyber.meta | 3 +- Mediation/Fyber/Editor.meta | 3 +- Mediation/Fyber/Editor/Dependencies.xml.meta | 3 +- .../Fyber/Editor/PrivacyInfo.xcprivacy.meta | 31 +++++++++++++++++-- Mediation/Google.meta | 3 +- Mediation/Google/Editor.meta | 3 +- Mediation/Google/Editor/Dependencies.xml.meta | 3 +- Mediation/GoogleAdManager.meta | 3 +- Mediation/GoogleAdManager/Editor.meta | 3 +- .../Editor/Dependencies.xml.meta | 3 +- Mediation/InMobi.meta | 3 +- Mediation/InMobi/Editor.meta | 3 +- Mediation/InMobi/Editor/Dependencies.xml.meta | 3 +- Mediation/IronSource.meta | 3 +- Mediation/IronSource/Editor.meta | 3 +- .../IronSource/Editor/Dependencies.xml.meta | 3 +- Mediation/MediationAdapters.txt.meta | 9 ++++-- Mediation/Mintegral.meta | 3 +- Mediation/Mintegral/Editor.meta | 3 +- .../Mintegral/Editor/Dependencies.xml.meta | 3 +- Mediation/MobileFuse.meta | 3 +- Mediation/MobileFuse/Editor.meta | 3 +- .../MobileFuse/Editor/Dependencies.xml.meta | 3 +- Mediation/OguryPresage.meta | 3 +- Mediation/OguryPresage/Editor.meta | 3 +- .../OguryPresage/Editor/Dependencies.xml.meta | 3 +- Mediation/Smaato.meta | 3 +- Mediation/Smaato/Editor.meta | 3 +- Mediation/Smaato/Editor/Dependencies.xml.meta | 3 +- Mediation/UnityAds.meta | 3 +- Mediation/UnityAds/Editor.meta | 3 +- .../UnityAds/Editor/Dependencies.xml.meta | 3 +- Mediation/Verve.meta | 3 +- Mediation/Verve/Editor.meta | 3 +- Mediation/Verve/Editor/Dependencies.xml.meta | 3 +- Mediation/Vungle.meta | 3 +- Mediation/Vungle/Editor.meta | 3 +- Mediation/Vungle/Editor/Dependencies.xml.meta | 3 +- Mediation/Yandex.meta | 3 +- Mediation/Yandex/Editor.meta | 3 +- Mediation/Yandex/Editor/Dependencies.xml.meta | 3 +- 55 files changed, 149 insertions(+), 55 deletions(-) rename MaxSdk/{Mediation~HEAD => Mediation} (100%) create mode 100644 MaxSdk/Mediation.meta diff --git a/MaxSdk/Mediation~HEAD b/MaxSdk/Mediation similarity index 100% rename from MaxSdk/Mediation~HEAD rename to MaxSdk/Mediation diff --git a/MaxSdk/Mediation.meta b/MaxSdk/Mediation.meta new file mode 100644 index 0000000..8d173aa --- /dev/null +++ b/MaxSdk/Mediation.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b49a3a3626ac24d289ced4c76184be8d +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mediation/BidMachine.meta b/Mediation/BidMachine.meta index f6fac18..0fcdafd 100644 --- a/Mediation/BidMachine.meta +++ b/Mediation/BidMachine.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 6b9d9d3ca994442dcb2c1abcd31077ad +guid: ef04dde3d80394693b97aba6bf4e2043 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine +- al_max_export_path-MaxSdk/Mediation~HEAD/BidMachine folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/BidMachine/Editor.meta b/Mediation/BidMachine/Editor.meta index 0f3541e..312d62d 100644 --- a/Mediation/BidMachine/Editor.meta +++ b/Mediation/BidMachine/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 527c65004f8c84edbb4c14b8a2a04c5d +guid: 1e265a814936d4d91b402d94d1ef176f labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/BidMachine/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/BidMachine/Editor/Dependencies.xml.meta b/Mediation/BidMachine/Editor/Dependencies.xml.meta index 81f22af..65c7e84 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml.meta +++ b/Mediation/BidMachine/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 98a383532dccb495aa31190874842cbe +guid: 5004667ee59064c0598e9e12aa1b90f9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/BidMachine/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/ByteDance.meta b/Mediation/ByteDance.meta index 386938c..1e0a086 100644 --- a/Mediation/ByteDance.meta +++ b/Mediation/ByteDance.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: a0fd9165dea16454ea59da2bf05462d2 +guid: 4c565d72fc59a44ee8a7b0b01944da99 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance +- al_max_export_path-MaxSdk/Mediation~HEAD/ByteDance folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/ByteDance/Editor.meta b/Mediation/ByteDance/Editor.meta index e54a766..324944d 100644 --- a/Mediation/ByteDance/Editor.meta +++ b/Mediation/ByteDance/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: ef8467ffb0e4447b79a8804884a7520a +guid: 2bab5733093d84253a54126c0fde0044 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/ByteDance/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/ByteDance/Editor/Dependencies.xml.meta b/Mediation/ByteDance/Editor/Dependencies.xml.meta index 5205233..fc8ed34 100644 --- a/Mediation/ByteDance/Editor/Dependencies.xml.meta +++ b/Mediation/ByteDance/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 0828555cb1ce94702a4af6f3dce3d735 +guid: 2a9fe4b4b4c29455a88fe447e654b991 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/ByteDance/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Chartboost.meta b/Mediation/Chartboost.meta index fa1c98a..c8ce5fc 100644 --- a/Mediation/Chartboost.meta +++ b/Mediation/Chartboost.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 3647332764da440ae8d4de79ebf72832 +guid: 3720d1ce9b160432187c6dacef4b9370 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost +- al_max_export_path-MaxSdk/Mediation~HEAD/Chartboost folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Chartboost/Editor.meta b/Mediation/Chartboost/Editor.meta index 38bff8d..bd9656e 100644 --- a/Mediation/Chartboost/Editor.meta +++ b/Mediation/Chartboost/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: a90f13141c35746f5a2996c8ad068fe9 +guid: 82f22185cdb654c04836a4fd200201e4 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Chartboost/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Chartboost/Editor/Dependencies.xml.meta b/Mediation/Chartboost/Editor/Dependencies.xml.meta index 02628eb..8a7b888 100644 --- a/Mediation/Chartboost/Editor/Dependencies.xml.meta +++ b/Mediation/Chartboost/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 93b0a4618bd884871af0981a7867bb2f +guid: 9161fa56d0493406a993a9e823325e72 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Chartboost/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Facebook.meta b/Mediation/Facebook.meta index 242605e..ac6cac9 100644 --- a/Mediation/Facebook.meta +++ b/Mediation/Facebook.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 27b0caf5a05a845018297e973b16537e +guid: 1eef95c344aae49a5bb8428ff0ba76dc labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook +- al_max_export_path-MaxSdk/Mediation~HEAD/Facebook folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Facebook/Editor.meta b/Mediation/Facebook/Editor.meta index 4beff5e..6465fad 100644 --- a/Mediation/Facebook/Editor.meta +++ b/Mediation/Facebook/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 28880992a399a48b7abe95b66649d711 +guid: f8555a3feb92149ada8f408e4d7915ed labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Facebook/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Facebook/Editor/Dependencies.xml.meta b/Mediation/Facebook/Editor/Dependencies.xml.meta index 69b5d2c..5bd3a48 100644 --- a/Mediation/Facebook/Editor/Dependencies.xml.meta +++ b/Mediation/Facebook/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: aea9bdf974328420db5ae118ef0d2b87 +guid: de4de606c1f804ae29ac2dc10e50b153 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Facebook/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Fyber.meta b/Mediation/Fyber.meta index eddbcb6..d38b297 100644 --- a/Mediation/Fyber.meta +++ b/Mediation/Fyber.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 6aac123ddaf4f490f95b78bf39ca18d1 +guid: 0ca570c2a4f50446da716526b4aeb949 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber +- al_max_export_path-MaxSdk/Mediation~HEAD/Fyber folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Fyber/Editor.meta b/Mediation/Fyber/Editor.meta index 315e8c8..be15ea4 100644 --- a/Mediation/Fyber/Editor.meta +++ b/Mediation/Fyber/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: e076e4ef7e2874ba69b108cc7a346c2a +guid: c45e6d13ddd03462f9c9755967048be6 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Fyber/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Fyber/Editor/Dependencies.xml.meta b/Mediation/Fyber/Editor/Dependencies.xml.meta index fd0bbbf..4538967 100644 --- a/Mediation/Fyber/Editor/Dependencies.xml.meta +++ b/Mediation/Fyber/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 5e123cdc08e804dffb2c40c4fbc83caf +guid: 19663f1a08f31409383df69efcae68e8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Fyber/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta index f27906b..5295ab8 100644 --- a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta +++ b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta @@ -1,3 +1,30 @@ fileFormatVersion: 2 -guid: 30d7cc218481416e8081eb5ddd21418a -timeCreated: 1713376528 \ No newline at end of file +guid: d737ad63861574b64918b243b237f6d9 +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation~HEAD/Fyber/Editor/PrivacyInfo.xcprivacy +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mediation/Google.meta b/Mediation/Google.meta index 6d09844..453ed4c 100644 --- a/Mediation/Google.meta +++ b/Mediation/Google.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 5b3d3bc3aa8a546de8fdd5ded2b7e050 +guid: a4cf14586b32143de98b48c60866011c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google +- al_max_export_path-MaxSdk/Mediation~HEAD/Google folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Google/Editor.meta b/Mediation/Google/Editor.meta index ea8dd55..f9f6e64 100644 --- a/Mediation/Google/Editor.meta +++ b/Mediation/Google/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: e8015bd045cea462c8f39c8a05867d08 +guid: 0995f7e77088b4f40a6998621a23fec2 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Google/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Google/Editor/Dependencies.xml.meta b/Mediation/Google/Editor/Dependencies.xml.meta index 36bef72..0f6a2ea 100644 --- a/Mediation/Google/Editor/Dependencies.xml.meta +++ b/Mediation/Google/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 053b810d3594744e38b6fd0fa378fb57 +guid: bed2adce7970b4794b5c8b4eb04b8d70 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Google/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/GoogleAdManager.meta b/Mediation/GoogleAdManager.meta index 522b98a..4b27a38 100644 --- a/Mediation/GoogleAdManager.meta +++ b/Mediation/GoogleAdManager.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 468d376e1f39442e8a96601e563b7e2a +guid: 7f0088cb5366b45a8bd47dc6d39a9104 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager +- al_max_export_path-MaxSdk/Mediation~HEAD/GoogleAdManager folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/GoogleAdManager/Editor.meta b/Mediation/GoogleAdManager/Editor.meta index 7b0912c..61510f1 100644 --- a/Mediation/GoogleAdManager/Editor.meta +++ b/Mediation/GoogleAdManager/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 3e1635bfb5b164c389d38eb1e5e6e909 +guid: 60f175d291bde48c793c288610f7cf5e labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/GoogleAdManager/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta index 71b0087..dd787f9 100644 --- a/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta +++ b/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: aebbf5e9af66e431fa6078021b2f762f +guid: 6879d254b74b64a9384ea463b083710a labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/GoogleAdManager/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/InMobi.meta b/Mediation/InMobi.meta index b674c95..04ffa28 100644 --- a/Mediation/InMobi.meta +++ b/Mediation/InMobi.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 5b17efb66f23c412ca4516e426406bdc +guid: c7bce7d750720455c9b0ea3f0cce9a25 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi +- al_max_export_path-MaxSdk/Mediation~HEAD/InMobi folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/InMobi/Editor.meta b/Mediation/InMobi/Editor.meta index a998cfd..bbb5854 100644 --- a/Mediation/InMobi/Editor.meta +++ b/Mediation/InMobi/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: a141703acd55a48c2a3e6e6599f90c64 +guid: 1af6490c6fb17409bad05988e30e0e98 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/InMobi/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/InMobi/Editor/Dependencies.xml.meta b/Mediation/InMobi/Editor/Dependencies.xml.meta index 1b62e82..e546452 100644 --- a/Mediation/InMobi/Editor/Dependencies.xml.meta +++ b/Mediation/InMobi/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: bc66a0ef4503843ee9b1bf1b1e867367 +guid: 956544e622f4447da82415cb534d1e31 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/InMobi/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/IronSource.meta b/Mediation/IronSource.meta index 151cb4b..fb2e646 100644 --- a/Mediation/IronSource.meta +++ b/Mediation/IronSource.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 7e5d22a01f68c4ee49f7ae312d187aa9 +guid: 5b895a8b08f2a4ef291dd5f37cba8ca7 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource +- al_max_export_path-MaxSdk/Mediation~HEAD/IronSource folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/IronSource/Editor.meta b/Mediation/IronSource/Editor.meta index 327f5d6..e5e4ca6 100644 --- a/Mediation/IronSource/Editor.meta +++ b/Mediation/IronSource/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 531d860cac61f47d19e32f526470ae43 +guid: 2a009f22f000b4c9c84d8c47e1acf89e labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/IronSource/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/IronSource/Editor/Dependencies.xml.meta b/Mediation/IronSource/Editor/Dependencies.xml.meta index f77e6f0..2c502b4 100644 --- a/Mediation/IronSource/Editor/Dependencies.xml.meta +++ b/Mediation/IronSource/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 19262406303f04f05b14b31b3c734d35 +guid: 3abf0601a5bc0460d9391a63671a1c29 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/IronSource/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/MediationAdapters.txt.meta b/Mediation/MediationAdapters.txt.meta index 41fb994..719d92e 100644 --- a/Mediation/MediationAdapters.txt.meta +++ b/Mediation/MediationAdapters.txt.meta @@ -1,6 +1,11 @@ fileFormatVersion: 2 -guid: 9a8f83e97729443c86120be3bb24190d +guid: 366e0bcbac9c54cc7b41e7ebfe209ca8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MediationAdapters.txt -timeCreated: 1609308536 +- al_max_export_path-MaxSdk/Mediation~HEAD/MediationAdapters.txt +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Mediation/Mintegral.meta b/Mediation/Mintegral.meta index fd3d83c..3311403 100644 --- a/Mediation/Mintegral.meta +++ b/Mediation/Mintegral.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 3efc678797bb440b4b754a4593b4a7bc +guid: a6f1152190c9f4005b77172b3f827bfe labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral +- al_max_export_path-MaxSdk/Mediation~HEAD/Mintegral folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Mintegral/Editor.meta b/Mediation/Mintegral/Editor.meta index d189ce0..f8ca0d0 100644 --- a/Mediation/Mintegral/Editor.meta +++ b/Mediation/Mintegral/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: db1de4066dc4e4290b3879b34fa87de2 +guid: 894c254f71da34a2bb91fb723eccd3dd labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Mintegral/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Mintegral/Editor/Dependencies.xml.meta b/Mediation/Mintegral/Editor/Dependencies.xml.meta index 415c4ab..13899ec 100644 --- a/Mediation/Mintegral/Editor/Dependencies.xml.meta +++ b/Mediation/Mintegral/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 221b2a20a58a04f2cb4afb0779587206 +guid: 91184486952bb4873b601d55ff816ad9 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Mintegral/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/MobileFuse.meta b/Mediation/MobileFuse.meta index af0bbc6..3ff97e3 100644 --- a/Mediation/MobileFuse.meta +++ b/Mediation/MobileFuse.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 1f51aa0efd73a4c5dabd3bd20504fd98 +guid: aecddbfd152b9436b9e40009c599c234 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse +- al_max_export_path-MaxSdk/Mediation~HEAD/MobileFuse folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/MobileFuse/Editor.meta b/Mediation/MobileFuse/Editor.meta index d19defa..55baf1a 100644 --- a/Mediation/MobileFuse/Editor.meta +++ b/Mediation/MobileFuse/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 5b294b15bf20e4100bb8fd4f2865870a +guid: b84c70e1357e34ae68f0388870358e2b labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/MobileFuse/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/MobileFuse/Editor/Dependencies.xml.meta b/Mediation/MobileFuse/Editor/Dependencies.xml.meta index 0286953..b699207 100644 --- a/Mediation/MobileFuse/Editor/Dependencies.xml.meta +++ b/Mediation/MobileFuse/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 4dd9dbd046b334929bcb7f80b7ae9eb4 +guid: 8f73aa71e8b3641fd96edc278218e7c3 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/MobileFuse/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/OguryPresage.meta b/Mediation/OguryPresage.meta index 75709d7..de3be4b 100644 --- a/Mediation/OguryPresage.meta +++ b/Mediation/OguryPresage.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 09a110e66ea38428a8a388a48813529f +guid: b6fba7e0473954c51b60d721c20de4cd labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage +- al_max_export_path-MaxSdk/Mediation~HEAD/OguryPresage folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/OguryPresage/Editor.meta b/Mediation/OguryPresage/Editor.meta index af2d23b..bb3e26c 100644 --- a/Mediation/OguryPresage/Editor.meta +++ b/Mediation/OguryPresage/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: deb1bc473b7934f93b82938ea36d0878 +guid: a9e2390d8d3224b58883953bb5b51b5a labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/OguryPresage/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/OguryPresage/Editor/Dependencies.xml.meta b/Mediation/OguryPresage/Editor/Dependencies.xml.meta index 1b56b07..85434a6 100644 --- a/Mediation/OguryPresage/Editor/Dependencies.xml.meta +++ b/Mediation/OguryPresage/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 4733055cb7d01490e9c36862b7d10163 +guid: 8c0076ed158f64df9be1f044f888d9a5 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/OguryPresage/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Smaato.meta b/Mediation/Smaato.meta index eed48d7..82ea506 100644 --- a/Mediation/Smaato.meta +++ b/Mediation/Smaato.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 6035ebab3b5094cc2851242130f8724b +guid: 4bfd64ef2dea145b585f5aea1e581bc3 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato +- al_max_export_path-MaxSdk/Mediation~HEAD/Smaato folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Smaato/Editor.meta b/Mediation/Smaato/Editor.meta index 48d1804..4ee9d53 100644 --- a/Mediation/Smaato/Editor.meta +++ b/Mediation/Smaato/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: d6ab91d259c064997b6b26c1739ef87d +guid: 55c60994832f74b64851b3d475107739 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Smaato/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Smaato/Editor/Dependencies.xml.meta b/Mediation/Smaato/Editor/Dependencies.xml.meta index c76c78b..06b6cf9 100644 --- a/Mediation/Smaato/Editor/Dependencies.xml.meta +++ b/Mediation/Smaato/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: f6c345cc57a514902ba5fb68436f852f +guid: 6c676e02e77d944f7887c1fbffad6c76 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Smaato/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/UnityAds.meta b/Mediation/UnityAds.meta index 8c49e51..471f29c 100644 --- a/Mediation/UnityAds.meta +++ b/Mediation/UnityAds.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 7fb60924642d44bed95c2cc730a87327 +guid: 5375c0d27756a4bd88d6bea312d5c439 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds +- al_max_export_path-MaxSdk/Mediation~HEAD/UnityAds folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/UnityAds/Editor.meta b/Mediation/UnityAds/Editor.meta index b66e846..9959e49 100644 --- a/Mediation/UnityAds/Editor.meta +++ b/Mediation/UnityAds/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 30751f2dc322a40e588edfb7c978c9c0 +guid: 14028cfd09e304c79b5c811e9a726a53 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/UnityAds/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/UnityAds/Editor/Dependencies.xml.meta b/Mediation/UnityAds/Editor/Dependencies.xml.meta index 937df6e..ce31817 100644 --- a/Mediation/UnityAds/Editor/Dependencies.xml.meta +++ b/Mediation/UnityAds/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 9950f1cb0da1e43efbeca604db142076 +guid: 8021d46f138554dfba6a6058fd37c634 labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/UnityAds/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Verve.meta b/Mediation/Verve.meta index f249843..14c8c62 100644 --- a/Mediation/Verve.meta +++ b/Mediation/Verve.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: a988eefd0908441f799ba02f389b0164 +guid: 63ff722812e014ffd9af97864371c197 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve +- al_max_export_path-MaxSdk/Mediation~HEAD/Verve folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Verve/Editor.meta b/Mediation/Verve/Editor.meta index 9ddb48f..294c090 100644 --- a/Mediation/Verve/Editor.meta +++ b/Mediation/Verve/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 942a73b8f38284e55849bd9986aefee8 +guid: 58e5159adc8ba4666a19524426e952e2 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Verve/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Verve/Editor/Dependencies.xml.meta b/Mediation/Verve/Editor/Dependencies.xml.meta index 7edac19..8eb9b81 100644 --- a/Mediation/Verve/Editor/Dependencies.xml.meta +++ b/Mediation/Verve/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: bce11a786f6b54963a8085520a643ce8 +guid: 0df9b5eb99971475da0ce8e0deeb9ce4 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Verve/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Vungle.meta b/Mediation/Vungle.meta index 7214e2e..b0a3306 100644 --- a/Mediation/Vungle.meta +++ b/Mediation/Vungle.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: e5a58f58ec6b64f2d8c8061c4051244c +guid: cffd18767184a494dad8f019037ab252 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle +- al_max_export_path-MaxSdk/Mediation~HEAD/Vungle folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Vungle/Editor.meta b/Mediation/Vungle/Editor.meta index 1ea75cc..56f8636 100644 --- a/Mediation/Vungle/Editor.meta +++ b/Mediation/Vungle/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 77b6ea05736a9458f8ef8762ee9b64bb +guid: 1010e8092f71d45ffa740fa3bc771d1c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Vungle/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Vungle/Editor/Dependencies.xml.meta b/Mediation/Vungle/Editor/Dependencies.xml.meta index 7038186..cd9b365 100644 --- a/Mediation/Vungle/Editor/Dependencies.xml.meta +++ b/Mediation/Vungle/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 0d8ad3a6ddc4f44fab2efe607fe14f26 +guid: 8e0af49c27e0945729c4b8e9ed56a4a5 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Vungle/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: diff --git a/Mediation/Yandex.meta b/Mediation/Yandex.meta index bc0cabf..48ff939 100644 --- a/Mediation/Yandex.meta +++ b/Mediation/Yandex.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 5d02f768bae96461c9a46ed20e652f8d +guid: 2a2fecdf1505e42a9ba7b317b3d09b22 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex +- al_max_export_path-MaxSdk/Mediation~HEAD/Yandex folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Yandex/Editor.meta b/Mediation/Yandex/Editor.meta index 96a880c..aafdb90 100644 --- a/Mediation/Yandex/Editor.meta +++ b/Mediation/Yandex/Editor.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: 277e2383262e844708fc74a6104f4985 +guid: cde9fb1c1947341e2b53c30db0318c7d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor +- al_max_export_path-MaxSdk/Mediation~HEAD/Yandex/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Yandex/Editor/Dependencies.xml.meta b/Mediation/Yandex/Editor/Dependencies.xml.meta index 495dede..d760078 100644 --- a/Mediation/Yandex/Editor/Dependencies.xml.meta +++ b/Mediation/Yandex/Editor/Dependencies.xml.meta @@ -1,8 +1,9 @@ fileFormatVersion: 2 -guid: a77aaf886990c4e6ba469a4f083b9284 +guid: 56b6854b39dd74540b2b2464583a616a labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor/Dependencies.xml +- al_max_export_path-MaxSdk/Mediation~HEAD/Yandex/Editor/Dependencies.xml TextScriptImporter: externalObjects: {} userData: From 974d8927f619ef78d231c4e6e379d2d4e865f83f Mon Sep 17 00:00:00 2001 From: huyufei Date: Mon, 17 Jun 2024 10:26:57 +0800 Subject: [PATCH 24/30] =?UTF-8?q?update=EF=BC=9A=20=E5=8D=87=E7=BA=A7=20Ap?= =?UTF-8?q?plovinMax=20=E7=9A=84=20Unity=20=E6=8F=92=E4=BB=B6=E8=87=B3=201?= =?UTF-8?q?2.5.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --story=1020573 --user=yufei.hu 【中台】【广告】ApplovinMax 广告插件升级到 6.5.2 (双端:12.5.0) https://www.tapd.cn/33527076/s/1150750 --- MaxSdk/AppLovin/Editor/Dependencies.xml | 4 +- .../Android/applovin-max-unity-plugin.aar | Bin 72375 -> 76527 bytes .../AppLovin/Plugins/iOS/MAUnityAdManager.m | 178 ++++++++++++------ MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm | 2 +- .../Editor/AppLovinIntegrationManager.cs | 9 +- .../AppLovinIntegrationManagerWindow.cs | 13 +- .../Editor/AppLovinMenuItems.cs.backup | 2 +- .../Editor/AppLovinMenuItems.cs.backup.meta | 10 +- .../Editor/AppLovinPostProcessiOS.cs | 27 +++ .../Editor/AppLovinPreProcessAndroid.cs | 12 +- .../Editor/AppLovinPreProcessiOS.cs | 12 +- MaxSdk/Scripts/MaxEventExecutor.cs | 2 +- MaxSdk/Scripts/MaxSdk.cs | 2 +- MaxSdk/Scripts/MaxSdkBase.cs | 5 + MaxSdk/Scripts/MaxSdkCallbacks.cs | 36 +++- MaxSdk/Version.md | 2 +- Mediation/BidMachine.meta | 2 +- Mediation/BidMachine/Editor.meta | 2 +- .../BidMachine/Editor/Dependencies.xml.meta | 2 +- Mediation/ByteDance.meta | 2 +- Mediation/ByteDance/Editor.meta | 2 +- Mediation/Chartboost.meta | 2 +- Mediation/Chartboost/Editor.meta | 2 +- Mediation/Facebook.meta | 2 +- Mediation/Facebook/Editor.meta | 2 +- Mediation/Fyber.meta | 2 +- Mediation/Fyber/Editor.meta | 2 +- .../Fyber/Editor/PrivacyInfo.xcprivacy.meta | 3 +- Mediation/Google.meta | 2 +- Mediation/Google/Editor.meta | 2 +- Mediation/GoogleAdManager.meta | 2 +- Mediation/GoogleAdManager/Editor.meta | 2 +- Mediation/InMobi.meta | 2 +- Mediation/InMobi/Editor.meta | 2 +- Mediation/IronSource.meta | 2 +- Mediation/IronSource/Editor.meta | 2 +- Mediation/MediationAdapters.txt.meta | 9 +- Mediation/Mintegral.meta | 2 +- Mediation/Mintegral/Editor.meta | 2 +- Mediation/MobileFuse.meta | 2 +- Mediation/MobileFuse/Editor.meta | 2 +- Mediation/OguryPresage.meta | 2 +- Mediation/OguryPresage/Editor.meta | 2 +- Mediation/Smaato.meta | 2 +- Mediation/Smaato/Editor.meta | 2 +- Mediation/UnityAds.meta | 2 +- Mediation/UnityAds/Editor.meta | 2 +- Mediation/Verve.meta | 2 +- Mediation/Verve/Editor.meta | 2 +- Mediation/Vungle.meta | 2 +- Mediation/Vungle/Editor.meta | 2 +- Mediation/Yandex.meta | 2 +- Mediation/Yandex/Editor.meta | 2 +- 53 files changed, 260 insertions(+), 138 deletions(-) diff --git a/MaxSdk/AppLovin/Editor/Dependencies.xml b/MaxSdk/AppLovin/Editor/Dependencies.xml index 0bb9011..07b3ecf 100644 --- a/MaxSdk/AppLovin/Editor/Dependencies.xml +++ b/MaxSdk/AppLovin/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar b/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar index 60a43f07cd4eee29e02484e0f310f2861e7a1492..a9d7ad8fb52ccdb8128532093eb2282a5f27762c 100644 GIT binary patch delta 75890 zcmV(vKs<5l2jS0x!&dk!B z!Pv&o**Q94LT*g~Eo3TAfD=Z7S|CIzPgfDAS*vM7ftb5Dugnf(pcliYGIO8f=Wv@? zO!WMak?N1gZ&0XzAwYbo!s_Ly*9n5(S-eY}E#2=>&tWa9E|J`-_LH&s;vNZ9ZyTR%W(8D9)jT1O8&lRUd95|bpMQdE`XDo`a>-lxbqyS0#} zz~l6}loE!AlFq?713vqiM8-7WkC29=c681LFH*bPU4`#|E{yH(Opu1#JM2w@#>q`U z0FPm0)kOE=VPR9cHfDMBT#7f={ZxBQ0B*1p9f-OlLEiCv)vwgtAX-&3A|9S}BIs8N z?mb}*(eegE{vj`a&4T3-Gr;B+;ag_zIBKvF>*qS35ml|`xe>uZUuJky9QMx<)3|k` z&-t1%er42uhFiX;(Q|C?o5Ll4z|-3Xa~$Qs%inwvV2F_SU>=X@utYCErq zV7+m4QKfKJWx^@9DA-XfTZSdD?O>z|T75QlNSG~x8=YI#vcVS3j5nFPm489YFhI1c#7`BU*wFnpfTX zdjo2JUi7xlrI#@4Nf1HUobo|lU9~aZ1SJdldtn&~NEonlx zOrYriUbmgWjbRLoX_#xLUt`wn-i@E-0Trm&nK>Yq((iLk8e|wc>U@_E(k0tq4k}hK zzs?Hb8@l5fs%6UI38G)M#SJPhCslutqj1i`JXFqxD!Yv6#Wk)4c+Y)wMAV~Xe_TA(V z{+U}#)Asz;KKqF2xh=>*(WN;!xz0C#o)fHmDsc_Kl`i~MJ|CJI!{Ey#W4qJek0F^> z&NQBbwHSXIFII2=Y#w_fC#>%$`b9H)l~Qef{m1l~%frgFl4IrLkM5)^4gj^Rg}gHb z!a8u81*QfiUAd#q;=3#<%Xse33NJ%#JFgc~frL`njU<&QYoRrDbaqHeRLAIl!L!bj zILY};*tM4+Y|RTv#C^{}tUY{2GXl>!aIwdU+jo5yfltUCN8RFqU-<04O8vY|TEKte z5B!-oM6=X9gR955Q-12zKLoY*12Boj30zTzVpE6pvs6MYvjf$QNLgU#oEQ-h>Jctn zi}XmWXWklGFO~}Y(yKX!Q;%AI+c=2y%B*%pti2su`vPVE{pl)~CoULazZ2mVcYIGh zqh(8>7t`s5m*XZB;ZpmUdwd6^L&_!}dO%^-D2aIR?r;4J@7j?6`P(3+8815jP#S zXTS*lwA6q7Q!Md2ZT2tJzk`hweR~G;SG)`l1;z0X!2UPZYPRb5qF8nHV%=Hgx1)q`vUJVt0 zAN)>F=QHH0G9B~gjl=Yvf$zsTQLeNEj0uVZCoLIW080pTl+%$;K0vH`RlLcv2v)9+ zD=!`ah=crDa_%j0Wrz)K`uYt!cFkUN5HChragO`><+tcNn$3P#aHBn}>Q1DqVImjV>q#YH_^`IQ_%0mZ|S2LLJ=K0{7l2iVV$$)G>$vAM?=9hk~ix#gEL5> z-$H-#(&fTG;9xfO0ByKfDX9PG0in4Qx1*IH4mE^L3c-z48x?`b%8>|!@R=QO>lqy{ zNs)URaCa8&>UIw0Im{*H;UQ|_(x60EW2PKR<71i3U$I($yu+8#5kz|Hl4d|`5Qz-* zdIKX+O$kcd557Vi5o>^^I!V8{byOAm*}-HNLT?r!JC%zE1cd{Efu`Vey$U|o>^_Wd z37yG6hNlem^pjeq*=G?^JZ!My$NF6nI;=C58#T>m80kghYNWgL%TeMb+9b{2*?VeZ zjs-9o7yQ3}E0Wwqm&o=oZ(HpeKcA(z^Ez>=xFOrAw^8nUi!W1p6Wy%v63x$crho`1 zQ5+SOsfn_Ci?S`;P~7i_3yW`ckjuJgI`P1z+eqMe(#9XEmF@IXwJ9MmEIw3&)FagB zb^E~PGo(_ry1;hpQ7ny8s>VxOC8e?y0-nr*3EwS$5~ul~k?L)HFw%Qr6xKW{TXHHk zwv9rIo}V)F5D>oJ8;X}d7WQRCZlHFfp!V^${7=L9Z5xllsSRX z_Ml(H^KGJ2Fegx3#>qL5cpSSu6tu|~h%1<8KBh)M0;BY1?S|5zL!#zlyPrdEqxYmk zsXoYmISAS|%JuMuV{or7U+wx8i}(WuTAYqgbSX3)s= zR=ubjGQICyUm%f~d5yq;KKA7;C54oM`3FN=-w2VR&{O5iiBD_>CL zkw?@PD9;!@7-bsP%G}*C7HW|>kbRx<^EV`a1e5Q(b%9xdQzP4BaSb)s?9sk1nT}4# z<7h<8BHesVJeZOiWg&Y6B3ulvi=02&*f2)AKm6S*8!D14Jg`tu4Mod3WpO#dmC zDm80$OmU!}m>Ng0BC&s}7bu!-$4IbhQMgG_7*;3p_Uoyp`$JZLEd6pI z1vcW48XGGByV6NUg$CS|mswY@HXl-N)x?ZHehqd0qhJ^dBb;4SOk zH;*S{%iyKK@MYUVC{6(<7#&9x3~il%ui(>pJm3&xyF58fV$8PIYy$?J1(O$zIiT5E zsH5*53sQpCvNX_`L21PrZf0_{tx1qDIfNWjiwKcYtvbvOmGi^pAamejRVsF|((F3( z7z0w^Nw~;TRqs=w&!b^?1T?{?nF$AvJv8t|JF6Nypwz%RgL9!87s}UQHtWK^=IE-93nz=XF&&Y(Sazubs7unAmQk<9+6fy? z{&*7}Ua=A`LgD`n9Hhyr_rrvirJ{-C6IYC9d|ST@A7=&-*_eu}!N^43k14x|=PghqI4L4qedGZEPLPtDTLWog4Dor_mD^^u^!@+1z zWrBRA@H36-6Z*A8kzo}wP}?+I4mOTB#5=0U@_U%IkIjtqeAd~o?@$zY zZohRb2cixcv>tto$a|Fu<`Oo3eo-^-hSH-96{Dg}Xz#lL%bfOn7Gz(7+B8~jmS}ja zWQr={wjMcd;f66QQ;W!d@naids_pG%`H5k!;Rh>8lQ^M(=;0UT`LXx)JU~&;puyE2SV>&0na9({VKWzPx{B6^n z`Aaaec*vOIKp$pHAL&TB%a}^jdF3n3Aif_qrDKpW!c`ocHD7Lj3fq;Pj=GD~fGk*n zkV>6hmf6_i{r6-g=b3)Q3^m+<0J&R{i}IMt7;6Uqi8-c}Caj?hf_Ca&hGP5@KO|h1 zLP|cwkO%SBYXr+~A*D1ymmOge%hdjdYUgYK*%y7Eh+64JD|L{V<5=DD5ZYb8ukynfXNuA|a@z``Q~Vub3GmTckhk+x%8rrJJHw*jBvWzb^wG z9=C#4c^y!zem>Rh#T@xY`ehwBn|=~FEZ+^iYEoz{7Y=W} zSNg>Vk+`0JR7L_ICHHnB@p#PtRV4~@qsd8W0Mx&Mh2KOg&_ctV;U+VIpg`g}Mih}r z^z!VAtBWx;L5T{E5KZH-BG!&ViQR$#c^RF5J}$_-<}#qJ8Ni`iLke$3kI%O z-cuAHFY5!Q2A{oO^f_!ka(c(?weV3V$4JW%4Z$Brgjb}QF^x54D;2gWZ&KsZ0)D)M z$Rf@FiLR<@0r#&xC^kDbD=FlvCxYdIkWv|+{GGyqiwnw!3nlspM!dnZ^5u)gj*QWN zZUPpH`g~B~ecAFdm8}T#kV9Mb=i9bxI?L?aFr%EE!I7N~89BVcI{(f9Z3>*aekK8p zHKwQtHR%^Wn(jtH+b2GLi!D{Tj1oMLW-Hvu%Ql&Tht)RUT#if5v!+5Z+GDyD*~)Ee zut)Ap1O;3CTb{4kQV$_`U-DW^p1SUTNCF%hbmYLXrwiA0sRhHYR+n7)z~eo;#*LU# z*-F22jySdG^*!-Sd%TwGD{2N5Y&)lHN0rF*9X!?U16D8f3?fo_hibgA#fI`@Fd6c?fa^{y)Q@M`mZPTqlBzr4_t@Re$2^`Sl`%)(+p^Jr?H|_Z zWyYCV8+*;>t&cNX4oYebl}Y!Dggd`yhuET-Faa&hNfO7BaMMx^NrPu-KaHuT+ofjP za~i!Ud4FTj@jhXQJ-SDA!6SF)U%~hKAJvK7dTjmDUWXO7h@@XukWi)Z~p;7@}x1 zF^K}tmcLG>8(aR;AesCF*egmcOXDdtd2f{Aw%_Hg-z14d0{R6N1t83Sv27U)=k39N z2|mb+YjkRlVdn$%YQW1)Y5$$!%$0&vqQ4lf`-cp({JW%5(N>-l#Cl6%2u`7DLL{My zP&-;DW#e^q5DKi8`yM}q*gcGT8h^rqauv* zX}-ilEf~vnO!`os*#%a*IXBB7jjE+oS7ETjRRoF|DI;iivwzf8DJ&g$ZV}O-z>t#H+L~2Eja9EteLe{sDx4Hbcz97OM;vA3g^f zh$)@erZ?_~O+lep0OuXiLV+=Vv_pu^ev3AkX`hW!)cF7*XfYOC<;K7v;NV&$DJYf+ zF!q%A>lNl;$FF=t zvQm@fSPX1vpr?m_t)#VC(?Y{g$TP_F78IK}I`r`9yI!7TwY^f`^>Zo2W#!?t%`_Lq zPW9+WYe7{Zio#`ID1>Ougsm7Jx#*25x7sqzM8XD7-$IHShcI$y@_hnxrJyrOCo#`^ zthw|H$RfDJ z4~ZSr@~ro!8Z!(dcDPtG0!E<;L`LAs1|82U=T}w zhO2ir#vi7}iH{Q%YwIEUI!I)M`aKx>l^L$Bhl$gFAz>+gXDn@(mdb(Bghz5bp~xFO zRd{kPGs~DOWDH0ggZKGo)f#oe&p;AMePrJVpWZz1hd)R>Y!UJ>tohyzt#Y)bC>;T7 z#8^oAC%@qS&YX#6WH!ZL%vJwG=2-umIeAPWtT!+N9eu?-4ekw`MjdV*mg4+wv4LV^ zh(r^AMHg~MX8rPH!UlcnanMb#$e&MdP`-;ELPS37H=O8u>GbH>qM5BDm*bOJciC4u z-9CSw5qf~PLTto&!ZXuRIN(M*b!8vVHlrF15> z?%lcQAQ~?=f<8m=TXzLhFde6L5}mW^Dp`sAX79435baqUodu+Om{vc09sm47rJ8Mdg zj}l`mVwRFzH)3Nza2@iaC1U&mG!CfK0q+lGlrBrq?3}+D&QqWmT!- z${eX}Xpq^Tbt>(~kiWN}V6U_SN!#(QEQp@{>%Ugeki4Ym%A>vw-PVI)B5$a ztKO+XuMii`WAZU-);SP#oFbP=7#yE z{_#77M#y4#KYkfeZ7gxFPiXaj(e$xDIj6(^f;EABmmrf<{WS)CyoZn;Klk#dUu#S}x^GqZy7WY?Y3l=QOnc5ljf zZ2f8}a?MFZWfeAF7LLhn_a#?KmQkh*%Smr33e++S(YOK|BvO)50B#O;$ZMkMl(?$n zXLDfS?9ieeQsyf|_IB#sq73XzKm(#M4bRNLbRBWCXdjvxd7aLG`m_{7e%d0!E+B~U zGi_u3rz5QU@?(fJ;1A`FkwuloWv8h+YzSV|pj>4^SB%xkkS8pzijGJcjYk&}=xeH$ z^x>hBGaw#!!clU7mPP0(;A-N2R*EK7U$UksG5srpu|jVJO+grQ6x)&rm_w1qG6oY5 zAHSGbBa(v`mQg8x#AXl;jIE={90&t?_MD(7DI>;HoCkmzPKOK|?y9RYlYc-B0>AF* zsan!@>e(CCTP?^e;rqLwVS0diGifN82OJ)mL{?qcYo7hB7a-^zGcFK1duAOSjwJASm+K@Q%|)+Pi4@PUd-+_P_EvHkNE+G2gw_7qmtc3k12 zh|M(Yr@d+u{01&Ot4ylUJwtSL!cdxUO(#vWQKB?YzqKrx9X{nex|MT~^Eaf$yOT$6PzXrVBS%zi=I5t+pj--gW;HQjkv;>!c1b;do;!^5M_9Px5CII_z`V|xcEZ8QThhx2>xV& z5N#H#p`WOBnaSN9YMrPv*cK~jp;eugZWAB>vah@Xd64{`E5OFt8S0sk{_T?5TO$Gc zS7$^uI_Xvw#Ko8XW2h3M-lV|yV;hS8={qAj?tzN=6H2pjM8|3f%%(V(N zmbn36yZR{m`3mP=;FO+|G=>d6=k8D(j4GDUt#CyE`;Us6ws9tfraOqpZ&5*>fgfQ1 zn0Ok(7-qt&1sIRVZXdZec>A-()T`n#W)eUupV|BB)Mp`X}) z|I1Id@;aheesFMZns(Yn^s|A>YFfC>wZ+BFQnnpE1=>#`mrAuw5s=Ljr=8373E%uv zT!CYKMFDqX>}cjepz&wpDCR-bjOSa<&wJ?|@CkNxWOnsWIjm27Q`~ps{3u$nS1Dm7_;G?PoneZ~|=1U26>N3uNjGB}jX!J>flKs4ZUStyN|YAFMM!ae3k=39$ah8NMR zkZWpa#hd1)F=!KFu6OSYxS@~9j*Q*;m=n8Q5Fp(;&eYyPKR!)8YI@=s zWNch&(T8-ikrN=k@&R<$J}L>Voc5+Z=$L);c*$x2&WEw)Y_CWSkqfc_WA?4^B@J&Iic?( zV=;|6_-LC|Xf-6}v}FK%#vT*YsSem}nft8*1Wve`u_B1k?X_lt?%HS2sx9(@xk*;g zF0&S^TDV81ePHeY8`?U51A^3bCeq-F_p4nc2A*u?7|HqH^(hIz^4iHZ+QjNFE0u8` zJ00jR>;X<2R(O-=^(aMuNhf`=u)uP`H5_LUf# zdqW#?y-YVP&n^xhUviluO(lMbnKm`{-}$W7-hQ7AJ)LRC-wv;R+>MHK@0VUl?MrzY zztgWE7t5M5!%KBQTpS=M#*(cr!c9Q+>M92yPfL7MM6h>VHl> zKF~Mx{~o>ficj{;pLMvk%lD3w`urquM-+D;P%!+x&-IOe73UXY*|mP%_;*mx_o1~{ z)K17dK($Tu_7VM^M2`}CH*;}C*4k-~#zu>ilYZ6$Gy~iW6cnItm6;k`@>kIlPA`y+ z;POBAy%(EaGdte$6(NngufnMAVWIPKwt}WD1N+eJmu_wS-C6BYmj^z7#gqTgSseeh zDr5Vvn#zxVVWpPXhFX?dDN=*h03$D;Yno=6L(n3~b0)Y1alvav2hw-=uXUNpXQA&= zkIs0C_dx{rj9s&UYt&b%YbE9BDnw%k6$LP)E0wXV4yC zuWhliH0drZ07V4BG-xfTbCl`Yp2{S*8jb@TfO%|mti(}5d;AMLoM21WGRWyMdRU)A z^ShedT3OL$FDWK1VD8xP*v~DmwVpyImrq_>^fP(rpyC2L%eU8@)9-ak zuzJxzomA$nNqw^F(nb)B%!c3T9rPBNzY8)}&}P-4YVg8nq3HET$Hn4`o+DWFF%BK0 z#F3+@jY+jN#*;=PR|af&aD^gvj1CTzB?{ zhda{bd*7&8A9LA@6clKbAdee75`C$mip{L@=2I{hSGOTKYHga&5XVP4Ffwd8FCiI! zR`_`fy%N34ad|xaS))fA0GblgegJ3RmY@A7v0u@%3ShdT38$%>xp!Y-k{LpM@PNO9 z<_(vE@jS&i6K1PdVL0@faLq{2cqp{kw(SJz4&5GRHeV?2p)0w5IK`Kaa9imixnvOu zAB);s4wMGR?mhB~JEm#MCo6t54 zG)Rctq_S%_!z7Has-;#vLP0vbw{dbp%tP7?nGsfb<@!^r>vzGScWf{1y|uv#?kyP^ zP*rRQLCJ@l(f1rLIfK4hTa+g#RiCT)N8)X3_m4U5_m??%61R5u3%Bn--LJ`|P5bph zCwM~#fAN7wfl=b}=)%alBpv~O_#tGc!^0lylXZjN2q&5LTO91}rA1n@MPfp~;0t59p&{Mn#ptElgjiQYE=NLMj5Bvay2DR*q3NJ&JHP6MO*YW~4d^>PL&R}>2ZR3by;3$*R9i^rOz6~h-g2P~ zB;g~Yl*F_aNZa>6gjOYg#Y6iqnJwY`Gof+*r_cs8kUR)fvEQyt?9CF_IV@Mf%?iLZ z!4^-KxlfI3#pKAg$TqXHDT2~9UyU*g_((qC$04yZC6Lh-9*5BzZUk z;=Za?5vV@hTLt9)N0a9q9TPa1f)`JwN0V(wuSe^5opVFEzSqQmP-7a=h#`iGvnSDK zCoZEW4d)&;mKyE$+-`iv+HZoLx>wzT3|dic8;c#XEdX=}?Bb6!1%OCOO5F|*ZqSb{ zW6vg8fNc1PB&YPj!AEQ~K!Lpc!s(#b(8Yo;cy-SZT}nEIHZGS&A-ufsRtc2ZtB~C) zb2Ya|y>S_1f1^8pc8Stj0b3${c^cO-$Kr19#3xNMc9H&(ohu;U%*K1KS~us!zW!w* zX^4q7e+_)5A=bIJFvqVp8)@%Ew`R{UWHYYlSkNPxHm1N{;%mHQYL+0U(mqPErpB7o zkK9ADbGBSiOQY+DYVEZXx&1g%r@Cn5uH z4OjW1JBy1OQ1qxrq=CzPo@u5ZOQl&0x-gBBgAChx5VJ-U@+lKbjusd+*G0HkBMBRn zZ#j`F`!oT62byoi2|vj>R`|xh(CukcugY?&8z4`r&5+dMQ~{I`-KhQdvA}b;Rfs`4 z+pl!g5w82;jy#3SJxsn8ykCRPc(s(^R_9&lBRIgw8C!+FSM4_D?y)X_(3)_@@y*HQ z(F8eCmXiE?>HU^gBT;7=&5R&H4c(GOV?3}WBh8S1r$m_r?s1RU=%~&uoVg^|23FJt z04d_RC2VM|XlM#|If~vBU5iBb8=qw=?hIEzAR~!umY0qPAJ@jUu!QD1RyGolh8@Dp zKjG#xao)nGpK~W15Q)eVuOvO&f}|5gXpDzTcHE8|=g8ghdpOF&ATmN-p(Ls>bq_;_ zCa*Amk|kbCvGhPwS1n>2NK(h42@l7hYN#}qHJncF-6DuecgmPFlIfDp1E3s?0Aky5 zj3w$b#0g(5j|BBhjbf4v+@uuQKg3(Q07DJ!?5tZ%<4T^*SViF;(h+=nM&dGUJCz=# zQ+JA%71N50e;2WC(&YZZlC(-O(K`oL2AgJow&Rm5fKgf0t{z5r^5y%K%69VFF5Y$VIv zUz?~)?;z_(sl7N))-m1m(Z1hx-f0%^wl{)=-dtE#!pfteN88~~8hFn1wenqY2OR2u zQ_-`wPaKQ0z@n+b+^M@w*cuKOeo(bwyXL~#j$q|gvStLc=j4rbRm8G@%uhdOZm!-# z_QyH0r=u7d)O} zi0iS$0lpY{NmkK5?NhV30A#(iW*<;snJ?7UAdU-)69Xs!Toa8Z> zo#L?HXeoVuSU>Xk2At&Law)_Wnhz7OU&974?m8l(9Z2^{p8k-ekYzv)5`M1lQAbRo zLro^Ydd|q=sh?^wK72HO!1d-#V*o{1YPntQWT6^)&rV$~$0tH4`4`nRJS8+{c0?n8;@01DD zZdk3RLwJ?W7-9UVy|o6G|I|n#zG@A+#zt%%N|D3&9!A-o=~91A;*|Y{sbA2^d+A%8 z7}2!AJlrb9y~@M#Q@5mpovnpOqE&9AY2P~q7@w;Pkf!v+crmdq>FpkWIBj+n*uzi= z&#aTQenjEsK(mgJcS8);W*WkiljOU~OC>pEUSMHWEV@D4yH}}O%}@+Jm6XTcT(fK? zk5!9)l^dPhn4@sRBNM#Sz-AArCXzT>-_kjUs-Q^tSdpn8=h7S?aWaQg{Lbs-xhS`? zdp0sAN#gx@OD{Jln{h^e|4WILVE{)G&FPSbH@(1Kprd2s-kShai%21G4`EDCv9U=Q zSUr^fO)XeVzPcZs&tB}EbMm7yp}J$rIhXA1^>@~2Io_fC_HJoC-hS+ElnWkmAOIPC zykzqM|GJ#!*LNZ)ep*FrzEbmCb}nL%^01Ez$5&*pF*)6(3u<0}DYMEI6+|MEx{$A< zr=LGD7u&g+pv|3{-3g7Ct%YiOLyrhd+f$!F=f(=mwo?esT~of|!K*2Kg6My|Y-@b6 zzLw4)sgO)yqxOE<+qeClr`l};e|Pppa0Lx#y1bp)C!1vH#(`h98h36AEd^x{P>=*L zE;jkxYZYR47I^A^>|}9l&A!johq?Ml+L2Np-0|!LxW!(cQr}hVLj3fs$u+FLhv3JNvtQ*AkqeRf z1;-JZJ7(p{t3AqDZ`PGuwUcc_*&TLqxVBRDYUGB0-yOUGaeaiBuLrFgg#KdS81+uF zTvsx?9!pmC)Y9zLCGX`w@X1kZ_vo&V)XxW8(Pw7Eao@dydAjV;NN-BB|gh0HQAv!Le=buTjR? z)#UqsGAIK=3&-uG&A>aX0nCjJf1n^gWeY8B@++j3Qf^ zMqx~W(!hqegWm$H1_Q!v@eO>r+JvSsTKPE*-RNkbKa<*I$+Xp%DpL4&PaB#FVZ6-2 zk}*nOrAk9q>9IHDzn6&1X3}t&f5qwW|ExrRx5V7Z73f@%Kso#88rVQU-AI9vVCie=}*ofmr8jz9b0RtK8Q;{LCOWG0L90rU1{F%WEOUYBKxW$8 ztLL_wq!}rOqPMts7`hvCmM*&@7_n=A9v|iZYIzwrz#NJdBVUKHkzhwBva2B!=Jp>^ zFif5b1^W=1{pX|@k`p{4cKRWRr14IKC#8-U;&UE2eBsI*a(mq1x%aAxxQs+Y(Q&C% z;bma6>lv}@C)RqQ<_Gbo#N;dW43i}muDc37zv34>>HJ~PowB#@a*Rg zoe7KgxAp0gv@uT(UZiF(6$SnhNxCMrjWINC$l_lf5bCg^!D@=FFv{Oi@EVPL%^*-Vn{5+s z-P#W+=%}==##PWOXUTehBEY}egJ#*J=}$qzedJF4BwN65*SuXu8z>03eXnBDqaZ|* z$b5w)$p4eTQJ#^I-%s{l0E}>2GjojiFfniL?X}eFHCaWvGS?E*ob$<|o2YQBs5yko z&==fdv5v=T!W>Th^^4}s%L6dGcqY1)+-)&RBuei>lk}E-R}Zv*MiHa#_5IU3Hl_KO zZOc1L=qa18OEaPqa9$iU?pr{c0t*|zK_uDM(C|&u=53h}Qi|xCR&StcS zFTRk<9!0wd!3LB~#3hnRWyi2q1(k+=zJ+hJ^di4bQ&)(!Z)p1i|D}e&w)2^|kL906 zQp}2I8Ix=3k{b?x(KnQdS&7$hBMeBfauEyW(ILfVaaa2JCM1*@JOH@=jsJJgOeuFA z8bL!r8GZU^p5gwtXZ~x8-AFxgW#9)POY0WPMq+q`g66O$Q5st|MXRJ{BF2uEo!vu* zh7KXZchGl90SoqLj=7rb6Pb6#(m7{NS}tUnUR1wj{-e!*-&v_g>&{cT@0~A%J)W;z z{@;pZis*sI=4r04YU%cNUT-NX2PqEZu|+kbw&aDO2Rz>$)M+E_vS~N5gbdws@&&X~ z4fFdHeh^N234NN<01Bq;4C6c@W`1!OkuD1(R$trJ?mTx~pyMnMEH?wR&=K@1!bwBg zI?g}Q%N_TB`Q=j|8wEyOgwhkt?O=FkD=bVH!4y)&XagZ!kZZerZEO5K;`cwPp?Y){%qhIe7aSfAqzi--%tP|gX}-1KsD>aUq?ZY56;4_IVyz1!p- zZOGqnS%wpBH{VuJ&*>1kY+YMSwVy6KZ9#F;}Xw zs)T#aNcskTxbhBt?@D|&dk-%H67MpXpLXq*VXLJaa}is6m`pml;B61Yn?1flB+TE7 zLulK7`FL%PXp-r=1`EO~a8m9ScfO*Rd4tfaI!|aYmyY|~@HXsd2bTDHuaEh$&1%k! zBp81&kTa_!O0C?-np75|Y} zb-yPi<$7q4Dh6GK?s%k^ZBKz&~RXlYVJXc2CeoSvTQ+e^m<4u*ChZR)k@(&m`?L(B<84WkW#(%;49MDKd{Cn4ETmSFa z(kj}AZT^Mr$ftjF0P5eH>ataJmGM=9ekdy@cXjz6KGWPon#E+x$l)7lgy_CnoWnKd zE8bY6tQgnZ)`zax)ZXMCN3TD$v-03D^89=pq-As=cyQ;6dC5tf$H>QZG{sVY|>YYCKha1LX+v))v*@mU7c!=ICKy|`_pI5IY_Rn|7u;u zV1?Q-b}2YF-82lwwIw;7SlgRvPnbZlU#6d)%z(Mb?uI|d-k~OCYrT!U{KGFjml2b2 z;-m@HUEm-BCN&Z%&@}A}-DgmLmU>0O!sz%E+RDLso{e+!;S$O^+{Gmh23L4vxFb^O zH5RDeK9!iJv*#)a)|5Gc-$t6GKD*x%)0{4ApzWKsEt)Iz&Yd8}$<4PlBY8QL$-Thv zNSquYu;G0fVvy!h6|y7c^un4N&XlId7fm?G+-_p54^g>iZ$B19L!TvoojqCVBX_64 zPQ4S_kMQmGN0Q}H0SsmV_jb&A3=ovu&N9llS$jr^Q`Nwcl9%!e!jffT!W{0bI<}$8&>lg zVsPo9mEE;sxdN(MF)2`gZn>J0V|9XX$NnZ8PEyQP^B@}WNw?_|0oipJX!a>8DV?4P zF!pU1a8&;oe~vh?S=dV6R`}{dD{MIT$b2W5gKR1{=M=@eY7-`JIjj+X$Qb8B($}S3 zQ33i%8YIYJDQF6*Yf=iHPMHnIXq{1wMAtd7jG-E$t-s)|vco`s;odBno6)bBye#xe zjxp|hey1=BPmoN3*83@&=J5IP6jj%4<>e5-%%N#Ji- z`#tsbLHq0L4!K=t4Km(n)lRvvu(!;Z{?Ci9?HKmkve}g)@d^@!E%11sbt$nHhbgdT z%0!0eErJwO3T1_vjp~KaxAL7fzWxwJZ@(D}ZjoRC51Sl+{*6iTvyfu)J%Ah0Q~4<` z(B0Jv;(@w<#`80dq9ljlkL$Ov{;~$5-93r(|FM^Tp}OcM=PzSy|Fai83)6oeg|^2R z#d@Q7G$S;Z)?JcpYXD-}92rqkPw!$lfI!f0h>mBoA5k%{`qS$-qaQI4ee=5g-<86P zK9G@pQ4od2cnx?BL zf}ABh-n~7M9^rAr&O32L4Zr-v5q-t^Rh(|H(|GjQ;|8n&EAO!%Kn3)HpSRFBKonc3 zx{}+jVCuxs0BbL!In1||wi7Rk7MWyRWvxDcg#8k%oOIc3WVjSn8AP~<(NK|Xw}6DS z-pUwmXmW-6Bk&kIgv-7u`05DfaO~b^x2%;dIT{u^lFM7-J!`h+FqFPpkE%~_wHORf zv*&?if5v6L&9`aDb(5<-nnuZU8RIe9U}vg=$eC=83+Rk2hMo$8_k8>_o%6s-RJ4qL zG(_z1 z563J^e^8-Urc_+zjwCxIJ|FSPWeGI2gU=zVi9*!$!N^5LmbpJwH&Q02Qc}D!BpZ20 z_kt(Bx{cnBvyF10%N?k`7iH)u@os^Cr8dtNXB+w{UtExx(Pf_O7}ngX_EphzR>aa* z^=OShGy$3OUdu?de8MDmhkGD>S=ULc`3&=@9llv-tVh;I?qwrMWH}TA;_wy*M^FZ! z&KoS>gSTHf>|*puV+&C>&=93dR)P@ZC4-$BXSWdl%tcLKv3)CP5}P&E+G{j_iUo-ZIwH{11_ zmBMa)DE+>{+oS6l`kud2Mu}%>BZk&9;+yyIm2rmL^0&i+_LM)BJY5GEVML~XnZ$pk=r&aI_9wq^04zY$zpu1Jt*ibMVBaL*DE=F1 z%kn#sk!Q=06Ec#;Hcef-SO?6q@%qdUMq>-H%9=e^t-bkP&TCjn$ytK%f}rpJ<1{1S zTUzbEkYD?U$p81hAL#xId45dqhL{HO>a!xB|3Drhr<6B9z6}P$on!4T7Q=p_f7lFX zHEpoI5U08ic>DM!O`ZT3=OMa_d+kqyCUH%QwmZ3MC7ccayO-D9>@v%H@~8Wtz@NJf zRH(_FIp(OZC8TzO5Gsi9*ar2D+>o1lvGOW<%6@=Lw$kzNcBE4FR$Fycx#|&$JrZNf zUv=we8)*S`GpZ#pudZS*Cfs10e+iRYTlU^!`Ps#_Ke0OoPQHq_-i#-thnnx^xHF>G zjJe3VoccMtCF?(Xgc4(<-Y-Q6ATH}{{pcm4A? zkNdUPs_I?4cU9Ma=0F9DYD2Sk)BFnl(M{AI-!lf7qeO;Uy6aD-db4&MyZ>R6R?bk| z7>GVhPs7Wa(L)QMt4PEEe_#OrjrxJiX!n0mUw0T%@o&^Ck0l;I?b*9qlw(K0Cfi+v ze!B1foIqaH=~4;wYm`AkRT;d-)myUP=z;0%wL1~$P;s!)jF~xU7AvxonQ1rQlBFY> zB?XF}p5|HHj}aEmAyR$+2l3qhAU@Obo#X#UeDqxadPSA7E=z6xf9Nyys?5I-Ust}X z3#C3UHiCqfZU8QcP$*(pJ>p1xj|Ag+f6&)~7L3aouR3RcoG|dvuii^J>O!wpn`~k77n??d(1eJ}5c`6R zE;a;ZC7;}7IUc>Y`wHQ>V1n8Em1ypxq1a|U@uTiygne1a?sx(oEh^)jg9f>x z(ssrPHSArGJ?w3ecL(57TZ!D4j(Mb0r+o&wmz7b4Vb!l8e^4~F8b1y8vPi7RUO;yt zp<)}4-9vj5a9kNa4n*=;fBd>*4o9R9+vn^}l2i&D`o(S$s+U0XO-8=Q_*+3b;E8$ABl=%+HK7;z*Y{q_O#UyeD_ ze$KalYJP~&|bIdx1ljr=}~{NTs~W07@Cr2m=fbL3Q3f*n z<$Sob`2~Mq$+=WWQba=nx(OhG;6gJowx8ccUF9T|8t*yVJljptMSE=E^XyN`a=_H` zRB4CC#|LQI$aF$q2duZ9OFh!;DiSz{GS4&K81BTgb+tK~{Bv=7wnr2E9m%cWv-!3x z7v>2Fe}h{lK} z?)QA$E11-bI{~lj_-{{n`GqnlTLpv$upT)Je?S(u4~@iTZ8mD8%_~GZX`RxcXbwq@ z*kS7HcDcz}J1ovau#i;N$j*%OSCN>J8bF{cbavW>7nyIMmBx0V;w&#l@vv9vV+_OJ<@Ijg%LPZF4BnE!+o>21yka#`7*HU z1z)PMFSzYIISBB`n4HQWV@^{Q7P_=6H!d!)DVdA5*$HZPku0N|+L3OFbJ6~cqez)H z5NH#gpbTvHOMaTW(-2=mfA9cxP|2OYVj>CT`QoIR06u;b0J}ZDS0y%i$FNqw>a`E` zFwIzpV|NYB(pHSWm8T(EOY6hbJj{)%T@^bRezSzwXQ=uIlKbF(~kD{Q~wNo&-D*0!CuO|UR=8uhhb zmPtkG)^ePsVC0Xm#p8uGcU_XTX{%etpn}h&x`)S<3V|!9f8280Y$CptFl|VfLLlxtg>wP~S+?$Zbb)6+7?6 znx(#7F0zoHkW$~u8n9+&T)5~;Z?W`Q6rkR(!0Q;X_{hy#v~a{D)tb?6M511rV4ETP+Yaf2SD6v1o>$cVCp0nWedHwz8u6 z%Mw0f=H4BeSA7|OOk@@I)BmX|4V97gP9d?@sJ=oPLITt=z6+ZCDcnuAocgoCfEj_{ z`*X;;(&=gdMs-1HQ&o(p6-P3|2CoQ%zuyv{==cfSBv^TB9W4$|Hh;LOV8SM$Yd&hP zoh0d*e}KR>XN!~k zqb=qn9ZrC#zdDkmxtlHg*%#P=GK`gQx2YC0p0A!{7}ja3L#P||6W%|cn9L_4{R{|1 z$jB`3A)ICr5T{sYq_nAdEokPl33E4L=8rn%XSuTw*l$?rYv1-Ucb=Cqm7c?TF=wB{ zfATO{o~f|CF|>T7<)e0lWVRqi3i3Fia<(0b6NAC8jKb#;^G-z`uh)qQNeMNBc zR}KeBP@U<%kxvkMR5Yw}KC(3K&GaQnI=Mp-2gvq8D8&jUPN6Mhtbh7KGYPI8Z;9R? z326dE=p;DGeqIX!9#{1#AXy1&cRgfPfAJ72vhu5i=j?T5j8yT2#Kr_I&FTuGcHpc5 z0#>_EVi{bsQ6Y+)YRAvO?&6a_c`eX?bN+?}B>ZGOi-r+8B$h3smyC}u{Ep&+>I?OM zQ_48sssZxz9V7b~xS8qazMGSlm99h4s;!bL-XhI5`&?jd-|O=XxXw*iB>g=XdRJYK@Au zZT4-7Vl$k^T!weiXcG0aA3Qage-cP{#Dn^0c09dRCQGY35F$J7&BM}p6u=Wa*q7-~ zm7ne!b=W%tvfX_R9IlqjN?TGT$uS0B0=RczCk;XkwiNWM>S@aNR60nd-a#VdX`oYV z1Fp}?q@dtN`t1Rx$X;qacnds|qdKf}f_5=Cg0j|uIR+N?-_mey6XL2j zF{qX@j6N<(rysb({*%u24MrwM`wQh)@BMcw(eokl;M_{DA9$&~XL-C~32(?Fa;K&1 z9~R|Q_q-%F&$7Ms7#+}Cf2)9Ei#9MP0VmUd_c7c-@F_una*^Y5PbT=(;)S&>bLS9A zr}qu@BU9QjZSO+Ifj(tB1lQ2iGYN2wwZz zb)?eeFUY3$kJyX&KVq-N>sf*P}$>Wf5#C|2&2VEc&Qbe>l|<5 ztD*yvjkKcZpI`oOj#2M|B%b-FZBh8&f7VA>*#GlD^zYzH7m6W8ydh_$ zi%|V=M%goRdbU>R%-C239=}%hMxCX_#SKy!94Wc6t9~f&y+2ODg%GB0Cc&Fvd4253 z(c-Vp+<$q^AJ1mKZ~7e8cl`OhzpeSgP{0?>Eb1hRl<7BEJMF{+)7@g$@j6T66iDGt ztXneee{6gun>Tv7sUo~w?hw)vn4;GS&V{i)E{OmPjGAvyG`WxWaP0sF`CI1JR_waI zA!E>+g>57Q)P_okn8cAj$fI^ciJcwiJX4<#x48?-?h%VbL9o*;|XJ{z?zc zJ1!GFs~X=A#Pd*Eh{O*#uwR*?vb@t#Ti&t_bi+MW)?9HYWygTs$E|)e7s_to@8y2% zs_jE*x**IXpYuQn#{*W!kzkETINtTq6ou`2do`BCi%)1y-iefvjH+>e>VjY zE&WV-3G^Xwx-q{=^_CPl#&ZMroy9EDorfM2{dhQ&vV zS;gls7>=sY)=MnJb|IOovuOMLLHo+zJ`^V8rP!MPAq}hlLmHm^5W#q%DE>9@(iO*=Zmr4I9f_xh$^&~e$pfzAHf=4O^+ng_`n(0w_AArOOS=>1sf>KWHpI9=o@M!d8AbMlzoak>c_OYEe>{I9;a9pA z1-m(bSXV#?jqH`?r+*hYYAdY4GtFC;K(7kb>#XLe%cd-JW`U!j&Zvqf$e&7)KW9L& z4^%o?(b~|w<3dof=><+v8s>2rRAY5a>QDc*{DG98hc)w0{rW#ni#Yz%iCF!s6X8QL zHr3?zy9#IK7Z=^@>h$VIfBK4thUP>PCmR|DOW>k~T|d4xeg;XI9wKarR*+M9gY`5c zorE$Ek`d5+L4QMhL03v{F$-Q|piXRRTIVaV&FOZ$IA6Ve-4u9(&V_rFQ4BN$Qs8^$ zGC38WAE)xOCe%3=12Zs#%RGy%2kMiLCx(LW+HM_UnSz~Ua!};Ff0xDp;hYxj_XGff zk@c$Ru?aH#qEMEr%PY>`Yo*IaHDAs%HA#Qy9GFZRzZpw z3%f~q>lkB~;~|#qqIL@Un>Q45mK_IE7UZP`t6}v<04n7?*86AZ9wXdbYN^B38q3TN zL;ZwTyE}&C={&gUby~VB8Um7+eiikWt`$TS;PIV47|T5%f8)AlNC&;~NaYrvM>_Q( z0VHIZWgwN(Q>=pNbtdZhWXIF0sk(fVc54&O&aFFmxbs7IL&No=3%JC?Iui)6rD=lA zoFz0crbIAA*IDpa*$ls@M@c2D&FPg>_W@2h!QYcABqa<63lq8pU{kUWFk8F+-5;u{pq?phC6`612nglwpVoe-=Su9ehlNR#e;LX+$UCK0x1Ip57A04SRg0~C+G~(J z<+B)H`ORmTFQ$&FX?4txWrvMZtk^EN~1`;l&|D_aormi%{_ zH2fIu?Vik%fgkKQN|k(VeCw)^at(+AodyiCe7DIp#fhRdCkd2N!L80^UB01hjMeX3 ze@Rh0|LOj>K5{8o%U5V~iQ4KN$NSE!Glq{II<{>4*=4jlBwjgts_ z3Qm-tDGgcY>z9l#Wm(`7Use<`_juVm=tx{}nd;Wg^Lq^q-pUf7EOL zc54;=`{lgY#U*PZStp&+Lek)CF_#=VPl{6Ms&MuEyi~5uT=J`%tEH{wrB=r&e;cr- zvj?h%SA{sXwM&h(3`2Ef(zGG)SO_q389$8-SMhOCZ}+ z@{oIOQu2_QV0{|<&RQ?p(Q4ryf5fXFN@N;QNyny`*Im8KmF-^1$Y)F+?6-!wc~HjU z8eZnLwJgUh`gnYla>O6T5SB&Ja^@jZO~IDglN+AE9nAFOmHs>moXkW+x}PuG%*ZN= zhMobEV+IJE8`hbo&~IB{_v!Ef)o zgV*`ttsC#Zgi8!$6=f$kd~ug9GnAf?rPE{1jh>Ve$CFfsT)}!^R z>cL6Td~$ma$E(G{gYW9A_c2YR^eO!FCxy(Ql8D}Vz|buO zea*Ec>ks&u=a+_dDB8rK7-gvak=e_4L6bnY%#mJXI!d?U&;x_6XB23rQDw5 zKaY3iMUUXTK4`^l1i(i<4W3+CZ#XA}dc+o6`-6=Vqv%L&DZzX{7MW$yDLE;+qo3FI zE}7C@vYD<=fA~MZB4xTmMKVhEmC;4q^_)dILo0s?H_{5HWYd(%$7yKVlnC|po)N}I zms<0^pk$sgg`d9x_dVCteR@hpW1fCI(~Pg08_$k=;#AZUQ%@nt?S2bS^bA`x()SfA zbs8nB6%lW?OBtkImojN3wC4@*W4Gf0Pf5pN%OBsTuYv-dAQj?V($YLM1QFYn$w7C9 zlse8If3(@a;1RyL<{kI3yXGCow+CmMNF2wt9a?bM0}>1MM)|S0C$|m8|7#e&FY9l49N>QoiGlq*7HYtFfMOjuJosK-2jSI8 z+q_I4$U;(HPx8D07q_q(TaS{;G-NjEAc8eoP#K@LFY**NAb?D1q4?&7g)3qDFTH;`rKfu zKn&*QB0M5ve-gy5)dN$u#z_07r(G~SxB|bC%44-K9!TsU&< zf0+?2O_S{g^LA|EixV-FA1yKcR>x_VUxEiL@Md9FVtkUnFMg1d*|fs+CDL$|agn*{4wMFSUQssPNM&N5=x)nOU(`5+m<3T; zwAlerhZNDlCa}7kzqU`3&lQnmm*#Ajf1@XnbRBZ1ehdrCG3i(yFD7`2JQ(E7wguR= zo1Kmcm$2PUs2UvanY4SXpst~dw;20M_i3jxl&SqO_C1?F!^&X1OvBNdKvFltw5^ad zPwfK+r`M~l7|pi=s)}?l9t@UYY06b}C>W4Yi`zP+sSU<=)7Pe?g7sH_cuEg;e^!$O zi6O*}DgW*@g3P2YEHstsL+Vr)p7>pOF!x!;EWbzrvYCYy&}mI>q3g~>{iK;HNnEgZ zR|*=m4wx;MO-*i%pJG5X%ZoK9Hz;wZ93W7hj2O-B{Ef|!eS>#&gIgRxZ&9tWHpT;u zVRwTm1~loIPI6Cttl({q=xDw-f0lq0F>*i9ZVNbr8|{^l1J6)HERyqO>rus!%5hm7 zW;Ld=>=#}SFS*E|yd+A|X4UCJrlD_?Tbn;&J596AR5KR7JfS+>wvru{HIeIfvL;hx zUIScpw}ne++fV_Q1@+Z(AJ|{mW??R4?g#4fxMmp<-v?Bt=OU5K-(m}4e{hS`Vw`^k z3~;yP4YoHc5?Fn+Dd1StX^WElg=N-#%_orGB7B|eg(T-t5L0Y~W6_fWdUx(?;g^ZO z+QbMmF{c-N330WzvA|*!oxD_-zs$QJmR2HHOI4F;Yam{ltqr)~yPFN1L63XzY)w3R z0>*u_(5=P&Kv*XI^>s%Be}aN^|C*(g@5gA6_qfUyq3Izv(bk*pI3tYf^`uUi&>=r2 zq{bO;?eb=|Lx9zzybRpO2C~b}FFmDZV7swnVASG&>IBV3P{{pwBe~F}WOb;1dIktNs z9?0}F-vci8-b%msVeUla8-tXAL-mzaknexd-7xk#PQgF5_y0(D-~SWx@$daaITu|s z8AprwVk8rI66ef_gbnkIW;R(Z+|aoQmip<2GGohtFHjG}mc}A}=N(FE1hS|tBAg>Ze|1~~0;87P38nyoza<58JwEvQ z<|{T*qM6N-w{#-p8!0o_bRt6!l9O2UtBHC5-M?5cW}(FW~G58Y^B0o0ApWYYqXS)a|1T9+Pz~)lVRTH%c&m zxl0WJL~dch6x)m_(f|wN`30si1)`j@G3p#gSeq>*2L#0(gbhQgP!SBjQI}?|*+k&iy2D zzB?PzX6u%n1w>gUQN5(}qCt&KqX&$c|8QDlG?LG6FuL zHB4E!Pnd8-qB)_@Dl$ zV*Sr&HbrWP|N6}4BX}veR#4I}e^?mEzQBu+mxyUq3rRDt|9eFcV}6AM2Mjjlya-4x zuWCN|yw2oTn7W30!g^yQy!_=4@s+P|AD^Yc^}_3MlGC+2?a#;ayZjgQry>GbbG7OG ze4sU8*S#TeYro#+!csh+90AvrZBDW^_~48J^Z8wMIgN(SApk1~*p1)ae?NWj%cA)# z(hN5%JMr2Zw6bk>b?LyD$r&YEHH;zhuocBt}sO+dS$>NuGlZhF`}43ZMp`rhcKNLTYNxNQ5**RuQiH# zdf%!Gj$I7>{3}NZMLd_C>!XWsR3Mb&eq>?9r>$J5@t$hre<#`je~^GEGvd>hCOj*e zYi$r3%&%`2_29&r%8By~0V*vs$_XN(SV0Ng5XlDoXncHg+X;51xr|1_y+EKk^9a-H zODrJV0>~C{x`8A4YL7%jEm@ul4gv77Bg_Sph1VB)MZ4Dmz2ltjxW@Rs`cWz!yaHS{ z=}ZYO;72YZ!!--de@&yRMF;_NHNx{G(D~+aN^J7ZH{4wOUgOhooVtB=4@#!JGCo2B zRKrY8?jxU^{nL15GJR-$zfH~7z4ZP*6jz*jhC~ObWN3r<2hO32@X01D6qwE1Xf;%0 zm9KI5OQ6>OI?bwGP+)a)i_h4K;UazBOyr*}UI+Ozs(JN*K-IH9&A*Py$S~TI=fCv4!GsWqyvdZ$cwc$9laeiviG zPMOB-N-gU+e-kJ&HWnfpv`K$^BhwB&qP5fCs&TcA-C2IHWvV?X#W(U)0Ff?QF-h39 z8BkZjRixYZ3nsx&W9ijNShwks>%IUN6$kOQDIE9p#;{MZ?O$myK!MQ;7X6RQl|1e5 z*3-JFvu)Oh2&Wb6(Rm3b%x*g9Oh01KfPl?h8kAUDfArs49>g;lWnmv32Fj-jj1)QY zvuF_lP!YObuoMrF1b;lD8Qz;w0UB5?Wt%^S(LHJZ3)A?EeNff_B%(nSQjhWB zRV>mDGah&27S#ew$kCB^#HG34#M4HfSE$5%bFARU?;%1T+Iw1G*#!B)xTn|nk z<$rz|-}Qm;K5B_=u!naKwqQJJ?OavuZJxK0c#0olnYPI{d0Wxl=a~Z39o0BYXp_=S ze=zUuHb+X&6|N2!>##P%{lZW%u5D=p(claSN5mSCkg1i;C|3aujHbb;cp`S#nX=sz zx&zK*-ko(covHZUWKxfWBEIg1U7-f}4R&jTUn7}*n6Qp1>}6BsmpWOcvoQV4HZOdL z*8nXcHl_sTP1mj7t$^hdua;KwwmuSwe-&hSz%o0;m6}{5Od0H#MQNns_M@Wi>DwmX zt-22^|5%BBBzOEh=NKDEq zIwxw?od>;KYZtaXD5RHkq@Bk_u6`qXqGi-#q_T)H|Is!;xrpO%-&3LyjH?tOe<5Wi z5@7nxg^0`S1H z)Xf5XYyQKSZZAm;$7!M5&-_&^e~tF}x2JX$lVs!1Luu>j3xV`)K`a{khj7Za_8moX zQbbN1n~wteV85S*L8}0>Z}sC$4@-Xrz`DT$pK`eDuQ@;3iC>Noiqi|G?8o=NO-t7x z@^N|JA?1mln&h7xoHJ)i-xFw<+z?cb!r}X5An4_NmuJ$4(V_4tEYTT+e~wiOnZ1<; zoujA@kWaw6rA*&M_2`7gcGP9|TG4E5#9-T!9JU}gHx zV&Tt!UHhL%Uw^@C!}}umf2$2*TcJrq7Ohy;CJUGS6>PFl_KfyUJ&QItHBD*YkvYBQ zd1Ci^z|So`d^!rq8QHy_G_{_YCcEwpS#NVZ{CHmHdE9tDkIC_Yu!D&SX8xV%*BB-Q zV5ZadDFHn^==g44mlIg<2!HQZkK&c^R$j-PA~ZLg*ucy-AIq(+fA421bjhj}>{sd% zI8S%UW@e703ut3p^RI2{Po7{>^d)@|TL9{HtSI>HHW^vW^?#4-j@`Hmh*kgusk>9= zScR!n=CCqXcSTux(;_5oE~7~Q%Wn^LDEq@GnB;NxaeWcpA}%CPH6&KoOcE$FL1)Tr zw&jd&y9Fsy^rsd_e>~7+go%!hkzR47oAx22Wn(Rq;$yZVFp$6nCL`KQYs`>vtw)>k z#w|n16O$s?F;C@`@n*!X`!8bsJloZ`zHtF$8}VqXG2#fw;(F?Q&2G3ogldpg$-O49f0NcfgV%0>DN~sW*EMgy z5i?G$cC_($b9#ZnNnSym(7o2THh%UQEa0Rm?Re$nr#anY`&m0-8yF>O3w1W|qpZ#X ziCN<2eO1L76gts~_EUu+gYt;^M|oI`-8=MWd39k^H!V#Vmr}G$iDwh)T2H!P2IXR% zP|Hh;GU%f#fAq%t-1wv&N$GSy(L)oKqpaa){iRqol~%R!(}VAc-&}Y+N!P_Hv|;6i zn*-HJqp{r|M63J@ZLoEC&&+FJ+Tv~WMVov-8?6`Ac&cB_YcXB`FvBoL`$f zB~C-WQ#Eb-?kpOvV%Vc7nFm+o*fu0tW5?Ub)6zzKdP50(d=huUNYk8AtBpRw^WUlh z8Yh#mzV(i#d^1SILS|OVmL)Q*e8Wc<=;zkHBO*m+8oajnCA6B>M=fy>+e{gO6YrK#Z9X{Ezis8g^eepx%IJ`<%dS#)?TDG|E+^}6*v!(jfrp4t{%eV4E;!Sn2 zf2k<~^J?vplAJ_T3%5d?xP)Pu?JI(O`KE1zG78Qjb2-LSoV>ttlUG`d$s7? zMj=E7%4ZKXvP-RUG#nJYNS)Ve9n-W_e;%QEebGMYG#lpHu@>z21!2;$MwZ;OiY?Ew zJ>hwLkWO8M(4QKOngd1nD+!lRPqD7&83Sg5XH(x$4du}SV#`4uh6&_8EI3uH^=9@L z*`Btpt_w)Dsjxe{?%DXh$e$JXI}N+dj+>G;{RX>*`=J}wPg;06h>Go=r>-<>e_RA6 z{KgLF071uQ3t^m0=Xz+0a@dAv-SoWPC@}scNEu1Nf73vpACqa3Zali71WR4sB(t5f zLMxzOSa^HQ94t2xMK$Yq4ndWq=3oVw2Z@<*Z=WlCbj%78oD6x_Ii=kMx!0jDZ_3pD z*aAU~p>D^fe~pF~$XK(XIOodvf7#2SeQnONEqeNJW0_@mjfr#Rie?&9b>W!bSySB? zT{qq3lF=kElas6=M*TB3ef7|$tw-FiLi3gxVqL1DX6RVDE|h`ekI=IfOf|b50q)l% zI@Ls|2+g*;Lha7sc;LdefYE8Ue}n)5-Lzf4S^>4qwc& z{^qzCcCIYN#yD#*PFrs2wq~QGHjaKDl14v}zl%yqNysPRp{O-bf{p3$O7MG-T4@-A z;f60#{$(T2b=|nqu-t?B%Opu7NY1Kd9anz&7{kEizVVn%SLm*pgSw0p_ir=-I$PVx zXS7jCmMQ)x^d;((GSub3f20(b3kcdooiw{S)9u7xkO;~#WY#*xuUd-QK1u1L4(Uuy z_;x5z$MzEIhy)`F(K4#!+(wn6y>6&ScI#IPU{8&9(YB+gL6uZ)Scd9lV|Bo-@O|1#8m>_ccY{K^)|vtZVf1X9lj5xa|r! zmnE{z8!7|cic8cihAJ8y;#_W}w&~|2atc;cWfm~r>U(1KSBTr|jET~AG63kFMS=## z%Dth9fKRD@0_vEPe>uw>HD@-;=1-ad^4P5+&ckcPgHd?e-1GB4v0LY|EUheb=4SKm z-V*&f?2*-#Hde5kUQ~cLfmLNTS&PFm^?UqKzGdSIK!>h#r^iCzT?k;U#%?O=!CI~n zxitS32P))RQy!}Z&0(U^1Lp|_i?;MMKJ25rJSFT_4T(G(LG$2$=9`yp;i>^v2`XN>38#F1mRM?Ppe{(^F|W-&B#vQou>~ ztTd)lN9Nfu>A2qx>>u-Lbw0%I7rX&C3wXq_D%Xjlrre%Mkg!1N@1WQE zZ4mXa9%0Cz0s+F7CnYhvk3S6eUYytLRQX=Ue+C)oEu0UJ7xf7ld=%lUXu4{@Dw3S$ zxpHIup0m6f zVJ$6pA{#iypkm^1yF>3z7)Wrz)ATF-_0?UXkxD6g$pK(%ICrs5jXV40I4SA2%LSFsG%1HYS{mS-S2hW9+YkJ!i_71l+BDg^LBYLfKwe+i~X zw|fO`a;~fFkz9fmm2DP$6tNHOL^}T>GZwBtF({A_Q2sgiT<&P^&N!pDvVpVOg}q7Fz}7aJJcl_mCoV*cXIv@CP>2jk%CgTfp=6_DG%EdaZY?AwB{$ft4sxEl|pFVCxXf`@+qgvf{A45%|%0~s$P zG0J-zEU%KX;&O4{ybC40f1@SBBR)y2M!@=th5t~N2+cK<4&D6s=f0;yp%t`m<_t5K z55P|u*iR35_ud!DUgB`K9ST=r=v6Wp-j`+`ZfndZn+!GLw`@VvPgm2Jz*ILeR0`80 zp9A{ufd&o4*!U@S7!Bk8bUZmpJn%W4vNTtU`w&YjrB<43hBxD`e>w^4X}dF$Wftj0 zWKTAQ<76MKN;WrZsPIwyPoxH{zmn7TXRQ zxH4gU@VVyAzAgQnf84rP>}&(=MI^fQy1t-Pv&;D3w}?rDNtOl;I)UGqlMm~)Em;Bq z$EJB9VJzekGBd=@Zhjd_vp#yG*D~=+sU`^0re8zG;|)d$lvCfZs^PGwi3>Ex6*a9e zjfWKm#MK9a`6Fx?IC4Z3cmvVwq3?GL=ul(yi`+1lLZ^&6f1V&+LKzKH-0;_Tr0`LG zf^`kyAHxiINm<;q@cY#Jsk_O#!Im z-N}WQJ?V3oHt7xt4)c)xg%!o+Qlt?|Yn6ZaVh{H`!y)S-T&E^0v1)~8xwwmDwP|zo z+j-<#{_7q`m!Qqk*j~r|*uLi-3`;rZ@VZCD*$k(Qf5ax`<56Eaxel ziPj(GhtrUKes6_~C8C6uBeI*{K0msDeg?ngeptJAe2}>-2v7(Ve~SBn;oL*yQ(RvV z_W8P{-D@rp+;c1;8_{pCSYBx($<|EuBnT%ALC9u92j(!!Kufs}0-AE;(fJEMv4%9z z!na-VfAl_;G#8AFBbMUPCK9$;onr6`b@JT)kBM15Aqw4Il^_>1i1ZiCB4_#+o^vG?r2syrQJWaCUi%n2Hv}KM9wM7XU>-y1#|6#R$hj=ORw*%0jsF z-=^7r0B4M}1gcESQ>#r9X%+4=sgDm}khgT3!Fl^adae@JY89hjlef{U(Ro*a( z2tn$94u7u<0*kj*d?ArrfA%m2_a?*BA)2@ZHa`J%;mE7^oTB* zX<--+IDSW*87z;86+GF4_6Gk(pmifpmN>QToaHHCQAqjmq98rdm|RwL#)h=9$uw0R z;1{!{rWM09sX(iXd@mmkym*wgRNmbDFBg~~zJGf;E993i|Jp44Uqs=*o%%%yt2T3j zD8Zky!e`{gvU5;HnOg9%Q1jLStu(?Q)wt4lOw{4`K|LKfvlgw@?JG56b3`oOFUUdI zJaHaz8!8$%goC%fe_YjW4=-yrzhvuI{07v+I$%~4Pt_im=1s)JK(XHx@nKX?k^Pk7 zNq_daTfVrGzlU>1*dF&#G*qil(J~dc zOYP2}KhqN*WTj!M@n@|KTl!zQc52%4oPQkH55qh0N$$N_$k}RjPOk1KcNQ(WU<4cN zR*P*+8`iTo&bVF$2U~J-pm80CZlK3h4@hMHtuI4EdIK4{&*2>0QT~YS&@oyRx!lY+ zAjEry`0i3!)|k{6K)B>np9AeU6DO~}+5XEn2H&4T#^uY3yPQF0maF zM!742--1C^RmM@I7rPJ>$o~&%?|&3s*}J?8CmnRKV%xTD+qP}HJ6KW2?AW%Qj&0js zaXQBN?Q!<`zH#>5f1itaQS)k!s;BC$s#*2C3t8lvawDPc%p@APJAI1I%>lrdVa(!VmFPT zN|>z&dH^%dejy0{UY%B_HGiY09}766CR3gda%y_%G_>xjTi3tMcZT->dVHz-hT#si zXu>;MOOs@WmY6~CidhbpZq~Kq;%4_rrwh7V%fay&M_|c)kTbH_^IXkh`waSSUS>@? z<8me_?!k$P-quT-M4Pl0b}Z{GsN^Vr<{!4O@h5L<`{vZemK-j`i+>45R`Pl}$CzB_ zt{-`u;^lZ)LiRKX9Hig<6^$klfPJsImgO*CWok)PU$ADFW)Wk&O@767+_gk)b>AE& z0G`{fvsiDkhn-;LtVq9RAEkt5Y*~yl&i5iF??dP@^V8M%8Wan{Zo1RM^=u}}W>HJ9weT5iF()!>{F1iA%uhx}p(()c8 zzI3yzewo1PFhaJq(J$mdPawJKWFs}D7c3G~oa~&*S^9ZXCnuKhjRQrS5)Bc0O7_<_ z!Y0{uKm(#Rfp3%R5uWx7{#Y$aiSUj`Kk*~DpZSRuHUA$m;(vzaf&d`t1CJKcElkSW z&#BgvA_t1hF-xX8gZ4jvp&T$_S%pY3-a_R;Y%OL+pRx&=rP6cs$;y=H+_Wm7f3O%7 zyj~rptNtyT^z`LF!l7z$%FYA?7+BSR_v47;|7It%JTPCGE^%pfSa+qN@d$C60t(xZ zpjtxpb}_pHTah_P~+%DapNs3)p`Qk|DjLeL{$4tu;qf=vFw4 zb-GRapWJ2hxINYe1-(K1i9WT=H9O0(K#-y*ca^3Oj3fSQAD=@nsebi_3ygWr~ z92443jZRTa>g=Km?w0^Yp4JdxVve@3WZWkHsy-Vf9e;`6I#CpX{E5Y!<+rM`y2hsE z-%ApvJ7biTSB&p2U(Q`%hU)`-XWTg{8Q7|6Z*HWkin!Blq1nU$)|-}B_ZxE`Lm9Yn z75(DW)yt$|3@=QdcMc{wxXYP!PIT5|Rh+tbiH#7qaxiKO<%^+G=Py5?;h%E;%m+A# zQrZkBTz`fhLx-)V(iI$ysL;XLw@%dQ+XJMH%U#laqww=+nmPEz=$}GwF0N=>A3J_x zbrSqu(jl1H#}|tgt@h0!YnxEU;any-d*!ch?TSqwbfd1IKBF$|cYdrN`IF}aBp$+@%#jbCKt+Z~GSaGrX2M>}|H5?zi260Oy#JJcKQNg}qb^eypk$E!C(&0Bfj*l6dnDKny52TmvBj!RkM<$f8NX@rcjt=dz`2g_ESK|Risr?@j+ zj5RxdG@k?Es_GRTo2w}ceQdh?9%;5-i-nf~;m}V|A8|=#szR&-#cARM8iZWG^Pp@v ztdG)9wdx2)m!!9kWLE|zMEZJ1Ig{gr*?;?nj6tWVW_+e1G{>mZnw7aZ@I5Mlr!NzU z)^cw1xrdI6sJ!DFW^@uu8|(|?Hdu<>G&Y<(t^o8?zWmuB+}6`>h02U~b7_TkSE4HY zZlvaSup}XhKb!(oqX@}Lx0uyduft9Uobgq|NgsT$yh@c`iKXuETPrJg}ob9xKQOU7;b>xJl`Kf6}PGt?UTZm8fH8gwbBWm zTB`M_AkAMM4L;qjKY;Q9^fCbnwqQqW*5fCmbVj>HcNEjqMkb0cxM?X)&IT`-4o7@2 zM}FMnNH-}&Xc>*>Lg5}=(NC!TPk*nW9IM{B?f@ck)VJ@kvbk9-{^{sH%)+;EI?^x& z3sOXQq0X+q#YA7)m45w4cvxM~kLH2`1FL}lufoH>7uA~oO>4x!^)HrUYM5nJ6kFeKohUsbhBuL-`MVP6lN)##`5EtxFmOPupY6ZccIhF3#fs($Y zp3T=`1L+F9+C&h4$z~yeT%zXk)@{^{lPhyC@#t(0Hzm`9zd~#7hO5{uq<7Zv(7hMsS<9$>Pc57 z6%rayJI;_#Tg@|2!ZAUkpyxM2mvHz2qePZr4$`>6eU#z8nIS>-?;ubg@o+F)Bv00= zq?Tz6=BhIarpkapkhR{DcVR-5Ud7-lfMvi?C!^Hj;9xJsiN&f$J%2wK2IB%u>2e*3 z;cX|*)#O2Bqar#~TS4ZOs%AK}=A7rJ8aeLR&KPZN`47Cqb+|~2ax{~bMM0XZmu)S^ zH#<@h$Z^dFm~sffAs)cAW5p9(q0IJd^ENerGSB*e^m`TAUg+7BdEMNU2W`P<+%lJ2 z^6{aUO%Mki)k+K1RS(P78f@wD-IFtP#27hbp&3YJ!j6+FAsWD za3{L9U1)Mqw7x-Q>(S_F)W^Y?P|g{KJNoDd>WHX_*QJQDzkk>VsE9RTX{HQ?Hx^K^ zB-+Ux=Qy+;SO(IXN=EKmpO)aBmd>iFxfL#mi3GxTXgTIl*i&4~|E60f_x3b}3% zfGNwj3Kxj$@pSbYLT(n@EqWH(%tEv?b3dLk*9quRH8^!^icvqPyO*!GFDYkvI)e22 zF=rN>xD;Ypx_@+FkEdof@(Nk!2~n z9lMYU7K<7`+cbm0DO919ekf|Jy~|eh$lK|$%(+bnA5ZihGo6((XUI%P%D87(4YwgT z(K@Hs^K4KumJ<pW!RXK|+pqzo^=M|9g>jqGsv1%KljKP1l6>9$T|tfJnre;}H_ z44YMPlZgQ}f-K>lmut?4_M~84<`C z%8VzOZ14vL-YnRl9|1FLd_UbJ%_Wn9WoFnpPGMKD6Ii?I!Ec=8J<5%_h8}24o5P0C zTYsPF$ktF+l7<WX&-rD zgfU!@MEgg$V$IAAl#F1o>YgjYf6|vg#eY*RI{%ZUr6K)Sq4@u7!)d(*p)X;4ZFiG2 zt^sgUe@Hh$#$<$&ZnZQ%$?d~I|-P%*nYX0=ez#ah7eRM0)M72 zk`iT6W_c>Veio5Bmj0M*A~7$@#lBKkEj`V;`CD3lqgU;lfUkaIQ?heL2X@7l4B5t_ zOhbJ!te4z|2nGiXOPN~6TG3e|Sp{3DnO_qPgQ=}1Eh~r@m~z*qfidBNAr^Cp8EeJ| zxDcA4#{s3$Z;>pTgay|{rIcBf(SMaG{<=nyNqekYA|CK!yE#rxK-N6Kg|buEk8TE3 za>#kvi^a8>_TsIH#AVl*SmL0QZRAe3u>laKB(5G6Y^Up1)6g_k-CIGb&IAJpP_B#Y z60&T5S?Y`o^sPZbs^&$VBL0zk8UB#CNf{Pvjt6blO|B(4q7b;nZx=Y49DivelDq+A z8R(lu`<9#iv-M5t%!{^TMWdFPj@{i!s_orA9Lx~eWPM~!nT8IIYLxdXLX~R z?RHfGyqB^_5#-XyRLbCl3V+;Hk$#XT&*SNaJymr($7*mj?bSC8eGUJz-njfTw+e2i zWrD%9a!FK8e`#{RhxF>R4fX+a-!F6xRpf5K3T2gH1^!-g!ja*%#vIdAM>=RKJ6ps* zZ0|J`qgj8?++cu%y)oEYeMmUcIt@LBrAk3t;I}*}SydF}cMWpc!+)!ISEIrl8Er9B zT{ri9Ep&X%`a*H%Xmos&wqjy!klSxmC?hLvt!3|ln&YS;RE@f5($}-V^C_GX#w_IF zI?{+O_ETJlGp71cwp$0NtGvUYL9TI%3=mm)j0F6h zIwBq9i;~1ilfi&~M1LQ$D6}v2`&#j&Wi%?^R!?AreWUCpvd6$#Lt2WJ-cS<-pZb;3 zk`x6ROHBB=H<(vT9vZ-E$wO-|Cl`%eQg77vE6Qn)1ehtC#XgV2mbmofYmgZOh%X77 z(@h#{e{r^Vh}EcDFd!_DHDifzQnSC;f!{}&zs$x9XkoOyrGG}GeXfZT^ZsRf1V4?E z@yre=%JWhb7vm1Trt#LdymWPc$xULWr-VWWh{_@> zQWD830@)m$YGES}+8rj!_|+w{xeTz!RH;9AL~-4~;}R4(OA|ioaA{5+Xp9QOl-|fe z^{U?5y_X#BConmN4a+K$Q<|3p)a~E!Zd0RLT}qrqJ%7f?tIP3IQc<8ztPL^H5sv8P z@VIR5(Y|K#bK-8XwwiUVMYUc8Tsb`1S4TkRDjc9x#Z!@IscfXr~ypSX+V3D9e!jeXQHv?50cQ<~y!k zn89_rJAcS#XKJ=C+bz*Flf+0ft$l$c%zEZSbH1q&y`s&T%E4gB=$6FCA}uQxkV%J+ zu7$40L96s6s5W6Kff?gYRRb}gbJM}=lK^d9OxMslACtrQ0{&_g$)kG$yRK-5QT?|X zZ#uZSB|B_>JrJ|G+O6%iX(S*gXQ>Env!4&L_J5Im@!(q^y!R|?+$UdLXHK41Hr zduul^<3^xfM?Ku{^rdKKS&Li;ZCf(5N@>+lv@H&%(_geJ^hSg9;W;!PwO^5x{p~6? z)_>s7>MH&fl8`eZk}RX{w240=S{Oso@IKM=tf5gH#vkjAAsxu?8;mWzUf^%iVw~HU zo?Me=6%77=kl;j+(A511cM?SSKqfgiEJ`wf?oZ|OzbZnBWx3M_>0hs;1IBvK#h!3i zEYz2c+L(cBXg*7&GqR6d6qbagN@~G^!+*Wbk*Xe%EKWy;!ANETKM_SYhjeqqAaX^% z2f=i|gB84+kUxt6ZpBu|hz7`ozC{bgO1+?Q_viMre6lOvSlw_2VV=CWJ%0}(B)Y}A zVG)WAy2HXbq0(juiVS;^@gxZP?Qx^EYVfYXIcc@#_{lqQ!?h~%Ny#^<$OsfAu8dUm230Ye#=quGot(4I$`<*uxU4k}K-0VrF z{70`LC6O%brjY=0&;#$W(lcAN27mkNS8y*1IRTP)cG%aq|LC@iBZA#QfPt~V{8wi< z_y4&B{!8s&vxoF}ZOApjFzgN}8yTje)ZnrV8S9*(Vj(iIhSb^;E;7^3?Dni_@Xen> z=QC4HWS&{E2i&m>F8D#SIDehaxO)Vc(QWD{z1h6pwy)m&w>M@k)1-m~ynkVg;q0=l zAy$xQ|2cVpx27I!B(}}69uo`X%R0VHRmy@aafgz zOK0RuK8Ayc8&2(*jZR~KIDb1G0UOvg*#u-;Y-Cn;WCmLU3+u(`)*=geLR~}$WC%)` zN1Y#gN!0h`X>+;gfur}9*z>nh1=pjvEt#~%bc(mB2COaiXXQ6q z9^&fW#8xauu-hWwb<%#c<=^EWWs@>&e<10h_BBPf4akv-)F#9)=TMjqVGpxEvoJ!74M1hU^y+bO4Cr+Hj!IBqkpf5p4yN2=_| z#ItPIEo=_@X~3dTP6o?Xp6j-6Nbd~ZL}j}u9B zIHY&5Kxignl2Bw(7#j7>HEkK2^&bpAC)?S6(|-a_SJ^M0x2-$i+M;YfNw6tR@dvO? zwClPQMcg}US})2(rPgC%2$V2<$6>FrZ1)$Cnp7I>L?c@s*d_pEdj?da^vEr|*llHQ zBRr_ms1r5LZ2gvPH~g6WX&_Tn{8IU>V{EY~l4debi9U=918e(hX*%)}jPUtQbLNKj zYJZg?m*qit{1fJBW)D;@u>ytxkC|(jg5P7uit4V&QofYTHv9Y|a_OdR?>orA1;x5; zx2->S#p=9FG#}I=;#k~_rWrrA&NGiJ?HU_&Xf$wGzoew`)5?2*6=lk=BB!CT&MR4Y z7g2BXjMuUl=K!2oEf1i#joHD$uw*;oh<_a*2|?rB6VIUfn45AWA&z8LxB==^cjDNq_TlhgmAwZBh_^l>G`>+j20etC`j4)BxP6Y%{E)_%J_W7-e zSk?Km3s=v2sdswcy&qNN>@b2LAND;fRfMoR3TpOwM-aOD;z4vB`A`bxxj4BStbezZ zVz1Objit$}o)iPweRkYBx0qt~OO27fRp-3QebFG0x z;2!3w(e9zTih7ZCCunhdPw4eDbCIkB7wj>~-2CV)d#yBQ?N*P`d+K!P%Tye5G3*&_ zAGM7^!qVMNJ_0+57qN_H@9F(MF@JfS$tg#^;3T%JT^DQk2=>Zw*JHO5W#=ZNr~)+bk z;A)6K7yla%>X}?K6LWXC7O535tI=;%a+;op?2L}1zkx^L1}5w^MatXYf|b-DTAlb8 zQ389Q==w8G(lAq-^?MY~0oNo>??J}x_tco)I#W=g>3dAZEqBEpro24L2<@`8+tqAG zpmoA=V3^F^#G<@`N=L6=et*WwEuq9tK?EE2w$%C{cjx=sHhae#w?N&U|qTGYhM&dSxv!_i#K#NOWYAL-v79^0$-?L!PY{X4vf(g^lNWu-W+g5Kf+nB)_;_hd4?vre*d2I zdgTd(@E)!f4QC#E*SvQ;@i&ujQgCcz9~tuLst8WmKRQc_ukj~fWow;A24eLNU!s`Y zP@48ny69x6<||=;&42uM4zkHchS9PPDG0)nDMDN{>JedDM!!^y5}AMd55j#K;IAX* zf7JE*&%^gWSDB2Xn}xgEzsVL=1e6AtkpmnTphfeFg@2+%f@7aU4T6b^ro_`WGlOkq z4>r}H^2u((1!AJ1LJ0jJ3gZrUls6uGx;l8tp80(D{Q`52`hNi9SPbwc!L?>>vN9#{ zrhN$Akzm8o10EO8j~lWq#>I{ZYGO~DCb=Y>lVrYk!@Z7jjeE4H~O^W7q}yNE@$JtvS=ZMa#Yr$AH}MQ59Retn$~I z_CIatE`Nl%TP+trnh8bPm94irHhiTP@u5Q&f8}Pl`0CwjWaWxdmia3^Po59!I80afm0iD0OK${Fnk_52zn{wL{O8>V64x3)4oS#KlXniwHi_Sh`?J zb3q-if&N2z);t^@V&A~P5TX7n$5%7AQ@3`tFn=+ZG%<5`a`pNDc9PW{lopiH0~s^v z7{rE?VV^lYY`L7Fjy7O`@)6|Ol!(VCa(<1Nog2k=J})|f%(z0&5br9(ZhSCI5NM5@ z4l@EwGd|PpPY+MIxxHXjCJF5B&Q)>04`uf)>NntRDU<|2XdgpCb!gSB!Q_jCdjrd`6lA}dx6T< zT-~U0w|OBeo!`8SjzhMJPp)e;_V#ZxuG)2zQBJY6wwcu)bfU!Vo(NA2GGGA#FaPPy zsMdv=h2|x`nA_%J$`bUYm}@gPFvG^^vJZjaqUc1Lhq{JL1b|jQ!tCY195RQPG=GY+ z(Nj^uF4|U8P)4UW58Ds!peHwIcxtO{>dj|)>C+{eEt0lx{gmA6Q-7`$nLL16TS?nX zRveK5P6U9w6yKxm0IsAB@6r#wD^S5&;5tJ9;EltAaa~`vzRTCMNA4oSyuHQ;Gj~oc{kPMH4{|Z0YXVY?hTMBkuX3?vU^Nqd-(eOn;bEMun6K zHc+o7^YNxbtJVwVOSV^-G*al#SCLE03bCk+{b~3WXnK-urfc*4{o~{Nk5X?N;$Z7< zy0|QZIEH$TTZb{ggR71Cs_3YxfQ=MOVu!C;{e$m%vf5QuE@PGb6AtQv4$J&~bab0{ z2G{Wf>}LiUP^|a?iu@ z*W6HH@H9zyg{BW44SyxKf5q9H{Uy3X4(wMDGD}2R#Su%eEjykpm^nB9G!8~p)24MB zvz1G;7HJiuZzm39D$L36;{5IC)PA7JVRHKB_F(hz^oJRsUm|P#)1+eK(58T_NzfY7 zMomJd1WKY6e@mVhC%eAhjJziSxlim>%a%N74`u9Z7A!8IG=B-TPkZBqjXfAbQpp(f z>!~EpC7`;DU{8|8C-ie47TOEO^AzSO%19}{5fVxuD!GQFaAdZ2gr&g9DGV2JZ#_Sm zJ(d(o&IAlCU7WlyBK`8l&0TVRQ^)FRZFU!(8Av1Fx@oEVsATODGG36tAAO=sNAccG z>?2rHh;I0wsejpUKSkC_6&M)%{}}oI8|XsR;vFFSrto>q-G#NWZc!GM1| zCg0>Th0!8MCf4tRNCPF(lXtp!4eZV7*81u>-C{O-r$oWQ4p*+r+ErIC7wX0lwk%f? zF8P{#1np$5t*uSjdp53rzI?3y=DOeZ>b(xQ_PbWdd4HV=i39tCJ_3iq9gc@AHupA%tCa4)aXLS9$F9tk=!a_s25G4U>9Txv%^u93%9BpF`_pqZz`M zx?h^lw;W5O2$5|{rG@2Vf5Fk)kqNqgPlL1Wvv7EfXgu7_|;HPN^-O!?J5FL6ZtX(vm!^7=s-$Q`_q8BKdJPzjiGd zD)|lePL)DbJfc!GZ!?F0^G3u*^fp)YVI@r6vyX=V1iZFt_^rGKY+P_TA-<8qrlk3- zTO5ht0!qetB#$uq>T=r<7bZjzfb$c9!xJ8XPJcxdpkb~74(@M~%+BF@!5e?m0G6rR z*tQX&?>~>%#zLd^s~#EQfb0ATYsGf3ItkE)#_S;`4wONaAqbFxZi84AurK^5MDsR# z`O`$pJdDf6^sx5w^2P)SyRPp^wx%H_HsL?C+WwH&I}HG`&T0IEge7sanWzG;Em(E2Lv`vNQeV_`#hjnR;{- z;AO|dGk65W#@3q7Z^hHD#1SY_&<+5U^Las0&}t^Q5I|F=I+8kfhNX=BKKb;pWz4%h zvmH*OMcnC+D{s-cu;4%^4Y$#S?R_UWt$%8mR|spau|GatCIsXvteIt5g?;*C(P^^x z?A*8&36+#%_RU@dpFmDCrWyo$MAmepdAfX;=7cEYvUXcJ>>a`d<=(Eq1x%wP$5akn zdg9+mHhM=JSFk<-hUZ85&X9iTrOmpnLlU_3C9)YhW8Ny2eJl^8oz)%P-91}a%zrs6 zHg)pX+nUx5TFZ8I-!x5w91u9U#Ammv5PdR~{luy&wA%{DRum_(;p}IPIjZ^sS3uG9 zHx7^PO_CMe@U1W364HH`wKugK9!b+YaI2^gH?5<|MIR&{yhETz`dvD9SP9Lv#AdRr zL>zvQ^efF8lVwHJCTy(#;Z&;J!GGf*g_e4(5nZ@P&Qmb&R{$uEE(R4lg$p8Zim~0T zIzF#iJK-$xbxSfm+SNfRlfLXNF<5tOWAqXGk{Y4;^5H8{>iC}XK8%NM9Bf8Cl6&>fLuieK zL)flHRr~HD6rAC>VjS+V8ab}2`#gr5CCX$lEN8P(YI7s-ENF{2)g*aR)d4#qUX(IQ z&yfwOs*DjpHg)+OHw)aVV0ImsKQmy7I%HK^KE%0ck5gR3!uH%AVfrT#tMl}2A%Co? zvbJelu>C1Nw^0~;*-+T1T7N-vL8z?kN`*6vXTxe|yp!7!Z>|*`qMG1g32eZX#0^=n zi%oEE4BG1vu0FWdzVUW4btu`nFSwvySf$Dk3xv)-Y^yPn+ki%0biCn&FikmyWeusN zqwv@utyZ{bPB!~y$DZ$MasQNn@ZQZHF!OY)`c!Bkx~ML=SEfhA3V-AFtdOL=s=6m0 z&vW2Xd?gO2iTn~T08BfpNt4}s;m9u>+Nnur-DEjlAF)5 zzSyUthN!F17k?!Ik7|Om^#c3c4%a)oD-)c&Q3#FL0Ar=WjGdnd*9+=YrEK3r22sfO zF7MhrBfP@Lt>_Vz-Gcz0;_lUI-|wJCy=moq6Lsv3)|e-DY=3X~yfFg`gpgyszp+;+ zomL)i-S~MMhGDULqZsy+u-3HqR(EUA=61NRVt*E_KZUQ%-&6?6qarvu4@}%d!38bu zYIw)=-E2?Frg>M7O~}xMZ$pBeI+1GA;KL)j3`Wm7Yl*E82uL2~9L!DJKqtIXLF37N zcDCu?V7afB#ed6|Cyd)1l*ZnJ%6pcvKsqqMN&^X)WsR&S${rcW)I#S#yaZO1SSN>lQKt< zSvvbK9RlLO3ILixyRFPuVe33*37)g2+MvzR?4v*e0bZ-{O`fxuq@icdIj4WNRl+4NaRrU2neIzCPsIG?UXVNh#%DU!t zIy8bS@q}=!4lflWhttR5`q<4i-gtOmDWCW)|F0HDs5XUhdZFBxy>96 z>#D?f;c4*}ktv(r{OD{3ORh%-kV%NIQ=7x_zvuBPB^IIrQ*YrgHSsLw{pV zU~FM-jJTPwnaFZ1gii9Xwq;zO3Jx-kU7R{FV%+&|DUr~jY|QpmM@eX8E{@!-bXd`{ zlo>lg+OhzA?WNFN=E`KO6y;^djF}?oanYaSqpCFb;8d!?HFbE}@?=*zMl6x3C_G{r zbcC&kxUVI~Ja2wt3*z_exvDmYu7B#oA`KtQW1r*D&5mw92ibd)bV^%b*?~|W$)L>^ zY{NqALtVc~u2*y0#4(RC7*sY)yb_KnxireTYjc(9?VNqj%I$&oI_W}b&q<}C8(nY z*l znqFLdWB)s9e%3cdXcAWeVu|_qB@pZKTY-S*CDM`yI&~FF9fZQYGZgrfLtr@3l#_2T zu)M*@21FCg*Tpse&?V*0GC!4L*{ia~hWp0wW>8QmEj@}Kl8l=%YJYnjAs(4!mYb*K z1oEsuAt&->7W3z?t;eF)B)7RxqFMEmF$*GI)_-oAZX8=VH?1Y60yi@EV{Y=`>Cmx# zs~9#c)cvSmzFVck@(U4(RawcJQwb5W12L(h)k7cqVfmp26l8&$4VJ;bT;uvhpUXL! z_PEry%8+aRxwZufRDVdXiNFsA6`+JWXTiHm`wA_tN`cGVJh}wyjZt)KWh5 z%yR2z4(?u5$}2bcs|k8ur;_3HjLj$*A1PYcoU36>niOORM18f*jHG-FQ*O40dPI&} z^t7<*VXbga^iMa_<>HdXK;2J+wWF5$!3_$PNCvw>BdLVrvScnwDIuDA5MZsPtw zOR^{4tE)em=d!C^VxGiC$aEx-P$UoP7Zdsgp~I%W=N0)N!ro)^ncVRww{dMcV&f8( z-F{0Xp>h2AxjOXSY?m+(t}7l%iomT`GCN9!Sm<$#$*L`n$ZSKcJhaE5l&BATiTe~Wi1yW-ZypH~Kv zh}@T7td~|QNcp$^FW9OC>N%(THQd~R6ISZQMs3b!Y=8Rmskn_M>EqQGYeA(0se4=Y za?cErv{i=OrN4_9>zWFaJipiTryG zWZmV(Vr||88R;W>;rATv+R0N^H%GX&Cv@($x&(d_joI6;y)h3_3{xtWmEIxaT6X>j z3RzZ`0Do8nTI{=5h#XBWqmh-$E|d|i9+D1W>#a?3g0AI~5VXt@n|JTP;GV9^ld1qi z2)2;O?uHCy16)~7p@gm@~Gx}y)O z>U-zLM|agS8E|)G9bC;Eezh`gOJFk3SywRSq> z^?z`Lhc5@b0Q>ksJ_umrg*kW(RYag4-Lli@@&JSR5Q}6tbV7z6jZ!7;486Nbpw)H=|&t z!QfpIP-!8s-<~==sK?%uxl@s(a%mv92Y-8XpQz|p9jBhtM{b#sxif5oI^crZc*m!Q z8g=EV@?sEBYSWRqGj>gq5!i3+wqtWHx6Hvir~0Dwrg#eA+L?GNd++Jt%04@OD?1Bx zj}F-4X6~CJ+RY{>%1R6CG0QHdsQk{B=Ub3TL>@~top(vj6%?^9m@2X{=J-k79DhI> z(xSHc?(zwr_>ctX|KgLmuwkP)H?kCdROb>Br~l#&X*osC+3zJu%}tO~-(i^GY}88m zVuWCwlX_1Tk~06y={wqC_#LpClIf4IJY}@YRPjy`^Yybg%ilwSY8E^3UW@>IeRH{E zp+lyWRi|fy)2Q@L$dXv`!MyfnMSnW0mhI-t%b>=>NA)OZ{D<~Kw$n{7a($46^Y~YU zw%@{s-p*KV=+&FTCuYJ|+%NNNmilXRVS3-o))zh6AfbOgu6gHx2)U4mb#>lKazWRo z_2l6IP&VYUPxhHLE;Nigkc z-xFC5Lj*euiI(*fZSLh;N2xTKGW(BdPuMUKmjo*{?$vdaTMUUORxF1nDcvakZBo+q z(Q5|WOH@T@d-i?vxDIhlMf0dG5u-M0wVadj>7Ht@(0|%9M$ukIjoxCH`k*cWu@OG~gT=?|^SY!3!e}AXvz}ww zk=xSng68)I1;|8DVxRw{zXyn1Z{mPL^(E*uZqi5pQn_E^ppEhrxnH7946YVB7-p=q z=j^T6F}fHBtk!&648u{VAg%&-vaiSNY;F|^ALzpw=V(?HnZr0M=YP4comu;d*-!v> z#u=uDDJl#5%U4)_QRC5kGb0OzRaa(6KIP7^!ks#f&Xc>sWL|YXPfrprfA!w_u`u&t ziNR3d3I;tg;0(C9mC7iMfR)cfSjYOrF9{4g>|afX{knPqQ#qQy`Pkz2+Xi_b zYy&@#;eBSOR684sS{=!qx=H$EHb%*|Wjcp!UGOhg#lu~LSAWZ*&^Y!`GO0T)yhQ~X z@$HvCY(QPg?g@p9QAlRvyPg87O=Gk0_+rq68)DESSnY$B&}*p*+~V@l&~9NumkgB6 ziw-M?^_^9d{|M=O$v z8I~vpEnRqFZ@%A6iV#7SwZ_dN#TJmbv_RKJxnaBehgX~~5aPNpo`Lvf8A`Jh)H1nc zLft79JsKAVWggrZKR|i8YBZ^B$%pPZA&>G;*p~LcB7ffDOhMzxaLZhuI&1wce5WVs zX{%ug>7~saZ2@MTrDULu)3XRjF5p8zE#8NNBx?r-MD7JPb%JtuTtV@Hx{DdKqiccQ z<{u+BvC=k)kngLE8k^(BwnX`h(5DfNdLZC^<6ztnp~hx@B;Sw$060idI>&`sYtUAa z-xA0J(SK~xHy_hHp=B1KTN&kt{YzTY%S_=TI1ItjTNJc3s5I0){OZ7Lon<;VrSKJwC3^Rj`23iHxu3S~~gdMvU){;QJRK9{=CjBZdMGb(J0O304wzSrWPb{Rp{ zAvYZCW%5>UO@1XYOcTLZYl%J%ZQ3KNM@KL{_hu3O< zkY5?94ebfZ{VX)b~-H$X1G9C#SFwq?oUeucMySZ+j>|X$1c; z(*Ua|Bf#a+mPFY+UaY0!i`ZJp6UcF^gn#A-N6;lKk{U(J!_!_p=K+^!3jVa83Ucdv zOX3u`M>mIVP4fuoN`WMLt#!VA{TgLz+zJ@s40@^iZZ@GOLK)AJ(~#Yll_7Mq zy#d9{O)y~#?)8|Z(Tq?h4Pk%5AL=+y9=aHZXd?AR0%t2}8KLiAt;0_nJ@oVrZGWO5 z#rU?OD%v7}plwc8iYb#ZlvCMaB9T)ix~=BN(!c}fd4S}Yj9_nUw6r<}(=AA)HYB_P zAm2l^=83M6A_5qHL!K`ik4GmT`c7ZLnk=F)Z<5>sq5JeV{~k84^KTP$=A2r~%fKFX z-X5UDs!d2)Lz3BAR;jP$IPGdq!+(rg&!C(8v#x6|-1$?CUy}c4L_ITgU4QH^6qSr9JAb5K{!}_oNK=0 zA|md!>vXDgj~z_Q=60^EKMZdzyYwj3eRl6PyK8lZZ`C?0LOQ~Am{x!Z+n?#C8JMF~)1&W#YQlR=dQ0T7AYc4YkY<9PL0w zl@k7V28h3>Z3o2{%%rURynn%Sz1tzvw=a`Ov`;QYtuI~b$0yc)xvKN^MAw>tDduHZ zya&_6--Jf1B}?*jlauM<_g$5rF?7%$f8`B9s|Ut-b4k?BYcs_8jRm&qe5KV-G2hVA>H}usGJ|R zk6V-YX0YlKnv!1LZZTI6wTf+@3)t1^u-zJ`Tz+q#ANMkgs7smbt5-n624-^GD>?tg zNoe=do>4l>Gdm%(xo9mGW>bdfbP;#0JL1m&r1Z^DqR~u5|L5r4KJd|;l2xf|p5<)2zuq8Az5O-l55W>l>Y)HBYLP2N&IXs9P9EG}Ia=~_RXpHEB6L%WH9I!z0NS=^6 z2Yc~*A!pHRKEcaOK_1&b=I(}1$(DBz#vboG5aerP(U88l?^<3)aoJ+TG z`mlzF0g**Eg3({82)1u%&6+m@=8oLDibW;VSJe!CV%3mTId^#IvUjGsmM+v8V!z6t zy`V$HssWUy0`vWf@15c`w28}27{LRjx%F94i$BDBF zVZXMv02Qxo6hu^a0o=ggY4R(7Id?P{k$p^mv(69UPKSq8gKzZ=8!E_au44AAKjuze zVEM{D+8>6SwjN!f3soJxn!bS2x_GX0+#%ore#~c`K}~s9w{?F~j}9gz|CHm9<%Uj_ zS8qTH|ajo+>A;oF3PvxLFeycfLn6O zswH0}9F`agU9^7_;rew`iL3YoDfO=i-|?r`c1a3N7eF0EDaO^iS?c@V2jY;O)qD?_ ztZ%-H|L)+ab+XYW0dhyukLoe(PCQ z=jT=d@|1VW2*WGj!s0T566Q9Vd%#Z*fi%sL-Z&nudF>|Bx48V5#zQ?vU`ClXaA19L zci~X?r)RBoo`f9Y{U>+yrGgBT87l^AZ!wL)%BZZ zW{y!z<6D0sKAgh{Po_y^F+8MasM-9IzOpxJd9UQwpDR$g#Pi z)g+q-a|!5YRdSqyn^L{GnY{kwwxL4yUIW|^mLy~I5%nL%(O+762@4)&ls@y~%O6^t zA!8(hQBvzi!SdC^ymGBz+4xj8Hc}g38;Oby=C*(NVi`AyPGaGI3r8{kEbOml6KZ9k zXhpI0$;?Cc9zbxO`FpI3_78Fg7qPg1^j>-^`L2^}Z4Y?Km*mo5rtZtT%qO=cvPS?o z^#ip)>z0f1=lfN*s#zKe8Ml`K0v`lm@ZvVV#|EC=iN_btSmKkYv}JPet!$F0hEn#E z*?E5yWs*uQxz(Tat7)2jFvF<_MB25=7Tn7MVwoN8Ua_mEY-~At*e)GmJdJm|MwRk6 z@(3?S&{P1f$KOK|oFO|GSdEG(P7#otd1W_aRi%EPQ?KA-#L5D)OdsALHiGp6G(1=n z`!RE-UWdV6ySkbmnmFd!aL-^KFyftE448l0nhU$V3ghgg*ODd;&#C>K^w#egBAfe& zZl|Vy!mH4tZRT-P+K%re+cEFgq(oZswq3$kB0f+p?dS$@LpAzoC)+L=dQ2KCC;l(i z&MG#OW=Yd#{LIYE%*@Qp%sFq6W5+WiG2s_h2W$RNK(5Zhzfua_fE)a1+MN`scFqy1yAf2}+-fp$EafA2T za^Cpqa;6qzCe;2Om^YD2MzA37faRNg9q*rD^&>uI%?3E>8cvG>{{2J^-j7%mGcU*5 zf@7-n1NWwKU8vLW^v8GFf}^VSL-&Ys-eBp_dQ)gkxj$%>hVGT+yjjz!bf$mQ8ucA% zltx`-z9r|<)rprG}OXU6yx8p>vpdG{YrA>3dtC0jvir{6Q& zhq^56h0NWDCE}0soF>1Vbaa2X^jFW$!t9=hRj0pDr@us}zx<}Z6sNy9r~QME1=n4K z#CJW1+&@ehcJm`UPOl>+-_(;iD7CNU7+#KUzkNbnjsmcwU$_>(7(R*$jspO@H;&?% zKemy4(;PcZG|_)jg89h__8pvtdZa(0nNbDXGe@waq0+p)5+j%w;wuw0s}aH) zia>epx~uICj=zYNwOjCy4Q_WB)eXEQib~+W8;Q1F3M(xR-09Nx6jb4$!qhy(&m!oSP(p z3KrZQHc`(rmT!L;SA~Ib8k*89>t$&}{bMxa)N&N#p=rFmV#~_ugY4i&@w;^-+XL&9 z`q9#q!8r;En}p^$(#;6u@;Z)FRy<(j5p9)zygDAFBj+0~5fa?luqtemYa81UPJet! zJcLQlc%(0P&`0XeAdL-42W%m@g&+rjQ?#kRQfVItP$PdK;!&}U$A{`WbO?uxlV7&6 z$2=wJQj%6dO!5%@=nM^v4%2!LP5f3X_woVeRq8c|2wxS>hhYQlylOUj1E_y}It%)#Ta!%*Qz3Q8Ebl;qpw$ns z5jF-hhXm~CpO8eff~f~S!%c-gH)gRZ0NztFD=cm9cC8!BP_u%~Cna{MykJzX8?iZx zr1=1Il|x~)@qby%5fVFJK+9%bb(8!}GdX7t=qa326CDHU9IJ|XR$ldJntYxKoTC9N z=kR|lqrGRH1id3#{x09_5zTRQHPhAXXFoab!rj|j#v-^GK54^tTk7Uy8y2(Re6BNd;e&M0U*KUAa8Pt%6r)Sn4}J`JyIklufn%;?Px3@ZSRDjZu?wv|%L%3T$wY#U{>D^{xQ zoO#Nnn-d5bCs4)upd3EcKdQzU}m$OnKFI1UG^P;!cts;T*hKV`FsyivtUm(if zh>xdTI9W(V6aoQ4kXv=p*6_$z#NvG1WDn8B0s>`kndq&QnMg!Xa6(|KoM3;=Z`2b< zB}GYzlM{aA9GVYr!9U+xlLM4w)5K~1bO6q&m8y=|(%8xp=9{^QUnwc?~7>D7@rNqO zhboaa2H^*txRVx$*$Pgwhva`1?b%a(--k_+cL5F+)Thcl4C(QyG+sd^9-}|6V7?E@ z`~3yhf_BKCTdg8S)(ztXDm3}|(qB!L<44Mg<5uQ^Vd;-vDsZhr(&85)tvSdJYLX{t z628u|4=gm?WQ%^;i+-P#?F`m}4%UL8>;=Y>CuCJknMge&aW9MmQs{rIh!ye|B+Abk zZcS_%Y6l=6Cf>&)9>E}_^3fDg-q4+|9%tj81I&HPs2+%1u(UuS@%MeBLya|AsRt9A#np&z?N83)pDm8 z!6v(By*|Kd#dK*HZ%lRhEd7lan;xrBI~uWhEZXN%=R$CZ7ftZxa||U`p)=5eBqoG$N|pPK8`Bi`7{M~? z)s`c$v@w~lt(iO@U>J}jFj*M;g$qA#dhi0ExGgpez?lw=>+>Uk4~)V5jtTEqIiOk( zDc`#RrMfTg|Av1S^clZ@&wE|JIVwRqd+L9@$I||$g?ksWIEJ`#J3>(Es`=3QAlJUAmE#6V^WC2-vK%&*T_$2}(YwY|8OibNF*{lOW=oI=#W9cS@?pZzzKqiu=nS zR*XAvIeZvu%m>UUrj<$T=#;MKRhOJ7cAQn)@Qr`mD^8aj(ZFv!C5ThDX|Y6MQOfW^ z#q}|H&u<0SA3X~0Z>gvR*Bx`;AL6d7mFd0ld!$M~%H2<8t&!A5M%l=ch2(iA;&}a1 zvGGF-_1+i%_ID#fbkJR`z&O$Y?ZwlKhx|NM}=Ip=FV(BJYcDAqiR%M@@_+MR1QTu*0Hu9bwr68b1vhzYVZ956uvmFaljesLOa6H8sTdG+X{+1F1h)u%B@B>JW%{nSeFZ$S9`NWOp6 zQcL<;CRcuuseIWM{$hi|O#=J#b4pOpguf8}NLZ;c20SNY8-5tX4r9z;WuSF#eTEU0@gj2Eb@rW7BXtRr#k z0uN&uVoVtYUL|rV3tFsp-mLL>)LnlZ=s3I+KQR)l9;1m!izF-INrkdYLep!sIdCI+ z@Wl{*OQ=fNPVrGS)(i*n(TcF)Nj#ohP}#5Z`Jeq0E^EfDb{zSKV3TIaU3ErZW|AbmBPq-2%a*#<)}kl+JjI+FB$oWssGY) zNHUBv-ASD~#gXRua(4zFgdHO_$QQqrG}ED=`7_UneI21cE`~{Rl7)RQ5Adec^LF_o zFFK+Z=f0D?lMr8NAq z6gkQvRX6fqhfp{2-`rN^3?s=h$bRKyuR~CS`r?hO4iIV^>SR!3);ND8ApG02{UZZ^ zodo~BgZwQAqYCtz!~zSPKF$LVM1pC9w^Zu~LxPkqiIcQ+*J@odhbzNJ>awEQctV2V zN-?U8x-%fP$`;$DyWfp|0YZ-mcWXU;47%OKjCJaS>%5st2bahJ%0MvThv9RZhN8eY zG^uHwB;cK0|43j*1-pMDr17i|il6#q{@DR}nlmdJ^aiW-bPPkwCEPgNf!NMfaEe%l z$KvA}UY)b-oZSTb$PMrs>4FTnvIh?Rs)e6MziugaD&Pp?Lvhq3)XEobs*lW@ng<#c zPTB`s9?P&BLEDF#0mZyd!`KQ9<3{)}7$b05;BNGtI3iyA#RGq{DZnMM8iyAOW9-#8 ztbJpVOUfjoOz~p5VHpmaTNzAie`cVWm3>^JOKll0Swy@$z>a-zercwW zFtTI)t{8&aHoWYZe>AD&p2Mf5W|9_@puqbP+c7o5w+MCP8ub!7b35d`WE7WpKV3fY zNiGb{aJ`Fo^=5wxm;Kplz>IPlWO~9b6>NrO{);MM3w(}|(;>a(5_Ch;@Qk0j8nTvd zxJNPSG8pI0GCs{l6m@xYn!(>09WcBKUE~-E-E}55>A zj^2C|hVgp2evi{^9aA-ot`s`1Lz*R8m|IPvnE?Wy;f3kfj;grbT2+b z!K}*ACLVt%L3u(Nop`W}(YQ3=(n@dU$#jD{uBOWis!LJ%#|xf419lct4Or3ChIf*E zfr1w&e*%-bLrLBt|1$0VHWaCyjiyz(Dx+Me7(uo|gUL^pwpS=FO`|i#rfTRIxA+la zC5Ob%hCDAn!d9cjpS#**0hKQ>MwsJmJtw!AtH*!CKlXU znvZzsu_Z4+F&TmOG2cwaDz2Oj@JD6AC=c4(mLpE{bU4`-LA?^*xVRhUq`D2Wf@dE6 znSa>&eOUasqZN(#q~x@^mN5F6wLs+2T{6a8UD>|&es_dCMkb|s9WX%y- zwnV5cKmHX<5*7ia$U;>uM5`^>>7gex}!gD)jJjyMx%)SRf*s5X_n(uPk- zzNN^bYXjgH&M-Szo&|t{w!Lh|5t_AqIVo(SymX)BR$UNwT&>>8zhlCYzJa;yp3HwI zaj8@P+mIr#AsqycU<~^K1U*eF`=#qRJjRgP?RTu*{b(EX$WwSiSZ=)!6hL`?B*33j zz3Q|u>kHYk=2W!JN045NDG1?D_(H8A7|9ds^k$Gc_(;hK$Q>WgDjrCV%90Yc6?kc> z7%TTsAw9291BVCYar!wt?z?OR%d>w@-k;T^5<@d*Q2{g%h&92JZjm|qQ3dFc*=Xa2 zNc?pUn=$?D``Y{5;C(YPhOQ#LOUFy}4u+pfJNayWT-;M}W=!sB9ZWqPxe5JI1xY{6 zst$uTq)fPX(@nS+x{Ub6*QH)!$IstmzYa6pzMcZ^-CD3-1+2PzOXGjuY*bqJcm%%4H}2sxoSOsnI)7mYL|T)dK1cpE7$cF_D1Ow zz@`E-(u9byQVYesb-YI>yb&RfnLX&5KA5d(`Q^`*ocBzeYKq}0FoOyQ12-1*R64xc zn`+fQ`|9O-8|4_sfkehym%)GZt+ztVQQ^!kMKf(k&H6}#AnRlkqel~?^GA{fvI@$( z?v3|S#~LH%`7|`@qtl2B8=IH->O?3`p&|o|7A_(-l36UE=co-H(L%rUtP)%Txg@*% z?h>`JgGxLyyiN_@6Ni+Ysqx5nTNx>P0${5zY_Na(Ktc5cL>~HMo^*d2vPTmD%z*1@ z>t){fb-g0PMdX^0eVQ0Q5;zhvzhG+u5RI@|A8^TTrE$mz(TQ9Z%my4(`nf+0<4DY6 zGQ=7$G|ovLJ(qa!^|N@p z*_44i+RxDGN2=fTy%xl|4#euyQ(Tvk%V=S6@bp3I$3#$S)%Tn+2_QesO4PYIM5-D= z?D}eYtyXG_e^Y-M5>Q`}!#u49MkXNR^*4Mjm*34j;szRTd+GVa3;k}$;e&XTmWiJ& z^Wj{dWl~g)Sk?k2PMniXBmx6B7nbu01qw0=+19w{i0$!G@kYi9X#Xm%V7_bdIrxv= z1f3ng{+i@I$B$SiOmrmrS5piZ|Gd`3c_5Sh=xNg_C&7Q6f0dtw)YhF%s^kMxn5*{N zmLx*_dDVeXJ7*i`&#}FQrSf=XO$%c5siD(O{F%Y4ux5ULe*pziXBfS{^zzXRu_lLJ z@}Faf+hg#{c9*RV{6as+s)sG8dPY#{ur`0uTVz-$#@89RdQ{izkViZ5HOG&Q7fDq- zM(3d7xdDH;oSTh>7hF{wQ;|DtFdct3EaZu?nOb+05REQGRrNDur7n}X2Gtc(l~SGI zOF6O<(p@gTWJ$@Ala%x8vC1uzvF)|rbw1)ExuI{c6Q&v-i6jhi#!Hp2dr7Ax+iH)I z0ZSG%QN@-@tSTLjLjLhTwA$tZA72}O?cl!qE+Sn44(bkWERYd**x+q0Wv|t%YQ8iToDF8 zcCieDH=R2{#GApL-gQOn;O~C}l~BQ{h!lZ=fTTi$fXMzo7tj6UU}N?lchuZW+$_Yb zO&qN()Ll%>>?~aVtHSvw(Enc*&SM2V@ojW!P}DH5A-c|Z(&Mp|P$5IeVyr7L_kVv4 zd@V-n4c?n4##tAwKZlX_BU$r3ECA+f5QizxyZH}0Mg^`nSHI?s_5wk)$6OF;N-50m zv4zu3)I76sf3(q8IBe;vVN<>+jIV)hKPI*keBT*t=uib$No5%nd=zi(KL>BPc72O< z{s9wP`;nQiOJaC+IDi4k>Vlfa50!sxMU8*YxlXTY-Ea{p`f~1HLus;xy)?Si7gB?r zqC8=SO$NZj@*F61GQc7PsuvX-VltIfFZG4l0b+MJ^~c#obJy5J4c7fz6w?;=W3h|*ACNysKpSH7hP&(5F>|h>kp)^^PAcvb@d=yzs2B|}xkx|CdLB%;#Y;d5KyU@bPjAH88fo;N7VAv^ z*lu^K!F=IAkXgVU`>;2RnEc+>8X^t-CX#29r;=e-I4uC^GBk>k@PnUgr=8=Dz(_Qx z{fI}Wu?5~=Vm01tNf(^agtK&8$$(d4SA1woh2v#{6z>YBRdfxg&-i~xYGpHeV6vc* zl=Dq8h8$2jN_aR2$=w0x}#24B51olaW3)dbCc4j>qSJ% zA}Kv>Trxa_HWySwNH}or$U*Ojy%P#3=kDbB$B|OMYQI;Na7U$$M6&hw913)H^?!s=0{K5Cg#YYA@iT2t5lsYrtY1t{Zo5rg z{4+FAnYLZR!2S_VYz3}Vh7ODPW%)`Px}9zI8uPbxSA}~r!p_jhntq0vCAXq%pHet(fLh)zK<;1V`|hX zNVgL|SN}+wf0Jc814p7!gy&anqr}e4W^Ti0 z9ky23+P6`g6!hx4RGyScMISjEnz_sO#%ag1{G-^SgJ*x~Jg*k4{WcN7RO{;Y6&}^P zM5EBLSl$}GeXzh?o9Rlc?z^TMWS`TftmFRb6g3+=&urc4!h=}mG!x8Nh#Mh!h0Ko( z2vL=9x79$xnYN(u;{CtZEbWuyFOJ(3@ba|8q8ifnWgD z?F=k>Vn@D1W18N1#^F5_3fG~%hM|+D;&gi~)DkNQzBsE$3Zy^OCB{%qd}OnjCzGAd zw}ag)@N}uCYUl5`OdAqKz9e?Ej>74TCW+{JC_o6EW5A&26jU7lVh=z$&C~uNoLhhN z_a&UsT(fy|bhb=iu`HFHx!C1R(M)tP%6uoq*m_bg!Dqg>0D+-`?_j&F(UHQf={kK`gMrpbgz;kima9eL|*9`de*^22!qVjyL`49ioRg#G#|~n%1EI zD%Lt`BTI9qJ=Pp`Z6?zb|G>ij`eSIFdD{3Za$%)BkWEDBXA{EXPV<`P(^QJO*k4LO zut{1ejxJq%KE5|n`X|VhgEgC^nZPE9o%G^{PE$yg~@kG(;h55x}2CO73t(ek`=S;a_c#8=wqR zqeNqoB%4!=Adym1p6d;Xo^xI!hx0af#rlSM7qmVmzl8`QtoQ3`p9m9XPP^xnLTe`8O zBd*#CyH4>#dy~6j*Rt$PxbyD%^^m8?pNl{q#`|C$m~Lej?)108lQ3H>>^jy}HJ*OG zZH0z6?BGok_DjtY4eS6+LAljGn!FlwNvuy4(=H)ma#5k#=--2yI>rgF`_EVo9t1@C zeL0FcbiNxV%) z+Z5nxvQxQ*_Cz>Hz^5Pd#WP|8)DpKf$0nfmrAk65G2pUsFn@o<>z!I{H@65QMx5v@ zF?vdTCh6%k9XnlVa|06Tw>emWhB>`SSns-&G+~TxP)5|fWNgstty8UHT%@X`MiW3W zFl(`%5JZf;rT&Mgg8NDtof14~DN$FP>^{!Q)>F6;fXTeR69QZHX1b;mzDbwL^%jp< zETh+Ku|rOX9;km?(a&(&bCtzd!3f5HpSBTABYAhGsCL4m#MdnBc024yQRq;~uQwwJ zE045g(U7+wNErO8EMen-;f|A?^5fq)Avy0-<~Jqa4@<7i;m=vRaD&q04gu~Vtca}O*k5#z>x)8vV( z52nS~%rHN$YC|SpMb##IhPz6L4NbsY)meVG2#7!HS7IWNwGCIoK`LDgFUo_oV5i1r ztKCubnPT@=^EsX>+Q%k{Nc=20_Br40xnJ3Hd-xN}veSRveZoN(A#(ks3n7PnU&VyFTfS_{#xqac6fl;Be)#};-Cy&5p|HZ&Vc4mtX) z7QUgKO|cv6{veY#eJ>b#MIJN~8eNUMtCru7I~Xv#kptw&;k&>O?C-!+Ekj^)++H$%iSh~x zEbM=|3P7v!V|ii+EPMrJ?l;M6_1DtR-`Fc0)1+<8-hxa~DMg7*bpz&^Z!gVKOX}NE z<8Jfqi%3e~A@|K?hRTNfE1W51Xg$UoC5zCwZ&eBsb48Mj3vIp$O1njTtj~yF{YL>P z!xu+bFjpx8sv{6jRu+FBNc%bmT7K<6xcYyk=E97{YEy1kxBBy`jCeK#J~j6jc|w5t z2o>^&o(+h(nPt-YgsAiqw<(wq+KimX`i6^r?!WnB97ugacnNfYbyKiJ`hUt-KAeG$ zgZiyh5S1?JsE%%}|s^+5Kw;P8&gy{g!jsgXHvsFpWO<^VJc*+r$%;pWs4 zo_~>KUh3TV!wetwCVLDdmXu?@%XRuC$P~M>=QG4>G3ESsz9;)?;5p(ye_ZMRTx0ux z-M^IW-K}gK{|^C7?LXSn32cXT%KU%gL$~fiBeoI$MM_Q>k|YXInWB~iM)PNT%rMu1 zvnQDe<5r7byq|s$Y zsk5XLF?apT>|hj7R-romiX&E}d85Ic*c=`c54izAn2*C3B&2gCZDT|2``v%Uz9mC_ zn7VvGv{yET2ZT^%Q|~;Drmnue7BuxTa-D~i`d+Y!A9u8M`!d-+Lt>R4ifhoBKgcQX zG&jScYe9QiLW^xHc~1`Kh=}A_s=wChoVfj6AgUV>X-62<_-Be5Q#Z`be)~1VWD}^1 zPhQdovv=P|YCg+Bs3kx+wUU1yGU`Q41~onlG)*;`E-l-jQg@*cvf6cE!=*z(yHc#T zeW^q#-c$Cu#79?uua^;3>PO`1v!O zSL~wyp;++^ZG@qA=}gteCgJp~;*R11)do=}opjr1u+MxOuQi=@Vc0_VDjK|gpH?P9 z!CoQMC|Uj-6StxfF}6aRKUammNZ3v|7+js0tvWvXBaL>o{(v_b-H9x=M$`B*#f`y&@eYv{+byat59!*s6`PJm!(ZYXr^Rb(AljF_CM|bn~ z{B4A`82p}mUYh)vQa>SP6B2_L>QL5~kg&ENA?$0D(@(P>3lVZvmUk6Aak7NFR}TEN z(6O^}Ei_nYbkgYTv+>860_$5Fp!ud0ImE`ap_Z)x)CYfH3_iODpUfrEz+tb#5+9U5 zl^qihtoj|)>!*K<#5DJ^i!UlqVW#<~{0MDmU0vVR*X?*F4>S{3-ZB9lm`5Xrhtpzt zbdun)pMs&bqWQDH1dbs|iz`tAc?|Ks%Qc#b`I~mCq$$L$U3eiZ0Lb{TueF z5=f4I`{Q;vqU?LtNmsbk@i2jC z^JKesjp%=dy5^|Yjk%iz+m=y)2C$q^+fdVHoh;%?Jzdy!*5_fAvsXA=s9?}qLg!ak zXXhV(LC5vFt>R8da8ULZGi4K8XanmA-|F6)?f+{sCW8 zZC%J;4o<778XiN#r2r?nP$OR^)+Rcm8l6B!4ibNelmMrOHPCsY+}QGy#+KHP(4Olm zoC!YVqDUpaShqS?2Hz$O@9`<-b5$4SoRA6F_9h zPIiB9ErEcaOxw$PiKM|%2P66b&=ni^Ip>xbXLBBVq6(L?3LLQom_n>Uev)AN6_XOd z6WYMlzi@RNI5G@TM=VrUMt@=pX4gG?5QsoReoGq;4yP;n2xD&^F-QMNI zG^W?ZY*ps9=^wz0Ai3#;?qOBybr2)Rv<80-Cpb3PCcf5@xFEPw^JWdi+P6lx>7T{E zLSQ^q_=_4y$0%21a8hqc=j=}iYQvle`@2P|NzF_3>) z*zdo^1c+l9yM-;OY<^$?RFf>GC1My)zGoA+L%d*H-P?g&BvQhe;^`lqX$~Jv#d7DY zBHoDG`l}E?40VJJN-eYHPC9f086lK3_@k7XA?!Vj!RB{ciFGF=#CSb}%@g=m)^GQi z`cq?;pdXknp?Da-%pvV+2bNO>HckG3(s(gGr?_;<0@ zKE{kIVTb+OC1CU4WWDuS{cl|*^v~lGRtk#*WX<<;tpZT5(GP%=j$p|cdE~uCAqu+l!L^#^? zG24Y@{WMl+0I%PC^%;=^1+Sp5$!em2$mZ@;sw>$@Ex@ghhJP<5 zfA0|fwBhMv`{5{6U+sHq_AP%tQ*VF#6K4S`^tG1u6kl6eo6}4cND`Z9=%~nl8q$tl!Bo3e0oP4sBSjp<+&H-zVdj#??hg)+6rEqO%{llioRXSyP1_ zozU5S1Pi6bt5}GxH0yp+i+f#`h`!72dxf6=C~K8AkQ$)u_@E?lm_Al5*jjl7^^EX#S}1?AGq8-YcoHF6hugn@RlFKRuc0#eVXxu8#~@@eKx!1WI*o*Bcs6J=26;M2hbwyDk|$m&pT%#9^(-a(mlEp7~R{zj0kx({NhSg{HYvL4H=Im*!Qp67^Z(+FL45_~Kf+OuE@o)Q^+f=sm=2UN1K7i9A}F17OJT(mA) zjdqPVNBmr&w`mrtRP^x#P7)YB43vocZWh6rj((%Ba!lrY+rVrYb3sI^Fv`%OhWM8}d6^Y-zEGcwf zzbnaK9MV$LwCAaN7j&>|5x{=70e`g8EY3Nwfggn3BT^`G*14zUTwl#t3HtuqI0#7EUD!Aey5pBnD`28}~rXMw1d-_TdJ^`n=W zZbno(acmNf>W7rhEgUISDvP@_wDN+|y7dDhxd&*CSViJ8ID~!bx-f zkbshrBTI;Iv(bnFFd;hP5yGci(or#nnZs|Itny3SChd)K7PZyCNW5XotR8@yRR$ zPntZKuSCTjOedPVuzP!+gI#~tBH$6iitcO8Y zC!S+N$?AVy;YIHiR|I5@Uo>(gcvjo`zFhcMEQ$!C!s>T-m)hVzx?K~N5Ko?uhQC(X z*~w2+4TeY4`IP~4LJeyk5{fhi17jz8h@ac!@r38Kdn#Y3*@(tZ%C7Z0x@u z(DF=GUv0vdG@A=3BR(4JtZP{Eno`q0xZXt-CNLD}aML{E-o$^4I1bW_NK6PcF%mLH zKHYkk6pe)t;5%<{afOadr6^34lr+_@P>ZrDL zrSHIA&2Ry5hZz1AbPp(R#<_;e@0_P&Z~mE10FHL{joW$QAv z2QS=nFg<^TjRRaUI@D-=0GF;UwaRxX6}c-85yI?vo4yqz``c+8de%ng>1IhEAjA$g zgEBqaeA_;Hbvu?kSl1c_Ig$YNZGBmNmcM*}9{ugpKBRV2P#IWp+w7{V%pkbXPc6I)LV{6$vBu zx9#C_8dDVLEuyq%ek$H`O4zq5oQ%H8)(rOFPdJuU3ddqlUOSaHH0+Nv)3P6IFMw0i zn$LftHe+Y^#x9(WEQ|))E2f#4qJt6NoqPAPFCZ*4?|!$C+QF!o^pzw*bP_2fpG^m+x+4>i(ZCZ5%`e0fKm${k#3%j)K2!jcBgyuJ8g< z_JZZhqCFd-hrsn(ST!9;ddXyD217rYmzSemqbbW$x*v(hUNa$#JIB#z!)w-7-@ktp z@PCJY<=#6b7@g3-oNFv4o%=bCP%PlbFMwX4A*pTkQ0=g*iPX^>wvyYyf$*#Dzw{8Lva_7lF;xAzJk@S~6H6b%P)JRwJRh0w@djd0hD&F@)WJdf&dl2C zrZbLD=r_!$xzyrQofY1YLy9@p1QLJvkyLB%LQqgOGe?&(8Y!u|up0S_2A`zEWXNl{ z;AWK8AxJg~vi%0^QXNV;IuOK$6iq1vGr#0_^}x5l19L?-Bj_VK^!yIq=MoZ(VZ;P% z%_36SfVmWM3=M_U&$TX+fv)`DXy>P3iW?o)BOwc z$HxkIpGDHdGZpsPL$x0yvV^p!x~^T`h9F`|Z4}KT^Vj?5wkijtma`_Zgma0Tk52pO z|ICJx2dZ#Se;2MNTnOM%N~go6#k!?I!g~7WJf9gZt9g%Rkm&6eA%{uVC9XO6E6OUh zWf&FFxe!KBTXx>t!X3=SIW&J~omPh`qev*{>sp~W;4H@4Xf9^$<*%2q2BiR<*1gT~ z;*NP+iqwNMxgl4nOASdP=&CI1h^cpN%J}4w30--wF!@`8*FkpaLjj*BVAv|ZiVTt1 zah9BhFVk+RuQ%HA&h>yKMGpA}`%+U49ub6a#tNB9tr=i54gksEccK{vm`Lq^b@`c6 z*Nl+nk=u8&OtpqK9R59~X*99dO1=MsV89FSzTv2=WTn*8BZ!>!m%+B~8 zoKoSM98AiVaXZCU0wynD%2ru_Brr|j-JWuqS>yG0GOusVNyF8b`FF!@_}BS8zjvS3 zxAY|Z@9^s*;Sb(%m^@64wKOd)I9h_=u+n0NfRt6{&qQEvT9bRa`NXt};rOu@?Hd~7 z%SxTLYFDmYy{2hzFSCImUBkoF1+Z7dG>`eTCr?uR^q)Bjl>1yvG%Or{Bq)Z?l5TwJ zlQFt=CiS#)P=GbG8C)x?n)%9+OjNbn20A~hQ|NZee_!d7^pyLJP8|cCjr-o%C~o$1 zd>C|bUEt$56Co`Z_`NGq`qMmh-pn84ld^A|@ca9#e&l}wQ#_}AUjd?0BfM#x6~vpM zRe}}7zaZ)Ddr}NspvMM(&rAa0CvpobUOwz8FqaIyiB4+6vYi#D^OTwL?RD_B-W>W8 zKHZCq^#bS`qCQHE6wY|rwo|m1{TOaMA^lNbI#cL<#03k(qy(+|5Lr5*b?9_O2jg?y z?w!Tnk_wCcPm{hCz9nlr?-Aaj3ZEdu|Mo0nxDb+%rP57dk;!_0+2G%8LjOeQ(px}& zkyG7$50_J7wyRi&&fcE2U|nlww8dXr7kijWLZf*0OVOR&KKHv1dKead>}}{`8;quW z`AbVgiKf3D?o&z;R1|nJaL+y6$hx~1_lmnN#-Il%cu(jfNW*OJH>c<=B{?e%ZaVt= zeJyc7`*2`J{hrBx$J>yNgkDm{@!T3U)Fxw?UG+-%7{nCvJi*Rth4ya;6MialMF0uApKyY2fz1AF}{t8J$O-}6GDSB`18}? zp0m&}f6I+N{m@MO8ctHt_sAFCD?|4`B4_32BG)-c< z51^)h-fdCffk2S1^ePG{y@R3mqI4-DT{;K^gdn{tARr*pK{`lLn)D9RdzapO?qJDLWnMZ9Ti!?6+j^rzPSDc-Mz z!yXobY15M!`UEc^i?pV^MWeP&ZjsJT0UE8M!`}d zH8Q5y#=4#o%UtD;L;tP$iRz^7z@9xHX|WHd1tCTG_*}dd3~l>kmM!pmQZ(E1?A{}w8q-}qf$&RjCJ*aEeKg~L-V8vrf;u5u{^WGf{@vuZVGiks8rBuB6E z2XkFc5X3fOrcVwWzXXQ%TZimVxUAt6!An^y2cLSFv03wU?z|U(3rbRd_7~cozIsu= z_pTY=LNGUjZ%9_=-rXqW4>=5yObk9w8?++UsYg(Z@dR1ofi);;!jrQ5KHJImw~1H! zC7{AWegaC=ahH#y`WR#6iOCIrB#yk!HZM>9k|mjcm%cSdd5nlSs6p}` z;hXo{r(@{pdRS?=->3cMBc48Ug~cstxlI`2e1D{evrxnO^W{Rq%lJo>kLxnJs_#~! zSxrOs=zFOvqvaGnS8cgrt%f%COmU-d$4I+UyjG01X?s3(5* zhEKW5P0OBoN4cB^s~oPtt1LTO`>c)ufRo zO5(Fz?Nz*6LU`iQ;^r)GfAIO@ti{jAiWm8RiF}}u4E+$L7WRXQ^HcFR$q|V|*>}29 zW2xRPfkvsRMfY8x@=&3`)857M)fAk5A!PieCOr<7Vi0I}Vj;@x!+6EW6EL`H{K~~@ zv^~veX=Ik`etypxc&PUJ?Av6-_Rj<2G>!y~{ia0Wo7D!gG3tK26 z2lq%7Vjqr&oWxO+>1^EIqfrySFSWEV8ObKLRFYjR(4RX+*tgw*vIQ@FeM#UI45_zN zu6Q7|JiOCE7#f!hi;5sIPh>4NQ&>2F zV$X2X!F}EFuoKUPes*@cj5(`9s21&U-Q*)>96`k+r_ccAQxN7hM1I;M1gxGFCJvCMxW z4-2PT%+si509o2OB0smP#pP{m-jOe*f#T*LvZLd23=bvfRq{9hCO?t@$|@2LZOo5J z_a>Az=jF_g)B^#J?a}I^hGIk%nyMRvE20Ou#bgKRfk+7r`FZqF{FpVE+{QlaGf%UzT<$X%bX| z^x#$m4haE>frjCKaqQf~rHyP3{U=TEAaZ+rb|s|c?0P}U7_;>HuFarW&fAyk7;oz; z#Ck!i6#yaJWa4|bSt;D^(T<@9e6NcXjdz@!6#<=^0O}}aMUbrX){`Dlr5|rq1=L<- zlCSaKn*yYhdqXkZTsK5l{FPM5Px4U~gzY3Qu|9~PEfR@;UgEV(4cEO&$^@NpBdv-+ zl3fACl%l$TN?g&Y3!r<#c#uA=%bpx~;6l^|@E8|)&A@3d%-dyeV+iY_rMa&L($|U< z=v#4&BI=3eC(L8+x4+TH;PwSQ(}rgaacYI4ryL_WKO#kOy?w0c(KCo`6+dKn-p(?im_c7^mjQH~bvHmSBT;vZ zEKlIN{oy3>8^s?m^%*D zpnh3X(MV=8R{#2835&R{OTCW{9!o+}k1d_i@8<@8+w(mM@iI+I9y2$OLd$KzVb@#% zuc>y;jlXT;)9G~Vp0lGCr9*;pVn+_1B{afN;cAjeA4Lx>Af15#732@G1y+xOqt1_% z4)JJHi2C~bR}>#An}$3C+^gX6Q!5@e=@Ap%Q2-z;Smk7~rE4FZ4(O-YRkUY?F%FIB!}E@MYxGvv22~I9mmNt%xJ%ko5uU_Ks!0(nX4 z_4z6n{V^)RIUB(_S;WuJo*g!_3b4o2OW<<)d`#KF2Mi?Kk|&5GNtM1lX{wQ#w9ffh z!;2I-CM6;RS0*nOv1>osdEjfTr(9FJX-G+!r-JpNXz;fUs+VxYq)ecC=8=1UaL#5T zdyvgy0`z&EI?OUZ!^bX^FLj8Qj$)NF2y(jo7}5G{FGR`Gs3Zpu`DSpJ*g{xT$+k>7 zva;et0$tE8BQU4##$lG=ywUQP$c1sMusMExD!tZdqKw>-S_dI7b(JJ4hi@jrFq6Z4Vg__$uKBmVu> zPKt-dt28hI{I|}BPql~(tF=FNR54^%N1B&0icPNy??aRrcYdVr|45!HMBi^Y40DuG zaTZZv?Dcz3Bo{r^zZjG+5;s()l z&p!70c62l=MjkvOkV?1njj(Bk%5`+oJk&et^iI@iH6&MNvu}IMP-_oRTfs1jzDIuF z13&nOQX2Z%T1dZbDkSkmAaaNzFt%lV!K&V(R7mrMUfHp7+3{)3_|Eq0y&eC)J=mzv z**)#nuF*F5-aKv++BzJ$2K~L>x0X?1cJfb+b{g3e%L-m~$d2hu7d=bdTqX zMH(#fn?4-}PFO@YT4;Q?5b++&^Bv4nvK@CS8$1PnKUDG=5%tlK$E*GrfdU5ZJ_AhS z;K8wIM?Z@CfKM!X$qQC;V}xufw#G2_93|jF1!icQ6*g4I)m2J=^>x7A8j@L8NWC6l z8+jH8a3k>w-3IP9x+8l4>O&2^wuLO+!GI*dY&ZZe1V~z=`rtVjgni0ztCh}({A>6M zzJ0Nhqs32)(QNm`H23~ocg?q+Q{!d*;j&d0#Tlv!=(sRfIhXWO--polV!t?qOzp9%yTJ!=~9wAx_}AYx^TuCVjD2Nco3IbC+~a4 z#I5ZaxxDI`QgLPpEx!b*uiB{OUJ_B}*5St+ni+A&B`a|oCEtJTRMzmy2^@OJP~i$= zwmw|tnw%RxsC!$nc4q7zxaGA}ZVFb|3geTj!8PV?OLbj;TCD_8QY~zd37)p)TRv`V zji_{@)uLH+P2bpC_{_hwp&EvBFBKM@I=aua^?}4dDb}u1$mDe=^2igm3mWJGT@1TO z^II6{(rS``k{MxZs#PHiXKxRhNmv4I$Xe8c8oSbDCofI(IgQ(JY!pv93Bm7Smx$G; zzv#+`BMhH^1~gH}HlS{%v!KP|5wHCdi6ltkhWv_t>U@kBEYZv^RPc1W$)GcQ%`I9Y zDW#Bz6t3;Nc@T-(7ZE#3LZh0`j1R@nh!iY!kNz~`^)bQDqr^E)T=|pX>?E~V&Hm%o z?9PDWY`MbnQghS2EW<4i8+;#@mRZGav>&ZbeG?i{9bjq1?M$(MAGABtBQ30Yl?NWNbX;VpE$4Qr{ z4UuwTCW#P#c!yxo>aAW6wKYDkbwMg;kH6x5FVb2~1chyD8hv}KKjj?X zvgYe@r`9@+(4|n%C(9FMVM5;aO|Obs%k*wr@yu>pQ-NWy{m5YZ8S@!w-&Q713UMh6#J&B^OqJ4ON|70{KC%!^T1kjk38O6NkOkXvDVodd|sqc~R)|P=gkljS^rm$z5LiBodlACrTD9Jmd{?* zr`=J?5M~R{aAV~16Z+{nK4g}KvnaXemWUVKuXSQmpjcji$>G`+ZbIpLyLV8uI%@gF zVdBe&q(UlU1ZFAmrUrG<0cd|b{g2Lz!-e) zr`7CAxM(NVbvYBaT;0#+NwUX`Pg-jJmhr`*&)2abBgt^}Wc5Z+vw&$2#zUhM9N{-d zwcjhbW2%aOqXW<Gd zSJIO$5ji83GL*@TwPqPbM;t3;5M>WN{Z3;=mRR+*LaI}|p=>tlvFXI~(fgdYCLgBc zaX6Xy)Xw~R3Uw;p6~IFU0BkV;0Q&#YDfEvMDB+oZwj;he$yBBSe>Z!EwTri1xLgA_ z3*|P3m<2;}272z>XGnLH=p;zux|-V4Zyz-f{{)@UvI(mZe}T4Z38!`@E$)~0(yj%I zYA(-p#oE_)3cGr)#KZS`+3Jvaee-#WZ&5@;dQLulVvu`aKZ)^4iZ07Eo#~)d#HnV! zG9;dViY?OAt@m5!(vy?KOd6jozehl_an#DYZBiCQ>G9yq6{^u^_xfH>ze<>O_x{n; zr-Q{`YQc^LeNj~}+{qM22+>el?ottZWq z=Vc|XmTKh*dfgM|y--ntwQMy@(DA0#0ZN^JH+y_*^KtqJ;LAZf%qM{?Zm{3q16u%V zQ_ZxdTLlApO6WMA-~gFCv5p-q#H`}k(g6~yibQCNrMAF2YIUyYHEz8YcAV)v? zA=#~TPkL4Jq2mFv%#Uaz>#%k`t(UEYNP6kG9NBX@-VEuQ9r>c2U%S|8a#3GaYf<>e z-&SReBkxvWY~}$D#@rdLC0dGO#&fbsMd!vILB+8m)ohh1H+Vs0&oew?k@-@8an=g| z;lp_G>BYFfIsC~X+s=Axw~p@<<5E*{9Ucr3HJJgW$YJPgtu&6GDMxCbG4xDaVypi| zNjhfMj0vwzo8AZto2_lMyDM*_d-#5;k@aKb$)>nNZuBh*YY%nR?sLM>dm1+K@)_{7VJnEwF8*9) z#u_Yl9Gm6B_>yDRX$_#)E6mUU)f^%?GGSKSDI4p-8%lML_e zJHw}AIel-WT|OFIMG+i_B<#Ofq{}m2d5~y}_747j6femz!G?-u#bB6)jmsG`iL!lV zwVDr(HPyMQE0^gXUlsF`UVcoUOB!dQ5rwkgRcMM~+k%JCVn82gRi~jIWBLq9YZ09~ zR|LY}$iaL6EGmS<&KK=}%jL{~ycCHG&Z`4b9K{D3w(sr?v}clRceu-Z{RCY&+0mdW zf|I6(-_vfyx_FQIX?dM5Pk*+@8EW7bS@L?I)(d%tz)w%|XGVZBvMq^twS)W^0f(yp zVT_j+j26$H5k{VB$WZZqkcl_`u7`K++^K74`3F*GBTXE^xp zI2OJk11C#Wtf$F;*Fk!KYU1vof_MH77z}Hl4D(P!#bdvma=x7rPZARk44c_Kp;DGZ zLIwZ<|L5^nWd;1p1La?yZ;1i^Z=L;jTVVgP1@+a+{O>j;{$*2z>x=roOG5ce5}*I> z&hU4tf8177LomO@Ayy`)h@`Clk}BQ1=D$lN?qFeMEMWtGF|{!J$F1gS?sq{}0&fs8 zB^m(0`%CULcCwKDqWis-6>8N9!Nf|$3_TL8eLUlcdc&6PhJQ)*8* z`4KnYB1`}P{EIP!adU(H&q!idqrVLzUISf4jBei?xn?BsW2w zW6hw1hln_T?>8i#_~r=LpOIbbOl~>EysMyJMTp36j&T1O;c!!7)kh$p-;h$On}+M6Sf{*2_x@-zJfj1XN#1Q>3Pfd7n)n#zIj5hIDcbrsR$x;eu8 zXQWrPcG(aS8=_rBTEI6)`2LJAJ+*l^jfmUPu2vO)cYzxt*IXvUdFgwJhfFlyg71B zRRMH=M>5a!90`6_(X+wTsa1=E^nqEE=URQHc2Px3VJQ zaC76D+Eo#Tx>1i#x)J%1Hcgj$Bi_MBDsr{zA}D zu1-m7z>Se>s)|ZRvZhsVS%*=!R?& zV~EDRYMe&i*tn*osC3`}_7O41Z!a3E6K-r=Q&B2%7n0o(@iFMCft-3{d1Lem#NGsI z|7Qp`&*qq`d_sKy9!)w1NAo`cKW|)3UxL8)i($$|4#4s z5a|YQ7hcVK^cpv1^gGcpcVl)0}9WF8au!x z0RU-3m*E)!Ndnj=mn<3qI0MBf0hg*60Xh~?O9ci10000500jU}0RRAtDFFZg06H?k A(*OVf delta 71697 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 TI0B6rm!2vCO9oRJ0RR91V^k0D diff --git a/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m b/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m index 67a0eab..36c28d2 100644 --- a/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m +++ b/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m @@ -5,7 +5,7 @@ #import "MAUnityAdManager.h" -#define VERSION @"6.4.3" +#define VERSION @"6.5.2" #define KEY_WINDOW [UIApplication sharedApplication].keyWindow #define DEVICE_SPECIFIC_ADVIEW_AD_FORMAT ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) ? MAAdFormat.leader : MAAdFormat.banner @@ -21,14 +21,8 @@ extern "C" { UIWindow* UnityGetMainWindow(void); // life cycle management + int UnityIsPaused(void); void UnityPause(int pause); - void UnitySendMessage(const char* obj, const char* method, const char* msg); - - static const char * cStringCopy(NSString *string) - { - const char *value = string.UTF8String; - return value ? strdup(value) : NULL; - } void max_unity_dispatch_on_main_thread(dispatch_block_t block) { @@ -79,6 +73,9 @@ extern "C" { @property (nonatomic, strong) NSMutableDictionary *adInfoDict; @property (nonatomic, strong) NSObject *adInfoDictLock; +@property (nonatomic, strong) NSOperationQueue *backgroundCallbackEventsQueue; +@property (nonatomic, assign) BOOL resumeUnityAfterApplicationBecomesActive; + @end // Internal @@ -132,6 +129,9 @@ static ALUnityBackgroundCallback backgroundCallback; self.adInfoDict = [NSMutableDictionary dictionary]; self.adInfoDictLock = [[NSObject alloc] init]; + self.backgroundCallbackEventsQueue = [[NSOperationQueue alloc] init]; + self.backgroundCallbackEventsQueue.maxConcurrentOperationCount = 1; + max_unity_dispatch_on_main_thread(^{ self.safeAreaBackground = [[UIView alloc] init]; self.safeAreaBackground.hidden = YES; @@ -154,6 +154,31 @@ static ALUnityBackgroundCallback backgroundCallback; [self positionAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: self.verticalAdViewFormats[adUnitIdentifier]]; } }]; + + [[NSNotificationCenter defaultCenter] addObserver: self + selector: @selector(applicationPaused:) + name: UIApplicationDidEnterBackgroundNotification + object: nil]; + + [[NSNotificationCenter defaultCenter] addObserver: self + selector: @selector(applicationResumed:) + name: UIApplicationDidBecomeActiveNotification + object: nil]; + + [[NSNotificationCenter defaultCenter] addObserverForName: UIApplicationDidBecomeActiveNotification + object: nil + queue: [NSOperationQueue mainQueue] + usingBlock:^(NSNotification *notification) { + +#if !IS_TEST_APP + if ( self.resumeUnityAfterApplicationBecomesActive && UnityIsPaused() ) + { + UnityPause(NO); + } +#endif + + self.backgroundCallbackEventsQueue.suspended = NO; + }]; } return self; } @@ -197,13 +222,13 @@ static ALUnityBackgroundCallback backgroundCallback; NSString *consentFlowUserGeographyStr = @(configuration.consentFlowUserGeography).stringValue; NSString *consentDialogStateStr = @(configuration.consentDialogState).stringValue; NSString *appTrackingStatus = @(configuration.appTrackingTransparencyStatus).stringValue; // Deliberately name it `appTrackingStatus` to be a bit more generic (in case Android introduces a similar concept) - [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkInitializedEvent", - @"consentFlowUserGeography" : consentFlowUserGeographyStr, - @"consentDialogState" : consentDialogStateStr, - @"countryCode" : configuration.countryCode, - @"appTrackingStatus" : appTrackingStatus, - @"isSuccessfullyInitialized" : @([self.sdk isInitialized]), - @"isTestModeEnabled" : @([configuration isTestModeEnabled])}]; + [self forwardUnityEventWithArgs: @{@"name" : @"OnSdkInitializedEvent", + @"consentFlowUserGeography" : consentFlowUserGeographyStr, + @"consentDialogState" : consentDialogStateStr, + @"countryCode" : configuration.countryCode, + @"appTrackingStatus" : appTrackingStatus, + @"isSuccessfullyInitialized" : @([self.sdk isInitialized]), + @"isTestModeEnabled" : @([configuration isTestModeEnabled])}]; }); }]; @@ -222,7 +247,7 @@ static ALUnityBackgroundCallback backgroundCallback; [self createAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: [self adViewAdFormatForAdUnitIdentifier: adUnitIdentifier] atPosition: DEFAULT_AD_VIEW_POSITION withOffset: CGPointMake(xOffset, yOffset)]; } -- (void)loadBannerWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier +- (void)loadBannerWithAdUnitIdentifier:(nullable NSString *)adUnitIdentifier { [self loadAdViewWithAdUnitIdentifier: adUnitIdentifier adFormat: [self adViewAdFormatForAdUnitIdentifier: adUnitIdentifier]]; } @@ -710,7 +735,7 @@ static ALUnityBackgroundCallback backgroundCallback; } NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -764,13 +789,13 @@ static ALUnityBackgroundCallback backgroundCallback; [self.adInfoDict removeObjectForKey: adUnitIdentifier]; } - [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : name, - @"adUnitId" : adUnitIdentifier, - @"errorCode" : [@(error.code) stringValue], - @"errorMessage" : error.message, - @"waterfallInfo" : [self createAdWaterfallInfo: error.waterfall], - @"adLoadFailureInfo" : error.adLoadFailureInfo ?: @"", - @"latencyMillis" : [self requestLatencyMillisFromRequestLatency: error.requestLatency]}]; + [self forwardUnityEventWithArgs: @{@"name" : name, + @"adUnitId" : adUnitIdentifier, + @"errorCode" : [@(error.code) stringValue], + @"errorMessage" : error.message, + @"waterfallInfo" : [self createAdWaterfallInfo: error.waterfall], + @"adLoadFailureInfo" : error.adLoadFailureInfo ?: @"", + @"latencyMillis" : [self requestLatencyMillisFromRequestLatency: error.requestLatency]}]; }); } @@ -811,7 +836,7 @@ static ALUnityBackgroundCallback backgroundCallback; } NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -821,9 +846,9 @@ static ALUnityBackgroundCallback backgroundCallback; MAAdFormat *adFormat = ad.format; if ( ![adFormat isFullscreenAd] ) return; - // UnityPause needs to be called on the main thread. #if !IS_TEST_APP - UnityPause(1); + // UnityPause needs to be called on the main thread. + UnityPause(YES); #endif dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @@ -847,7 +872,7 @@ static ALUnityBackgroundCallback backgroundCallback; } NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -884,7 +909,7 @@ static ALUnityBackgroundCallback backgroundCallback; args[@"mediatedNetworkErrorMessage"] = error.mediatedNetworkErrorMessage; args[@"waterfallInfo"] = [self createAdWaterfallInfo: error.waterfall]; args[@"latencyMillis"] = [self requestLatencyMillisFromRequestLatency: error.requestLatency]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -894,9 +919,18 @@ static ALUnityBackgroundCallback backgroundCallback; MAAdFormat *adFormat = ad.format; if ( ![adFormat isFullscreenAd] ) return; - // UnityPause needs to be called on the main thread. #if !IS_TEST_APP - UnityPause(0); + extern bool _didResignActive; + if ( _didResignActive ) + { + // If the application is not active, we should wait until application becomes active to resume unity. + self.resumeUnityAfterApplicationBecomesActive = YES; + } + else + { + // UnityPause needs to be called on the main thread. + UnityPause(NO); + } #endif dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @@ -920,7 +954,7 @@ static ALUnityBackgroundCallback backgroundCallback; } NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -933,9 +967,9 @@ static ALUnityBackgroundCallback backgroundCallback; return; } - // UnityPause needs to be called on the main thread. #if !IS_TEST_APP - UnityPause(1); + // UnityPause needs to be called on the main thread. + UnityPause(YES); #endif dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @@ -951,7 +985,7 @@ static ALUnityBackgroundCallback backgroundCallback; } NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -964,9 +998,18 @@ static ALUnityBackgroundCallback backgroundCallback; return; } - // UnityPause needs to be called on the main thread. #if !IS_TEST_APP - UnityPause(0); + extern bool _didResignActive; + if ( _didResignActive ) + { + // If the application is not active, we should wait until application becomes active to resume unity. + self.resumeUnityAfterApplicationBecomesActive = YES; + } + else + { + // UnityPause needs to be called on the main thread. + UnityPause(NO); + } #endif dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ @@ -982,7 +1025,7 @@ static ALUnityBackgroundCallback backgroundCallback; } NSDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -1017,7 +1060,7 @@ static ALUnityBackgroundCallback backgroundCallback; NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; args[@"rewardLabel"] = rewardLabel; args[@"rewardAmount"] = rewardAmount; - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -1059,7 +1102,7 @@ static ALUnityBackgroundCallback backgroundCallback; NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; args[@"keepInBackground"] = @([adFormat isFullscreenAd]); - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -1098,9 +1141,9 @@ static ALUnityBackgroundCallback backgroundCallback; NSMutableDictionary *args = [self defaultAdEventParametersForName: name withAd: ad]; args[@"adReviewCreativeId"] = creativeIdentifier; args[@"keepInBackground"] = @([adFormat isFullscreenAd]); - + // Forward the event in background for fullscreen ads so that the user gets the callback even while the ad is playing. - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); } @@ -1939,24 +1982,19 @@ static ALUnityBackgroundCallback backgroundCallback; return UnityGetGLViewController() ?: UnityGetMainWindow().rootViewController ?: [KEY_WINDOW rootViewController]; } -+ (void)forwardUnityEventWithArgs:(NSDictionary *)args +- (void)forwardUnityEventWithArgs:(NSDictionary *)args { #if !IS_TEST_APP - void (^runnable)(void) = ^{ - const char *serializedParameters = cStringCopy([self serializeParameters: args]); - backgroundCallback(serializedParameters); - }; - - // Always forward in background - we push it back to the main thread in Unity - if ( [NSThread isMainThread] ) - { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), runnable); - } - else - { - runnable(); - } + extern bool _didResignActive; + // We should not call any script callbacks when application is not active. Suspend the callback queue if resign is active. + // We'll resume the queue once the application becomes active again. + self.backgroundCallbackEventsQueue.suspended = _didResignActive; #endif + + [self.backgroundCallbackEventsQueue addOperationWithBlock:^{ + NSString *serializedParameters = [MAUnityAdManager serializeParameters: args]; + backgroundCallback(serializedParameters.UTF8String); + }]; } + (NSString *)serializeParameters:(NSDictionary *)dict @@ -2011,7 +2049,7 @@ static ALUnityBackgroundCallback backgroundCallback; - (void)didDismissUserConsentDialog { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - [MAUnityAdManager forwardUnityEventWithArgs: @{@"name" : @"OnSdkConsentDialogDismissedEvent"}]; + [self forwardUnityEventWithArgs: @{@"name" : @"OnSdkConsentDialogDismissedEvent"}]; }); } @@ -2020,7 +2058,7 @@ static ALUnityBackgroundCallback backgroundCallback; - (void)showCMPForExistingUser { [self.sdk.cmpService showCMPForExistingUserWithCompletion:^(ALCMPError * _Nullable error) { - + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSMutableDictionary *args = [NSMutableDictionary dictionaryWithCapacity: 2]; args[@"name"] = @"OnCmpCompletedEvent"; @@ -2034,11 +2072,31 @@ static ALUnityBackgroundCallback backgroundCallback; @"keepInBackground": @(YES)}; } - [MAUnityAdManager forwardUnityEventWithArgs: args]; + [self forwardUnityEventWithArgs: args]; }); }]; } +#pragma mark - Application + +- (void)applicationPaused:(NSNotification *)notification +{ + [self notifyApplicationStateChangedEventForPauseState: YES]; +} + +- (void)applicationResumed:(NSNotification *)notification +{ + [self notifyApplicationStateChangedEventForPauseState: NO]; +} + +- (void)notifyApplicationStateChangedEventForPauseState:(BOOL)isPaused +{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [self forwardUnityEventWithArgs: @{@"name": @"OnApplicationStateChanged", + @"isPaused": @(isPaused)}]; + }); +} + - (MAAd *)adWithAdUnitIdentifier:(NSString *)adUnitIdentifier { @synchronized ( self.adInfoDictLock ) diff --git a/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm b/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm index 5571964..7ca2561 100644 --- a/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm +++ b/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm @@ -357,7 +357,7 @@ extern "C" 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); + NSLog(@"[%@] Failed to show consent dialog - Unavailable on iOS, please use the consent flow: https://developers.applovin.com/en/unity/overview/terms-and-privacy-policy-flow", TAG); } int _MaxConsentDialogState() diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs index 09634ae..1536e66 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs @@ -184,13 +184,10 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor /// /// Whether or not the plugin is under the Assets/ folder. /// -//--- INJECT PluginOutside START --- public static bool IsPluginOutsideAssetsDirectory - { get => !(PluginParentDirectory.StartsWith("Assets") || PluginParentDirectory.StartsWith("Packages")); } -//--- INJECT PluginOutside OVER --- -// { -// get { return !PluginParentDirectory.StartsWith("Assets"); } -// } + { + get { return !PluginParentDirectory.StartsWith("Assets"); } + } /// /// Whether or not gradle build system is enabled. diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs index 8598f30..3071a8c 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManagerWindow.cs @@ -18,15 +18,13 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor { public class AppLovinIntegrationManagerWindow : EditorWindow { - private const string keyNewLocalizationsMarked = "com.applovin.new_localizations_marked_v0"; // Update the key version each time new localizations are added. - private const string windowTitle = "AppLovin Integration Manager"; private const string appLovinSdkKeyLink = "https://dash.applovin.com/o/account#keys"; private const string userTrackingUsageDescriptionDocsLink = "https://developer.apple.com/documentation/bundleresources/information_property_list/nsusertrackingusagedescription"; - private const string documentationTermsAndPrivacyPolicyFlow = "https://dash.applovin.com/documentation/mediation/ios/getting-started/terms-and-privacy-policy-flow"; - private const string documentationAdaptersLink = "https://dash.applovin.com/documentation/mediation/unity/mediation-adapters"; + private const string documentationTermsAndPrivacyPolicyFlow = "https://developers.applovin.com/en/unity/overview/terms-and-privacy-policy-flow"; + private const string documentationAdaptersLink = "https://developers.applovin.com/en/unity/preparing-mediated-networks"; private const string documentationNote = "Please ensure that integration instructions (e.g. permissions, ATS settings, etc) specific to each network are implemented as well. Click the link below for more info:"; private const string uninstallIconExportPath = "MaxSdk/Resources/Images/uninstall_icon.png"; private const string alertIconExportPath = "MaxSdk/Resources/Images/alert_icon.png"; @@ -899,7 +897,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor GUILayout.Space(5); AppLovinSettings.Instance.AddApsSkAdNetworkIds = DrawOtherSettingsToggle(AppLovinSettings.Instance.AddApsSkAdNetworkIds, " Add Amazon Publisher Services SKAdNetworkID's"); GUILayout.Space(5); - var autoUpdateEnabled = DrawOtherSettingsToggle(EditorPrefs.GetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, true), " Enable Auto Update"); + var autoUpdateEnabled = DrawOtherSettingsToggle(EditorPrefs.GetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, true), " Enable Auto Update", "Checks for AppLovin MAX plugin updates and notifies you when an update is available."); EditorPrefs.SetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, autoUpdateEnabled); GUILayout.Space(5); var verboseLoggingEnabled = DrawOtherSettingsToggle(EditorPrefs.GetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, false), " Enable Verbose Logging"); @@ -914,12 +912,13 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor GUILayout.EndHorizontal(); } - private bool DrawOtherSettingsToggle(bool value, string text) + private bool DrawOtherSettingsToggle(bool value, string text, string tooltip = "") { using (new EditorGUILayout.HorizontalScope()) { GUILayout.Space(4); - var toggleValue = GUILayout.Toggle(value, text); + var content = MaxSdkUtils.IsValidString(tooltip) ? new GUIContent(text, tooltip) : new GUIContent(text); + var toggleValue = GUILayout.Toggle(value, content); GUILayout.Space(4); return toggleValue; diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup index 5d6574e..130b383 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup @@ -31,7 +31,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor [MenuItem("AppLovin/Documentation")] private static void Documentation() { - Application.OpenURL("https://dash.applovin.com/documentation/mediation/unity/getting-started"); + Application.OpenURL("https://developers.applovin.com/en/unity/overview/integration"); } [MenuItem("AppLovin/Contact Us")] diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta index 0749642..30fb834 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta @@ -1,10 +1,14 @@ fileFormatVersion: 2 -guid: 028aec80942df459ab226487b786042c +guid: 02c2d277874f649d18a59d382420bf65 labels: - al_max -- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup -DefaultImporter: +- al_max_export_path-MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs +MonoImporter: externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} userData: assetBundleName: assetBundleVariant: diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs index 2620739..d8ee3c7 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs @@ -90,6 +90,33 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor dynamicLibrariesToEmbed.Add("IASDKCore.xcframework"); } + if (AppLovinIntegrationManager.IsAdapterInstalled("InMobi", "10.7.2.0")) + { + dynamicLibrariesToEmbed.Add("InMobiSDK.xcframework"); + } + + if (AppLovinIntegrationManager.IsAdapterInstalled("Smaato", "22.8.3.0")) + { + dynamicLibrariesToEmbed.AddRange(new List() + { + "SmaatoSDKBanner.xcframework", + "SmaatoSDKCore.xcframework", + "SmaatoSDKInAppBidding.xcframework", + "SmaatoSDKInterstitial.xcframework", + "SmaatoSDKNative.xcframework", + "SmaatoSDKOpenMeasurement.xcframework", + "SmaatoSDKOutstream.xcframework", + "SmaatoSDKRewardedAds.xcframework", + "SmaatoSDKRichMedia.xcframework", + "SmaatoSDKVideo.xcframework" + }); + } + + if (AppLovinIntegrationManager.IsAdapterInstalled("Verve", "3.0.0.0")) + { + dynamicLibrariesToEmbed.Add("ATOM.xcframework"); + } + return dynamicLibrariesToEmbed; } } diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessAndroid.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessAndroid.cs index 2761fec..61bea2b 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessAndroid.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessAndroid.cs @@ -38,6 +38,10 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor private const string KeyConsentFlowTermsOfService = "consent_flow_terms_of_service"; private const string KeyConsentFlowPrivacyPolicy = "consent_flow_privacy_policy"; private const string KeyConsentFlowDebugUserGeography = "consent_flow_debug_user_geography"; + + private const string UmpLegacyDependencyLine = ""; + private const string UmpDependencyLine = ""; + private const string AndroidPackagesContainerElementString = "androidPackages"; public void OnPreprocessBuild(BuildReport report) { @@ -181,16 +185,16 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor private static void AddGoogleCmpDependencyIfNeeded() { - const string umpDependencyLine = ""; - const string containerElementString = "androidPackages"; + // Remove the legacy fixed UMP version if it exists, we'll add the dependency with a dynamic version below. + TryRemoveStringFromDependencyFile(UmpLegacyDependencyLine, AndroidPackagesContainerElementString); if (AppLovinInternalSettings.Instance.ConsentFlowEnabled) { - TryAddStringToDependencyFile(umpDependencyLine, containerElementString); + TryAddStringToDependencyFile(UmpDependencyLine, AndroidPackagesContainerElementString); } else { - TryRemoveStringFromDependencyFile(umpDependencyLine, containerElementString); + TryRemoveStringFromDependencyFile(UmpDependencyLine, AndroidPackagesContainerElementString); } } diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessiOS.cs b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessiOS.cs index dcffbc6..8537150 100644 --- a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessiOS.cs +++ b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcessiOS.cs @@ -20,18 +20,22 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor AddGoogleCmpDependencyIfNeeded(); } + private const string UmpLegacyDependencyLine = ""; + private const string UmpDependencyLine = ""; + private const string IosPodsContainerElementString = "iosPods"; + private static void AddGoogleCmpDependencyIfNeeded() { - const string umpDependencyLine = ""; - const string containerElementString = "iosPods"; + // Remove the legacy fixed UMP version if it exists, we'll add the dependency with a dynamic version below. + TryRemoveStringFromDependencyFile(UmpLegacyDependencyLine, IosPodsContainerElementString); if (AppLovinInternalSettings.Instance.ConsentFlowEnabled) { - TryAddStringToDependencyFile(umpDependencyLine, containerElementString); + TryAddStringToDependencyFile(UmpDependencyLine, IosPodsContainerElementString); } else { - TryRemoveStringFromDependencyFile(umpDependencyLine, containerElementString); + TryRemoveStringFromDependencyFile(UmpDependencyLine, IosPodsContainerElementString); } } diff --git a/MaxSdk/Scripts/MaxEventExecutor.cs b/MaxSdk/Scripts/MaxEventExecutor.cs index ee229be..1065e6d 100644 --- a/MaxSdk/Scripts/MaxEventExecutor.cs +++ b/MaxSdk/Scripts/MaxEventExecutor.cs @@ -44,7 +44,7 @@ namespace AppLovinMax.Internal #region Public API -#if UNITY_EDITOR +#if UNITY_EDITOR || !(UNITY_ANDROID || UNITY_IPHONE || UNITY_IOS) public static MaxEventExecutor Instance { get diff --git a/MaxSdk/Scripts/MaxSdk.cs b/MaxSdk/Scripts/MaxSdk.cs index 0620166..05e7a99 100644 --- a/MaxSdk/Scripts/MaxSdk.cs +++ b/MaxSdk/Scripts/MaxSdk.cs @@ -18,7 +18,7 @@ public class MaxSdk : MaxSdkUnityEditor #endif { - private const string _version = "6.4.3"; + private const string _version = "6.5.2"; /// /// Returns the current plugin version. diff --git a/MaxSdk/Scripts/MaxSdkBase.cs b/MaxSdk/Scripts/MaxSdkBase.cs index ebd9864..dacb7af 100644 --- a/MaxSdk/Scripts/MaxSdkBase.cs +++ b/MaxSdk/Scripts/MaxSdkBase.cs @@ -532,6 +532,11 @@ public abstract class MaxSdkBase } } + /// + /// Determines whether ad events raised by the AppLovin's Unity plugin should be invoked on the Unity main thread. + /// + public static bool? InvokeEventsOnUnityMainThread { get; set; } + /// /// The CMP service, which provides direct APIs for interfacing with the Google-certified CMP installed, if any. /// diff --git a/MaxSdk/Scripts/MaxSdkCallbacks.cs b/MaxSdk/Scripts/MaxSdkCallbacks.cs index 8654dfb..d2e3522 100644 --- a/MaxSdk/Scripts/MaxSdkCallbacks.cs +++ b/MaxSdk/Scripts/MaxSdkCallbacks.cs @@ -43,6 +43,24 @@ public static class MaxSdkCallbacks } } + private static Action _onApplicationStateChangedEvent; + /// + /// Fired when the application is paused or resumed. + /// + public static event Action OnApplicationStateChangedEvent + { + add + { + LogSubscribedToEvent("OnApplicationStateChangedEvent"); + _onApplicationStateChangedEvent += value; + } + remove + { + LogUnsubscribedToEvent("OnApplicationStateChangedEvent"); + _onApplicationStateChangedEvent -= value; + } + } + private static Action _onInterstitialAdLoadedEventV2; private static Action _onInterstitialAdLoadFailedEventV2; private static Action _onInterstitialAdDisplayedEventV2; @@ -1227,6 +1245,11 @@ public static class MaxSdkCallbacks var errorProps = MaxSdkUtils.GetDictionaryFromDictionary(eventProps, "error"); MaxCmpService.NotifyCompletedIfNeeded(errorProps); } + else if (eventName == "OnApplicationStateChanged") + { + var isPaused = MaxSdkUtils.GetBoolFromDictionary(eventProps, "isPaused"); + InvokeEvent(_onApplicationStateChangedEvent, isPaused, eventName, keepInBackground); + } // Ad Events else { @@ -1505,7 +1528,7 @@ public static class MaxSdkCallbacks if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName); - if (keepInBackground) + if (ShouldInvokeInBackground(keepInBackground)) { try { @@ -1528,7 +1551,7 @@ public static class MaxSdkCallbacks if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Param: " + param); - if (keepInBackground) + if (ShouldInvokeInBackground(keepInBackground)) { try { @@ -1551,7 +1574,7 @@ public static class MaxSdkCallbacks if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Params: " + param1 + ", " + param2); - if (keepInBackground) + if (ShouldInvokeInBackground(keepInBackground)) { try { @@ -1574,7 +1597,7 @@ public static class MaxSdkCallbacks if (!CanInvokeEvent(evt)) return; MaxSdkLogger.UserDebug("Invoking event: " + eventName + ". Params: " + param1 + ", " + param2 + ", " + param3); - if (keepInBackground) + if (ShouldInvokeInBackground(keepInBackground)) { try { @@ -1605,6 +1628,11 @@ public static class MaxSdkCallbacks return true; } + private static bool ShouldInvokeInBackground(bool keepInBackground) + { + return MaxSdkBase.InvokeEventsOnUnityMainThread == null ? keepInBackground : !MaxSdkBase.InvokeEventsOnUnityMainThread.Value; + } + private static void LogSubscribedToEvent(string eventName) { MaxSdkLogger.D("Listener has been added to callback: " + eventName); diff --git a/MaxSdk/Version.md b/MaxSdk/Version.md index 624e225..a8f16fc 100644 --- a/MaxSdk/Version.md +++ b/MaxSdk/Version.md @@ -1,3 +1,3 @@ # AppLovin MAX Unity Plugin -To get the latest changes, see the [AppLovin MAX Unity Changelog](https://dash.applovin.com/documentation/mediation/unity/changelog). +To get the latest changes, see the [AppLovin MAX Unity Changelog](https://developers.applovin.com/en/unity/changelog). diff --git a/Mediation/BidMachine.meta b/Mediation/BidMachine.meta index 0fcdafd..4d8e78c 100644 --- a/Mediation/BidMachine.meta +++ b/Mediation/BidMachine.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ef04dde3d80394693b97aba6bf4e2043 +guid: cb8583c72675544e2a48b72f5842b9d4 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine diff --git a/Mediation/BidMachine/Editor.meta b/Mediation/BidMachine/Editor.meta index 312d62d..8c9328d 100644 --- a/Mediation/BidMachine/Editor.meta +++ b/Mediation/BidMachine/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1e265a814936d4d91b402d94d1ef176f +guid: 738f8b304e76240d9a74d548a9ef1eac labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor diff --git a/Mediation/BidMachine/Editor/Dependencies.xml.meta b/Mediation/BidMachine/Editor/Dependencies.xml.meta index 65c7e84..c1ab220 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml.meta +++ b/Mediation/BidMachine/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5004667ee59064c0598e9e12aa1b90f9 +guid: 389e8627385e74195aea66b9f27a6c92 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml diff --git a/Mediation/ByteDance.meta b/Mediation/ByteDance.meta index 1e0a086..4a1f4a9 100644 --- a/Mediation/ByteDance.meta +++ b/Mediation/ByteDance.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4c565d72fc59a44ee8a7b0b01944da99 +guid: e2630939c2c7c4a4d8f68c0be1326912 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance diff --git a/Mediation/ByteDance/Editor.meta b/Mediation/ByteDance/Editor.meta index 324944d..dfeaf02 100644 --- a/Mediation/ByteDance/Editor.meta +++ b/Mediation/ByteDance/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2bab5733093d84253a54126c0fde0044 +guid: c3a7d329dc2ad4d6b812c867563af411 labels: - al_max - al_max_export_path-MaxSdk/Mediation/ByteDance/Editor diff --git a/Mediation/Chartboost.meta b/Mediation/Chartboost.meta index c8ce5fc..a8c201a 100644 --- a/Mediation/Chartboost.meta +++ b/Mediation/Chartboost.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3720d1ce9b160432187c6dacef4b9370 +guid: 5a0754b40d15d4f3bbd74daa8ae53760 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost diff --git a/Mediation/Chartboost/Editor.meta b/Mediation/Chartboost/Editor.meta index bd9656e..7f71c3a 100644 --- a/Mediation/Chartboost/Editor.meta +++ b/Mediation/Chartboost/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 82f22185cdb654c04836a4fd200201e4 +guid: 5f0d60b541006441b81dc6337d7cf525 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Chartboost/Editor diff --git a/Mediation/Facebook.meta b/Mediation/Facebook.meta index ac6cac9..9c35f8c 100644 --- a/Mediation/Facebook.meta +++ b/Mediation/Facebook.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1eef95c344aae49a5bb8428ff0ba76dc +guid: 7d6a70451ec9e474abcbe1c2312930ee labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook diff --git a/Mediation/Facebook/Editor.meta b/Mediation/Facebook/Editor.meta index 6465fad..e7a74f1 100644 --- a/Mediation/Facebook/Editor.meta +++ b/Mediation/Facebook/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f8555a3feb92149ada8f408e4d7915ed +guid: 3eef9cb24832346bba46bd0e2b68804c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Facebook/Editor diff --git a/Mediation/Fyber.meta b/Mediation/Fyber.meta index d38b297..fb1fcfa 100644 --- a/Mediation/Fyber.meta +++ b/Mediation/Fyber.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0ca570c2a4f50446da716526b4aeb949 +guid: b69bcc046a0f942b083c5d524acd0e05 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber diff --git a/Mediation/Fyber/Editor.meta b/Mediation/Fyber/Editor.meta index be15ea4..02a8932 100644 --- a/Mediation/Fyber/Editor.meta +++ b/Mediation/Fyber/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c45e6d13ddd03462f9c9755967048be6 +guid: 9353a92ae275b4ad290817705802cfd5 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor diff --git a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta index 5295ab8..b86f5aa 100644 --- a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta +++ b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta @@ -1,7 +1,8 @@ fileFormatVersion: 2 -guid: d737ad63861574b64918b243b237f6d9 +guid: a1291a5ea371742a0a61d7558959ddb4 labels: - al_max +- al_max_export_path-MaxSdk/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy - al_max_export_path-MaxSdk/Mediation~HEAD/Fyber/Editor/PrivacyInfo.xcprivacy PluginImporter: externalObjects: {} diff --git a/Mediation/Google.meta b/Mediation/Google.meta index 453ed4c..e11b283 100644 --- a/Mediation/Google.meta +++ b/Mediation/Google.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a4cf14586b32143de98b48c60866011c +guid: 6ad5197cdbf644485847d8fb29a420b6 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google diff --git a/Mediation/Google/Editor.meta b/Mediation/Google/Editor.meta index f9f6e64..0e69016 100644 --- a/Mediation/Google/Editor.meta +++ b/Mediation/Google/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0995f7e77088b4f40a6998621a23fec2 +guid: dbd0fba122c414a7495b270531c03d1f labels: - al_max - al_max_export_path-MaxSdk/Mediation/Google/Editor diff --git a/Mediation/GoogleAdManager.meta b/Mediation/GoogleAdManager.meta index 4b27a38..65c78ee 100644 --- a/Mediation/GoogleAdManager.meta +++ b/Mediation/GoogleAdManager.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7f0088cb5366b45a8bd47dc6d39a9104 +guid: 5a2b43e1f3e144dbcbc6aa5b450c0e16 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager diff --git a/Mediation/GoogleAdManager/Editor.meta b/Mediation/GoogleAdManager/Editor.meta index 61510f1..25608c1 100644 --- a/Mediation/GoogleAdManager/Editor.meta +++ b/Mediation/GoogleAdManager/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 60f175d291bde48c793c288610f7cf5e +guid: 60cbbf6fbf3594ee88384433b9016bf7 labels: - al_max - al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor diff --git a/Mediation/InMobi.meta b/Mediation/InMobi.meta index 04ffa28..5dc0555 100644 --- a/Mediation/InMobi.meta +++ b/Mediation/InMobi.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c7bce7d750720455c9b0ea3f0cce9a25 +guid: 6d6669637ce0e45d990df0a9744e3718 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi diff --git a/Mediation/InMobi/Editor.meta b/Mediation/InMobi/Editor.meta index bbb5854..7845382 100644 --- a/Mediation/InMobi/Editor.meta +++ b/Mediation/InMobi/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1af6490c6fb17409bad05988e30e0e98 +guid: 84e8f70cb0db54f8bbc5a31fcee4dd24 labels: - al_max - al_max_export_path-MaxSdk/Mediation/InMobi/Editor diff --git a/Mediation/IronSource.meta b/Mediation/IronSource.meta index fb2e646..bf36a7a 100644 --- a/Mediation/IronSource.meta +++ b/Mediation/IronSource.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5b895a8b08f2a4ef291dd5f37cba8ca7 +guid: 233710faa34714ebe849e87e116ec944 labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource diff --git a/Mediation/IronSource/Editor.meta b/Mediation/IronSource/Editor.meta index e5e4ca6..fb4d05f 100644 --- a/Mediation/IronSource/Editor.meta +++ b/Mediation/IronSource/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2a009f22f000b4c9c84d8c47e1acf89e +guid: 34f3ea4ef9439473ca8a8001a452714d labels: - al_max - al_max_export_path-MaxSdk/Mediation/IronSource/Editor diff --git a/Mediation/MediationAdapters.txt.meta b/Mediation/MediationAdapters.txt.meta index 719d92e..109264f 100644 --- a/Mediation/MediationAdapters.txt.meta +++ b/Mediation/MediationAdapters.txt.meta @@ -1,11 +1,6 @@ fileFormatVersion: 2 -guid: 366e0bcbac9c54cc7b41e7ebfe209ca8 +guid: de3543045917044cc9b1e19d4ba05d0a labels: - al_max - al_max_export_path-MaxSdk/Mediation/MediationAdapters.txt -- al_max_export_path-MaxSdk/Mediation~HEAD/MediationAdapters.txt -TextScriptImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: +timeCreated: 1609308536 diff --git a/Mediation/Mintegral.meta b/Mediation/Mintegral.meta index 3311403..087d2c3 100644 --- a/Mediation/Mintegral.meta +++ b/Mediation/Mintegral.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a6f1152190c9f4005b77172b3f827bfe +guid: 21a7fc0e7ca48454ea08a21213aed628 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral diff --git a/Mediation/Mintegral/Editor.meta b/Mediation/Mintegral/Editor.meta index f8ca0d0..0d2918b 100644 --- a/Mediation/Mintegral/Editor.meta +++ b/Mediation/Mintegral/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 894c254f71da34a2bb91fb723eccd3dd +guid: bf7e53ef2815a4ce4a353006a74ece94 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Mintegral/Editor diff --git a/Mediation/MobileFuse.meta b/Mediation/MobileFuse.meta index 3ff97e3..596e8c1 100644 --- a/Mediation/MobileFuse.meta +++ b/Mediation/MobileFuse.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aecddbfd152b9436b9e40009c599c234 +guid: e8bbe95079060473eabef2f7cccd9d8d labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse diff --git a/Mediation/MobileFuse/Editor.meta b/Mediation/MobileFuse/Editor.meta index 55baf1a..e9cea36 100644 --- a/Mediation/MobileFuse/Editor.meta +++ b/Mediation/MobileFuse/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b84c70e1357e34ae68f0388870358e2b +guid: f565c966cedfc4a718c125c9a4495640 labels: - al_max - al_max_export_path-MaxSdk/Mediation/MobileFuse/Editor diff --git a/Mediation/OguryPresage.meta b/Mediation/OguryPresage.meta index de3be4b..4495d6c 100644 --- a/Mediation/OguryPresage.meta +++ b/Mediation/OguryPresage.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b6fba7e0473954c51b60d721c20de4cd +guid: b3a52c271286d41e1964d237053cf4ed labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage diff --git a/Mediation/OguryPresage/Editor.meta b/Mediation/OguryPresage/Editor.meta index bb3e26c..b6016e2 100644 --- a/Mediation/OguryPresage/Editor.meta +++ b/Mediation/OguryPresage/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a9e2390d8d3224b58883953bb5b51b5a +guid: 86c4224b9f5c8449389e50e4bec806c8 labels: - al_max - al_max_export_path-MaxSdk/Mediation/OguryPresage/Editor diff --git a/Mediation/Smaato.meta b/Mediation/Smaato.meta index 82ea506..0bf2491 100644 --- a/Mediation/Smaato.meta +++ b/Mediation/Smaato.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4bfd64ef2dea145b585f5aea1e581bc3 +guid: 015ddda2fe4ea49d1b0f6497631cf958 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato diff --git a/Mediation/Smaato/Editor.meta b/Mediation/Smaato/Editor.meta index 4ee9d53..bbe9aa1 100644 --- a/Mediation/Smaato/Editor.meta +++ b/Mediation/Smaato/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 55c60994832f74b64851b3d475107739 +guid: 06993d059a7b94369949fedf7b0efd26 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Smaato/Editor diff --git a/Mediation/UnityAds.meta b/Mediation/UnityAds.meta index 471f29c..1a52c06 100644 --- a/Mediation/UnityAds.meta +++ b/Mediation/UnityAds.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5375c0d27756a4bd88d6bea312d5c439 +guid: 1fc688f4b8aa64db7bdeedb2c2060f8f labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds diff --git a/Mediation/UnityAds/Editor.meta b/Mediation/UnityAds/Editor.meta index 9959e49..6adf2a9 100644 --- a/Mediation/UnityAds/Editor.meta +++ b/Mediation/UnityAds/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 14028cfd09e304c79b5c811e9a726a53 +guid: c3db447ec84cc42cb95c7000d150daef labels: - al_max - al_max_export_path-MaxSdk/Mediation/UnityAds/Editor diff --git a/Mediation/Verve.meta b/Mediation/Verve.meta index 14c8c62..3270bd2 100644 --- a/Mediation/Verve.meta +++ b/Mediation/Verve.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 63ff722812e014ffd9af97864371c197 +guid: 89598f675be104b839df7dae952b604a labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve diff --git a/Mediation/Verve/Editor.meta b/Mediation/Verve/Editor.meta index 294c090..b16781a 100644 --- a/Mediation/Verve/Editor.meta +++ b/Mediation/Verve/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 58e5159adc8ba4666a19524426e952e2 +guid: 0e49c9d97ef9d4150a0335ec0c80bc3d labels: - al_max - al_max_export_path-MaxSdk/Mediation/Verve/Editor diff --git a/Mediation/Vungle.meta b/Mediation/Vungle.meta index b0a3306..a278d1c 100644 --- a/Mediation/Vungle.meta +++ b/Mediation/Vungle.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cffd18767184a494dad8f019037ab252 +guid: 42c233349e3b2436185ff3675e888d03 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle diff --git a/Mediation/Vungle/Editor.meta b/Mediation/Vungle/Editor.meta index 56f8636..be41da9 100644 --- a/Mediation/Vungle/Editor.meta +++ b/Mediation/Vungle/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1010e8092f71d45ffa740fa3bc771d1c +guid: 1f6e04ca16cdf4e28ba652b7dad6839c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Vungle/Editor diff --git a/Mediation/Yandex.meta b/Mediation/Yandex.meta index 48ff939..04a9c54 100644 --- a/Mediation/Yandex.meta +++ b/Mediation/Yandex.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2a2fecdf1505e42a9ba7b317b3d09b22 +guid: 5cacd558d9a7740979f9a443f45c507b labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex diff --git a/Mediation/Yandex/Editor.meta b/Mediation/Yandex/Editor.meta index aafdb90..6c75ca4 100644 --- a/Mediation/Yandex/Editor.meta +++ b/Mediation/Yandex/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cde9fb1c1947341e2b53c30db0318c7d +guid: a13c4ded03b88486cb4b7f7f6cbe0df3 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Yandex/Editor From f7d0451cd47ddd21fd982ebffa16d737319957e1 Mon Sep 17 00:00:00 2001 From: huyufei Date: Mon, 17 Jun 2024 10:28:06 +0800 Subject: [PATCH 25/30] =?UTF-8?q?update=EF=BC=9AMoloco=20=E9=9B=86?= =?UTF-8?q?=E6=88=90=E6=94=B9=E4=B8=BA=E5=AE=98=E8=81=9A=EF=BC=8C=20=20?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=20Max=20=E5=86=85=E9=83=A8=E7=9A=84=20Moloco?= =?UTF-8?q?=20=20=E7=89=88=E6=9C=AC=EF=BC=8C=20=E5=90=8C=E6=97=B6=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=E5=A4=96=E9=83=A8=E7=9A=84=20Moloco=20=E7=9A=84?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --story=1020566 --user=yufei.hu 【Unity】-【变现】MAX聚合双端接入支持Moloco Bidding的Adapter 版本 https://www.tapd.cn/33527076/s/1150752 --- ...nuItems.cs.backup => AppLovinMenuItems.cs} | 0 ....backup.meta => AppLovinMenuItems.cs.meta} | 0 Moloco/Editor.meta => Mediation/Moloco.meta | 5 +- .../Scripts => Mediation/Moloco}/Editor.meta | 5 +- Mediation/Moloco/Editor/Dependencies.xml | 9 ++ .../Moloco/Editor/Dependencies.xml.meta | 2 +- Moloco/Editor/ALMolocoAdapterDependencies.xml | 10 --- Moloco/Moloco.asmdef | 3 - Moloco/Moloco.asmdef.meta | 3 - Moloco/Scripts.meta | 8 -- Moloco/Scripts/Editor/Moloco.Editor.asmdef | 6 -- .../Scripts/Editor/Moloco.Editor.asmdef.meta | 3 - .../Editor/MolocoPostProcessBuildiOS.cs | 90 ------------------- .../Editor/MolocoPostProcessBuildiOS.cs.meta | 11 --- Moloco/Scripts/Editor/PodfileEditor.cs | 63 ------------- Moloco/Scripts/Editor/PodfileEditor.cs.meta | 11 --- 16 files changed, 18 insertions(+), 211 deletions(-) rename MaxSdk/Scripts/IntegrationManager/Editor/{AppLovinMenuItems.cs.backup => AppLovinMenuItems.cs} (100%) rename MaxSdk/Scripts/IntegrationManager/Editor/{AppLovinMenuItems.cs.backup.meta => AppLovinMenuItems.cs.meta} (100%) rename Moloco/Editor.meta => Mediation/Moloco.meta (56%) rename {Moloco/Scripts => Mediation/Moloco}/Editor.meta (55%) create mode 100644 Mediation/Moloco/Editor/Dependencies.xml rename Moloco/Editor/ALMolocoAdapterDependencies.xml.meta => Mediation/Moloco/Editor/Dependencies.xml.meta (84%) delete mode 100644 Moloco/Editor/ALMolocoAdapterDependencies.xml delete mode 100644 Moloco/Moloco.asmdef delete mode 100644 Moloco/Moloco.asmdef.meta delete mode 100644 Moloco/Scripts.meta delete mode 100644 Moloco/Scripts/Editor/Moloco.Editor.asmdef delete mode 100644 Moloco/Scripts/Editor/Moloco.Editor.asmdef.meta delete mode 100644 Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs delete mode 100644 Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs.meta delete mode 100644 Moloco/Scripts/Editor/PodfileEditor.cs delete mode 100644 Moloco/Scripts/Editor/PodfileEditor.cs.meta diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs similarity index 100% rename from MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs diff --git a/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta b/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta similarity index 100% rename from MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.backup.meta rename to MaxSdk/Scripts/IntegrationManager/Editor/AppLovinMenuItems.cs.meta diff --git a/Moloco/Editor.meta b/Mediation/Moloco.meta similarity index 56% rename from Moloco/Editor.meta rename to Mediation/Moloco.meta index 3106fe6..2e95b5c 100644 --- a/Moloco/Editor.meta +++ b/Mediation/Moloco.meta @@ -1,5 +1,8 @@ fileFormatVersion: 2 -guid: 610d1cb8415d649f8ae9c669633471f6 +guid: 09d05d27690c64a7e83fbbabceaaa10a +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation/Moloco folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Moloco/Scripts/Editor.meta b/Mediation/Moloco/Editor.meta similarity index 55% rename from Moloco/Scripts/Editor.meta rename to Mediation/Moloco/Editor.meta index f011e99..9299be4 100644 --- a/Moloco/Scripts/Editor.meta +++ b/Mediation/Moloco/Editor.meta @@ -1,5 +1,8 @@ fileFormatVersion: 2 -guid: 63ffaa4af1ddc4c28b3939f81c9ebf26 +guid: a86a3a94db2fc4759a126a577b762257 +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation/Moloco/Editor folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Mediation/Moloco/Editor/Dependencies.xml b/Mediation/Moloco/Editor/Dependencies.xml new file mode 100644 index 0000000..6fef892 --- /dev/null +++ b/Mediation/Moloco/Editor/Dependencies.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/Moloco/Editor/ALMolocoAdapterDependencies.xml.meta b/Mediation/Moloco/Editor/Dependencies.xml.meta similarity index 84% rename from Moloco/Editor/ALMolocoAdapterDependencies.xml.meta rename to Mediation/Moloco/Editor/Dependencies.xml.meta index 3603b28..452bd95 100644 --- a/Moloco/Editor/ALMolocoAdapterDependencies.xml.meta +++ b/Mediation/Moloco/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4285403e3608e4fc68d6ada86a902e2c +guid: df52eab134aaf4687be700447620003c labels: - al_max - al_max_export_path-MaxSdk/Mediation/Moloco/Editor/Dependencies.xml diff --git a/Moloco/Editor/ALMolocoAdapterDependencies.xml b/Moloco/Editor/ALMolocoAdapterDependencies.xml deleted file mode 100644 index 3f14858..0000000 --- a/Moloco/Editor/ALMolocoAdapterDependencies.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/Moloco/Moloco.asmdef b/Moloco/Moloco.asmdef deleted file mode 100644 index eedfdb1..0000000 --- a/Moloco/Moloco.asmdef +++ /dev/null @@ -1,3 +0,0 @@ -{ - "name": "Moloco" -} diff --git a/Moloco/Moloco.asmdef.meta b/Moloco/Moloco.asmdef.meta deleted file mode 100644 index 814b033..0000000 --- a/Moloco/Moloco.asmdef.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: d5456fec572384e828c8ac8565043709 -timeCreated: 1700133547 \ No newline at end of file diff --git a/Moloco/Scripts.meta b/Moloco/Scripts.meta deleted file mode 100644 index f615a18..0000000 --- a/Moloco/Scripts.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: f5455d04fd4f045d1a9312ce39a5902a -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Moloco/Scripts/Editor/Moloco.Editor.asmdef b/Moloco/Scripts/Editor/Moloco.Editor.asmdef deleted file mode 100644 index fe350b8..0000000 --- a/Moloco/Scripts/Editor/Moloco.Editor.asmdef +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "Moloco.Editor", - "includePlatforms": [ - "Editor" - ] -} \ No newline at end of file diff --git a/Moloco/Scripts/Editor/Moloco.Editor.asmdef.meta b/Moloco/Scripts/Editor/Moloco.Editor.asmdef.meta deleted file mode 100644 index 0577ca1..0000000 --- a/Moloco/Scripts/Editor/Moloco.Editor.asmdef.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 8e16e974e6af41fab383d3dcd2d5866e -timeCreated: 1701005033 \ No newline at end of file diff --git a/Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs b/Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs deleted file mode 100644 index d2c0610..0000000 --- a/Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs +++ /dev/null @@ -1,90 +0,0 @@ -#if UNITY_IOS || UNITY_IPHONE - -using System.Collections.Generic; -using System.IO; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEditor.iOS.Xcode; -using UnityEditor.iOS.Xcode.Extensions; - -namespace Moloco.IOS.Scripts.Editor -{ - public class MolocoPostProcessBuildiOS - { -#if !UNITY_2019_3_OR_NEWER - private const string UnityMainTargetName = "Unity-iPhone"; -#endif - - private static readonly List DynamicLibrariesToEmbed = new List - { - "MolocoSDK.xcframework", - "MolocoCustomAdapter.xcframework" - }; - - private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid) - { - // Check that the Pods directory exists (it might not if a publisher is building with Generate Podfile setting disabled in EDM). - var podsDirectory = Path.Combine(buildPath, "Pods"); - if (!Directory.Exists(podsDirectory)) return; - - var dynamicLibraryPathsPresentInProject = new List(); - foreach (var dynamicLibraryToSearch in DynamicLibrariesToEmbed) - { - // both .framework and .xcframework are directories, not files - var directories = - Directory.GetDirectories(podsDirectory, dynamicLibraryToSearch, SearchOption.AllDirectories); - if (directories.Length <= 0) continue; - - var dynamicLibraryAbsolutePath = directories[0]; - var index = dynamicLibraryAbsolutePath.LastIndexOf("Pods"); - var relativePath = dynamicLibraryAbsolutePath.Substring(index); - dynamicLibraryPathsPresentInProject.Add(relativePath); - } - - if (dynamicLibraryPathsPresentInProject.Count <= 0) return; - -#if UNITY_2019_3_OR_NEWER - foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject) - { - var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath); - project.AddFileToEmbedFrameworks(targetGuid, fileGuid); - } -#else - string runpathSearchPaths; -#if UNITY_2018_2_OR_NEWER - runpathSearchPaths = project.GetBuildPropertyForAnyConfig(targetGuid, "LD_RUNPATH_SEARCH_PATHS"); -#else - runpathSearchPaths = "$(inherited)"; -#endif - runpathSearchPaths += string.IsNullOrEmpty(runpathSearchPaths) ? "" : " "; - - // Check if runtime search paths already contains the required search paths for dynamic libraries. - if (runpathSearchPaths.Contains("@executable_path/Frameworks")) - return; - - runpathSearchPaths += "@executable_path/Frameworks"; - project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", runpathSearchPaths); -#endif - } - - [PostProcessBuildAttribute(int.MaxValue)] - public static void MolocoPostProcessPbxProject(BuildTarget buildTarget, string buildPath) - { - var projectPath = PBXProject.GetPBXProjectPath(buildPath); - var project = new PBXProject(); - project.ReadFromFile(projectPath); - -#if UNITY_2019_3_OR_NEWER - var unityMainTargetGuid = project.GetUnityMainTargetGuid(); - var unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); -#else - var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); - var unityFrameworkTargetGuid = project.TargetGuidByName(UnityMainTargetName); -#endif - EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid); - project.WriteToFile(projectPath); - } - } -} - -#endif \ No newline at end of file diff --git a/Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs.meta b/Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs.meta deleted file mode 100644 index d03fe4c..0000000 --- a/Moloco/Scripts/Editor/MolocoPostProcessBuildiOS.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: c652888c174cc466f992f1fc1a713fb7 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Moloco/Scripts/Editor/PodfileEditor.cs b/Moloco/Scripts/Editor/PodfileEditor.cs deleted file mode 100644 index f58585a..0000000 --- a/Moloco/Scripts/Editor/PodfileEditor.cs +++ /dev/null @@ -1,63 +0,0 @@ -#if UNITY_IOS || UNITY_IPHONE - -using System.IO; -using System.Linq; -using UnityEditor; -using UnityEditor.Callbacks; -using UnityEngine; - -namespace Moloco.Scripts.Editor -{ - public class PodfileEditor - { - // [PostProcessBuild(45)] // Add to the Podfile after it's generated (40) but before "pod install" (50) - public static void OnPostProcessBuild(BuildTarget buildTarget, string pathToBuiltProject) - { - if (buildTarget != BuildTarget.iOS) - { - return; - } - - string podfilePath = Path.Combine(pathToBuiltProject, "Podfile"); - - if (File.Exists(podfilePath)) - { - var codeSigningStyle = PlayerSettings.iOS.appleEnableAutomaticSigning ? "Automatic" : "Manual"; - var teamId = PlayerSettings.iOS.appleDeveloperTeamID; - var provisioningProfileId = PlayerSettings.iOS.iOSManualProvisioningProfileID; - var provisioningProfileType = PlayerSettings.iOS.iOSManualProvisioningProfileType; - - string[] molocoTargets = - { - "MolocoSDKiOS-MolocoSDK", - "MolocoCustomAdapter-MolocoCustomAdapter", - "MolocoCustomAdapterAppLovin-MolocoCustomAdapterAppLovin", - "MolocoCustomAdapterIronSource-MolocoCustomAdapterIronSource" - }; - var molocoTargetsString = string.Join(", ", molocoTargets.Select(element => $"'{element}'")); - - using var sw = File.AppendText(podfilePath); - sw.WriteLine("\n\n\npost_install do |installer|"); - sw.WriteLine(" installer.pods_project.targets.each do |target|"); - sw.WriteLine(" target.build_configurations.each do |config|"); - sw.WriteLine(" if [" + molocoTargetsString + "].include? target.name"); - sw.WriteLine(" config.build_settings['CODE_SIGN_STYLE'] = '" + codeSigningStyle + "'"); - sw.WriteLine(" config.build_settings['DEVELOPMENT_TEAM'] = '" + teamId + "'"); - if (!PlayerSettings.iOS.appleEnableAutomaticSigning) - { - sw.WriteLine(" config.build_settings['PROVISIONING_PROFILE_APP'] = '" + provisioningProfileId + "\'"); - } - sw.WriteLine(" end"); - sw.WriteLine(" end"); - sw.WriteLine(" end"); - sw.WriteLine("end"); - } - else - { - Debug.LogWarning("Podfile not found in the Xcode project."); - } - } - } -} - -#endif \ No newline at end of file diff --git a/Moloco/Scripts/Editor/PodfileEditor.cs.meta b/Moloco/Scripts/Editor/PodfileEditor.cs.meta deleted file mode 100644 index cc339f4..0000000 --- a/Moloco/Scripts/Editor/PodfileEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 930ff57270fca425885f84404dbfaafc -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From abab35c2a5e8c43ba3f33df0613b2b307e71675b Mon Sep 17 00:00:00 2001 From: huyufei Date: Mon, 17 Jun 2024 14:19:50 +0800 Subject: [PATCH 26/30] =?UTF-8?q?update:=20=E6=B7=BB=E5=8A=A0=20Moloco=20?= =?UTF-8?q?=E7=9A=84=E6=9E=84=E5=BB=BA=E7=AE=A1=E7=BA=BF=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/PostProcess.meta | 3 + .../PostProcess/MolocoPostProcessBuildiOS.cs | 91 +++++++++++++++++++ .../MolocoPostProcessBuildiOS.cs.meta | 3 + Moloco.meta | 8 -- 4 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 Editor/PostProcess.meta create mode 100644 Editor/PostProcess/MolocoPostProcessBuildiOS.cs create mode 100644 Editor/PostProcess/MolocoPostProcessBuildiOS.cs.meta delete mode 100644 Moloco.meta diff --git a/Editor/PostProcess.meta b/Editor/PostProcess.meta new file mode 100644 index 0000000..4b40464 --- /dev/null +++ b/Editor/PostProcess.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9707190b56774bf98ead95dd04616789 +timeCreated: 1718605024 \ No newline at end of file diff --git a/Editor/PostProcess/MolocoPostProcessBuildiOS.cs b/Editor/PostProcess/MolocoPostProcessBuildiOS.cs new file mode 100644 index 0000000..6e918ad --- /dev/null +++ b/Editor/PostProcess/MolocoPostProcessBuildiOS.cs @@ -0,0 +1,91 @@ +#if UNITY_IOS|| UNITY_IPHONE + +namespace Guru.Editor +{ + using System.Collections.Generic; + using System.IO; + using UnityEditor; + using UnityEditor.Callbacks; + using UnityEditor.iOS.Xcode; + using UnityEditor.iOS.Xcode.Extensions; + + public class MolocoPostProcessBuildiOS + { +#if !UNITY_2019_3_OR_NEWER + private const string UnityMainTargetName = "Unity-iPhone"; +#endif + + private static readonly List DynamicLibrariesToEmbed = new List + { + "MolocoSDK.xcframework", + "MolocoCustomAdapter.xcframework" + }; + + private static void EmbedDynamicLibrariesIfNeeded(string buildPath, PBXProject project, string targetGuid) + { + // Check that the Pods directory exists (it might not if a publisher is building with Generate Podfile setting disabled in EDM). + var podsDirectory = Path.Combine(buildPath, "Pods"); + if (!Directory.Exists(podsDirectory)) return; + + var dynamicLibraryPathsPresentInProject = new List(); + foreach (var dynamicLibraryToSearch in DynamicLibrariesToEmbed) + { + // both .framework and .xcframework are directories, not files + var directories = + Directory.GetDirectories(podsDirectory, dynamicLibraryToSearch, SearchOption.AllDirectories); + if (directories.Length <= 0) continue; + + var dynamicLibraryAbsolutePath = directories[0]; + var index = dynamicLibraryAbsolutePath.LastIndexOf("Pods"); + var relativePath = dynamicLibraryAbsolutePath.Substring(index); + dynamicLibraryPathsPresentInProject.Add(relativePath); + } + + if (dynamicLibraryPathsPresentInProject.Count <= 0) return; + +#if UNITY_2019_3_OR_NEWER + foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject) + { + var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath); + project.AddFileToEmbedFrameworks(targetGuid, fileGuid); + } +#else + string runpathSearchPaths; +#if UNITY_2018_2_OR_NEWER + runpathSearchPaths = project.GetBuildPropertyForAnyConfig(targetGuid, "LD_RUNPATH_SEARCH_PATHS"); +#else + runpathSearchPaths = "$(inherited)"; +#endif + runpathSearchPaths += string.IsNullOrEmpty(runpathSearchPaths) ? "" : " "; + + // Check if runtime search paths already contains the required search paths for dynamic libraries. + if (runpathSearchPaths.Contains("@executable_path/Frameworks")) + return; + + runpathSearchPaths += "@executable_path/Frameworks"; + project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", runpathSearchPaths); +#endif + } + + [PostProcessBuild(int.MaxValue)] + public static void MolocoPostProcessPbxProject(BuildTarget buildTarget, string buildPath) + { + var projectPath = PBXProject.GetPBXProjectPath(buildPath); + var project = new PBXProject(); + project.ReadFromFile(projectPath); + +#if UNITY_2019_3_OR_NEWER + var unityMainTargetGuid = project.GetUnityMainTargetGuid(); + var unityFrameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); +#else + var unityMainTargetGuid = project.TargetGuidByName(UnityMainTargetName); + var unityFrameworkTargetGuid = project.TargetGuidByName(UnityMainTargetName); +#endif + EmbedDynamicLibrariesIfNeeded(buildPath, project, unityMainTargetGuid); + project.WriteToFile(projectPath); + } + } + +} + +#endif \ No newline at end of file diff --git a/Editor/PostProcess/MolocoPostProcessBuildiOS.cs.meta b/Editor/PostProcess/MolocoPostProcessBuildiOS.cs.meta new file mode 100644 index 0000000..0e0c20a --- /dev/null +++ b/Editor/PostProcess/MolocoPostProcessBuildiOS.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 936e2d412b5342df98345c07fdf68c66 +timeCreated: 1718605026 \ No newline at end of file diff --git a/Moloco.meta b/Moloco.meta deleted file mode 100644 index 9671811..0000000 --- a/Moloco.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e1f46a63334734c8481955bddc4b6d1c -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: From 2d23dda7e09d8ae6a3e0af5501e8b088224eddb4 Mon Sep 17 00:00:00 2001 From: huyufei Date: Mon, 24 Jun 2024 09:28:57 +0800 Subject: [PATCH 27/30] update: Amazon Unity SDK -> 1.9.0 --- Amazon/Amazon.asmdef | 2 +- Amazon/Plugins/iOS.meta | 2 +- Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec | 3 +- .../iOS/Amazon-SDK-Plugin.podspec.meta | 2 +- Amazon/Plugins/iOS/AmazonBinding.m | 4 - Amazon/Plugins/iOS/AmazonBinding.m.meta | 2 +- Amazon/Plugins/iOS/AmazonManager.h | 1 - Amazon/Plugins/iOS/AmazonManager.h.meta | 2 +- Amazon/Plugins/iOS/AmazonManager.mm | 26 ++- Amazon/Plugins/iOS/AmazonManager.mm.meta | 2 +- Amazon/Plugins/iOS/AmazonUnityCallback.h.meta | 2 +- .../Plugins/iOS/AmazonUnityCallback.mm.meta | 2 +- Amazon/Plugins/iOS/DTBBannerDelegate.h.meta | 2 +- Amazon/Plugins/iOS/DTBBannerDelegate.mm.meta | 2 +- .../iOS/DTBInterstitialDelegate.h.meta | 2 +- .../iOS/DTBInterstitialDelegate.mm.meta | 2 +- Amazon/Sample/APSMaxMediation.unity | 221 +++++++++++++++++- Amazon/Sample/APSMaxMediation.unity.meta | 2 +- Amazon/Sample/AmazonMaxDemo.cs | 11 +- Amazon/Sample/AmazonMaxDemo.cs.meta | 2 +- Amazon/Scripts/Amazon.cs | 4 + Amazon/Scripts/Amazon.cs.meta | 2 +- Amazon/Scripts/AmazonConstants.cs | 4 +- Amazon/Scripts/AmazonConstants.cs.meta | 2 +- Amazon/Scripts/Common.meta | 2 +- Amazon/Scripts/Common/IAdInterstitial.cs.meta | 2 +- Amazon/Scripts/Common/IAdRequest.cs | 5 +- Amazon/Scripts/Common/IAdRequest.cs.meta | 2 +- Amazon/Scripts/Common/IAdSize.cs.meta | 2 +- Amazon/Scripts/Common/IAdView.cs | 2 + Amazon/Scripts/Common/IAdView.cs.meta | 2 +- Amazon/Scripts/Common/IFetchManager.cs.meta | 2 +- Amazon/Scripts/Common/ISlotGroup.cs.meta | 2 +- Amazon/Scripts/Editor.meta | 2 +- .../Scripts/Editor/Amazon.Editor.asmdef.meta | 8 +- .../Scripts/Editor/AmazonAboutDialog.cs.meta | 2 +- Amazon/Scripts/Editor/AmazonBuildScript.cs | 2 + .../Scripts/Editor/AmazonBuildScript.cs.meta | 2 +- .../Editor/AmazonCoroutineExtensions.cs.meta | 2 +- .../Scripts/Editor/AmazonCoroutines.cs.meta | 2 +- Amazon/Scripts/Editor/AmazonDependencies.xml | 12 +- .../Editor/AmazonDependencies.xml.meta | 2 +- Amazon/Scripts/Editor/AmazonPostBuildiOS.cs | 54 ++--- .../Scripts/Editor/AmazonPostBuildiOS.cs.meta | 2 +- Amazon/Scripts/Editor/AmazonSDKManager.cs | 10 +- .../Scripts/Editor/AmazonSDKManager.cs.meta | 2 +- Amazon/Scripts/Editor/Tests.meta | 2 +- .../Editor/Tests/AmazonSDKTests.cs.meta | 2 +- .../Scripts/Editor/Tests/AmazonTest.cs.meta | 2 +- .../Editor/Tests/AmazonUtilsTests.cs.meta | 2 +- Amazon/Scripts/Internal.meta | 2 +- Amazon/Scripts/Internal/APSAdDelegate.cs.meta | 2 +- Amazon/Scripts/Internal/APSAdRequestExtra.cs | 145 ++++++++++++ ...once.cs.meta => APSAdRequestExtra.cs.meta} | 2 +- Amazon/Scripts/Internal/APSBannerAdRequest.cs | 43 ++-- .../Internal/APSBannerAdRequest.cs.meta | 2 +- .../Internal/APSInterstitialAdRequest.cs.meta | 2 +- Amazon/Scripts/Internal/APSMediationUtils.cs | 96 ++++++-- .../Internal/APSMediationUtils.cs.meta | 2 +- .../Internal/APSVideoAdRequest.cs.meta | 2 +- Amazon/Scripts/Internal/AdError.cs.meta | 2 +- .../Scripts/Internal/AdInterstitial.cs.meta | 2 +- Amazon/Scripts/Internal/AdNetworkInfo.cs | 1 - Amazon/Scripts/Internal/AdNetworkInfo.cs.meta | 2 +- Amazon/Scripts/Internal/AdRequest.cs | 6 + Amazon/Scripts/Internal/AdRequest.cs.meta | 2 +- Amazon/Scripts/Internal/AdResponce.cs | 4 - Amazon/Scripts/Internal/AdResponce.cs.meta | 11 - Amazon/Scripts/Internal/AdResponse.cs.meta | 2 +- Amazon/Scripts/Internal/AdSize.cs.meta | 2 +- Amazon/Scripts/Internal/AdView.cs | 6 + Amazon/Scripts/Internal/AdView.cs.meta | 2 +- .../Internal/AmazonPackageConfig.cs.meta | 2 +- Amazon/Scripts/Internal/AmazonUtils.cs.meta | 2 +- Amazon/Scripts/Internal/Android.meta | 2 +- .../Internal/Android/AdRegistration.cs | 2 +- .../Internal/Android/AdRegistration.cs.meta | 2 +- .../Internal/Android/AndroidAdInterstitial.cs | 13 +- .../Android/AndroidAdInterstitial.cs.meta | 2 +- .../Internal/Android/AndroidAdResponce.cs | 4 - .../Android/AndroidAdResponce.cs.meta | 11 - .../Android/AndroidAdResponse.cs.meta | 2 +- .../Scripts/Internal/Android/AndroidAdView.cs | 12 +- .../Internal/Android/AndroidAdView.cs.meta | 2 +- .../Internal/Android/AndroidPlatform.cs | 3 + .../Internal/Android/AndroidPlatform.cs.meta | 2 +- .../Android/DTBAdBannerListener.cs.meta | 2 +- .../Android/DTBAdInterstitialListener.cs.meta | 2 +- .../Scripts/Internal/Android/DTBAdRequest.cs | 13 +- .../Internal/Android/DTBAdRequest.cs.meta | 2 +- Amazon/Scripts/Internal/Android/DTBAdSize.cs | 5 + .../Internal/Android/DTBAdSize.cs.meta | 2 +- .../Internal/Android/DTBCallback.cs.meta | 2 +- .../Internal/Android/DTBFetchFactory.cs.meta | 2 +- .../Internal/Android/DTBFetchManager.cs | 4 + .../Internal/Android/DTBFetchManager.cs.meta | 2 +- .../Internal/Android/DTBSlotGroup.cs.meta | 2 +- Amazon/Scripts/Internal/IOS.meta | 2 +- .../IOS/DTBAdBannerDispatcher.cs.meta | 2 +- .../IOS/DTBAdInterstitialDispatcher.cs.meta | 2 +- Amazon/Scripts/Internal/IOS/DTBAdRequest.cs | 8 +- .../Scripts/Internal/IOS/DTBAdRequest.cs.meta | 2 +- Amazon/Scripts/Internal/IOS/DTBAdSize.cs.meta | 2 +- .../Scripts/Internal/IOS/DTBCallback.cs.meta | 2 +- .../Internal/IOS/DTBFetchManager.cs.meta | 2 +- .../Scripts/Internal/IOS/DTBSlotGroup.cs.meta | 2 +- Amazon/Scripts/Internal/IOS/Externs.cs | 3 - Amazon/Scripts/Internal/IOS/Externs.cs.meta | 2 +- .../Internal/IOS/IOSAdInterstitial.cs.meta | 2 +- Amazon/Scripts/Internal/IOS/IOSAdResponce.cs | 4 - Amazon/Scripts/Internal/IOS/IOSAdResponse.cs | 9 +- .../Internal/IOS/IOSAdResponse.cs.meta | 2 +- Amazon/Scripts/Internal/IOS/IOSAdView.cs.meta | 2 +- Amazon/Scripts/Internal/IOS/IOSPlatform.cs | 3 + .../Scripts/Internal/IOS/IOSPlatform.cs.meta | 2 +- Amazon/Scripts/Internal/MiniJSON.cs.meta | 2 +- Amazon/Scripts/Internal/PlatformApi.cs.meta | 2 +- Amazon/Scripts/Internal/SlotGroup.cs.meta | 2 +- Amazon/Scripts/Mediations.meta | 2 +- .../Scripts/Mediations/AppLovinMediation.meta | 2 +- .../Mediations/AppLovinMediation/Editor.meta | 2 +- .../Editor/APSAppLovinPackageConfig.cs | 4 +- .../Editor/APSAppLovinPackageConfig.cs.meta | 2 +- .../AppLovinMediation/Editor/Dependencies.xml | 4 +- .../Editor/Dependencies.xml.meta | 2 +- 125 files changed, 699 insertions(+), 254 deletions(-) create mode 100644 Amazon/Scripts/Internal/APSAdRequestExtra.cs rename Amazon/Scripts/Internal/{IOS/IOSAdResponce.cs.meta => APSAdRequestExtra.cs.meta} (83%) delete mode 100644 Amazon/Scripts/Internal/AdResponce.cs delete mode 100644 Amazon/Scripts/Internal/AdResponce.cs.meta delete mode 100644 Amazon/Scripts/Internal/Android/AndroidAdResponce.cs delete mode 100644 Amazon/Scripts/Internal/Android/AndroidAdResponce.cs.meta delete mode 100644 Amazon/Scripts/Internal/IOS/IOSAdResponce.cs diff --git a/Amazon/Amazon.asmdef b/Amazon/Amazon.asmdef index 04ce4ba..7d1153c 100644 --- a/Amazon/Amazon.asmdef +++ b/Amazon/Amazon.asmdef @@ -1,6 +1,6 @@ { "name": "Amazon", - "rootNamespace": "", + "rootNamespace": "AmazonAds", "references": [ "MaxSdk", "MaxSdk.Scripts" diff --git a/Amazon/Plugins/iOS.meta b/Amazon/Plugins/iOS.meta index 103e0d1..ed1612d 100644 --- a/Amazon/Plugins/iOS.meta +++ b/Amazon/Plugins/iOS.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fd97fc7641615462abc63e027208b9a2 +guid: 24337d8fd6824de408fd642c0e3146b9 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec b/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec index c7e21c1..b5c9f9a 100644 --- a/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec +++ b/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec @@ -11,6 +11,7 @@ Pod::Spec.new do |s| s.dependency 'AmazonPublisherServicesSDK' s.pod_target_xcconfig = { + 'ENABLE_BITCODE' => 'NO', 'OTHER_CPLUSPLUSFLAGS' => '-fcxx-modules', } -end +end \ No newline at end of file diff --git a/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec.meta b/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec.meta index 2ab557c..193c093 100644 --- a/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec.meta +++ b/Amazon/Plugins/iOS/Amazon-SDK-Plugin.podspec.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ce7a667caa6f64752b219fe8edd61617 +guid: ef1aca82fadf5594c9294472e9a39a60 DefaultImporter: externalObjects: {} userData: diff --git a/Amazon/Plugins/iOS/AmazonBinding.m b/Amazon/Plugins/iOS/AmazonBinding.m index eb30853..7ad920b 100644 --- a/Amazon/Plugins/iOS/AmazonBinding.m +++ b/Amazon/Plugins/iOS/AmazonBinding.m @@ -162,10 +162,6 @@ void _addSlotGroup(DTBSlotGroup* slot){ [[AmazonManager sharedManager] addSlotGroup:slot]; } -const char* _fetchMoPubKeywords(DTBAdResponse* response){ - return amazonStringCopy([[AmazonManager sharedManager] fetchMoPubKeywords:response]); -} - const char* _fetchAmznSlots(DTBAdResponse* response){ return amazonStringCopy([[AmazonManager sharedManager] fetchAmznSlots:response]); } diff --git a/Amazon/Plugins/iOS/AmazonBinding.m.meta b/Amazon/Plugins/iOS/AmazonBinding.m.meta index bd71100..5903014 100644 --- a/Amazon/Plugins/iOS/AmazonBinding.m.meta +++ b/Amazon/Plugins/iOS/AmazonBinding.m.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bc75c2542fbb6469798f0dc4baf0100e +guid: 9d97bf664a8fcf944992cbb98d7bc72c PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/AmazonManager.h b/Amazon/Plugins/iOS/AmazonManager.h index 7735ac4..bcadcb0 100755 --- a/Amazon/Plugins/iOS/AmazonManager.h +++ b/Amazon/Plugins/iOS/AmazonManager.h @@ -46,7 +46,6 @@ -(DTBSlotGroup*)createSlotGroup:(NSString*)slotGroupName; -(void)addSlot:(DTBSlotGroup*)slot size:(DTBAdSize*)size; -(void)addSlotGroup:(DTBSlotGroup*)group; --(NSString*)fetchMoPubKeywords:(DTBAdResponse*)response; -(NSString*)fetchAmznSlots:(DTBAdResponse*)response; -(int)fetchAdWidth:(DTBAdResponse*)response; -(int)fetchAdHeight:(DTBAdResponse*)response; diff --git a/Amazon/Plugins/iOS/AmazonManager.h.meta b/Amazon/Plugins/iOS/AmazonManager.h.meta index dd4b61d..64384be 100644 --- a/Amazon/Plugins/iOS/AmazonManager.h.meta +++ b/Amazon/Plugins/iOS/AmazonManager.h.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9d0a8448aa0c147e8a0225de1609f269 +guid: 2e1cac3d96762d449875050ca121f4da PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/AmazonManager.mm b/Amazon/Plugins/iOS/AmazonManager.mm index 075dc1e..96ef36d 100644 --- a/Amazon/Plugins/iOS/AmazonManager.mm +++ b/Amazon/Plugins/iOS/AmazonManager.mm @@ -1,5 +1,7 @@ #import "AmazonManager.h" +static NSString * const SKADNETWORK_PARAM = @"skadn_params"; + @implementation AmazonManager #pragma mark NSObject @@ -182,9 +184,6 @@ [DTBAds.sharedInstance addSlotGroup:group]; } --(NSString*)fetchMoPubKeywords:(DTBAdResponse*)response { - return [response keywordsForMopub]; -} -(NSString*)fetchAmznSlots:(DTBAdResponse *)response { return [response amznSlots]; @@ -209,6 +208,27 @@ [dateFormatter setDateFormat:@"dd-MM-yyyy"]; NSString *stringDate = [dateFormatter stringFromDate:myDate]; [mHint setValue:stringDate forKey:@"load_start"]; + + if (mHint[SKADNETWORK_PARAM]) { + @try { + NSMutableDictionary *skadn_dict = [[NSMutableDictionary alloc] initWithDictionary:[mHint objectForKey:SKADNETWORK_PARAM]]; + for(id key in skadn_dict) { + if ([[skadn_dict objectForKey:key] isKindOfClass:NSDate.class]) { + NSString *FormatedDate = [dateFormatter stringFromDate:[skadn_dict objectForKey:key]]; + [skadn_dict setValue:FormatedDate forKey:key]; + [mHint setValue:skadn_dict forKey:SKADNETWORK_PARAM ]; + } + } + } @catch (NSException *exception) { + NSLog(@"Exception :%@",exception.reason); + } + } + + if (![NSJSONSerialization isValidJSONObject:mHint]) { + NSLog(@"Invalid JSON Object"); + return nil; + } + NSData * jsonData = [NSJSONSerialization dataWithJSONObject:mHint options:0 error:&err]; NSString * mediationHints = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; return mediationHints; diff --git a/Amazon/Plugins/iOS/AmazonManager.mm.meta b/Amazon/Plugins/iOS/AmazonManager.mm.meta index 41eacc2..c2cbd68 100644 --- a/Amazon/Plugins/iOS/AmazonManager.mm.meta +++ b/Amazon/Plugins/iOS/AmazonManager.mm.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 65a7bcd4e95cc47c88cd2b6280e00c17 +guid: 3eda61770afc43b42aa9ec92fea59924 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/AmazonUnityCallback.h.meta b/Amazon/Plugins/iOS/AmazonUnityCallback.h.meta index b0ae32f..43ad9cd 100644 --- a/Amazon/Plugins/iOS/AmazonUnityCallback.h.meta +++ b/Amazon/Plugins/iOS/AmazonUnityCallback.h.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4ab68d8321afe4cca8177a404f816891 +guid: eccfcb2b937138c48b44c7208b81ff98 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/AmazonUnityCallback.mm.meta b/Amazon/Plugins/iOS/AmazonUnityCallback.mm.meta index e2a421d..b7b060f 100644 --- a/Amazon/Plugins/iOS/AmazonUnityCallback.mm.meta +++ b/Amazon/Plugins/iOS/AmazonUnityCallback.mm.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab36449d445ac4544afe77c7c0539ec0 +guid: 459e879fe800355479f460f15ae3f34a PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/DTBBannerDelegate.h.meta b/Amazon/Plugins/iOS/DTBBannerDelegate.h.meta index 64b2f50..3e0b42c 100644 --- a/Amazon/Plugins/iOS/DTBBannerDelegate.h.meta +++ b/Amazon/Plugins/iOS/DTBBannerDelegate.h.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a58dbc723902c4dd6a148f77e0845a3c +guid: 48b2839701f014a86bce37c62ac4c698 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/DTBBannerDelegate.mm.meta b/Amazon/Plugins/iOS/DTBBannerDelegate.mm.meta index b00cb27..c56f819 100644 --- a/Amazon/Plugins/iOS/DTBBannerDelegate.mm.meta +++ b/Amazon/Plugins/iOS/DTBBannerDelegate.mm.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 64f2586d9fb3549848bbd34f6f8085d2 +guid: ddf46b748d5ca4bd1b52a59e051346a5 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/DTBInterstitialDelegate.h.meta b/Amazon/Plugins/iOS/DTBInterstitialDelegate.h.meta index e89a3e0..fcadea6 100644 --- a/Amazon/Plugins/iOS/DTBInterstitialDelegate.h.meta +++ b/Amazon/Plugins/iOS/DTBInterstitialDelegate.h.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ec64dc94f39894ffba7e39a14f3b2102 +guid: 23a35b63b9ca64f63ac1e624f7ec73d4 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Plugins/iOS/DTBInterstitialDelegate.mm.meta b/Amazon/Plugins/iOS/DTBInterstitialDelegate.mm.meta index d22315a..9d415a0 100644 --- a/Amazon/Plugins/iOS/DTBInterstitialDelegate.mm.meta +++ b/Amazon/Plugins/iOS/DTBInterstitialDelegate.mm.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4f43b5dc42cf54011b96f66d261f2619 +guid: f6abf5beb5efe42ad88f270ed8f412e1 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Sample/APSMaxMediation.unity b/Amazon/Sample/APSMaxMediation.unity index 70c896f..d34851a 100644 --- a/Amazon/Sample/APSMaxMediation.unity +++ b/Amazon/Sample/APSMaxMediation.unity @@ -387,7 +387,7 @@ RectTransform: m_Children: - {fileID: 491590228} m_Father: {fileID: 640056004} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -576,11 +576,12 @@ RectTransform: m_LocalScale: {x: 0, y: 0, z: 0} m_Children: - {fileID: 1889519549} + - {fileID: 1477954961} - {fileID: 820223061} - {fileID: 620422002} - {fileID: 735603278} - {fileID: 739627434} - - {fileID: 1477954961} + - {fileID: 929227399} m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -621,7 +622,7 @@ RectTransform: m_Children: - {fileID: 1079672022} m_Father: {fileID: 640056004} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -751,7 +752,7 @@ RectTransform: m_Children: - {fileID: 1682398784} m_Father: {fileID: 640056004} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -849,6 +850,84 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 739627433} m_CullTransparentMesh: 0 +--- !u!1 &795246048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 795246049} + - component: {fileID: 795246051} + - component: {fileID: 795246050} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &795246049 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795246048} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 929227399} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &795246050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795246048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Go Back +--- !u!222 &795246051 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 795246048} + m_CullTransparentMesh: 0 --- !u!1 &820223060 GameObject: m_ObjectHideFlags: 0 @@ -881,7 +960,7 @@ RectTransform: m_Children: - {fileID: 1290993690} m_Father: {fileID: 640056004} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -979,6 +1058,136 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 820223060} m_CullTransparentMesh: 0 +--- !u!1 &929227398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 929227399} + - component: {fileID: 929227402} + - component: {fileID: 929227401} + - component: {fileID: 929227400} + m_Layer: 5 + m_Name: Go Back + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &929227399 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929227398} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 795246049} + m_Father: {fileID: 640056004} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -144} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &929227400 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929227398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 929227401} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 946867261} + m_MethodName: goBack + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &929227401 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929227398} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &929227402 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929227398} + m_CullTransparentMesh: 0 --- !u!1 &946867260 GameObject: m_ObjectHideFlags: 0 @@ -1360,7 +1569,7 @@ RectTransform: m_Children: - {fileID: 499681495} m_Father: {fileID: 640056004} - m_RootOrder: 5 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} diff --git a/Amazon/Sample/APSMaxMediation.unity.meta b/Amazon/Sample/APSMaxMediation.unity.meta index 143fe30..2e7bdf6 100644 --- a/Amazon/Sample/APSMaxMediation.unity.meta +++ b/Amazon/Sample/APSMaxMediation.unity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fb8e1477d33cb4076b8aa247ae7dd237 +guid: 2024bb7799cb45c489867a78c4ef889c DefaultImporter: externalObjects: {} userData: diff --git a/Amazon/Sample/AmazonMaxDemo.cs b/Amazon/Sample/AmazonMaxDemo.cs index a2c8167..49cf40e 100644 --- a/Amazon/Sample/AmazonMaxDemo.cs +++ b/Amazon/Sample/AmazonMaxDemo.cs @@ -3,6 +3,7 @@ using System; using AmazonAds; using UnityEngine; using System.Collections.Generic; +using UnityEngine.SceneManagement; public class AmazonMaxDemo : MonoBehaviour { @@ -47,6 +48,7 @@ public class AmazonMaxDemo : MonoBehaviour { Amazon.EnableTesting(true); Amazon.EnableLogging(true); Amazon.UseGeoLocation(true); + Amazon.IsLocationEnabled(); Amazon.SetMRAIDPolicy(Amazon.MRAIDPolicy.CUSTOM); Amazon.SetAdNetworkInfo(new AdNetworkInfo(DTBAdNetwork.MAX)); Amazon.SetMRAIDSupportedVersions(new string[] { "1.0", "2.0", "3.0" }); @@ -121,17 +123,18 @@ public class AmazonMaxDemo : MonoBehaviour { const int width = 320; const int height = 50; - if (bannerAdRequest != null) bannerAdRequest.DestroyFetchManager(); bannerAdRequest = new APSBannerAdRequest(width, height, amazonBannerSlotId); bannerAdRequest.onFailedWithError += (adError) => { MaxSdk.SetBannerLocalExtraParameter(maxBannerAdId, "amazon_ad_error", adError.GetAdError()); CreateMaxBannerAd(); + bannerAdRequest.Dispose(); }; bannerAdRequest.onSuccess += (adResponse) => { MaxSdk.SetBannerLocalExtraParameter(maxBannerAdId, "amazon_ad_response", adResponse.GetResponse()); CreateMaxBannerAd(); + bannerAdRequest.Dispose(); }; bannerAdRequest.LoadAd(); } @@ -294,4 +297,10 @@ public class AmazonMaxDemo : MonoBehaviour { { Debug.Log("OnRewardedAdRevenuePaidEvent"); } + + public void goBack() + { + MaxSdk.DestroyBanner(maxBannerAdId); + SceneManager.LoadScene(0); + } } \ No newline at end of file diff --git a/Amazon/Sample/AmazonMaxDemo.cs.meta b/Amazon/Sample/AmazonMaxDemo.cs.meta index f63575d..5da3891 100644 --- a/Amazon/Sample/AmazonMaxDemo.cs.meta +++ b/Amazon/Sample/AmazonMaxDemo.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 34ed58385e8924837ad87a1f2966e16b +guid: 312c0b7796265224ca6bd13197a7d5d6 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Amazon.cs b/Amazon/Scripts/Amazon.cs index 56a6544..555d95d 100644 --- a/Amazon/Scripts/Amazon.cs +++ b/Amazon/Scripts/Amazon.cs @@ -45,14 +45,18 @@ namespace AmazonAds { api.SetMRAIDPolicy (policy); } + + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public static void SetCMPFlavor(Amazon.CMPFlavor cFlavor){ api.SetCMPFlavor(cFlavor); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public static void SetConsentStatus(Amazon.ConsentStatus consentStatus){ api.SetConsentStatus(consentStatus); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public static void SetVendorList(List vendorList){ api.SetVendorList(vendorList); } diff --git a/Amazon/Scripts/Amazon.cs.meta b/Amazon/Scripts/Amazon.cs.meta index d0579ef..9ad617c 100644 --- a/Amazon/Scripts/Amazon.cs.meta +++ b/Amazon/Scripts/Amazon.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d5987cccc71fa4c51877e7c22d2d5f56 +guid: 8b51dd1c8083d0a43b10a2507d7c4077 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/AmazonConstants.cs b/Amazon/Scripts/AmazonConstants.cs index 8e29fee..2a655f4 100644 --- a/Amazon/Scripts/AmazonConstants.cs +++ b/Amazon/Scripts/AmazonConstants.cs @@ -1,8 +1,8 @@ -using System; +using System; public static class AmazonConstants { - public const string VERSION = "1.4.3"; + public const string VERSION = "1.9.0"; public const string RELEASE_NOTES_URL = "https://ams.amazon.com/webpublisher/uam/docs/aps-mobile/resources"; //TODO : add Unity Release Notes link public const string titleAboutDialog = "About Amazon SDK"; diff --git a/Amazon/Scripts/AmazonConstants.cs.meta b/Amazon/Scripts/AmazonConstants.cs.meta index 178d6b3..858c89c 100644 --- a/Amazon/Scripts/AmazonConstants.cs.meta +++ b/Amazon/Scripts/AmazonConstants.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a4c36066dbdad415b978c38a01a2b675 +guid: b7f4b6635633144c4a35f2a254c0cca2 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Common.meta b/Amazon/Scripts/Common.meta index 400da0c..4bda34d 100644 --- a/Amazon/Scripts/Common.meta +++ b/Amazon/Scripts/Common.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8c45974962ec542baad78d4c30cd0056 +guid: 822aefd58f1740341957f448c17e0527 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Common/IAdInterstitial.cs.meta b/Amazon/Scripts/Common/IAdInterstitial.cs.meta index b43ecab..9b8c7da 100644 --- a/Amazon/Scripts/Common/IAdInterstitial.cs.meta +++ b/Amazon/Scripts/Common/IAdInterstitial.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d4da15e7be3dc455d97abce962533892 +guid: ed7d5de51284c48cb8938e48e74c1b48 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Common/IAdRequest.cs b/Amazon/Scripts/Common/IAdRequest.cs index 2aa4bcf..61154a4 100644 --- a/Amazon/Scripts/Common/IAdRequest.cs +++ b/Amazon/Scripts/Common/IAdRequest.cs @@ -3,7 +3,7 @@ using System.Collections; using System.Runtime.InteropServices; using UnityEngine; namespace AmazonAds { - public abstract class IAdRequest { + public abstract class IAdRequest : IDisposable { protected int refreshTime = 60; protected string autoRefreshID = "0"; //FetchManageerUniqueID protected bool isAutoRefreshAdMob = false; @@ -38,6 +38,9 @@ namespace AmazonAds { public abstract void StartFetchManager(); public abstract void SetRefreshFlag(bool flag); + public void Dispose() { + } + protected static class Schedule { private class Runner : MonoBehaviour { } private static Runner _backer; diff --git a/Amazon/Scripts/Common/IAdRequest.cs.meta b/Amazon/Scripts/Common/IAdRequest.cs.meta index 5740c6e..a341cf8 100644 --- a/Amazon/Scripts/Common/IAdRequest.cs.meta +++ b/Amazon/Scripts/Common/IAdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ba13283bbee174961b809f3b9e502094 +guid: 7168c7b8916657b40b6a8e4f32705497 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Common/IAdSize.cs.meta b/Amazon/Scripts/Common/IAdSize.cs.meta index 56bd287..4d5ae54 100644 --- a/Amazon/Scripts/Common/IAdSize.cs.meta +++ b/Amazon/Scripts/Common/IAdSize.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 33e37a43420f84a408938af12117ff08 +guid: ac582b3e4345e494ca3609440fc4fe2b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Common/IAdView.cs b/Amazon/Scripts/Common/IAdView.cs index 2c9a617..e1eb286 100644 --- a/Amazon/Scripts/Common/IAdView.cs +++ b/Amazon/Scripts/Common/IAdView.cs @@ -7,5 +7,7 @@ using UnityEngine; namespace AmazonAds { public abstract class IAdView { public abstract void FetchAd (AdResponse adResponse); + public void Dispose() { + } } } \ No newline at end of file diff --git a/Amazon/Scripts/Common/IAdView.cs.meta b/Amazon/Scripts/Common/IAdView.cs.meta index 3497cce..800cc5a 100644 --- a/Amazon/Scripts/Common/IAdView.cs.meta +++ b/Amazon/Scripts/Common/IAdView.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: adeba99c4a0f04b54b8af9623665e2d5 +guid: 48d4f5afa2a1440c29ea78d8f33885dc MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Common/IFetchManager.cs.meta b/Amazon/Scripts/Common/IFetchManager.cs.meta index 38b4b40..ee75f59 100644 --- a/Amazon/Scripts/Common/IFetchManager.cs.meta +++ b/Amazon/Scripts/Common/IFetchManager.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dec92b206e59e400c8706ec073e326d1 +guid: 9145340011b3e427dbfe964d0bf59f55 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Common/ISlotGroup.cs.meta b/Amazon/Scripts/Common/ISlotGroup.cs.meta index b11a657..9e1de7b 100644 --- a/Amazon/Scripts/Common/ISlotGroup.cs.meta +++ b/Amazon/Scripts/Common/ISlotGroup.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2b1f29380367c47c6a1c112ddc47ad84 +guid: 53a2d09f4898f244c84722134fc51501 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor.meta b/Amazon/Scripts/Editor.meta index bc42966..01e6165 100644 --- a/Amazon/Scripts/Editor.meta +++ b/Amazon/Scripts/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 60916135eefd74087bcd8ca80bd94ddc +guid: 43367e8560d848a4da8a31062731720b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Editor/Amazon.Editor.asmdef.meta b/Amazon/Scripts/Editor/Amazon.Editor.asmdef.meta index ce8fb75..15a429f 100644 --- a/Amazon/Scripts/Editor/Amazon.Editor.asmdef.meta +++ b/Amazon/Scripts/Editor/Amazon.Editor.asmdef.meta @@ -1,3 +1,7 @@ fileFormatVersion: 2 -guid: 59f42bdf21710439a90f93e01e1f8984 -timeCreated: 1700190285 \ No newline at end of file +guid: 2bfb493dbc0ec40a29dde187397eb936 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Amazon/Scripts/Editor/AmazonAboutDialog.cs.meta b/Amazon/Scripts/Editor/AmazonAboutDialog.cs.meta index 6ff607b..9f0e6c4 100644 --- a/Amazon/Scripts/Editor/AmazonAboutDialog.cs.meta +++ b/Amazon/Scripts/Editor/AmazonAboutDialog.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 431a6434bfc0a47e8a2c936e434c3d3b +guid: 59ff8b0c895196d4bbec7aad4098ab3d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/AmazonBuildScript.cs b/Amazon/Scripts/Editor/AmazonBuildScript.cs index a27cfd2..5c31840 100644 --- a/Amazon/Scripts/Editor/AmazonBuildScript.cs +++ b/Amazon/Scripts/Editor/AmazonBuildScript.cs @@ -14,6 +14,8 @@ public class AmazonBuildScript string[] scenes = EditorBuildSettings.scenes.Where(s => s.enabled).Select(s => s.path).ToArray(); EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.iOS, BuildTarget.iOS); string outputFileName = GetArg("-output", DEFAULT_IOS_BUILD_DIR); + PlayerSettings.iOS.appleDeveloperTeamID = "P78AXXW29G"; + PlayerSettings.iOS.appleEnableAutomaticSigning = true; BuildPipeline.BuildPlayer(scenes, outputFileName, BuildTarget.iOS, BuildOptions.Development); } diff --git a/Amazon/Scripts/Editor/AmazonBuildScript.cs.meta b/Amazon/Scripts/Editor/AmazonBuildScript.cs.meta index 8fe0170..959f709 100644 --- a/Amazon/Scripts/Editor/AmazonBuildScript.cs.meta +++ b/Amazon/Scripts/Editor/AmazonBuildScript.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c1378b372e98d4b56a16725bf370ae6c +guid: e80f7a57e62ab4edabfda12a4e7b34fe MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/AmazonCoroutineExtensions.cs.meta b/Amazon/Scripts/Editor/AmazonCoroutineExtensions.cs.meta index e05f050..fcacf02 100644 --- a/Amazon/Scripts/Editor/AmazonCoroutineExtensions.cs.meta +++ b/Amazon/Scripts/Editor/AmazonCoroutineExtensions.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aae61b43441904bbcbf7f24ff05e20d2 +guid: fb7213131ee033443bc8caa6cf8201aa MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/AmazonCoroutines.cs.meta b/Amazon/Scripts/Editor/AmazonCoroutines.cs.meta index 0e52197..6b4cd3e 100644 --- a/Amazon/Scripts/Editor/AmazonCoroutines.cs.meta +++ b/Amazon/Scripts/Editor/AmazonCoroutines.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dcee96832dc4141299f36d8b10b10467 +guid: 768de77ca8c7ccc47b233b0b09a42d9c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/AmazonDependencies.xml b/Amazon/Scripts/Editor/AmazonDependencies.xml index 979a6f6..c331fd3 100644 --- a/Amazon/Scripts/Editor/AmazonDependencies.xml +++ b/Amazon/Scripts/Editor/AmazonDependencies.xml @@ -1,16 +1,16 @@ - - - + + + https://aws.oss.sonatype.org/content/repositories/releases/ - - + + - \ No newline at end of file + diff --git a/Amazon/Scripts/Editor/AmazonDependencies.xml.meta b/Amazon/Scripts/Editor/AmazonDependencies.xml.meta index ad2f0f9..68aa041 100644 --- a/Amazon/Scripts/Editor/AmazonDependencies.xml.meta +++ b/Amazon/Scripts/Editor/AmazonDependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c9bc3db2384e74f03ae6d3b496e9fdc9 +guid: 54e062f8003d00e469680f856f94a517 TextScriptImporter: externalObjects: {} userData: diff --git a/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs b/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs index be5be2b..c920c2d 100644 --- a/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs +++ b/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs @@ -6,49 +6,25 @@ using UnityEditor.iOS.Xcode; using UnityEngine; namespace AmazonInternal.Editor.Postbuild { public static class AmazonPostBuildiOS { - [PostProcessBuild( 45 )] - public static void OnPostprocessBuild(BuildTarget buildTarget, string path) - { + [PostProcessBuildAttribute(1)] + public static void OnPostprocessBuild(BuildTarget buildTarget, string path) { if (buildTarget != BuildTarget.iOS) return; - - string pbxProjectPath = PBXProject.GetPBXProjectPath(path); - PBXProject project = new PBXProject(); - - project.ReadFromFile(pbxProjectPath); - -#if UNITY_2019_3_OR_NEWER - string targetGuid = project.GetUnityFrameworkTargetGuid(); -#else - string targetGuid = project.TargetGuidByName(PBXProject.GetUnityTargetName()); -#endif - project.SetBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "$(inherited)"); - project.SetBuildProperty(targetGuid, "CLANG_ENABLE_MODULES", "YES"); - project.AddBuildProperty(targetGuid, "LD_RUNPATH_SEARCH_PATHS", "@executable_path/Frameworks"); - project.WriteToFile(pbxProjectPath); + string projPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj"; + string pbxProjectPath = PBXProject.GetPBXProjectPath(path); + PBXProject pbxProject = new PBXProject(); -#if UNITY_2019_3_OR_NEWER - if (buildTarget == BuildTarget.iOS) - { - bool iPhoneExist = false; - using (StreamReader sr = new StreamReader(path + "/Podfile")) - { - string contents = sr.ReadToEnd(); - if (contents.Contains("Unity-iPhone")) - { - iPhoneExist = true; - } - } - if ( !iPhoneExist ){ - using (StreamWriter sw = File.AppendText(path + "/Podfile")) - { - sw.WriteLine("\ntarget 'Unity-iPhone' do\nend"); - } - } - } -#endif - } + pbxProject.ReadFromFile(pbxProjectPath); + + string[] targetGuids = new string[2] { + pbxProject.GetUnityMainTargetGuid(), + pbxProject.GetUnityFrameworkTargetGuid() + }; + pbxProject.SetBuildProperty(targetGuids, "ENABLE_BITCODE", "NO"); + + pbxProject.WriteToFile(pbxProjectPath); + } } } #endif \ No newline at end of file diff --git a/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs.meta b/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs.meta index 52e2e0e..d96c2f0 100644 --- a/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs.meta +++ b/Amazon/Scripts/Editor/AmazonPostBuildiOS.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f7474cff9dfc144e89f4e7696b4b8d9c +guid: ddd7aae4d9bd0644485bb967a9d9d838 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/AmazonSDKManager.cs b/Amazon/Scripts/Editor/AmazonSDKManager.cs index 2de5da2..6cbf3bf 100644 --- a/Amazon/Scripts/Editor/AmazonSDKManager.cs +++ b/Amazon/Scripts/Editor/AmazonSDKManager.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections; using System.Collections.Generic; using System.IO; @@ -31,17 +31,17 @@ public class AmazonSDKManager : EditorWindow { } } -// [MenuItem ("Amazon/About Amazon SDK", false, 0)] + [MenuItem ("Amazon/About Amazon SDK", false, 0)] public static void About () { AmazonAboutDialog.ShowDialog (); } -// [MenuItem ("Amazon/Documentation...", false, 1)] + [MenuItem ("Amazon/Documentation...", false, 1)] public static void Documentation () { Application.OpenURL (AmazonConstants.docUrl); } -// [MenuItem ("Amazon/Manage SDKs...", false, 4)] + [MenuItem ("Amazon/Manage SDKs...", false, 4)] public static void SdkManagerProd () { AmazonSDKManager.ShowSDKManager (); } @@ -397,4 +397,4 @@ public class AmazonSDKManager : EditorWindow { downloader = null; coroutine = null; } -} +} \ No newline at end of file diff --git a/Amazon/Scripts/Editor/AmazonSDKManager.cs.meta b/Amazon/Scripts/Editor/AmazonSDKManager.cs.meta index ad401dd..78b1b8e 100644 --- a/Amazon/Scripts/Editor/AmazonSDKManager.cs.meta +++ b/Amazon/Scripts/Editor/AmazonSDKManager.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9436cb85e61464fbb8e7434090ec1af2 +guid: 970ae7f36073f3f4fb04767c1223a840 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/Tests.meta b/Amazon/Scripts/Editor/Tests.meta index 86157cb..889342c 100644 --- a/Amazon/Scripts/Editor/Tests.meta +++ b/Amazon/Scripts/Editor/Tests.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e64d0b097e7e04e59b22cd2d61ff42a5 +guid: d58a19dba1752614fb20bbe8420899e5 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Editor/Tests/AmazonSDKTests.cs.meta b/Amazon/Scripts/Editor/Tests/AmazonSDKTests.cs.meta index 88df821..f480b21 100644 --- a/Amazon/Scripts/Editor/Tests/AmazonSDKTests.cs.meta +++ b/Amazon/Scripts/Editor/Tests/AmazonSDKTests.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8b00fb31f302f4b26a43151fd12cffbc +guid: ebb19576a0bf36a4faa016a9fb7a88ee MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/Tests/AmazonTest.cs.meta b/Amazon/Scripts/Editor/Tests/AmazonTest.cs.meta index 372fa7c..74bb6e7 100644 --- a/Amazon/Scripts/Editor/Tests/AmazonTest.cs.meta +++ b/Amazon/Scripts/Editor/Tests/AmazonTest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fe3a64de565fa4daa9ac26c80cdb1f6e +guid: c6db4e2f03cecbf4c83eb7416ebbd623 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Editor/Tests/AmazonUtilsTests.cs.meta b/Amazon/Scripts/Editor/Tests/AmazonUtilsTests.cs.meta index de0683f..95ceb6d 100644 --- a/Amazon/Scripts/Editor/Tests/AmazonUtilsTests.cs.meta +++ b/Amazon/Scripts/Editor/Tests/AmazonUtilsTests.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e4a38f41a15b0444380ccd4a74a12ac2 +guid: 84c1ddf10f083ef4ab7614bd9a8edd62 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal.meta b/Amazon/Scripts/Internal.meta index 105edc6..04868f4 100644 --- a/Amazon/Scripts/Internal.meta +++ b/Amazon/Scripts/Internal.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3eac84282b79049f0bbadc32296d7b29 +guid: 2dba0aed518058e42959ba3e629b0bb6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Internal/APSAdDelegate.cs.meta b/Amazon/Scripts/Internal/APSAdDelegate.cs.meta index e2c3bdb..e72c3ff 100644 --- a/Amazon/Scripts/Internal/APSAdDelegate.cs.meta +++ b/Amazon/Scripts/Internal/APSAdDelegate.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d06f90422ce794d848656240f4d00aae +guid: 6d2b55178eeb0496e9d81c6a3ddb8d3d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/APSAdRequestExtra.cs b/Amazon/Scripts/Internal/APSAdRequestExtra.cs new file mode 100644 index 0000000..7ece90a --- /dev/null +++ b/Amazon/Scripts/Internal/APSAdRequestExtra.cs @@ -0,0 +1,145 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace AmazonAds +{ + public class APSAdRequestExtra + { + private static readonly string ADMOB_SLOTUUID_KEY = "amazon_custom_event_slot_uuid"; + private static readonly string ADMOB_REQUEST_ID_KEY = "amazon_custom_event_request_id"; + private static readonly string APS_ADAPTER_VERSION = "amazon_custom_event_adapter_version"; + private static readonly string ADMOB_ISVIDEO_KEY = "amazon_custom_event_is_video"; + private static readonly string ADMOB_WIDTH_KEY = "amazon_custom_event_width"; + private static readonly string ADMOB_HEIGHT_KEY = "amazon_custom_event_height"; + private static readonly string APS_ADMOB_CONST_CCPA_APS_PRIVACY = "aps_privacy"; + private static readonly string APS_ADMOB_CONST_CCPA_US_PRIVACY = "us_privacy"; + private static readonly AndroidJavaClass dtbAdUtil = new AndroidJavaClass ("com.amazon.device.ads.DTBAdUtil"); + + private APSAdRequestExtra (Builder builder) { + this.SlotUUID = builder.SlotUUID; + this.BannerAdHeight = builder.AdHeight; + this.BannerAdWidth = builder.AdWidth; + this.CCPAPrivacy = builder.CCPAPrivacy; + } + + public string SlotUUID { get; private set; } + public int BannerAdHeight { get; private set; } + public int BannerAdWidth { get; private set; } + public Dictionary CCPAPrivacy { private get; set; } + + public Dictionary GetAdMobInterstitialRequestExtras () + { + Dictionary AdMobRequestExtras = createExtras (); + if (SlotUUID == null) + { + return AdMobRequestExtras; + } + +#if UNITY_ANDROID + AndroidJavaObject bundle = dtbAdUtil.CallStatic("createAdMobInterstitialVideoRequestBundle", SlotUUID); + AdMobRequestExtras.Add (ADMOB_SLOTUUID_KEY, bundle.Call("getString", ADMOB_SLOTUUID_KEY)); + AdMobRequestExtras.Add (ADMOB_REQUEST_ID_KEY, bundle.Call("getString", ADMOB_REQUEST_ID_KEY)); + AdMobRequestExtras.Add (APS_ADAPTER_VERSION, bundle.Call("getString", APS_ADAPTER_VERSION)); +#else + AdMobRequestExtras.Add (ADMOB_SLOTUUID_KEY, SlotUUID); +#endif + return AdMobRequestExtras; + + } + + public Dictionary GetAdMobBannerRequestExtras () + { + Dictionary AdMobRequestExtras = createExtras(); + if (SlotUUID == null || BannerAdWidth == 0 || BannerAdHeight == 0) + { + return AdMobRequestExtras; + } + +#if UNITY_ANDROID + AndroidJavaObject bundle = dtbAdUtil.CallStatic ("createAdMobBannerRequestBundle", SlotUUID, BannerAdWidth, BannerAdHeight); + AdMobRequestExtras.Add (ADMOB_SLOTUUID_KEY, bundle.Call("getString", ADMOB_SLOTUUID_KEY)); + AdMobRequestExtras.Add (ADMOB_HEIGHT_KEY, bundle.Call("getInt", ADMOB_HEIGHT_KEY).ToString()); + AdMobRequestExtras.Add (ADMOB_WIDTH_KEY, bundle.Call("getInt", ADMOB_WIDTH_KEY).ToString()); + AdMobRequestExtras.Add (ADMOB_REQUEST_ID_KEY, bundle.Call("getString", ADMOB_REQUEST_ID_KEY)); + AdMobRequestExtras.Add (APS_ADAPTER_VERSION, bundle.Call("getString", APS_ADAPTER_VERSION)); +#else + + AdMobRequestExtras.Add (ADMOB_SLOTUUID_KEY, SlotUUID); + AdMobRequestExtras.Add (ADMOB_WIDTH_KEY, BannerAdWidth.ToString()); + AdMobRequestExtras.Add (ADMOB_HEIGHT_KEY, BannerAdHeight.ToString()); + +#endif + + return AdMobRequestExtras; + } + + private Dictionary createExtras() + { + Dictionary extrasMap = new Dictionary(); + if (CCPAPrivacy != null) + { + if (CCPAPrivacy.TryGetValue (APS_ADMOB_CONST_CCPA_APS_PRIVACY, out string ccpa_aps_privacy)) + { + extrasMap.Add (APS_ADMOB_CONST_CCPA_APS_PRIVACY, ccpa_aps_privacy); + } + if (CCPAPrivacy.TryGetValue (APS_ADMOB_CONST_CCPA_US_PRIVACY, out string ccpa_us_privacy)) + { + extrasMap.Add (APS_ADMOB_CONST_CCPA_US_PRIVACY, ccpa_us_privacy); + } + + } + return extrasMap; + + } + + + public class Builder + { + public Builder() + { + this.SlotUUID = null; + this.AdHeight = 0; + this.AdWidth = 0; + this.CCPAPrivacy = new Dictionary(); + } + + internal string SlotUUID { get; private set; } + internal int AdHeight { get; private set; } + internal int AdWidth { get; private set; } + internal Dictionary CCPAPrivacy { get; private set; } + + public Builder AddSlotUUID(string SlotUUID) + { + this.SlotUUID = SlotUUID; + return this; + } + + public Builder AddHeight(int AdHeight) + { + this.AdHeight = AdHeight; + return this; + } + + public Builder AddWidth(int AdWidth) + { + this.AdWidth = AdWidth; + return this; + } + + public Builder AddCCPAPrivacy(Dictionary CCPAPrivacy) + { + this.CCPAPrivacy = CCPAPrivacy; + return this; + } + + public APSAdRequestExtra Build() + { + return new APSAdRequestExtra(this); + } + } + } + +} + + diff --git a/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs.meta b/Amazon/Scripts/Internal/APSAdRequestExtra.cs.meta similarity index 83% rename from Amazon/Scripts/Internal/IOS/IOSAdResponce.cs.meta rename to Amazon/Scripts/Internal/APSAdRequestExtra.cs.meta index 99f191e..2fe393f 100644 --- a/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs.meta +++ b/Amazon/Scripts/Internal/APSAdRequestExtra.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9111bf37862934342b4a39f926faa2b7 +guid: 75f392fb260fb45329f6b11ae4a21e9b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/APSBannerAdRequest.cs b/Amazon/Scripts/Internal/APSBannerAdRequest.cs index 2499c4c..ab645c4 100644 --- a/Amazon/Scripts/Internal/APSBannerAdRequest.cs +++ b/Amazon/Scripts/Internal/APSBannerAdRequest.cs @@ -1,23 +1,22 @@ -namespace AmazonAds { +using System; +using UnityEngine; + +namespace AmazonAds { public class APSBannerAdRequest : AdRequest { - public APSBannerAdRequest () : base() { - Amazon.OnApplicationPause += OnApplicationPause; + public APSBannerAdRequest () : base() { } public APSBannerAdRequest (string slotGroupName) : base() { - Amazon.OnApplicationPause += OnApplicationPause; client.SetSlotGroup (slotGroupName); } public APSBannerAdRequest (int width, int height, string uid) : base() { - Amazon.OnApplicationPause += OnApplicationPause; AdSize size = new AdSize (width, height, uid); client.SetSizes (size.GetInstance ()); } public APSBannerAdRequest (AdSize size) { - Amazon.OnApplicationPause += OnApplicationPause; client.SetSizes (size.GetInstance ()); } @@ -42,47 +41,47 @@ client.SetSlotGroup (slotGroupName); } + [Obsolete("This API has been deprecated", false)] public void SetAutoRefreshAdMob (bool flag, bool isSmartBanner = false) { - client.SetAutoRefreshAdMob (flag, isSmartBanner); + Debug.LogError("This API has been deprecated"); } + [Obsolete("This API has been deprecated", false)] public void SetAutoRefreshMoPub (bool flag, int refreshTime) { - client.SetAutoRefreshMoPub (flag, refreshTime); + Debug.LogError("This API has been deprecated"); } + [Obsolete("This API has been deprecated", false)] public void DisposeAd () { - client.DisposeAd (); + Debug.LogError("This API has been deprecated"); } + [Obsolete("This API has been deprecated", false)] public void IsAutoRefreshAdMob () { - client.IsAutoRefreshAdMob (); + Debug.LogError("This API has been deprecated"); } + [Obsolete("This API has been deprecated", false)] public void IsAutoRefreshMoPub () { - client.IsAutoRefreshMoPub (); + Debug.LogError("This API has been deprecated"); } public string AutoRefreshID () { return client.AutoRefreshID (); } + [Obsolete("This API has been deprecated", false)] public void CreateFetchManager (bool isSmartBanner = false) { - client.CreateFetchManager (isSmartBanner); + Debug.LogError("This API has been deprecated"); } + [Obsolete("This API has been deprecated", false)] public void DestroyFetchManager () { - client.DestroyFetchManager (); + Debug.LogError("The API has been deprecated"); } + [Obsolete("This API has been deprecated", false)] public void OnApplicationPause (bool isPaused) { - if (isPaused) { - if( client.IsAutoRefreshAdMob() ){ - client.StopFetchManager(); - } - } else { - if( client.IsAutoRefreshAdMob() ){ - client.StartFetchManager(); - } - } + Debug.LogError("This API has been deprecated"); } } } \ No newline at end of file diff --git a/Amazon/Scripts/Internal/APSBannerAdRequest.cs.meta b/Amazon/Scripts/Internal/APSBannerAdRequest.cs.meta index a0d7ff0..722fa2d 100644 --- a/Amazon/Scripts/Internal/APSBannerAdRequest.cs.meta +++ b/Amazon/Scripts/Internal/APSBannerAdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 62abdd252c1aa49beb917ca0a7b4d3b3 +guid: 93f096fe94c739c42bd555fff7f57571 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/APSInterstitialAdRequest.cs.meta b/Amazon/Scripts/Internal/APSInterstitialAdRequest.cs.meta index 95fc792..3a7d8e6 100644 --- a/Amazon/Scripts/Internal/APSInterstitialAdRequest.cs.meta +++ b/Amazon/Scripts/Internal/APSInterstitialAdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a60589c70736841a6b26fa39087d8e98 +guid: 5e132029d7bab2d4684faf398279497b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/APSMediationUtils.cs b/Amazon/Scripts/Internal/APSMediationUtils.cs index 4ef747a..4151994 100644 --- a/Amazon/Scripts/Internal/APSMediationUtils.cs +++ b/Amazon/Scripts/Internal/APSMediationUtils.cs @@ -5,33 +5,99 @@ namespace AmazonAds { public class APSMediationUtils { public static string APS_IRON_SOURCE_NETWORK_KEY = "APS"; + private static string APS_REWARDED_VIDEO_KEY = "rewardedvideo"; + private static string APS_INTERSTITIAL_KEY = "interstitial"; - public static string GetInterstitialNetworkData(string amazonSlotId, string bidInfo, string pricePoint) + public static string GetInterstitialNetworkData(string amazonSlotId, AmazonAds.AdResponse adResponse) { - APSIronSourceNetworkBaseInputData ironSourceInputData = new APSIronSourceNetworkBaseInputData(); - ironSourceInputData.bidInfo = bidInfo; - ironSourceInputData.pricePointEncoded = pricePoint; - ironSourceInputData.uuid = amazonSlotId; + return GetNetworkData(amazonSlotId, adResponse, APS_INTERSTITIAL_KEY); - APSIronSourceInterstitialNetworkData networkData = new APSIronSourceInterstitialNetworkData(); - networkData.interstitial = ironSourceInputData; - - string jsonData = "{ \"interstitial\" :" + JsonUtility.ToJson(ironSourceInputData) + "}"; - return jsonData; - - //return JsonUtility.ToJson(networkData); } - public class APSIronSourceNetworkBaseInputData + public static string GetRewardedNetworkData(string amazonSlotId, AmazonAds.AdResponse adResponse) { + return GetNetworkData(amazonSlotId, adResponse, APS_REWARDED_VIDEO_KEY); + } + + private static string GetNetworkData(string amazonSlotId, AmazonAds.AdResponse adResponse , string adInventoryType) + { + APSIronSourceNetworkInputData ironSourceInputData = new APSIronSourceNetworkInputData(); +#if UNITY_ANDROID + ironSourceInputData.bidInfo = adResponse.GetBidInfo(); + +#endif + ironSourceInputData.pricePointEncoded = adResponse.GetPricePoint(); + ironSourceInputData.uuid = amazonSlotId; + APSIronSourceNetworkData networkData = new APSIronSourceNetworkData(); + networkData.networkInputData = ironSourceInputData; + +#if UNITY_IOS + string mediationHints = "\"mediationHints\" :" + adResponse.GetMediationHints(); + string jsonData = "{\""+adInventoryType+"\" :" + JsonUtility.ToJson(ironSourceInputData); + jsonData = jsonData.Remove(jsonData.Length - 1); + jsonData = jsonData + ", " + mediationHints + "}}"; +#else + string jsonData = "{\""+adInventoryType+"\" :" + JsonUtility.ToJson(ironSourceInputData) + "}"; +#endif + return jsonData; + } + + + public static string GetBannerNetworkData(string amazonSlotId, AmazonAds.AdResponse adResponse) + { + APSIronSourceNetworkBannerInputData ironSourceInputData = new APSIronSourceNetworkBannerInputData(); +#if UNITY_ANDROID + ironSourceInputData.bidInfo = adResponse.GetBidInfo(); +#endif + ironSourceInputData.pricePointEncoded = adResponse.GetPricePoint(); + ironSourceInputData.uuid = amazonSlotId; + ironSourceInputData.width = adResponse.GetWidth(); + ironSourceInputData.height = adResponse.GetHeight(); + + APSIronSourceBannerNetworkData networkData = new APSIronSourceBannerNetworkData(); + networkData.banner = ironSourceInputData; + +#if UNITY_IOS + string mediationHints = "\"mediationHints\" :" + adResponse.GetMediationHints(); + string jsonData = "{ \"banner\" :" + JsonUtility.ToJson(ironSourceInputData); + jsonData = jsonData.Remove(jsonData.Length - 1); + jsonData = jsonData + ", " + mediationHints + "}}"; +#else + string jsonData = "{ \"banner\" :" + JsonUtility.ToJson(ironSourceInputData) + "}"; +#endif + return jsonData; + } + + public class APSIronSourceNetworkInputData + { + public string uuid; + public string pricePointEncoded; +#if UNITY_ANDROID public string bidInfo; + +#endif + } + + public class APSIronSourceNetworkBannerInputData + { +#if UNITY_ANDROID + public string bidInfo; + +#endif public string pricePointEncoded; public string uuid; + public int width; + public int height; } - public class APSIronSourceInterstitialNetworkData + public class APSIronSourceBannerNetworkData { - public APSIronSourceNetworkBaseInputData interstitial; + public APSIronSourceNetworkBannerInputData banner; + } + + public class APSIronSourceNetworkData + { + public APSIronSourceNetworkInputData networkInputData; } private APSMediationUtils() diff --git a/Amazon/Scripts/Internal/APSMediationUtils.cs.meta b/Amazon/Scripts/Internal/APSMediationUtils.cs.meta index e90afa5..a343531 100644 --- a/Amazon/Scripts/Internal/APSMediationUtils.cs.meta +++ b/Amazon/Scripts/Internal/APSMediationUtils.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a9a84a300e9084005845d7561b5941de +guid: 6462f49a627cd4380aecc9aff2a008ae MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/APSVideoAdRequest.cs.meta b/Amazon/Scripts/Internal/APSVideoAdRequest.cs.meta index 6891e4f..a117066 100644 --- a/Amazon/Scripts/Internal/APSVideoAdRequest.cs.meta +++ b/Amazon/Scripts/Internal/APSVideoAdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f887445d62a094bdcaeba6843c76de52 +guid: 0116cf1c62b814514ac6cca1ac619af8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdError.cs.meta b/Amazon/Scripts/Internal/AdError.cs.meta index 870b541..7c2dc64 100644 --- a/Amazon/Scripts/Internal/AdError.cs.meta +++ b/Amazon/Scripts/Internal/AdError.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 56cbe6c6e32004910b2c76cefbf4e0c6 +guid: 3215ade8b363a427891857ff10c3981f MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdInterstitial.cs.meta b/Amazon/Scripts/Internal/AdInterstitial.cs.meta index de5b71b..1d416ef 100644 --- a/Amazon/Scripts/Internal/AdInterstitial.cs.meta +++ b/Amazon/Scripts/Internal/AdInterstitial.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b6b4a1dc9a6eb4aac89ddfeb50a829a5 +guid: a03e9d205385f4937b8627db76ac71a4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdNetworkInfo.cs b/Amazon/Scripts/Internal/AdNetworkInfo.cs index 574f126..d2bf3fe 100644 --- a/Amazon/Scripts/Internal/AdNetworkInfo.cs +++ b/Amazon/Scripts/Internal/AdNetworkInfo.cs @@ -3,7 +3,6 @@ using System; namespace AmazonAds { public enum DTBAdNetwork { GOOGLE_AD_MANAGER, - MOPUB_AD_SERVER, ADMOB, AD_GENERATION, IRON_SOURCE, diff --git a/Amazon/Scripts/Internal/AdNetworkInfo.cs.meta b/Amazon/Scripts/Internal/AdNetworkInfo.cs.meta index 95b41e8..66c4c26 100644 --- a/Amazon/Scripts/Internal/AdNetworkInfo.cs.meta +++ b/Amazon/Scripts/Internal/AdNetworkInfo.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 86929efe844004ce4a245fed201d6f9b +guid: 06e9bcca68bcd4c268eaf4d0dbd27002 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdRequest.cs b/Amazon/Scripts/Internal/AdRequest.cs index 3e340a1..14e6153 100644 --- a/Amazon/Scripts/Internal/AdRequest.cs +++ b/Amazon/Scripts/Internal/AdRequest.cs @@ -16,6 +16,12 @@ namespace AmazonAds { #endif } + public void Dispose() { + #if UNITY_ANDROID + client.Dispose(); + #endif + } + public AdRequest (IAdRequest adRequest) { client = adRequest; } diff --git a/Amazon/Scripts/Internal/AdRequest.cs.meta b/Amazon/Scripts/Internal/AdRequest.cs.meta index 9dd12d2..3f52327 100644 --- a/Amazon/Scripts/Internal/AdRequest.cs.meta +++ b/Amazon/Scripts/Internal/AdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 470ce0a8c403f4531ac94b5ebe2ea5f4 +guid: b9e5b4e4e1cabfc4c85b094dd97956b5 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdResponce.cs b/Amazon/Scripts/Internal/AdResponce.cs deleted file mode 100644 index c02e32c..0000000 --- a/Amazon/Scripts/Internal/AdResponce.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace AmazonAds { - public abstract class AdResponseObsolete { - } -} diff --git a/Amazon/Scripts/Internal/AdResponce.cs.meta b/Amazon/Scripts/Internal/AdResponce.cs.meta deleted file mode 100644 index 928912a..0000000 --- a/Amazon/Scripts/Internal/AdResponce.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 07d84938416874bbb97e941098b24279 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Amazon/Scripts/Internal/AdResponse.cs.meta b/Amazon/Scripts/Internal/AdResponse.cs.meta index 8003906..49d5fca 100644 --- a/Amazon/Scripts/Internal/AdResponse.cs.meta +++ b/Amazon/Scripts/Internal/AdResponse.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 80115d4cd111a4902804a0557a637367 +guid: ddb5dd3e28b574a74b676b9a456bdb41 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdSize.cs.meta b/Amazon/Scripts/Internal/AdSize.cs.meta index 3ac671a..30f546a 100644 --- a/Amazon/Scripts/Internal/AdSize.cs.meta +++ b/Amazon/Scripts/Internal/AdSize.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6669e9284e4b5497fb351ae7bcb28436 +guid: 3fe91a7e44a1a364e8bfaa45f0af5a48 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AdView.cs b/Amazon/Scripts/Internal/AdView.cs index fbf3c39..6421ce5 100644 --- a/Amazon/Scripts/Internal/AdView.cs +++ b/Amazon/Scripts/Internal/AdView.cs @@ -15,6 +15,12 @@ namespace AmazonAds { #endif } + public void Dispose() { + #if UNITY_ANDROID + adView.Dispose(); + #endif + } + public void fetchAd (AdResponse adResponse) { adView.FetchAd(adResponse); } diff --git a/Amazon/Scripts/Internal/AdView.cs.meta b/Amazon/Scripts/Internal/AdView.cs.meta index 575a4d3..ec7044f 100644 --- a/Amazon/Scripts/Internal/AdView.cs.meta +++ b/Amazon/Scripts/Internal/AdView.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ae0729fd51c4548638665a625582c64e +guid: 3c1cdb4ad102d47eab59e8df1f917c4d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AmazonPackageConfig.cs.meta b/Amazon/Scripts/Internal/AmazonPackageConfig.cs.meta index 29bd54c..0ffff8e 100644 --- a/Amazon/Scripts/Internal/AmazonPackageConfig.cs.meta +++ b/Amazon/Scripts/Internal/AmazonPackageConfig.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c289908250a174f72824418c6968e5f6 +guid: 732f6afbd1c571441bdc86f6f48e847e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/AmazonUtils.cs.meta b/Amazon/Scripts/Internal/AmazonUtils.cs.meta index 2d7d7c4..8096851 100644 --- a/Amazon/Scripts/Internal/AmazonUtils.cs.meta +++ b/Amazon/Scripts/Internal/AmazonUtils.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8472e80d0d208414880cdcf4c8b6889f +guid: dd98afcb8352e134ab09ab54c5c8b844 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android.meta b/Amazon/Scripts/Internal/Android.meta index eafc62e..6c6459f 100644 --- a/Amazon/Scripts/Internal/Android.meta +++ b/Amazon/Scripts/Internal/Android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7b3522bb34b494fbfac3a4d58f6de400 +guid: 56389f93bf97fcd4e97d5360316491c1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Internal/Android/AdRegistration.cs b/Amazon/Scripts/Internal/Android/AdRegistration.cs index 1f65d82..b1c4de7 100644 --- a/Amazon/Scripts/Internal/Android/AdRegistration.cs +++ b/Amazon/Scripts/Internal/Android/AdRegistration.cs @@ -83,7 +83,7 @@ namespace AmazonAds.Android { } public bool IsLocationEnabled () { - return adRegistration.CallStatic ("іsLocationEnabled"); + return adRegistration.CallStatic ("isLocationEnabled"); } public String GetVersion () { diff --git a/Amazon/Scripts/Internal/Android/AdRegistration.cs.meta b/Amazon/Scripts/Internal/Android/AdRegistration.cs.meta index 0dd61fd..7953f22 100644 --- a/Amazon/Scripts/Internal/Android/AdRegistration.cs.meta +++ b/Amazon/Scripts/Internal/Android/AdRegistration.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 211753c343932487aaf8fa3e3f23a237 +guid: b8e246fc101d65e4e8ee19eb598fcbf8 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs b/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs index 8939514..869256c 100644 --- a/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs +++ b/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs @@ -8,15 +8,24 @@ namespace AmazonAds.Android { private AndroidJavaObject dtbAdInterstitial = null; private static readonly AndroidJavaClass SDKUtilitiesClass = new AndroidJavaClass(AmazonConstants.sdkUtilitiesClass); + UnityEngine.AndroidJavaClass playerClass; + UnityEngine.AndroidJavaObject currentActivityObject; + public AndroidAdInterstitial (APSAdDelegate delegates) { - UnityEngine.AndroidJavaClass playerClass = new UnityEngine.AndroidJavaClass(AmazonConstants.unityPlayerClass); - UnityEngine.AndroidJavaObject currentActivityObject = playerClass.GetStatic ("currentActivity"); + playerClass = new UnityEngine.AndroidJavaClass(AmazonConstants.unityPlayerClass); + currentActivityObject = playerClass.GetStatic ("currentActivity"); DTBAdInterstitialListener adInterstitialListener = new DTBAdInterstitialListener(); adInterstitialListener.adDelegate = delegates; dtbAdInterstitial = new AndroidJavaObject(AmazonConstants.dtbAdInterstitialClass, currentActivityObject, adInterstitialListener); } + public void Dispose() { + playerClass.Dispose(); + currentActivityObject.Dispose(); + dtbAdInterstitial.Dispose(); + } + public override void FetchAd (AdResponse adResponse) { if (dtbAdInterstitial != null) { AndroidJavaObject response = adResponse.GetAndroidResponseObject(); diff --git a/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs.meta b/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs.meta index ae80685..c5a90b4 100644 --- a/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs.meta +++ b/Amazon/Scripts/Internal/Android/AndroidAdInterstitial.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ec1e99cd2191f4570bda447b3e0b031b +guid: d75f31e61413f4531ad341980cb0056d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs b/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs deleted file mode 100644 index ef1a130..0000000 --- a/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace AmazonAds.Android { - public class AndroidAdResponceObsolete { - } -} diff --git a/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs.meta b/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs.meta deleted file mode 100644 index 6b35c90..0000000 --- a/Amazon/Scripts/Internal/Android/AndroidAdResponce.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: b59d5cd7e7903495f8d952a28060400d -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Amazon/Scripts/Internal/Android/AndroidAdResponse.cs.meta b/Amazon/Scripts/Internal/Android/AndroidAdResponse.cs.meta index 911a717..ee517f1 100644 --- a/Amazon/Scripts/Internal/Android/AndroidAdResponse.cs.meta +++ b/Amazon/Scripts/Internal/Android/AndroidAdResponse.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ea64b8dd761b64dc48d3963f41d7c964 +guid: 225ce61c153884d2498752934b9e5e02 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/AndroidAdView.cs b/Amazon/Scripts/Internal/Android/AndroidAdView.cs index d067f9b..859bb54 100644 --- a/Amazon/Scripts/Internal/Android/AndroidAdView.cs +++ b/Amazon/Scripts/Internal/Android/AndroidAdView.cs @@ -7,16 +7,24 @@ namespace AmazonAds.Android { public class AndroidAdView : IAdView { private AndroidJavaObject dtbAdView = null; private static readonly AndroidJavaClass SDKUtilitiesClass = new AndroidJavaClass(AmazonConstants.sdkUtilitiesClass); + UnityEngine.AndroidJavaClass playerClass; + UnityEngine.AndroidJavaObject currentActivityObject; public AndroidAdView (APSAdDelegate delegates) { - UnityEngine.AndroidJavaClass playerClass = new UnityEngine.AndroidJavaClass(AmazonConstants.unityPlayerClass); - UnityEngine.AndroidJavaObject currentActivityObject = playerClass.GetStatic ("currentActivity"); + playerClass = new UnityEngine.AndroidJavaClass(AmazonConstants.unityPlayerClass); + currentActivityObject = playerClass.GetStatic ("currentActivity"); DTBAdBannerListener adBannerListener = new DTBAdBannerListener(); adBannerListener.adDelegate = delegates; dtbAdView = new AndroidJavaObject(AmazonConstants.dtbAdViewClass, currentActivityObject, adBannerListener); } + public void Dispose() { + playerClass.Dispose(); + currentActivityObject.Dispose(); + dtbAdView.Dispose(); + } + public override void FetchAd (AdResponse adResponse) { if (dtbAdView != null) { AndroidJavaObject response = adResponse.GetAndroidResponseObject(); diff --git a/Amazon/Scripts/Internal/Android/AndroidAdView.cs.meta b/Amazon/Scripts/Internal/Android/AndroidAdView.cs.meta index 3beb77e..8790e51 100644 --- a/Amazon/Scripts/Internal/Android/AndroidAdView.cs.meta +++ b/Amazon/Scripts/Internal/Android/AndroidAdView.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d65a0f0dd42564508aa82269ce06336f +guid: 915f068be076545579598f0e166613b1 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/AndroidPlatform.cs b/Amazon/Scripts/Internal/Android/AndroidPlatform.cs index 739b5ba..a6f3978 100644 --- a/Amazon/Scripts/Internal/Android/AndroidPlatform.cs +++ b/Amazon/Scripts/Internal/Android/AndroidPlatform.cs @@ -49,16 +49,19 @@ namespace AmazonAds.Android { adRegistration.EnableLogging (flag); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public override void SetCMPFlavor(Amazon.CMPFlavor cFlavor) { adRegistration.SetCMPFlavor(cFlavor); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public override void SetConsentStatus(Amazon.ConsentStatus consentStatus) { adRegistration.SetConsentStatus(consentStatus); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public override void SetVendorList(List vendorList) { adRegistration.SetVendorList(vendorList); diff --git a/Amazon/Scripts/Internal/Android/AndroidPlatform.cs.meta b/Amazon/Scripts/Internal/Android/AndroidPlatform.cs.meta index cc1b0f0..c27a542 100644 --- a/Amazon/Scripts/Internal/Android/AndroidPlatform.cs.meta +++ b/Amazon/Scripts/Internal/Android/AndroidPlatform.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5b2de7cfcde534331acecd109d027803 +guid: c21cb058ae626f248833fdab8d85aa44 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBAdBannerListener.cs.meta b/Amazon/Scripts/Internal/Android/DTBAdBannerListener.cs.meta index 81ce259..4844012 100644 --- a/Amazon/Scripts/Internal/Android/DTBAdBannerListener.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBAdBannerListener.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 38ecf85701e30431f9c29008f398e51b +guid: 96eb7e2874b874e7e9f4045bb0ea4db9 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBAdInterstitialListener.cs.meta b/Amazon/Scripts/Internal/Android/DTBAdInterstitialListener.cs.meta index 769558a..2377af5 100644 --- a/Amazon/Scripts/Internal/Android/DTBAdInterstitialListener.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBAdInterstitialListener.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a7709955494bd4212a25ccc336841875 +guid: 453e75923c4e54a16b77e815a3df9e76 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBAdRequest.cs b/Amazon/Scripts/Internal/Android/DTBAdRequest.cs index d277728..6c7d9ec 100644 --- a/Amazon/Scripts/Internal/Android/DTBAdRequest.cs +++ b/Amazon/Scripts/Internal/Android/DTBAdRequest.cs @@ -9,12 +9,21 @@ namespace AmazonAds.Android { private IInterstitialAdSize _interstitialAdSize = null; private IVideo _videoAdSize = null; + UnityEngine.AndroidJavaClass playerClass; + UnityEngine.AndroidJavaObject currentActivityObject; + public DTBAdRequest () { - UnityEngine.AndroidJavaClass playerClass = new UnityEngine.AndroidJavaClass ("com.unity3d.player.UnityPlayer"); - UnityEngine.AndroidJavaObject currentActivityObject = playerClass.GetStatic ("currentActivity"); + playerClass = new UnityEngine.AndroidJavaClass ("com.unity3d.player.UnityPlayer"); + currentActivityObject = playerClass.GetStatic ("currentActivity"); dTBAdRequest = new AndroidJavaObject ("com.amazon.device.ads.DTBAdRequest", currentActivityObject); } + public void Dispose() { + playerClass.Dispose(); + currentActivityObject.Dispose(); + dTBAdRequest.Dispose(); + } + public DTBAdRequest (AndroidJavaObject dtbRequest) { dTBAdRequest = dtbRequest; } diff --git a/Amazon/Scripts/Internal/Android/DTBAdRequest.cs.meta b/Amazon/Scripts/Internal/Android/DTBAdRequest.cs.meta index de7d3db..159cfdd 100644 --- a/Amazon/Scripts/Internal/Android/DTBAdRequest.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBAdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 02bd534875030442a8c3a9f1bedc6967 +guid: e75f3eee6b627e647979f4f3680abc47 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBAdSize.cs b/Amazon/Scripts/Internal/Android/DTBAdSize.cs index 486711a..e5fd9ce 100644 --- a/Amazon/Scripts/Internal/Android/DTBAdSize.cs +++ b/Amazon/Scripts/Internal/Android/DTBAdSize.cs @@ -8,6 +8,7 @@ namespace AmazonAds.Android { public DTBAdSize (int width, int height, String slotUUID) { client = new AndroidJavaObject ("com.amazon.device.ads.DTBAdSize", width, height, slotUUID); } + public int GetWidth () { return client.Call ("getWidth"); } @@ -41,6 +42,10 @@ namespace AmazonAds.Android { client = new AndroidJavaObject ("com.amazon.device.ads.DTBAdSize$DTBVideo", playerWidth, playerHeight, slotUUID); } + public void Dispose() { + client.Dispose(); + } + public AndroidJavaObject GetInstance () { return client; } diff --git a/Amazon/Scripts/Internal/Android/DTBAdSize.cs.meta b/Amazon/Scripts/Internal/Android/DTBAdSize.cs.meta index 0137b71..e2faed6 100644 --- a/Amazon/Scripts/Internal/Android/DTBAdSize.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBAdSize.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0707e98bd8f7c449fbaf05500bee828d +guid: 9bbbe93960b89b6438d564bfd823f31e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBCallback.cs.meta b/Amazon/Scripts/Internal/Android/DTBCallback.cs.meta index e8c6ff2..5916fa8 100644 --- a/Amazon/Scripts/Internal/Android/DTBCallback.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBCallback.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 97d96cb6052c247b88fb71963517d15f +guid: f2cd9fa644ad3814086bbdb888b07e52 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBFetchFactory.cs.meta b/Amazon/Scripts/Internal/Android/DTBFetchFactory.cs.meta index 9aa0979..c9967df 100644 --- a/Amazon/Scripts/Internal/Android/DTBFetchFactory.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBFetchFactory.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d8f17e173b3b34003b573efeaef83dce +guid: 2da86b5f7de549f408cd7ab478b815bf MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBFetchManager.cs b/Amazon/Scripts/Internal/Android/DTBFetchManager.cs index 36bd868..f1bf5c7 100644 --- a/Amazon/Scripts/Internal/Android/DTBFetchManager.cs +++ b/Amazon/Scripts/Internal/Android/DTBFetchManager.cs @@ -11,6 +11,10 @@ namespace AmazonAds.Android { dTBFetchManager = client; } + public void Dispose() { + dTBFetchManager.Dispose(); + } + public void dispense () { AndroidJavaObject dTBAdResponse = dTBFetchManager.Call ("dispense"); } diff --git a/Amazon/Scripts/Internal/Android/DTBFetchManager.cs.meta b/Amazon/Scripts/Internal/Android/DTBFetchManager.cs.meta index 96b7c9b..5aed60d 100644 --- a/Amazon/Scripts/Internal/Android/DTBFetchManager.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBFetchManager.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2bf648a3f472141fdbc550ad18e55ac1 +guid: 6228100cb30e98a469a061dc74986b1b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/Android/DTBSlotGroup.cs.meta b/Amazon/Scripts/Internal/Android/DTBSlotGroup.cs.meta index a5a07cc..ead264c 100644 --- a/Amazon/Scripts/Internal/Android/DTBSlotGroup.cs.meta +++ b/Amazon/Scripts/Internal/Android/DTBSlotGroup.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f997d4f0e62c14fcdb460c08b05ef913 +guid: bae541bcf584e3a429eb2478625aba9a MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS.meta b/Amazon/Scripts/Internal/IOS.meta index eea68d4..321c01a 100644 --- a/Amazon/Scripts/Internal/IOS.meta +++ b/Amazon/Scripts/Internal/IOS.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cf23c2530685c4a709003ad1faddfd1c +guid: 78340eb4238a9eb47b38ebebf20f97a1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Internal/IOS/DTBAdBannerDispatcher.cs.meta b/Amazon/Scripts/Internal/IOS/DTBAdBannerDispatcher.cs.meta index 4768117..56fe4b7 100644 --- a/Amazon/Scripts/Internal/IOS/DTBAdBannerDispatcher.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBAdBannerDispatcher.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b2d2d02538c84466afc24234497484c +guid: 1b160c1031c0c41c9940ad06e7e764d0 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/DTBAdInterstitialDispatcher.cs.meta b/Amazon/Scripts/Internal/IOS/DTBAdInterstitialDispatcher.cs.meta index 27cbc4c..08b050b 100644 --- a/Amazon/Scripts/Internal/IOS/DTBAdInterstitialDispatcher.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBAdInterstitialDispatcher.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c027d873469c4440fbfdd1b55353f520 +guid: 4fecb6b1807da47d5bb9abfcc7cf0069 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs b/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs index cbd17a7..0faae00 100644 --- a/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs +++ b/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs @@ -105,13 +105,7 @@ namespace AmazonAds.IOS { } public override void SetAutoRefreshAdMob (bool flag, bool isSmartBanner = false) { - isAutoRefreshAdMob = flag; - if(flag){ - CreateFetchManager(isSmartBanner); - StartFetchManager(); - } else { - StopFetchManager(); - } + Debug.LogError("The API has been deprecated"); } public override void SetRefreshFlag (bool flag) { diff --git a/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs.meta b/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs.meta index 64cd525..0a2a0aa 100644 --- a/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBAdRequest.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 028c059572c3540cb8f18d6eb4f6c4be +guid: ebf50a9b3c931b648bc9277418a4dbc5 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/DTBAdSize.cs.meta b/Amazon/Scripts/Internal/IOS/DTBAdSize.cs.meta index 1a04a63..1f288cc 100644 --- a/Amazon/Scripts/Internal/IOS/DTBAdSize.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBAdSize.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b34576138f1bd4ced980dee0fd2996b0 +guid: 67c47e784fa3fbc45ad25c4461a43688 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/DTBCallback.cs.meta b/Amazon/Scripts/Internal/IOS/DTBCallback.cs.meta index d8d784b..8236964 100644 --- a/Amazon/Scripts/Internal/IOS/DTBCallback.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBCallback.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 53febdb10cdf24c24ab963454803ad53 +guid: 8b79a8d648aadcd4880893d68bbd1df4 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/DTBFetchManager.cs.meta b/Amazon/Scripts/Internal/IOS/DTBFetchManager.cs.meta index fc4f76f..9e7e97e 100644 --- a/Amazon/Scripts/Internal/IOS/DTBFetchManager.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBFetchManager.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7d527c1c887004853918e03dc2f5c5c8 +guid: e33ebaf4702974a869c73077eb9e667d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/DTBSlotGroup.cs.meta b/Amazon/Scripts/Internal/IOS/DTBSlotGroup.cs.meta index 3ff304b..e9a569d 100644 --- a/Amazon/Scripts/Internal/IOS/DTBSlotGroup.cs.meta +++ b/Amazon/Scripts/Internal/IOS/DTBSlotGroup.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 734ab7005315a4ab1a6e683e7e864e28 +guid: a19e18b833a07e14699ced94129f1886 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/Externs.cs b/Amazon/Scripts/Internal/IOS/Externs.cs index f483b01..79f6ec6 100644 --- a/Amazon/Scripts/Internal/IOS/Externs.cs +++ b/Amazon/Scripts/Internal/IOS/Externs.cs @@ -47,7 +47,6 @@ namespace AmazonAds.IOS public static void _addSlotGroup(IntPtr group) {} public static string _fetchMediationHints(IntPtr resp, bool isSmartBanner) { return null; } public static string _fetchAmznSlots(IntPtr resp) { return null; } - public static string _fetchMoPubKeywords(IntPtr resp) { return null; } public static void _setCMPFlavor(int cFlavor) {} public static void _setConsentStatus(int consentStatus) {} public static IntPtr _createArray() { return IntPtr.Zero; } @@ -162,8 +161,6 @@ namespace AmazonAds.IOS [DllImport("__Internal")] public static extern int _fetchAdHeight(IntPtr resp); [DllImport("__Internal")] - public static extern string _fetchMoPubKeywords(IntPtr resp); - [DllImport("__Internal")] public static extern void _setCMPFlavor(int cFlavor); [DllImport("__Internal")] public static extern void _setConsentStatus(int consentStatus); diff --git a/Amazon/Scripts/Internal/IOS/Externs.cs.meta b/Amazon/Scripts/Internal/IOS/Externs.cs.meta index 3561351..943622b 100644 --- a/Amazon/Scripts/Internal/IOS/Externs.cs.meta +++ b/Amazon/Scripts/Internal/IOS/Externs.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1708dd63a5c574f8db8866d86b2fb232 +guid: 7560a92bf670b4446a5eb8b200ab4ec5 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/IOSAdInterstitial.cs.meta b/Amazon/Scripts/Internal/IOS/IOSAdInterstitial.cs.meta index b117149..c089c1f 100644 --- a/Amazon/Scripts/Internal/IOS/IOSAdInterstitial.cs.meta +++ b/Amazon/Scripts/Internal/IOS/IOSAdInterstitial.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0d4d502223b4a4092b39024b38722b89 +guid: 239d104edcd92469cbe77af18fd7649b MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs b/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs deleted file mode 100644 index 914704f..0000000 --- a/Amazon/Scripts/Internal/IOS/IOSAdResponce.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace AmazonAds.IOS { - public class IOSAdResponceObsolete { - } -} diff --git a/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs b/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs index d627c43..4602164 100644 --- a/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs +++ b/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs @@ -22,10 +22,6 @@ namespace AmazonAds.IOS { return Externs._fetchAdWidth(resp); } - public override string GetMoPubKeywords () { - return Externs._fetchMoPubKeywords(resp); - } - public override IntPtr GetIosResponseObject() { return resp; @@ -88,5 +84,10 @@ namespace AmazonAds.IOS { internal override void SetAdLoader(AdRequest adRequest) { adLoader = adRequest; } + + public override string GetMoPubKeywords() + { + throw new NotImplementedException(); + } } } \ No newline at end of file diff --git a/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs.meta b/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs.meta index f1d95d5..2167783 100644 --- a/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs.meta +++ b/Amazon/Scripts/Internal/IOS/IOSAdResponse.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9fdebaea51295482fb17caa1dfcb2fd9 +guid: 486f74d5ee3fc47c29510ae4417e3d8d MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/IOSAdView.cs.meta b/Amazon/Scripts/Internal/IOS/IOSAdView.cs.meta index 4bfb326..5dd5c8a 100644 --- a/Amazon/Scripts/Internal/IOS/IOSAdView.cs.meta +++ b/Amazon/Scripts/Internal/IOS/IOSAdView.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a23b0b9ff70c443cbbb45c959a58503d +guid: ee954c4db1b07425a951092e9ea875cb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/IOS/IOSPlatform.cs b/Amazon/Scripts/Internal/IOS/IOSPlatform.cs index 8618062..a409f99 100644 --- a/Amazon/Scripts/Internal/IOS/IOSPlatform.cs +++ b/Amazon/Scripts/Internal/IOS/IOSPlatform.cs @@ -52,6 +52,7 @@ namespace AmazonAds.IOS { Externs._addSlotGroup(ptr.GetInstance()); } + [Obsolete("This API has been deprecated", false)] public override void SetCMPFlavor(Amazon.CMPFlavor cFlavor) { int fla = 0; @@ -70,6 +71,7 @@ namespace AmazonAds.IOS { Externs._setCMPFlavor(fla); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public override void SetConsentStatus(Amazon.ConsentStatus consentStatus) { int cons = 0; @@ -91,6 +93,7 @@ namespace AmazonAds.IOS { Externs._setConsentStatus(cons); } + [Obsolete("APS no longer supports this API. For GDPR, we support TCFv2 strings. Implementation instructions can be found on the APS Portal under Resources > Privacy", false)] public override void SetVendorList(List vendorList) { IntPtr dictionary = Externs._createArray(); diff --git a/Amazon/Scripts/Internal/IOS/IOSPlatform.cs.meta b/Amazon/Scripts/Internal/IOS/IOSPlatform.cs.meta index a907b99..0d0702f 100644 --- a/Amazon/Scripts/Internal/IOS/IOSPlatform.cs.meta +++ b/Amazon/Scripts/Internal/IOS/IOSPlatform.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ac416f8316ced40589eeba7b04efc627 +guid: 3d45dcbd0fb08ea41a11f185a93dc226 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/MiniJSON.cs.meta b/Amazon/Scripts/Internal/MiniJSON.cs.meta index ac9e379..83ea002 100644 --- a/Amazon/Scripts/Internal/MiniJSON.cs.meta +++ b/Amazon/Scripts/Internal/MiniJSON.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4b235ee00c3e948deaa8d5af245c9318 +guid: 2d0ac6c6632785e44981f12072090ff6 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/PlatformApi.cs.meta b/Amazon/Scripts/Internal/PlatformApi.cs.meta index d4ffe97..382ba55 100644 --- a/Amazon/Scripts/Internal/PlatformApi.cs.meta +++ b/Amazon/Scripts/Internal/PlatformApi.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a7e4c885c2b514bab912a1d10b93b56b +guid: 51621a2cb798b7e4fb0c63ed614355f9 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Internal/SlotGroup.cs.meta b/Amazon/Scripts/Internal/SlotGroup.cs.meta index 46e9ed3..74c3e92 100644 --- a/Amazon/Scripts/Internal/SlotGroup.cs.meta +++ b/Amazon/Scripts/Internal/SlotGroup.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d0721cd33e88d476385237c2bf17af32 +guid: feb152fb7c07ff145a60fe9ccdb1f37c MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Mediations.meta b/Amazon/Scripts/Mediations.meta index 77042fe..cf3df09 100644 --- a/Amazon/Scripts/Mediations.meta +++ b/Amazon/Scripts/Mediations.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dc21c213b3887496a9b450a63d014a4b +guid: f6db0da0788fa4dc2830d633ef211025 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Mediations/AppLovinMediation.meta b/Amazon/Scripts/Mediations/AppLovinMediation.meta index b2fab5b..cbcc8a7 100644 --- a/Amazon/Scripts/Mediations/AppLovinMediation.meta +++ b/Amazon/Scripts/Mediations/AppLovinMediation.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 39980aa183b504d8a8897519535976bf +guid: 5d030096ad5c54ed282a61ebbe5b630e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Mediations/AppLovinMediation/Editor.meta b/Amazon/Scripts/Mediations/AppLovinMediation/Editor.meta index d8d55c5..73c8dd7 100644 --- a/Amazon/Scripts/Mediations/AppLovinMediation/Editor.meta +++ b/Amazon/Scripts/Mediations/AppLovinMediation/Editor.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: eb50eb92fd8e241589b99bc4635578a1 +guid: 036570c23900d4fce95f9d1c54cd6417 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs index 3c90618..7684fd2 100644 --- a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs +++ b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs @@ -1,6 +1,6 @@ -public class APSAppLovinPackageConfig : AmazonPackageConfig +public class APSAppLovinPackageConfig : AmazonPackageConfig { - public const string VERSION = "1.4.3"; + public const string VERSION = "1.9.0"; public override string Name { diff --git a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs.meta b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs.meta index 5516962..ad93ce1 100644 --- a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs.meta +++ b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/APSAppLovinPackageConfig.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 605f6ed8576974f2c9a821be69531aba +guid: 9a9ea2466931546f28de79882e1a5cfd MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml index 88914bc..b3156b5 100644 --- a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml +++ b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml.meta b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml.meta index 0d908f4..57db849 100644 --- a/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml.meta +++ b/Amazon/Scripts/Mediations/AppLovinMediation/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b7874141996c14ba4b9b32651bc21d2a +guid: ba572d3f9e0fb4d699d002b783516de6 labels: - al_max - al_max_export_path-MaxSdk/Mediation/AmazonAdMarketplace/Editor/Dependencies.xml From 26425badea0e55ecf14804a63f59eab8ca755f14 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 26 Jun 2024 13:33:10 +0800 Subject: [PATCH 28/30] =?UTF-8?q?update=EF=BC=9A=20=E8=B0=83=E6=95=B4=20Mo?= =?UTF-8?q?loco=20=E7=9A=84=E7=89=88=E6=9C=AC=E5=8F=B7=20->=202.3.0.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mediation/Moloco/Editor/Dependencies.xml | 2 +- Mediation/Moloco/Editor/Dependencies.xml.meta | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Mediation/Moloco/Editor/Dependencies.xml b/Mediation/Moloco/Editor/Dependencies.xml index 6fef892..6dec925 100644 --- a/Mediation/Moloco/Editor/Dependencies.xml +++ b/Mediation/Moloco/Editor/Dependencies.xml @@ -1,7 +1,7 @@ - + diff --git a/Mediation/Moloco/Editor/Dependencies.xml.meta b/Mediation/Moloco/Editor/Dependencies.xml.meta index 452bd95..48c943c 100644 --- a/Mediation/Moloco/Editor/Dependencies.xml.meta +++ b/Mediation/Moloco/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: df52eab134aaf4687be700447620003c +guid: a8dcf6082639f4c5aa7239a54a5a7208 labels: - al_max - al_max_export_path-MaxSdk/Mediation/Moloco/Editor/Dependencies.xml From 8ae8ff601d8672a4b92c11efe0b9b05c625bcf18 Mon Sep 17 00:00:00 2001 From: huyufei Date: Wed, 26 Jun 2024 14:46:33 +0800 Subject: [PATCH 29/30] =?UTF-8?q?update:=20=E4=BF=AE=E5=A4=8D=20Amazon=20i?= =?UTF-8?q?OS=20plugins=20=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=20=E6=94=B9=E4=B8=BA=20Plugins=20?= =?UTF-8?q?=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Amazon/Scripts/Editor/AmazonDependencies.xml | 2 +- Mediation/BidMachine/Editor/Dependencies.xml.meta | 2 +- Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Amazon/Scripts/Editor/AmazonDependencies.xml b/Amazon/Scripts/Editor/AmazonDependencies.xml index c331fd3..d37d05f 100644 --- a/Amazon/Scripts/Editor/AmazonDependencies.xml +++ b/Amazon/Scripts/Editor/AmazonDependencies.xml @@ -10,7 +10,7 @@ - + diff --git a/Mediation/BidMachine/Editor/Dependencies.xml.meta b/Mediation/BidMachine/Editor/Dependencies.xml.meta index c1ab220..1c3a94c 100644 --- a/Mediation/BidMachine/Editor/Dependencies.xml.meta +++ b/Mediation/BidMachine/Editor/Dependencies.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 389e8627385e74195aea66b9f27a6c92 +guid: 05bed64f42dca4c34bd8d806db7fc640 labels: - al_max - al_max_export_path-MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml diff --git a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta index b86f5aa..755381b 100644 --- a/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta +++ b/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a1291a5ea371742a0a61d7558959ddb4 +guid: 91350cee35c224b38b50c27772c5113b labels: - al_max - al_max_export_path-MaxSdk/Mediation/Fyber/Editor/PrivacyInfo.xcprivacy From 14c7453a8ed75a7cdd056328e81f77303c1b293f Mon Sep 17 00:00:00 2001 From: huyufei Date: Thu, 23 May 2024 19:38:55 +0800 Subject: [PATCH 30/30] =?UTF-8?q?update:=20=E5=8D=87=E7=BA=A7=20MobileFuse?= =?UTF-8?q?=20=E5=8F=8C=E7=AB=AF=E8=87=B3=201.7.4,=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Mediation/MobileFuse/Editor/Dependencies.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mediation/MobileFuse/Editor/Dependencies.xml b/Mediation/MobileFuse/Editor/Dependencies.xml index d3e7ffa..57997e7 100644 --- a/Mediation/MobileFuse/Editor/Dependencies.xml +++ b/Mediation/MobileFuse/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - +