diff --git a/ArrowBeatTap-IOS.sln.DotSettings.user b/ArrowBeatTap-IOS.sln.DotSettings.user new file mode 100644 index 0000000..af410db --- /dev/null +++ b/ArrowBeatTap-IOS.sln.DotSettings.user @@ -0,0 +1,2 @@ + + ForceIncluded \ No newline at end of file diff --git a/Assets/ChillConnect/Helper/GameHelper.cs b/Assets/ChillConnect/Helper/GameHelper.cs index 0d85a1c..540aebc 100644 --- a/Assets/ChillConnect/Helper/GameHelper.cs +++ b/Assets/ChillConnect/Helper/GameHelper.cs @@ -610,7 +610,7 @@ namespace ChillConnect var url = $"mailto:{email}?subject={subject}&body={body}"; var uri = new Uri(url); - Application.OpenURL(uri.AbsoluteUri); + OpenBrowser.OpenURL(uri.AbsoluteUri); GameHelper.ShowTips("Trying to call send mail..."); } diff --git a/Assets/Editor Default Resources.meta b/Assets/Editor Default Resources.meta new file mode 100644 index 0000000..aebacf5 --- /dev/null +++ b/Assets/Editor Default Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d95f4eb6b76da3c4e98b4ef7af986b62 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/CrashlyticsSettings.asset b/Assets/Editor Default Resources/CrashlyticsSettings.asset new file mode 100644 index 0000000..c9b5384 --- /dev/null +++ b/Assets/Editor Default Resources/CrashlyticsSettings.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1465085449, guid: 3781f2218eef4d5a823dba406baa434b, type: 3} + m_Name: CrashlyticsSettings + m_EditorClassIdentifier: + configuration: + stringProperties: [] + intProperties: [] + floatProperties: [] + booleanProperties: [] diff --git a/Assets/Editor Default Resources/CrashlyticsSettings.asset.meta b/Assets/Editor Default Resources/CrashlyticsSettings.asset.meta new file mode 100644 index 0000000..af89805 --- /dev/null +++ b/Assets/Editor Default Resources/CrashlyticsSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3b372c796e407e499eff2e854a571ec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase.meta b/Assets/Editor Default Resources/Firebase.meta new file mode 100644 index 0000000..5bfc89e --- /dev/null +++ b/Assets/Editor Default Resources/Firebase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ff264e59d64e1824e8d61afc436a5db7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_analytics.png b/Assets/Editor Default Resources/Firebase/fb_analytics.png new file mode 100644 index 0000000..3f19563 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_analytics.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_analytics.png.meta b/Assets/Editor Default Resources/Firebase/fb_analytics.png.meta new file mode 100644 index 0000000..90c6b61 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_analytics.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: dc218b335b1d14cd5ae532f65042d829 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics.png +timeCreated: 1473376337 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_analytics_dark.png b/Assets/Editor Default Resources/Firebase/fb_analytics_dark.png new file mode 100644 index 0000000..e6b922e Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_analytics_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_analytics_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_analytics_dark.png.meta new file mode 100644 index 0000000..42be9ef --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_analytics_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 9fe4b3bd3b7d2477dac92fb7429d1d1b +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics_dark.png +timeCreated: 1472679008 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_auth.png b/Assets/Editor Default Resources/Firebase/fb_auth.png new file mode 100644 index 0000000..b5ccfe9 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_auth.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_auth.png.meta b/Assets/Editor Default Resources/Firebase/fb_auth.png.meta new file mode 100644 index 0000000..377c8f7 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_auth.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 394b3ec4d60c24476a12e4ba696d9e5d +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth.png +timeCreated: 1473376335 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_auth_dark.png b/Assets/Editor Default Resources/Firebase/fb_auth_dark.png new file mode 100644 index 0000000..e90ec77 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_auth_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_auth_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_auth_dark.png.meta new file mode 100644 index 0000000..a54cd3c --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_auth_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 3a9e1ef6287664c389bb09e2ac1b23b7 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth_dark.png +timeCreated: 1472679008 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png new file mode 100644 index 0000000..350c03f Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png.meta b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png.meta new file mode 100644 index 0000000..b939808 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 837e8e1f35e334e81931d0857680cebf +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging.png +timeCreated: 1473376336 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png new file mode 100644 index 0000000..1fbb8dc Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png.meta new file mode 100644 index 0000000..ce5d2ad --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 20c5b8a1f82cb4aadb77ca20683d2a6e +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging_dark.png +timeCreated: 1472679008 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_config.png b/Assets/Editor Default Resources/Firebase/fb_config.png new file mode 100644 index 0000000..3c69287 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_config.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_config.png.meta b/Assets/Editor Default Resources/Firebase/fb_config.png.meta new file mode 100644 index 0000000..23a1363 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_config.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 415eaec414af14d11955222a282aca08 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_config.png +timeCreated: 1473376335 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_config_dark.png b/Assets/Editor Default Resources/Firebase/fb_config_dark.png new file mode 100644 index 0000000..5441081 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_config_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_config_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_config_dark.png.meta new file mode 100644 index 0000000..cc8fdac --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_config_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 0ad9ef5fff5524355a9670c90a99cbba +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_config_dark.png +timeCreated: 1472679008 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_crashlytics.png b/Assets/Editor Default Resources/Firebase/fb_crashlytics.png new file mode 100644 index 0000000..e9b7cad Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_crashlytics.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_crashlytics.png.meta b/Assets/Editor Default Resources/Firebase/fb_crashlytics.png.meta new file mode 100644 index 0000000..4ffc811 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_crashlytics.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 008a5e76206e49f9b06d8ba144aabb38 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics.png +timeCreated: 1473376335 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png b/Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png new file mode 100644 index 0000000..52f5d48 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png.meta new file mode 100644 index 0000000..f0a38b2 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 214009068900439da4a9cded17d58090 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics_dark.png +timeCreated: 1472679008 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_database.png b/Assets/Editor Default Resources/Firebase/fb_database.png new file mode 100644 index 0000000..a2a186d Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_database.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_database.png.meta b/Assets/Editor Default Resources/Firebase/fb_database.png.meta new file mode 100644 index 0000000..44581e6 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_database.png.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: 3eea7b558c67b48e18acf3c278392e3d +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_database.png +timeCreated: 1476203961 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_database_dark.png b/Assets/Editor Default Resources/Firebase/fb_database_dark.png new file mode 100644 index 0000000..ecc572e Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_database_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_database_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_database_dark.png.meta new file mode 100644 index 0000000..5241661 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_database_dark.png.meta @@ -0,0 +1,69 @@ +fileFormatVersion: 2 +guid: 9f6bfa9d8aefb40dc92461c372c73b0f +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_database_dark.png +timeCreated: 1476203949 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_dynamic_links.png b/Assets/Editor Default Resources/Firebase/fb_dynamic_links.png new file mode 100644 index 0000000..a06148e Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_dynamic_links.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_dynamic_links.png.meta b/Assets/Editor Default Resources/Firebase/fb_dynamic_links.png.meta new file mode 100644 index 0000000..68f8fec --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_dynamic_links.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: df6f219c396f4ad9b5048bae6944cb8e +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_dynamic_links.png +timeCreated: 1473376335 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png b/Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png new file mode 100644 index 0000000..a35cb52 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png.meta new file mode 100644 index 0000000..bc0a359 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 9355a4671cfe4eef90879863318d1a4b +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_dynamic_links_dark.png +timeCreated: 1472679009 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_functions.png b/Assets/Editor Default Resources/Firebase/fb_functions.png new file mode 100644 index 0000000..776283e Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_functions.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_functions.png.meta b/Assets/Editor Default Resources/Firebase/fb_functions.png.meta new file mode 100644 index 0000000..1ab5de5 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_functions.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 953367231f9e3e22e70e5d1c91a40fe5 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions.png +timeCreated: 1473376335 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_functions_dark.png b/Assets/Editor Default Resources/Firebase/fb_functions_dark.png new file mode 100644 index 0000000..64741fc Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_functions_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_functions_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_functions_dark.png.meta new file mode 100644 index 0000000..0d2d0d9 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_functions_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: b5aa3e4f7432e1c5698417cc13f85271 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions_dark.png +timeCreated: 1472679008 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_invites.png b/Assets/Editor Default Resources/Firebase/fb_invites.png new file mode 100644 index 0000000..be9a9b9 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_invites.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_invites.png.meta b/Assets/Editor Default Resources/Firebase/fb_invites.png.meta new file mode 100644 index 0000000..1683e18 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_invites.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 741b269777f30488482ef4937b456b28 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_invites.png +timeCreated: 1473376335 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_invites_dark.png b/Assets/Editor Default Resources/Firebase/fb_invites_dark.png new file mode 100644 index 0000000..1bd1a90 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_invites_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_invites_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_invites_dark.png.meta new file mode 100644 index 0000000..f1c014c --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_invites_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: a734ad7414926404e90f8b5be37b7e23 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_invites_dark.png +timeCreated: 1472679009 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_storage.png b/Assets/Editor Default Resources/Firebase/fb_storage.png new file mode 100644 index 0000000..ef8e129 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_storage.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_storage.png.meta b/Assets/Editor Default Resources/Firebase/fb_storage.png.meta new file mode 100644 index 0000000..5d0baca --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_storage.png.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: 573eb851c99f948f4bf2de49322bfd53 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage.png +timeCreated: 1481243899 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/fb_storage_dark.png b/Assets/Editor Default Resources/Firebase/fb_storage_dark.png new file mode 100644 index 0000000..b18ac5e Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/fb_storage_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/fb_storage_dark.png.meta b/Assets/Editor Default Resources/Firebase/fb_storage_dark.png.meta new file mode 100644 index 0000000..6df54d6 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/fb_storage_dark.png.meta @@ -0,0 +1,78 @@ +fileFormatVersion: 2 +guid: 2955864b938094f579ea9902b65ac10c +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage_dark.png +timeCreated: 1481243898 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/firebase_lockup.png b/Assets/Editor Default Resources/Firebase/firebase_lockup.png new file mode 100644 index 0000000..26fdb09 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/firebase_lockup.png differ diff --git a/Assets/Editor Default Resources/Firebase/firebase_lockup.png.meta b/Assets/Editor Default Resources/Firebase/firebase_lockup.png.meta new file mode 100644 index 0000000..a6ff451 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/firebase_lockup.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 9f058f25e8e2d47cfb894951d4d7e48a +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup.png +timeCreated: 1473376336 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png b/Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png new file mode 100644 index 0000000..c02c0b7 Binary files /dev/null and b/Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png differ diff --git a/Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png.meta b/Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png.meta new file mode 100644 index 0000000..77d43d4 --- /dev/null +++ b/Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: b93330fc8ea08407dbc514b5101afa14 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup_dark.png +timeCreated: 1472601251 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager.meta b/Assets/ExternalDependencyManager.meta new file mode 100644 index 0000000..d736540 --- /dev/null +++ b/Assets/ExternalDependencyManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db1ff0e59262d467a8fd66c56e3180db +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor.meta b/Assets/ExternalDependencyManager/Editor.meta new file mode 100644 index 0000000..63637e6 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afcb2bcc44b144fde9ca888fe3bc2a0b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186.meta b/Assets/ExternalDependencyManager/Editor/1.2.186.meta new file mode 100644 index 0000000..e635b04 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1cc4a5944e743c843929679d158ef48a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll new file mode 100644 index 0000000..3003055 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll.meta new file mode 100644 index 0000000..26d1b45 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: e2d7ea0845de4cf984265d2a444b7aa4 +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll +- gvhp_targets-editor +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb new file mode 100644 index 0000000..493d3b2 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb.meta new file mode 100644 index 0000000..ac203f5 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: baf24db2bf904e729e7796721c09e8ad +labels: +- gvh +- gvh_rename_to_disable +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb +- gvhp_targets-editor +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll new file mode 100644 index 0000000..645d5cd Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll.meta new file mode 100644 index 0000000..05ebd81 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: fa49a85d4ba140a0ae21528ed12d174c +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll +- gvhp_targets-editor +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 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb new file mode 100644 index 0000000..c6eaef4 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb.meta new file mode 100644 index 0000000..86a7d87 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: d13c8602d5e14e43b0e92459754c4315 +labels: +- gvh +- gvh_rename_to_disable +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb +- gvhp_targets-editor +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll new file mode 100644 index 0000000..a4a6590 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll.meta new file mode 100644 index 0000000..0cc442e --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: d8bb10c56a0147bc855a6296778e025e +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll +- gvhp_targets-editor +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 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb new file mode 100644 index 0000000..884ce21 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb.meta new file mode 100644 index 0000000..bf635cb --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a695eb9f64fe49569a2db0c4246c877d +labels: +- gvh +- gvh_rename_to_disable +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb +- gvhp_targets-editor +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll new file mode 100644 index 0000000..8562ef3 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll.meta new file mode 100644 index 0000000..f325e22 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: 5980a684c61d42fbb6b74e2eb3477016 +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll +- gvhp_targets-editor +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 + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb new file mode 100644 index 0000000..ed8cc97 Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb differ diff --git a/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb.meta b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb.meta new file mode 100644 index 0000000..9d29d58 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9f56badf3ca84753b00163c3b632d4e5 +labels: +- gvh +- gvh_rename_to_disable +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb +- gvhp_targets-editor +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md new file mode 100644 index 0000000..e1294a3 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md @@ -0,0 +1,1430 @@ +# Version 1.2.186 - May 19, 2025 +* iOS Resolver - Set `validateReferences` to off by default, + to prevent errors when running without iOS Support installed. + Fixes #412 and #622 + +# Version 1.2.185 - Feb 3, 2025 +* Android Resolver - Reverse conditional checker for `packaging` keyword in maintemplate based on android gradle plugin version. Fixes #715 + +# Version 1.2.184 - Jan 28, 2025 +* Android Resolver - Update and resolve `packaging` keyword in maintemplate + based on android gradle plugin version. + Fixes #715 + +# Version 1.2.183 - Sep 18, 2024 +* Android Resolver - Handle package paths that don't include a version hash, + which is no longer present with Unity 6. Fixes #697 +* Android Resolver - Handle packages referenced using local file paths. + Fixes #701 + +# Version 1.2.182 - Aug 2, 2024 +* General - Check for gradle version instead of Unity version when determining + the template files to modify. + +# Version 1.2.181 - Jun 26, 2024 +* General - Disable `EditorMeasurement` reporting that relied on the + Measurement Protocol for Universal Analytics. + +# Version 1.2.180 - Jun 4, 2024 +* General - Fix project settings resetting on domain reload. + Fixes #524 + +# Version 1.2.179 - Feb 12, 2024 +* Android Resolver - Added logic to automatically turn on `mainTemplate.gradle` + for new projects, and prompt users to enable it on projects that have previously + had the resolver run. + +# Version 1.2.178 - Dec 20, 2023 +* Added [OpenUPM support](https://openupm.com/packages/com.google.external-dependency-manager/). + +# Version 1.2.177 - Aug 14, 2023 +* iOS Resolver - Added `/opt/homebrew/bin` to Cocoapod executable search path. + Fixes #627 + +# Version 1.2.176 - Apr 27, 2023 +* Android Resolver - Added two Android Resolver settings to determine whether + EDM4U injects custom local Maven repo path as a relative path or full path. + Fixes #537 +* Android Resolver - Inject Maven Repo to `settingTemplate.gradle` from + Unity 2022.2+ + Fixes #594 +* Android Resolver - Jetifier option is enabled by default now. +* Android Resolver - `Explode Aar` option applies to all cases, whether the + project will be exported or not. + Fixes #584 + Fixes #287 + +# Version 1.2.175 - Nov 16, 2022 +* General - Added tvOS podfile support to the iOS resolver. + +# Version 1.2.174 - Oct 06, 2022 +* General - Added tvOS support to the iOS resolver. +* General - Fixed #484 - Changed `EditorMeasurement` to use secure connection. +* Android Resolver - Fixed Android Resolver unable to resolve + `mainTemplate.gradle` in Unity `2022.2+` or `2023.1+`. + +# Version 1.2.173 - Sep 28, 2022 +* General - Added tvOS library support to the export unity package scripts. + +# Version 1.2.172 - Jun 23, 2022 +* iOS Resolver - Stop forcing `ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` to `YES`, + which seems to cause problem for some when submitting apps. See #526 for more + information. + +# Version 1.2.171 - May 11, 2022 +* iOS Resolver - Change `Enable Swift Framework Support Workaround` setting to + be `ON` by default since more pods are using Swift Framework now. + +# Version 1.2.170 - Apr 4, 2022 +* Android Resolver - Fixes #498 - Fix the path separator of the Maven repo + injected to `mainTemplate.gradle`. +* iOS Resolver - Fixes #470 - Switch default Cocoapods master repo from Github + to CDN. +* iOS Resolver - `Link Framework Statically` setting is now default to `true`. + That is, `use_frameworks! :linkage => static` will be added to `Podfile` by + default instead of `use_frameworks!`. This can be changed in iOS Resolver + settings. This fixes odd behaviors when pods include static libraries, ex. + Firebase Analytics. +* iOS Resolver - Added a workaround when app crashes on launch due to + `Library not loaded: @rpath/libswiftCore.dylib` when some pods includes Swift + framework. This is turned `OFF` by default and can be changed in iOS Resolver + settings. + +# Version 1.2.169 - Jan 20, 2022 +* General - Fixes #425 - Change to save `GvhProjectSettings.xml` without + Unicode byte order mark (BoM). +* Android Resolver - Remove reference to `jcenter()` +* iOS Resolver - Force setting `LANG` when executing Cocoapods in shell mode on + Mac. + +# Version 1.2.168 - Dec 9, 2021 +* All - Fixes #472 by removing the use of `System.Diagnostics.Debug.Assert` +* All - Fixed #477 by properly enabling EDM4U libraries for Unity 2021.2+ when + the package is installed through `.tgz` + +# Version 1.2.167 - Oct 6, 2021 +* All - Moved versioned `.dll` in EDM4U to a versioned folder and remove their + version postfix in their filename. For instance, `IOSResolver.dll` will be + placed at `ExternalDependencyManager/Editor/1.2.167/Google.IOSResolver.dll`. +* Android Resolver - Fixed #243 by only using the highest version in + `mainTemplate.gradle` when duplicated dependencies are presented. +* Android Resolver - Added supports to x86_64 to ABI list for Android apps on + Chrome OS. + +# Version 1.2.166 - Jun 30, 2021 +* All - Fixed #440 and fixed #447 by specifying the parameter type while calling + `GetApplicationIdentifier()` Unity API using reflection, due to a new + overloaded method introduced in Unity 2021.2. +* Android Resolver - Fixed #442 by patching `Dependency.IsGreater()` when the + version strings end '+'. + +# Version 1.2.165 - Apr 28, 2021 +## Bug Fixes +* Version Handler - Fixed #431 by replacing the use of `HttpUtility.UrlEncode()` + which causes NullReferenceException in certain version of Unity. +* Android Resolver - Check that androidSdkRootPath directory exists before using + as sdkPath. +* Android Resolver - Fixed Android Resolver integration tests with Unity + 2019.3+. + +# Version 1.2.164 - Feb 4, 2021 +## New Features +* Android Resolver - Added support for Android packages with classifier in their + namespaces. +* iOS Resolver - Added new settings in iOS Resolver to configure generated + Podfile. +* iOS Resolver - Added a new attribute `addToAllTargets` in Dependencies.xml. + +## Bug Fixes +* iOS Resolver - Fixed XML parsing for `bitcodeEnabled` attribute in + Dependencies.xml. + +# Version 1.2.163 - Dec 15, 2020 +## Bug Fixes +* Version Handler - Fixed measurement reporting + +# Version 1.2.162 - Nov 19, 2020 +## Bug Fixes +* Version Handler - Improved #413 by preventing Version Handler from running + from static constructor when it is disabled. +* Package Manager Resolver - Remove GPR + +# Version 1.2.161 - Oct 12, 2020 +## Bug Fixes +* Android Resolver - Fixed the issue that Android Resolver does not resolve + again before build in Unity 2020 if it failed to resolve previously. + +# Version 1.2.160 - Sep 30, 2020 +## Bug Fixes +* Android Resolver - Fixed a regression that gradleResolver can be null until + Initialize() is called. +* Android Resolver - Fixed a regression that Android Resolver failed in Unity + 2019.3+ due to `gradleTemplate.properties` not enabled when + `mainTemplate.gradle` is not enabled at all. + +# Version 1.2.159 - Sep 11, 2020 +## Bug Fixes +* Android Resolver - Fixed #322 where the Unity editor will lose its target SDK + setting between Unity restarts if `>28` is selected in 2019. This is due to + Unity AndroidSdkVersions enum does not contain values above 28. +* Android Resolver - Fixed #360 where building Android app with Untiy 2019.3+ + may fail due to Jetifier and AndroidX not enabled properly in generated + Gradle project. This fix requires the user to enable + `Custom Gradle Properties Template` found under + `Player Settings > Settings for Android > Publishing Settings`. + +# Version 1.2.158 - Sep 3, 2020 +## Bug Fixes +* Version Handler: Fixed editor freeze when `-executeMethod` is used in + non-batch mode. +* Android Resolver: Normalized file paths when generating local Maven repo + since the path may contains a mix of forward and backward slash on Windows. +* Export Unity Package: Fixed generation of .unitypackage with tarfile on + Windows. + +# Version 1.2.157 - Aug 6, 2020 +## Bug Fixes +* Android Resolver: Delay initialization until active build target is Android + and the editor is not in play mode. +* iOS Resolver: Delay initialization until active build target is iOS + and the editor is not in play mode. +* Export Unity Package: Workaround directory creation racy if multiple export + operations are spawned at the same time. + +# Version 1.2.156 - June 10, 2020 +## Bug Fixes +* Android Resolver: Fixed that the generated local repo assets contains + redundent labels which are causing Version Handler to failed while + uninstalling packages. +* Android Resolver: Fixed that the repo url injected into mainTemplate.gradle + is incorrect when Unity is configured to export gradle project. +* Android Resolver: Limited to only create local Maven repo when the source + repo contains ".srcaar" file. + +## Changes +* All: Described EDM4U analytics data usage in readme. + +# Version 1.2.155 - May 14, 2020 +## Bug Fixes +* All: Fixed compiler error when build with Unity 5.4 or below due to the + usage of Rect.zero. +* All: Ignore cases when checking command line arguments. + +# Version 1.2.154 - May 14, 2020 +## Bug Fixes +* All: Make each MultiSelectWindow for different purposes to have its own + unique window. + +## Changes +* All: Replace all dialog with DialogWindow which is implemented from + EditorWindow. +* Package Manager Resolver: Clarify how manifest.json will be changed in Package + Manager Resolver window. + +# Version 1.2.153 - Apr 24, 2020 +## Bug Fixes +* Android Resolver: Fixed an exception when repainting the Android resolution + window in Unity 2019.3.x. + +# Version 1.2.152 - Apr 17, 2020 +## Bug Fixes +* Version Handler: Fixed exception when waiting for enabled editor DLLs to + load. +* Android Resolver: Fixed regression when using a Custom Gradle Template + on Windows. + +# Version 1.2.151 - Apr 16, 2020 +## Bug Fixes +* Version Handler: When waiting for newly enabled editor DLLs to load, ignore + all DLLs that do not have a file-system location. +* Android Resolver: Fixed resolution when using a Custom Gradle Template with + libraries stored in a local maven repository distributed with a plugin + installed with the Unity Package Manager. + +# Version 1.2.150 - Apr 9, 2020 +## Bug Fixes +* All: The new packaging script when run on MacOS was generating a + .unitypackage archive that could not be read by Unity on Windows. + This release simply repackages the plugin with tar/gzip to fix the problem. + +# Version 1.2.149 - Apr 8, 2020 +## Bug Fixes +* Package Manager Resolver: Fixed spurious error message when resuming + migration after installing a UPM package. + +# Version 1.2.148 - Apr 8, 2020 +## Bug Fixes +* Package Manager Resolver: Fixed an exception when resuming migration + after installing a UPM package. + +# Version 1.2.147 - Apr 8, 2020 +## Bug Fixes +* Version Handler: Fixed alias traversal bug which caused problems when + migrating from installed .unitypackage files to UPM packages. + +# Version 1.2.146 - Apr 8, 2020 +## Bug Fixes +* Version Handler: Fixed exception in manifest parsing when a manifest is + detected with no aliases. + +# Version 1.2.145 - Apr 2, 2020 +## New Features +* Package Manager Resolver: Added a method to migrate Version Handler + managed packages installed via `.unitypackage` to Unity Package Manager + packages. This is initially used to migrate the External Dependency Manager + to UPM. + +## Changes +* All: Verbose logging is now no longer automatically enabled in batch mode + across all components. Instead logging can be configured using each + component's verbose logging setting or by using the `-gvh_log_debug` command + line flag when starting Unity. +* Version Handler: Sped up version handler updates when the app domain isn't + reloaded. + +## Bug Fixes +* Version Handler: Fixed the display of the obsolete files clean up dialog + when the asset database refreshes. +* Version Handler: Improved reliability of callback from + the VersionHandler.UpdateCompleteMethods event when an asset database + refresh occurs. +* Version Handler: Fixed duplicate exportPath labels when 'Assets/' is the + root of paths assigned to files. +* Version Handler: Handle empty lines in manifest files. + +# Version 1.2.144 - Mar 23, 2020 +## Changed +* iOS Resolver: Removed the ability to configure the Xcode target a Cocoapod + is added to. + +## Bug Fixes +* iOS Resolver: Reverted support for adding Cocoapods to multiple targets as + it caused a regression (exception thrown during post-build step) in some + versions of Unity. + +# Version 1.2.143 - Mar 20, 2020 +## Bug Fixes +* Android Resolver: Fixed caching of resolution state which was causing + the resolver to always run when no dependencies had changed. + +# Version 1.2.142 - Mar 19, 2020 +## Changes +* Package Manager Resolver: Enabled auto-add by default. + +# Version 1.2.141 - Mar 19, 2020 +## Bug Fixes +* Fixed a bug when retrieving project settings. If a plugin was configured + to fetch project settings, if a setting was fetched (e.g "foo") and this + setting existed in the system settings but not the project settings the + system value would override the default value leading to unexpected + behavior. +* Fixed a warning when caching web request classes in Unity 5.6. + +# Version 1.2.140 - Mar 19, 2020 +## Bug Fixes +* Fixed measurement reporting in Unity 5.x. +* Version Handler: Fixed NullReferenceException when an asset doesn't have + an AssetImporter. + +# Version 1.2.139 - Mar 18, 2020 +## Changed +* Added documentation to the built plugin. + +# Version 1.2.138 - Mar 17, 2020 +## New Features +* Package Manager Resolver: Added the Package Manager Resolver + component that allows developers to easily boostrap Unity Package Manager + (UPM) registry addition using unitypackage plugins. +* Version Handler: Added a window that allows plugins to managed by the + Version Handler to be uninstalled. +* Version Handler: Added support for displaying installed plugins. +* Version Handler: Added support for moving files in plugins to their install + locations (if the plugin has been configured to support this). +* iOS Resolver: Added the ability to configure the Xcode target a Cocoapod is + added to. + +## Bug Fixes +* Fixed upgrade from version 1.2.137 and below after the plugin rename to + EDM4U broke the upgrade process. +* Android Resolver: Worked around PlayerSettings.Android.targetSdkVersion + returning empty names for some values in 2019.x. +* Version Handler: Fixed the display of the obsolete files clean up window. +* Version Handler: Fixed managed file check when assets are modified in the + project after plugin import. + +# Version 1.2.137 - Mar 6, 2020 +## Changed +* Renamed package to External Package Manager for Unity (EDM4U). + We changed this to reflect what this plugin is doing today which is far more + than the original scope which just consisted of importing jar files from the + Android SDK maven repository. + Scripts that used to pull `play-services-resolver*.unitypackage` will now have + to request `external-dependency-manager*.unitypackage` instead. + We'll still be shipping a `play-services-resolver*_manifest.txt` file to + handle upgrading from older versions of the plugin. + +## New Features +* All Components: Added reporting of usage so that we can remotely detect + errors and target improvements. +* Android Resolver: Added support for *Dependencies.xml files in Unity Package + Manager packages. +* iOS Resolver: Added support for *Dependencies.xml files in Unity Package + Manager packages. + +## Bug Fixes +* Version Handler: Disabled attempts to disable asset metadata modification + when assets are in a Unity Package Manager managed package. + +# Version 1.2.136 - Feb 19, 2019 +## Bug Fixes +* Android Resolver: Fixed OpenJDK path discovery in Unity 2019.3.1. + +# Version 1.2.135 - Dec 5, 2019 +## Bug Fixes +* All Components: Fixed stack overflow when loading project settings. + +# Version 1.2.134 - Dec 4, 2019 +## Bug Fixes +* All Components: Fixed an issue which caused project settings to be cleared + when running in batch mode. + +# Version 1.2.133 - Nov 18, 2019 +## Bug Fixes +* All Components: Failure to save project settings will now report an error + to the log rather than throwing an exception. + +# Version 1.2.132 - Nov 11, 2019 +## Bug Fixes +* Android Resolver: Worked around expansion of DIR_UNITYPROJECT on Windows + breaking Gradle builds when used as part of a file URI. +* Android Resolver: mainTemplate.gradle is only written if it needs to be + modified. + +# Version 1.2.131 - Oct 29, 2019 +## Bug Fixes +* Version Handler: Improved execution of events on the main thread in batch + mode. +* Version Handler: Improved log level configuration at startup. +* Version Handler: Improved performance of class lookup in deferred method + calls. +* Version Handler: Fixed rename to enable / disable for editor assets. +* iOS Resolver: Improved log level configuration at startup. +* Android Resolver: Improved local maven repo path reference in + mainTemplate.gradle using DIR_UNITYPROJECT. DIR_UNITYPROJECT by Unity + to point to the local filesystem path of the Unity project when Unity + generates the Gradle project. + +# Version 1.2.130 - Oct 23, 2019 +## New Features +* iOS Resolver: Added support for modifying the Podfile before `pod install` + is executed. + +## Bug Fixes +* Version Handler: Fixed invalid classname error when calling + `VersionHandler.UpdateVersionedAssets()`. + +# Version 1.2.129 - Oct 2, 2019 +## Bug Fixes +* iOS Resolver: Changed Cocoapod integration in Unity 2019.3+ to + only add Pods to the UnityFramework target. + +# Version 1.2.128 - Oct 1, 2019 +## Bug Fixes +* iOS Resolver: Fixed Cocoapod project integration mode with Unity + 2019.3+. + +# Version 1.2.127 - Sep 30, 2019 +## Changes +* Android Resolver: All Android Resolver settings File paths are now + serialized with POSIX directory separators. + +# Version 1.2.126 - Sep 27, 2019 +## Changes +* Android Resolver: File paths are now serialized with POSIX directory + separators. +## Bug Fixes +* Android Resolver: Fixed resolution when the parent directory of a Unity + project contains a Gradle project (i.e `settings.gradle` file). + +# Version 1.2.125 - Sep 23, 2019 +## Bug Fixes +* All components: Silenced a warning about not being able to set the console + encoding to UTF8. +* Android Resolver: Worked around broken AndroidSDKTools class in some + versions of Unity. +* iOS Resolver: Fixed iOS target SDK version check +* Version Handler: Changed clean up obsolete files window so that it doesn't + exceed the screen size. + +# Version 1.2.124 - Jul 28, 2019 +## Bug Fixes +* All components: Fixed regression with source control integration when using + Unity 2019.1+. + +# Version 1.2.123 - Jul 23, 2019 +## New Features +* All components: Source control integration for project settings. +## Changes +* Android Resolver: Removed AAR cache as it now makes little difference to + incremental resolution performance. +* Android Resolver: Improved embedded resource management so that embedded + resources should upgrade when the plugin is updated without restarting + the Unity editor. +## Bug Fixes +* Version Handler: Fixed InvokeMethod() and InvokeStaticMethod() when calling + methods that have interface typed arguments. + +# Version 1.2.122 - Jul 2, 2019 +## Bug Fixes +* iOS Resolver: Worked around Unity not loading the iOS Resolver DLL as it + referenced the Xcode extension in a public interface. The iOS Resolver + DLL still references the Xcode extension internally and just handles + missing type exceptions dynamically. + +# Version 1.2.121 - Jun 27, 2019 +## Bug Fixes +* Android Resolver: Fixed warning about missing Packages folder when loading + XML dependencies files in versions of Unity without the package manager. +* Android Resolver: Fixed resolution window progress bar exceeding 100%. +* Android Resolver: If AndroidX is detected in the set of resolved libraries, + the user will be prompted to enable the Jetifier. +* Android Resolver: Improved text splitting in text area windows. +* iOS Resolver: Added support for Unity's breaking changes to the Xcode API + in 2019.3.+. Cocoapods are now added to build targets, Unity-iPhone and + UnityFramework in Unity 2019.3+. + +# Version 1.2.120 - Jun 26, 2019 +## New Features +* Android Resolver: Added support for loading *Dependencies.xml files from + Unity Package Manager packages. +* Android Resolver: Resolution window is now closed if resolution runs as + a pre-build step. +* iOS Resolver: Added support for loading *Dependencies.xml files from + Unity Package Manager packages. +## Bug Fixes +* Android Resolver: Fixed generation of relative repo paths when using + mainTemplate.gradle resolver. +* Android Resolver: Fixed copy of .srcaar to .aar files in repos embedded in a + project when a project path has characters (e.g whitespace) that are escaped + during conversion to URIs. +* Android Resolver: Fixed auto-resolution always running if the Android SDK + is managed by Unity Hub. + +# Version 1.2.119 - Jun 19, 2019 +## Bug Fixes +* Android Resolver: Fixed error reported when using Jetifier integration + in Unity 2018+ if the target SDK is set to "highest installed". + +# Version 1.2.118 - Jun 18, 2019 +## New Features +* Android Resolver: Added initial + [Jetifier](https://developer.android.com/studio/command-line/jetifier) + integration which simplifies + [migration](ttps://developer.android.com/jetpack/androidx/migrate) + to Jetpack ([AndroidX](https://developer.android.com/jetpack/androidx)) + libraries in cases where all dependencies are managed by the Android + Resolver. + This can be enabled via the `Use Jetifier` option in the + `Assets > Play Services Resolver > Android Resolver > Settings` menu. + Caveats: + - If your project contains legacy Android Support Library .jar and .aar + files, these files will need to be removed and replaced with references to + artifacts on Maven via `*Dependencies.xml` files so that the Jetifier + can map them to Jetpack (AndroidX) libraries. + For example, remove the file `support-v4-27.0.2.jar` and replace it with + `` in a + `*Dependencies.xml` file. + - If your project contains .jar or .aar files that use the legacy Android + Support Libraries, these will need to be moved into a local Maven repo + [See this guide](https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html) + and then these files should be removed from your Unity project and instead + referenced via `*Dependencies.xml` files so that the Jetifier can + patch them to reference the Jetpack lirbaries. + +## Bug Fixes +* Android Resolver: Disabled version locking of com.android.support:multidex + does not use the same versioning scheme as other legacy Android support + libraries. +* Version Handler: Made Google.VersionHandler.dll's asset GUID stable across + releases. This faciliates error-free import into projects where + Google.VersionHandler.dll is moved from the default install location. + +# Version 1.2.117 - Jun 12, 2019 +## Bug Fixes +* Android Resolver: Fix copying of .srcaar to .aar files for + mainTemplate.gradle resolution. PluginImporter configuration was previously + not being applied to .aar files unless the Unity project was saved. + +# Version 1.2.116 - Jun 7, 2019 +## Bug Fixes +* Android Resolver: Fixed resolution of Android dependencies without version + specifiers. +* Android Resolver: Fixed Maven repo not found warning in Android Resolver. +* Android Resolver: Fixed Android Player directory not found exception in + Unity 2019.x when the Android Player isn't installed. + +# Version 1.2.115 - May 28, 2019 +## Bug Fixes +* Android Resolver: Fixed exception due to Unity 2019.3.0a4 removing + x86 from the set of supported ABIs. + +# Version 1.2.114 - May 27, 2019 +## New Features +* Android Resolver: Added support for ABI stripping when using + mainTemplate.gradle. This only works with AARs stored in repos + on the local filesystem. + +# Version 1.2.113 - May 24, 2019 +## New Features +* Android Resolver: If local repos are moved, the plugin will search the + project for matching directories in an attempt to correct the error. +* Version Handler: Files can be now targeted to multiple build targets + using multiple "gvh_" asset labels. +## Bug Fixes +* Android Resolver: "implementation" or "compile" are now added correctly + to mainTemplate.gradle in Unity versions prior to 2019. + +# Version 1.2.112 - May 22, 2019 +## New Features +* Android Resolver: Added option to disable addition of dependencies to + mainTemplate.gradle. + See `Assets > Play Services Resolver > Android Resolver > Settings`. +* Android Resolver: Made paths to local maven repositories in + mainTemplate.gradle relative to the Unity project when a project is not + being exported. +## Bug Fixes +* Android Resolver: Fixed builds with mainTemplate.gradle integration in + Unity 2019. +* Android Resolver: Changed dependency inclusion in mainTemplate.gradle to + use "implementation" or "compile" depending upon the version of Gradle + included with Unity. +* Android Resolver: Gracefully handled exceptions if the console encoding + can't be modified. +* Android Resolver: Now gracefully fails if the AndroidPlayer directory + can't be found. + +# Version 1.2.111 - May 9, 2019 +## Bug Fixes +* Version Handler: Fixed invocation of methods with named arguments. +* Version Handler: Fixed occasional hang when the editor is compiling + while activating plugins. + +# Version 1.2.110 - May 7, 2019 +## Bug Fixes +* Android Resolver: Fixed inclusion of some srcaar artifacts in builds with + Gradle builds when using mainTemplate.gradle. + +# Version 1.2.109 - May 6, 2019 +## New Features: +* Added links to documentation from menu. +* Android Resolver: Added option to auto-resolve Android libraries on build. +* Android Resolver: Added support for packaging specs of Android libraries. +* Android Resolver: Pop up a window when displaying Android dependencies. + +## Bug Fixes +* Android Resolver: Support for Unity 2019 Android SDK and JDK install locations +* Android Resolver: e-enable AAR explosion if internal builds are enabled. +* Android Resolver: Gracefully handle exceptions on file deletion. +* Android Resolver: Fixed Android Resolver log spam on load. +* Android Resolver: Fixed save of Android Resolver PromptBeforeAutoResolution + setting. +* Android Resolver: Fixed AAR processing failure when an AAR without + classes.jar is found. +* Android Resolver: Removed use of EditorUtility.DisplayProgressBar which + was occasionally left displayed when resolution had completed. +* Version Handler: Fixed asset rename to disable when a disabled file exists. + +# Version 1.2.108 - May 3, 2019 +## Bug Fixes: +* Version Handler: Fixed occasional hang on startup. + +# Version 1.2.107 - May 3, 2019 +## New Features: +* Version Handler: Added support for enabling / disabling assets that do not + support the PluginImporter, based upon build target selection. +* Android Resolver: Added support for the global specification of maven repos. +* iOS Resolver: Added support for the global specification of Cocoapod sources. + +# Version 1.2.106 - May 1, 2019 +## New Features +* iOS Resolver: Added support for development pods in Xcode project integration + mode. +* iOS Resolver: Added support for source pods with resources in Xcode project + integration mode. + +# Version 1.2.105 - Apr 30, 2019 +## Bug fixes +* Android Resolver: Fixed reference to Java tool path in logs. +* Android and iOS Resolvers: Changed command line execution to emit a warning + rather than throwing an exception and failing, when it is not possible to + change the console input and output encoding to UTF-8. +* Android Resolver: Added menu option and API to delete resolved libraries. +* Android Resolver: Added menu option and API to log the repos and libraries + currently included in the project. +* Android Resolver: If Plugins/Android/mainTemplate.gradle file is present and + Gradle is selected as the build type, resolution will simply patch the file + with Android dependencies specified by plugins in the project. + +# Version 1.2.104 - Apr 10, 2019 +## Bug Fixes +* Android Resolver: Changed Android ABI selection method from using whitelisted + Unity versions to type availability. This fixes an exception on resolution + in some versions of Unity 2017.4. + +# Version 1.2.103 - Apr 2, 2019 +## Bug Fixes +* Android Resolver: Whitelisted Unity 2017.4 and above with ARM64 support. +* Android Resolver: Fixed Java version check to work with Java SE 12 and above. + +# Version 1.2.102 - Feb 13, 2019 +## Bug Fixes +* Android Resolver: Fixed the text overflow on the Android Resolver + prompt before initial run to fit inside the buttons for + smaller screens. + +# Version 1.2.101 - Feb 12, 2019 +## New Features +* Android Resolver: Prompt the user before the resolver runs for the + first time and allow the user to elect to disable from the prompt. +* Android Resolver: Change popup warning when resolver is disabled + to be a console warning. + +# Version 1.2.100 - Jan 25, 2019 +## Bug Fixes +* Android Resolver: Fixed AAR processing sometimes failing on Windows + due to file permissions. + +# Version 1.2.99 - Jan 23, 2019 +## Bug Fixes +* Android Resolver: Improved performance of project property polling. +* Version Handler: Fixed callback of VersionHandler.UpdateCompleteMethods + when the update process is complete. + +# Version 1.2.98 - Jan 9, 2019 +## New Features +* iOS Resolver: Pod declaration properties can now be set via XML pod + references. For example, this can enable pods for a subset of build + configurations. +## Bug Fixes +* iOS Resolver: Fixed incremental builds after local pods support caused + regression in 1.2.96. + +# Version 1.2.97 - Dec 17, 2018 +## Bug Fixes +* Android Resolver: Reduced memory allocation for logic that monitors build + settings when auto-resolution is enabled. If auto-resolution is disabled, + almost all build settings are no longer polled for changes. + +# Version 1.2.96 - Dec 17, 2018 +## Bug Fixes +* Android Resolver: Fixed repacking of AARs to exclude .meta files. +* Android Resolver: Only perform auto-resolution on the first scene while + building. +* Android Resolver: Fixed parsing of version ranges that include whitespace. +* iOS Resolver: Added support for local development pods. +* Version Handler: Fixed Version Handler failing to rename some files. + +# Version 1.2.95 - Oct 23, 2018 +## Bug Fixes: +* Android Resolver: Fixed auto-resolution running in a loop in some scenarios. + +# Version 1.2.94 - Oct 22, 2018 +## Bug Fixes +* iOS Resolver: Added support for PODS_TARGET_SRCROOT in source Cocoapods. + +# Version 1.2.93 - Oct 22, 2018 +## Bug Fixes +* Android Resolver: Fixed removal of Android libraries on auto-resolution when + `*Dependencies.xml` files are deleted. + +# Version 1.2.92 - Oct 2, 2018 +## Bug Fixes +* Android Resolver: Worked around auto-resolution hang on Windows if + resolution starts before compilation is finished. + +# Version 1.2.91 - Sep 27, 2018 +## Bug Fixes +* Android Resolver: Fixed Android Resolution when the selected build target + isn't Android. +* Added C# assembly symbols the plugin to simplify debugging bug reports. + +# Version 1.2.90 - Sep 21, 2018 +## Bug Fixes +* Android Resolver: Fixed transitive dependency selection of version locked + packages. + +# Version 1.2.89 - Aug 31, 2018 +## Bug Fixes +* Fixed FileLoadException in ResolveUnityEditoriOSXcodeExtension an assembly + can't be loaded. + +# Version 1.2.88 - Aug 29, 2018 +## Changed +* Improved reporting of resolution attempts and conflicts found in the Android + Resolver. +## Bug Fixes +* iOS Resolver now correctly handles sample code in CocoaPods. Previously it + would add all sample code to the project when using project level + integration. +* Android Resolver now correctly handles Gradle conflict resolution when the + resolution results in a package that is compatible with all requested + dependencies. + +# Version 1.2.87 - Aug 23, 2018 +## Bug Fixes +* Fixed Android Resolver "Processing AARs" dialog getting stuck in Unity 5.6. + +# Version 1.2.86 - Aug 22, 2018 +## Bug Fixes +* Fixed Android Resolver exception in OnPostProcessScene() when the Android + platform isn't selected. + +# Version 1.2.85 - Aug 17, 2018 +## Changes +* Added support for synchronous resolution in the Android Resolver. + PlayServicesResolver.ResolveSync() now performs resolution synchronously. +* Auto-resolution in the Android Resolver now results in synchronous resolution + of Android dependencies before the Android application build starts via + UnityEditor.Callbacks.PostProcessSceneAttribute. + +# Version 1.2.84 - Aug 16, 2018 +## Bug Fixes +* Fixed Android Resolver crash when the AndroidResolverDependencies.xml + file can't be written. +* Reduced log spam when a conflicting Android library is pinned to a + specific version. + +# Version 1.2.83 - Aug 15, 2018 +## Bug Fixes +* Fixed Android Resolver failures due to an in-accessible AAR / JAR explode + cache file. If the cache can't be read / written the resolver now continues + with reduced performance following recompilation / DLL reloads. +* Fixed incorrect version number in plugin manifest on install. + This was a minor issue since the version handler rewrote the metadata + after installation. + +# Version 1.2.82 - Aug 14, 2018 +## Changed +* Added support for alphanumeric versions in the Android Resolver. + +## Bug Fixes +* Fixed Android Resolver selection of latest duplicated library. +* Fixed Android Resolver conflict resolution when version locked and non-version + locked dependencies are specified. +* Fixed Android Resolver conflict resolution when non-existent artifacts are + referenced. + +# Version 1.2.81 - Aug 9, 2018 +## Bug Fixes +* Fixed editor error that would occur when when + `PlayerSettings.Android.targetArchitectures` was set to + `AndroidArchitecture.All`. + +# Version 1.2.80 - Jul 24, 2018 +## Bug Fixes +* Fixed project level settings incorrectly falling back to system wide settings + when default property values were set. + +# Version 1.2.79 - Jul 23, 2018 +## Bug Fixes +* Fixed AndroidManifest.xml patching on Android Resolver load in Unity 2018.x. + +# Version 1.2.78 - Jul 19, 2018 +## Changed +* Added support for overriding conflicting dependencies. + +# Version 1.2.77 - Jul 19, 2018 +## Changed +* Android Resolver now supports Unity's 2018 ABI filter (i.e arm64-v8a). +* Reduced Android Resolver build option polling frequency. +* Disabled Android Resolver auto-resolution in batch mode. Users now need + to explicitly kick off resolution through the API. +* All Android Resolver and Version Handler dialogs are now disabled in batch + mode. +* Verbose logging for all plugins is now enabled by default in batch mode. +* Version Handler bootstrapper has been improved to no longer call + UpdateComplete multiple times. However, since Unity can still reload the + app domain after plugins have been enabled, users still need to store their + plugin state to persistent storage to handle reloads. + +## Bug Fixes +* Android Resolver no longer incorrectly adds MANIFEST.MF files to AARs. +* Android Resolver auto-resolution jobs are now unscheduled when an explicit + resolve job is started. + +# Version 1.2.76 - Jul 16, 2018 +## Bug Fixes +* Fixed variable replacement in AndroidManifest.xml files in the Android + Resolver. + Version 1.2.75 introduced a regression which caused all variable replacement + to replace the *entire* property value rather than the component of the + property that referenced a variable. For example, + given "applicationId = com.my.app", "${applicationId}.foo" would be + incorrectly expanded as "com.my.app" rather than "com.my.app.foo". This + resulted in numerous issues for Android builds where content provider + initialization would fail and services may not start. + +## Changed +* Gradle prebuild experimental feature has been removed from the Android + Resolver. The feature has been broken for some time and added around 8MB + to the plugin size. +* Added better support for execution of plugin components in batch mode. + In batch mode UnityEditor.update is sometimes never called - like when a + single method is executed - so the new job scheduler will execute all jobs + synchronously from the main thread. + +# Version 1.2.75 - Jun 20, 2018 +## New Features +* Android Resolver now monitors the Android SDK path when + auto-resolution is enabled and triggers resolution when the path is + modified. + +## Changed +* Android auto-resolution is now delayed by 3 seconds when the following build + settings are changed: + - Target ABI. + - Gradle build vs. internal build. + - Project export. +* Added a progress bar display when AARs are being processed during Android + resolution. + +## Bug Fixes +* Fixed incorrect Android package version selection when a mix of + version-locked and non-version-locked packages are specified. +* Fixed non-deterministic Android package version selection to select + the highest version of a specified package rather than the last + package specification passed to the Gradle resolution script. + +# Version 1.2.74 - Jun 19, 2018 +## New Features +* Added workaround for broken AndroidManifest.xml variable replacement in + Unity 2018.x. By default ${applicationId} variables will be replaced by + the bundle ID in the Plugins/Android/AndroidManifest.xml file. The + behavior can be disabled via the Android Resolver settings menu. + +# Version 1.2.73 - May 30, 2018 +## Bug Fixes +* Fixed spurious warning message about missing Android plugins directory on + Windows. + +# Version 1.2.72 - May 23, 2018 +## Bug Fixes +* Fixed spurious warning message about missing Android plugins directory. + +# Version 1.2.71 - May 10, 2018 +## Bug Fixes +* Fixed resolution of Android dependencies when the `Assets/Plugins/Android` + directory is named in a different case e.g `Assets/plugins/Android`. + +# Version 1.2.70 - May 7, 2018 +## Bug Fixes +* Fixed bitcode flag being ignored for iOS pods. + +# Version 1.2.69 - May 7, 2018 +## Bug Fixes +* Fixed escaping of local repository paths in Android Resolver. + +# Version 1.2.68 - May 3, 2018 +## Changes +* Added support for granular builds of Google Play Services. + +# Version 1.2.67 - May 1, 2018 +## Changes +* Improved support for iOS source-only pods in Unity 5.5 and below. + +# Version 1.2.66 - April 27, 2018 +## Bug Fixes +* Fixed Version Handler renaming of Linux libraries with hyphens in filenames. + Previously, libraries named Foo-1.2.3.so were not being renamed to + libFoo-1.2.3.so on Linux which could break native library loading on some + versions of Unity. + +# Version 1.2.65 - April 26, 2018 +## Bug Fixes +* Fix CocoaPods casing in logs and comments. + +# Version 1.2.64 - Mar 16, 2018 +## Bug Fixes +* Fixed bug in download_artifacts.gradle (used by Android Resolver) which + reported a failure if required artifacts already exist. + +# Version 1.2.63 - Mar 15, 2018 +## Bug Fixes +* Fixed iOS Resolver include search paths taking precedence over system headers + when using project level resolution. +* Fixed iOS Resolver includes relative to library root, when using project level + resolution. + +# Version 1.2.62 - Mar 12, 2018 +## Changes +* Improved error reporting when a file can't be moved to trash by the + Version Handler. +## Bug Fixes +* Fixed Android Resolver throwing NullReferenceException when the Android SDK + path isn't set. +* Fixed Version Handler renaming files with underscores if the + "Rename to Canonical Filenames" setting is enabled. + +# Version 1.2.61 - Jan 22, 2018 +## Bug Fixes +* Fixed Android Resolver reporting non-existent conflicting dependencies when + Gradle build system is enabled. + +# Version 1.2.60 - Jan 12, 2018 +## Changes +* Added support for Maven / Ivy version specifications for Android packages. +* Added support for Android SNAPSHOT packages. + +## Bug Fixes +* Fixed Openjdk version check. +* Fixed non-deterministic Android package resolution when two packages contain + an artifact with the same name. + +# Version 1.2.59 - Oct 19, 2017 +## Bug Fixes +* Fixed execution of Android Gradle resolution script when it's located + in a path with whitespace. + +# Version 1.2.58 - Oct 19, 2017 +## Changes +* Removed legacy resolution method from Android Resolver. + It is now only possible to use the Gradle or Gradle prebuild resolution + methods. + +# Version 1.2.57 - Oct 18, 2017 +## Bug Fixes +* Updated Gradle wrapper to 4.2.1 to fix issues using Gradle with the + latest Openjdk. +* Android Gradle resolution now also uses gradle.properties to pass + parameters to Gradle in an attempt to workaround problems with + command line argument parsing on Windows 10. + +# Version 1.2.56 - Oct 12, 2017 +## Bug Fixes +* Fixed Gradle artifact download with non-version locked artifacts. +* Changed iOS resolver to only load dependencies at build time. + +# Version 1.2.55 - Oct 4, 2017 +## Bug Fixes +* Force Android Resolution when the "Install Android Packages" setting changes. + +# Version 1.2.54 - Oct 4, 2017 +## Bug Fixes +* Fixed execution of command line tools on Windows when the path to the tool + contains a single quote (apostrophe). In this case we fallback to executing + the tool via the system shell. + +# Version 1.2.53 - Oct 2, 2017 +## New Features +* Changed Android Resolver "resolution complete" dialog so that it now displays + failures. +* Android Resolver now detects conflicting libraries that it does not manage + warning the user if they're newer than the managed libraries and prompting + the user to clean them up if they're older or at the same version. + +## Bug Fixes +* Improved Android Resolver auto-resolution speed. +* Fixed bug in the Gradle Android Resolver which would result in resolution + succeeding when some dependencies are not found. + +# Version 1.2.52 - Sep 25, 2017 +## New Features +* Changed Android Resolver's Gradle resolution to resolve conflicting + dependencies across Google Play services and Android Support library packages. + +# Version 1.2.51 - Sep 20, 2017 +## Changes +* Changed iOS Resolver to execute the CocoaPods "pod" command via the shell + by default. Some developers customize their shell environment to use + custom ssh certs to access internal git repositories that host pods so + executing "pod" via the shell will work for these scenarios. + The drawback of executing "pod" via the shell could potentially cause + users problems if they break their shell environment. Though users who + customize their shell environments will be able to resolve these issues. + +# Version 1.2.50 - Sep 18, 2017 +## New Features +* Added option to disable the Gradle daemon in the Android Resolver. + This daemon is now disabled by default as some users are getting into a state + where multiple daemon instances are being spawned when changing dependencies + which eventually results in Android resolution failing until all daemon + processes are manually killed. + +## Bug Fixes +* Android resolution is now always executed if the user declines the update + of their Android SDK. This ensure users can continue to use out of date + Android SDK packages if they desire. + +# Version 1.2.49 - Sep 18, 2017 +## Bug Fixes +* Removed modulemap parsing in iOS Resolver. + The framework *.modulemap did not need to be parsed by the iOS Resolver + when injecting Cocoapods into a Xcode project. Simply adding a modular + framework to a Xcode project results in Xcode's Clang parsing the associated + modulemap and injecting any compile and link flags into the build process. + +# Version 1.2.48 - Sep 12, 2017 +## New Features +* Changed settings to be per-project by default. + +## Bug Fixes +* Added Google maven repository to fix GradlePrebuild resolution with Google + components. +* Fixed Android Resolution failure with spaces in paths. + +# Version 1.2.47 - Aug 29, 2017 +## New Features +* Android and iOS dependencies can now be specified using *Dependencies.xml + files. This is now the preferred method for registering dependencies, + we may remove the API for dependency addition in future. +* Added "Reset to Defaults" button to each settings dialog to restore default + settings. +* Android Resolver now validates the configured JDK is new enough to build + recently released Android libraries. +## Bug Fixes +* Fixed a bug that caused dependencies with the "LATEST" version specification + to be ignored when using the Gradle mode of the Android Resolver. +* Fixed a race condition when running Android Resolution. +* Fixed Android Resolver logging if a PlayServicesSupport instance is created + with no logging enabled before the Android Resolver is initialized. +* Fixed iOS resolver dialog in Unity 4. +* Fixed iOS Cocoapod Xcode project integration in Unity 4. + +# Version 1.2.46 - Aug 22, 2017 +## Bug Fixes +* GradlePrebuild Android resolver on Windows now correctly locates dependent + data files. + +# Version 1.2.45 - Aug 22, 2017 +## Bug Fixes +* Improved Android package auto-resolution and fixed clean up of stale + dependencies when using Gradle dependency resolution. + +# Version 1.2.44 - Aug 21, 2017 +## Bug Fixes +* Enabled autoresolution for Gradle Prebuild. +* Made the command line dialog windows have selectable text. +* Fixed incorrect "Android Settings" dialog disabled groups. +* Updated PlayServicesResolver android platform detection to use the package + manager instead of the 'android' tool. +* UnityCompat reflection methods 'GetAndroidPlatform' and + 'GetAndroidBuildToolsVersion' are now Obsolete due to dependence on the + obsolete 'android' build tool. + +# Version 1.2.43 - Aug 18, 2017 +## Bug Fixes +* Fixed Gradle resolution in the Android Resolver when running + PlayServicesResolver.Resolve() in parallel or spawning multiple + resolutions before the previous resolve completed. + +# Version 1.2.42 - Aug 17, 2017 +## Bug Fixes +* Fixed Xcode project level settings not being applied by IOS Resolver when + Xcode project pod integration is enabled. + +# Version 1.2.41 - Aug 15, 2017 +## Bug Fixes +* IOS Resolver's Xcode workspace pod integration is now disabled when Unity + Cloud Build is detected. Unity Cloud Build does not follow the same build + process as the Unity editor and fails to open the generated xcworkspace at + this time. + +# Version 1.2.40 - Aug 15, 2017 +## Bug Fixes +* Moved Android Resolver Gradle Prebuild scripts into Google.JarResolver.dll. + They are now extracted from the DLL when required. +* AARs / JARs are now cleaned up when switching the Android resolution + strategy. + +# Version 1.2.39 - Aug 10, 2017 +## New Features +* Android Resolver now supports resolution with Gradle. This enables support + for non-local artifacts. +## Bug Fixes +* Android Resolver's Gradle Prebuild now uses Android build tools to determine + the Android platform tools version rather than relying upon internal Unity + APIs. +* Android Resolver's Gradle Prebuild now correctly strips binaries that are + not required for the target ABI. + +# Version 1.2.38 - Aug 7, 2017 +## Bug Fixes +* Fixed an issue in VersionHandler where disabled targets are ignored if + the "Any Platform" flag is set on a plugin DLL. + +# Version 1.2.37 - Aug 3, 2017 +## New Features +* Exposed GooglePlayServices.PlayServicesResolver.Resolve() so that it's + possible for a script to be notified when AAR / Jar resolution is complete. + This makes it easier to setup a project to build from the command line. + +# Version 1.2.36 - Aug 3, 2017 +## New Features +* VersionHandler.UpdateCompleteMethods allows a user to provide a list of + methods to be called when VersionHandlerImpl has completed an update. + This makes it easier to import a plugin and wait for VersionHandler to + execute prior executing a build. + +# Version 1.2.35 - Jul 28, 2017 +## New Features +* VersionHandler will now rename Linux libraries so they can target Unity + versions that require different file naming. Libraries need to be labelled + gvh_linuxlibname-${basename} in order to be considered for renaming. + e.g gvh\_linuxlibname-MyLib will be named MyLib.so in Unity 5.5 and below and + libMyLib.so in Unity 5.6 and above. + +# Version 1.2.34 - Jul 28, 2017 +## Bug Fixes +* Made VersionHandler bootstrap module more robust when calling static + methods before the implementation DLL is loaded. + +# Version 1.2.33 - Jul 27, 2017 +## New Features +* Added a bootstrap module for VersionHandler so the implementation + of the VersionHandler module can be versioned without resulting in + a compile error when imported at different versions across multiple + plugins. + +# Version 1.2.32 - Jul 20, 2017 +## New Features +* Added support for build target selection based upon .NET framework + version in the VersionHandler. + When applying either gvh\_dotnet-3.5 or gvh\_dotnet-4.5 labels to + assets, the VersionHandler will only enable the asset for the + specified set of build targets when the matching .NET framework version + is selected in Unity 2017's project settings. This allows assets + to be provided in a plugin that need to differ based upon .NET version. + +# Version 1.2.31 - Jul 5, 2017 +## Bug Fixes +* Force expansion of AARs with native components when using Unity 2017 + with the internal build system. In contrast to Unity 5.x, Unity 2017's + internal build system does not include native libraries included in AARs. + Forcing expansion of AARs with native components generates an + Ant / Eclipse project for each AAR which is correctly included by Unity + 2017's internal build system. + +# Version 1.2.30 - Jul 5, 2017 +## Bug Fixes +* Fixed Cocoapods being installed when the build target isn't iOS. +* Added support for malformed AARs with missing classes.jar. + +# Version 1.2.29 - Jun 16, 2017 +## New Features +* Added support for the Android sdkmanager tool. + +# Version 1.2.28 - Jun 8, 2017 +## Bug Fixes +* Fixed non-shell command line execution (regression from + Cocoapod installation patch). + +# Version 1.2.27 - Jun 7, 2017 +## Bug Fixes +* Added support for stdout / stderr redirection when executing + commands in shell mode. + This fixes CocoaPod tool installation when shell mode is + enabled. +* Fixed incremental builds when additional sources are specified + in the Podfile. + +# Version 1.2.26 - Jun 7, 2017 +## Bug Fixes +* Fixed a crash when importing Version Handler into Unity 4.7.x. + +# Version 1.2.25 - Jun 7, 2017 +## Bug Fixes +* Fixed an issue in the Jar Resolver which incorrectly notified + event handlers of bundle ID changes when the currently selected + (not active) build target changed in Unity 5.6 and above. + +# Version 1.2.24 - Jun 6, 2017 +## New Features +* Added option to control file renaming in Version Handler settings. + Disabling file renaming (default option) significantly increases + the speed of file version management operations with the downside + that any files that are referenced directly by canonical filename + rather than asset ID will no longer be valid. +* Improved logging in the Version Handler. +## Bug Fixes +* Fixed an issue in the Version Handler which caused it to not + re-enable plugins when re-importing a custom package with disabled + version managed files. + +# Version 1.2.23 - May 26, 2017 +## Bug Fixes +* Fixed a bug with gradle prebuild resolver on windows. + +# Version 1.2.22 - May 19, 2017 +## Bug Fixes +* Fixed a bug in the iOS resolver with incremental builds. +* Fixed misdetection of Cocoapods support with Unity beta 5.6. + +# Version 1.2.21 - May 8, 2017 +## Bug Fixes +* Fix for https://github.com/googlesamples/unity-jar-resolver/issues/48 + Android dependency version number parsing when "-alpha" (etc.) are + included in dependency (AAR / JAR) versions. + +# Version 1.2.20 - May 8, 2017 +## Bug Fixes +* Attempted to fix + https://github.com/googlesamples/unity-jar-resolver/issues/48 + where a NullReferenceException could occur if a target file does not + have a valid version string. + +# Version 1.2.19 - May 4, 2017 +## Bug Fixes +* Fixed Jar Resolver exploding and deleting AAR files it isn't managing. + +# Version 1.2.18 - May 4, 2017 +## New Features +* Added support for preserving Unity pods such as when GVR is enabled. + +# Version 1.2.17 - Apr 20, 2017 +## Bug Fixes +* Fixed auto-resolution when an Android application ID is modified. + +# Version 1.2.16 - Apr 17, 2017 +## Bug Fixes +* Fixed Unity version number parsing on machines with a locale that uses + "," for decimal points. +* Fixed null reference exception if JDK path isn't set. + +# Version 1.2.15 - Mar 17, 2017 +## New Features +* Added warning when the Jar Resolver's background resolution is disabled. +## Bug Fixes +* Fixed support of AARs with native libraries when using Gradle. +* Fixed extra repository paths when resolving dependencies. + +# Version 1.2.14 - Mar 7, 2017 +## New Features +* Added experimental Android resolution using Gradle. + This alternative resolver supports proguard stripping with Unity's + internal build system. +* Added Android support for single ABI builds when using AARs include + native libraries. +* Disabled Android resolution on changes to all .cs and .js files. + File patterns that are monitored for auto-resolution can be added + using PlayServicesResolver.AddAutoResolutionFilePatterns(). +* Added tracking of resolved AARs and JARs so they can be cleaned up + if they're no longer referenced by a project. +* Added persistence of AAR / JAR version replacement for each Unity + session. +* Added settings dialog to the iOS resolver. +* Integrated Cocoapod tool installation in the iOS resolver. +* Added option to run pod tool via the shell. +## Bug Fixes +* Fixed build of some source Cocoapods (e.g Protobuf). +* VersionHandler no longer prompts to delete obsolete manifests. +* iOS resolver handles Cocoapod installation when using Ruby < 2.2.2. +* Added workaround for package version selection when including + Google Play Services on Android. +* Fixed support for pods that reference static libraries. +* Fixed support for resource-only pods. + +# Version 1.2.12 - Feb 14, 2017 +## Bug Fixes +* Fixed re-explosion of AARs when the bundle ID is modified. + +# Version 1.2.11 - Jan 30, 2017 +## New Features +* Added support for Android Studio builds. +* Added support for native (C/C++) shared libraries in AARs. + +# Version 1.2.10 - Jan 11, 2017 +## Bug Fixes +* Fixed SDK manager path retrieval. +* Also, report stderr when it's not possible to run the "pod" tool. +* Handle exceptions thrown by Unity.Cecil on asset rename +* Fixed IOSResolver to handle PlayerSettings.iOS.targetOSVersionString + +# Version 1.2.9 - Dec 7, 2016 +## Bug Fixes +* Improved error reporting when "pod repo update" fails. +* Added detection of xml format xcode projects generated by old Cocoapods + installations. + +# Version 1.2.8 - Dec 6, 2016 +## Bug Fixes +* Increased speed of JarResolver resolution. +* Fixed JarResolver caches getting out of sync with requested dependencies + by removing the caches. +* Fixed JarResolver explode cache always being rewritten even when no + dependencies change. + +# Version 1.2.7 - Dec 2, 2016 +## Bug Fixes +* Fixed VersionHandler build errors with Unity 5.5, due to the constantly + changing BuildTarget enum. +* Added support for Unity configured JDK Path rather than requiring + JAVA_HOME to be set in the Jar Resolver. + +# Version 1.2.6 - Nov 15, 2016 +## Bug Fixes +* Fixed IOSResolver errors when iOS support is not installed. +* Added fallback to "pod" executable search which queries the Ruby Gems + package manager for the binary install location. + +# Version 1.2.5 - Nov 3, 2016 +## Bug Fixes +* Added crude support for source only Cocoapods to the IOSResolver. + +# Version 1.2.4 - Oct 27, 2016 +## Bug Fixes +* Automated resolution of out of date pod repositories. + +# Version 1.2.3 - Oct 25, 2016 +## Bug Fixes +* Fixed exception when reporting conflicting dependencies. + +# Version 1.2.2 - Oct 17, 2016 +## Bug Fixes +* Fixed issue working with Unity 5.5 +* Fixed issue with PlayServicesResolver corrupting other iOS dependencies. +* Updated build script to use Unity distributed tools for building. + +# Version 1.2.1 - Jul 25, 2016 +## Bug Fixes +* Removed 1.2 Resolver and hardcoded whitelist of AARs to expand. +* Improved error reporting when the "jar" executable can't be found. +* Removed the need to set JAVA_HOME if "jar" is in the user's path. +* Fixed spurious copying of partially matching AARs. +* Changed resolver to only copy / expand when source AARs change. +* Auto-resolution of dependencies is now performed when the Android + build target is selected. + +## New Features +* Expand AARs that contain manifests with variable expansion like + ${applicationId}. +* Added optional logging in the JarResolverLib module. +* Integration with the Android SDK manager for dependencies that + declare required Android SDK packages. + +# Version 1.2.0 - May 11 2016 +## Bug Fixes +* Handles resolving dependencies when the artifacts are split across 2 repos. +* #4 Misdetecting version for versions like 1.2-alpha. These are now string + compared if alphanumeric +* Removed resolver creation via reflection since it did not work all the time. + Now a resolver needs to be loaded externally (which is existing behavior). + +## New Features +* Expose PlayServicesResolver properties to allow for script access. +* Explodes firebase-common and firebase-measurement aar files to support + ${applicationId} substitution. + +# Version 1.1.1 - 25 Feb 2016 +## Bug Fixes +* #1 Spaces in project path not handled when exploding Aar file. +* #2 Script compilation error: TypeLoadException. + +# Version 1.1.0 - 5 Feb 2016 +## New Features +* Adds friendly alert when JAVA_HOME is not set on Windows platforms. +* Adds flag for disabling background resolution. +* Expands play-services-measurement and replaces ${applicationId} with the + bundle Id. + + ## Bug Fixes +* Fixes infinite loop of resolution triggered by resolution. diff --git a/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta new file mode 100644 index 0000000..03b6181 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/CHANGELOG.md.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aba4ee01c6d145f7bf2d944d892f709a +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/CHANGELOG.md +timeCreated: 1584567712 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll new file mode 100644 index 0000000..65b099b Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta new file mode 100644 index 0000000..a35483b --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll.meta @@ -0,0 +1,36 @@ +fileFormatVersion: 2 +guid: 86460262ea60447dbb6a62d21167790f +labels: +- gvh +- gvh_version-1.2.177 +- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.dll +- gvhp_targets-editor +timeCreated: 1480838400 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + isOverridable: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb new file mode 100644 index 0000000..7dd02af Binary files /dev/null and b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb differ diff --git a/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb.meta b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb.meta new file mode 100644 index 0000000..d4a34e0 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 57f5a82a79ab4b098f09326c8f3c73a6 +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/Google.VersionHandler.pdb +timeCreated: 1538009133 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/LICENSE b/Assets/ExternalDependencyManager/Editor/LICENSE new file mode 100644 index 0000000..6258cc4 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/LICENSE @@ -0,0 +1,245 @@ +Copyright (C) 2014 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +==================================================================================================== +This package uses MiniJSON + +Copyright (c) 2013 Calvin Rien + +Based on the JSON parser by Patrick van Bergen +http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html + +Simplified it so that it doesn't throw exceptions +and can be used in Unity iPhone with maximum code stripping. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Assets/ExternalDependencyManager/Editor/LICENSE.meta b/Assets/ExternalDependencyManager/Editor/LICENSE.meta new file mode 100644 index 0000000..1f7d009 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/LICENSE.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ae8b2bc8d1ac4ad48f0ab2b2e7ac75fb +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/LICENSE +timeCreated: 1584567712 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/README.md b/Assets/ExternalDependencyManager/Editor/README.md new file mode 100644 index 0000000..a9aafe9 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/README.md @@ -0,0 +1,903 @@ +# External Dependency Manager for Unity + +[![openupm](https://img.shields.io/npm/v/com.google.external-dependency-manager?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.google.external-dependency-manager/) +[![openupm](https://img.shields.io/badge/dynamic/json?color=brightgreen&label=downloads&query=%24.downloads&suffix=%2Fmonth&url=https%3A%2F%2Fpackage.openupm.com%2Fdownloads%2Fpoint%2Flast-month%2Fcom.google.external-dependency-manager)](https://openupm.com/packages/com.google.external-dependency-manager/) + +## Overview + +The External Dependency Manager for Unity (EDM4U) (formerly Play Services +Resolver/Jar Resolver) is intended to be used by any Unity package or user that +requires: + +* Android specific libraries (e.g + [AARs](https://developer.android.com/studio/projects/android-library.html)) + +* iOS [CocoaPods](https://cocoapods.org/) + +* Version management of transitive dependencies + +* Management of Package Manager (PM) Registries + +If you want to add and use iOS/Android dependencies directly in your project, +then you should to install EDM4U in your project. + +If you are a package user and the plugin you are using depends on EDM4U, *and* +the package does not include EDM4U as a package dependency already, then you +should to install EDM4U in your project. + +If you are a UPM package maintainer and your package requires EDM4U, then you +should add EDM4U as a +[package dependency](https://docs.unity3d.com/2019.3/Documentation/Manual/upm-dependencies.html) +in your package manifest (`package.json`): + +```json +{ + "dependencies": { + "com.google.external-dependency-manager": "1.2.178" + } +} +``` + +You should still install EDM4U to test out the package during development. + +If you are a legacy `.unitypackage` package maintainer and your package requires +EDM4U, please ask the user to install EDM4U separately. You should install EDM4U +to test out the package during development. + +Updated releases are available on +[GitHub](https://github.com/googlesamples/unity-jar-resolver) + +## Requirements + +The *Android Resolver* and *iOS Resolver* components of the plugin only work +with Unity version 4.6.8 or higher. + +The *Version Handler* component only works with Unity 5.x or higher as it +depends upon the `PluginImporter` UnityEditor API. + +The *Package Manager Resolver* component only works with Unity 2018.4 or above, +when [scoped registry](https://docs.unity3d.com/Manual/upm-scoped.html) support +was added to the Package Manager. + +## Getting Started + +Check out [troubleshooting](troubleshooting-faq.md) if you need help. + +### Install via OpenUPM + +EDM4U is available on +[OpenUPM](https://openupm.com/packages/com.google.external-dependency-manager/): + +```shell +openupm add com.google.external-dependency-manager +``` + +### Install via git URL +1. Open Package Manager +2. Click on the + icon on the top left corner of the "Package Manager" screen +3. Click on "Install package from git url..." +4. Paste: https://github.com/googlesamples/unity-jar-resolver.git?path=upm + +### Install via Google APIs for Unity + +EDM4U is available both in UPM and legacy `.unitypackage` formats on +[Google APIs for Unity](https://developers.google.com/unity/archive#external_dependency_manager_for_unity). + +You may install the UPM version (.tgz) as a +[local UPM package](https://docs.unity3d.com/Manual/upm-ui-local.html). + +You can also install EDM4U in your project as a `.unitypackage`. This is not +recommended due to potential conflicts. + +### Conflict Resolution + +For historical reasons, a package maintainer may choose to embed EDM4U in their +package for ease of installation. This will create a conflict when you try to +install EDM4U with the steps above, or with another package with embedded EDM4U. +If your project imported a `.unitypackage` that has a copy of EDM4U embedded in +it, you may safely delete it from your Assets folder. If your project depends on +another UPM package with EDM4U, please reach out to the package maintainer and +ask them to replace it with a dependency to this package. In the meantime, you +can workaround the issue by copying the package to your Packages folder (to +create an +[embedded package](https://docs.unity3d.com/Manual/upm-concepts.html#Embedded)) +and perform the steps yourself to avoid a dependency conflict. + +### Config file + +To start adding dependencies to your project, copy and rename the +[SampleDependencies.xml](https://github.com/googlesamples/unity-jar-resolver/blob/master/sample/Assets/ExternalDependencyManager/Editor/SampleDependencies.xml) +file into your plugin and add the dependencies your project requires. + +The XML file needs to be under an `Editor` directory and match the name +`*Dependencies.xml`. For example, `MyPlugin/Editor/MyPluginDependencies.xml`. + +## Usages + +### Android Resolver + +The Android Resolver copies specified dependencies from local or remote Maven +repositories into the Unity project when a user selects Android as the build +target in the Unity editor. + +For example, to add the Google Play Games library +(`com.google.android.gms:play-services-games` package) at version `9.8.0` to the +set of a plugin's Android dependencies: + +```xml + + + + + extra-google-m2repository + + + + +``` + +The version specification (last component) supports: + +* Specific versions e.g `9.8.0` + +* Partial matches e.g `9.8.+` would match 9.8.0, 9.8.1 etc. choosing the most + recent version + +* Latest version using `LATEST` or `+`. We do *not* recommend using this + unless you're 100% sure the library you depend upon will not break your + Unity plugin in future + +The above example specifies the dependency as a component of the Android SDK +manager such that the Android SDK manager will be executed to install the +package if it's not found. If your Android dependency is located on Maven +central it's possible to specify the package simply using the `androidPackage` +element: + +```xml + + + + + +``` + +#### Auto-resolution + +By default the Android Resolver automatically monitors the dependencies you have +specified and the `Plugins/Android` folder of your Unity project. The resolution +process runs when the specified dependencies are not present in your project. + +The *auto-resolution* process can be disabled via the `Assets > External +Dependency Manager > Android Resolver > Settings` menu. + +Manual resolution can be performed using the following menu options: + +* `Assets > External Dependency Manager > Android Resolver > Resolve` + +* `Assets > External Dependency Manager > Android Resolver > Force Resolve` + +#### Deleting libraries + +Resolved packages are tracked via asset labels by the Android Resolver. They can +easily be deleted using the `Assets > External Dependency Manager > Android +Resolver > Delete Resolved Libraries` menu item. + +#### Android Manifest Variable Processing + +Some AAR files (for example play-services-measurement) contain variables that +are processed by the Android Gradle plugin. Unfortunately, Unity does not +perform the same processing when using Unity's Internal Build System, so the +Android Resolver plugin handles known cases of this variable substitution by +exploding the AAR into a folder and replacing `${applicationId}` with the +`bundleID`. + +Disabling AAR explosion and therefore Android manifest processing can be done +via the `Assets > External Dependency Manager > Android Resolver > Settings` +menu. You may want to disable explosion of AARs if you're exporting a project to +be built with Gradle/Android Studio. + +#### ABI Stripping + +Some AAR files contain native libraries (.so files) for each ABI supported by +Android. Unfortunately, when targeting a single ABI (e.g x86), Unity does not +strip native libraries for unused ABIs. To strip unused ABIs, the Android +Resolver plugin explodes an AAR into a folder and removes unused ABIs to reduce +the built APK size. Furthermore, if native libraries are not stripped from an +APK (e.g you have a mix of Unity's x86 library and some armeabi-v7a libraries) +Android may attempt to load the wrong library for the current runtime ABI +completely breaking your plugin when targeting some architectures. + +AAR explosion and therefore ABI stripping can be disabled via the `Assets > +External Dependency Manager > Android Resolver > Settings` menu. You may want to +disable explosion of AARs if you're exporting a project to be built with +Gradle/Android Studio. + +#### Resolution Strategies + +By default the Android Resolver will use Gradle to download dependencies prior +to integrating them into a Unity project. This works with Unity's internal build +system and Gradle/Android Studio project export. + +It's possible to change the resolution strategy via the `Assets > External +Dependency Manager > Android Resolver > Settings` menu. + +##### Download Artifacts with Gradle + +Using the default resolution strategy, the Android resolver executes the +following operations: + +- Remove the result of previous Android resolutions. E.g Delete all files and + directories labeled with "gpsr" under `Plugins/Android` from the project. + +- Collect the set of Android dependencies (libraries) specified by a project's + `*Dependencies.xml` files. + +- Run `download_artifacts.gradle` with Gradle to resolve conflicts and, if + successful, download the set of resolved Android libraries (AARs, JARs). + +- Process each AAR/JAR so that it can be used with the currently selected + Unity build system (e.g Internal vs. Gradle, Export vs. No Export). This + involves patching each reference to `applicationId` in the + `AndroidManifest.xml` with the project's bundle ID. This means resolution + must be run again if the bundle ID has changed. + +- Move the processed AARs to `Plugins/Android` so they will be included when + Unity invokes the Android build. + +##### Integrate into mainTemplate.gradle + +Unity 5.6 introduced support for customizing the `build.gradle` used to build +Unity projects with Gradle. When the *Patch mainTemplate.gradle* setting is +enabled, rather than downloading artifacts before the build, Android resolution +results in the execution of the following operations: + +- Remove the result of previous Android resolutions. E.g Delete all files and + directories labeled with "gpsr" under `Plugins/Android` from the project and + remove sections delimited with `// Android Resolver * Start` and `// Android + Resolver * End` lines. + +- Collect the set of Android dependencies (libraries) specified by a project's + `*Dependencies.xml` files. + +- Rename any `.srcaar` files in the build to `.aar` and exclude them from + being included directly by Unity in the Android build as + `mainTemplate.gradle` will be patched to include them instead from their + local maven repositories. + +- Inject the required Gradle repositories into `mainTemplate.gradle` at the + line matching the pattern `.*apply plugin: + 'com\.android\.(application|library)'.*` or the section starting at the line + `// Android Resolver Repos Start`. If you want to control the injection + point in the file, the section delimited by the lines `// Android Resolver + Repos Start` and `// Android Resolver Repos End` should be placed in the + global scope before the `dependencies` section. + +- Inject the required Android dependencies (libraries) into + `mainTemplate.gradle` at the line matching the pattern `***DEPS***` or the + section starting at the line `// Android Resolver Dependencies Start`. If + you want to control the injection point in the file, the section delimited + by the lines `// Android Resolver Dependencies Start` and `// Android + Resolver Dependencies End` should be placed in the `dependencies` section. + +- Inject the packaging options logic, which excludes architecture specific + libraries based upon the selected build target, into `mainTemplate.gradle` + at the line matching the pattern `android +{` or the section starting at the + line `// Android Resolver Exclusions Start`. If you want to control the + injection point in the file, the section delimited by the lines `// Android + Resolver Exclusions Start` and `// Android Resolver Exclusions End` should + be placed in the global scope before the `android` section. + +#### Dependency Tracking + +The Android Resolver creates the +`ProjectSettings/AndroidResolverDependencies.xml` to quickly determine the set +of resolved dependencies in a project. This is used by the auto-resolution +process to only run the expensive resolution process when necessary. + +#### Displaying Dependencies + +It's possible to display the set of dependencies the Android Resolver would +download and process in your project via the `Assets > External Dependency +Manager > Android Resolver > Display Libraries` menu item. + +### iOS Resolver + +The iOS resolver component of this plugin manages +[CocoaPods](https://cocoapods.org/). A CocoaPods `Podfile` is generated and the +`pod` tool is executed as a post build process step to add dependencies to the +Xcode project exported by Unity. + +Dependencies for iOS are added by referring to CocoaPods. + +For example, to add the AdMob pod, version 7.0 or greater with bitcode enabled: + +```xml + + + + + +``` + +#### Integration Strategies + +The `CocoaPods` are either: + +* Downloaded and injected into the Xcode project file directly, rather than + creating a separate xcworkspace. We call this `Xcode project` integration. + +* If the Unity version supports opening a xcworkspace file, the `pod` tool is + used as intended to generate a xcworkspace which references the CocoaPods. + We call this `Xcode workspace` integration. + +The resolution strategy can be changed via the `Assets > External Dependency +Manager > iOS Resolver > Settings` menu. + +##### Appending text to generated Podfile + +In order to modify the generated Podfile you can create a script like this: + +```csharp +using System.IO; + +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine; + +public class PostProcessIOS : MonoBehaviour +{ + // Must be between 40 and 50 to ensure that it's not overriden by Podfile generation (40) and + // that it's added before "pod install" (50). + [PostProcessBuildAttribute(45)] + private static void PostProcessBuild_iOS(BuildTarget target, string buildPath) + { + if (target == BuildTarget.iOS) + { + using (StreamWriter sw = File.AppendText(buildPath + "/Podfile")) + { + // E.g. add an app extension + sw.WriteLine("\ntarget 'NSExtension' do\n pod 'Firebase/Messaging', '6.6.0'\nend"); + } + } + } +} +``` + +### Package Manager Resolver + +Adding registries to the +[Package Manager](https://docs.unity3d.com/Manual/Packages.html) (PM) is a +manual process. The Package Manager Resolver (PMR) component of this plugin +makes it easy for plugin maintainers to distribute new PM registry servers and +easy for plugin users to manage PM registry servers. + +#### Adding Registries + +For example, to add a registry for plugins in the scope `com.coolstuff`: + +```xml + + + + com.coolstuff + + + +``` + +When PMR is loaded it will prompt the developer to add the registry to their +project if it isn't already present in the `Packages/manifest.json` file. + +For more information, see Unity's documentation on +[scoped package registries](https://docs.unity3d.com/Manual/upm-scoped.html). + +#### Managing Registries + +It's possible to add and remove registries that are specified via PMR XML +configuration files via the following menu options: + +* `Assets > External Dependency Manager > Package Manager Resolver > Add + Registries` will prompt the user with a window which allows them to add + registries discovered in the project to the Package Manager. + +* `Assets > External Dependency Manager > Package Manager Resolver > Remove + Registries` will prompt the user with a window which allows them to remove + registries discovered in the project from the Package Manager. + +* `Assets > External Dependency Manager > Package Manager Resolver > Modify + Registries` will prompt the user with a window which allows them to add or + remove registries discovered in the project. + +#### Migration + +PMR can migrate Version Handler packages installed in the `Assets` folder to PM +packages. This requires the plugins to implement the following: + +* `.unitypackage` must include a Version Handler manifests that describes the + components of the plugin. If the plugin has no dependencies the manifest + would just include the files in the plugin. + +* The PM package JSON provided by the registry must include a keyword (in the + `versions.VERSION.keyword` list) that maps the PM package to a Version + Handler package using the format `vh-name:VERSION_HANDLER_MANIFEST_NAME` + where `VERSION_HANDLER_MANIFEST_NAME` is the name of the manifest defined in + the `.unitypackage`. For more information see the description of the + `gvhp_manifestname` asset label in the [Version Handler](#version-handler) + section. + +When using the `Assets > External Dependency Manager > Package Manager +Resolver > Migrate Packages` menu option, PMR then will: + +* List all Version Handler manager packages in the project. + +* Search all available packages in the PM registries and fetch keywords + associated with each package parsing the Version Handler manifest names for + each package. + +* Map each installed Version Handler package to a PM package. + +* Prompt the user to migrate the discovered packages. + +* Perform package migration for all selected packages if the user clicks the + `Apply` button. + +#### Configuration + +PMR can be configured via the `Assets > External Dependency Manager > Package +Manager Resolver > Settings` menu option: + +* `Add package registries` when enabled, when the plugin loads or registry + configuration files change, this will prompt the user to add registries that + are not present in the Package Manager. + +* `Prompt to add package registries` will cause a developer to be prompted + with a window that will ask for confirmation before adding registries. When + this is disabled registries are added silently to the project. + +* `Prompt to migrate packages` will cause a developer to be prompted with a + window that will ask for confirmation before migrating packages installed in + the `Assets` directory to PM packages. + +* `Enable Analytics Reporting` when enabled, reports the use of the plugin to + the developers so they can make imrpovements. + +* `Verbose logging` when enabled prints debug information to the console which + can be useful when filing bug reports. + +### Version Handler + +The Version Handler component of this plugin manages: + +* Shared Unity plugin dependencies. + +* Upgrading Unity plugins by cleaning up old files from previous versions. + +* Uninstallation of plugins that are distributed with manifest files. + +* Restoration of plugin assets to their original install locations if assets + are tagged with the `exportpath` label. + +Since the Version Handler needs to modify Unity asset metadata (`.meta` files), +to enable/disable components, rename and delete asset files it does not work +with Package Manager installed packages. It's still possible to include EDM4U in +Package Manager packages, the Version Handler component simply won't do anything +to PM plugins in this case. + +#### Using Version Handler Managed Plugins + +If a plugin is imported at multiple different versions into a project, if the +Version Handler is enabled, it will automatically check all managed assets to +determine the set of assets that are out of date and assets that should be +removed. To disable automatic checking managed assets disable the `Enable +version management` option in the `Assets > External Dependency Manager > +Version Handler > Settings` menu. + +If version management is disabled, it's possible to check managed assets +manually using the `Assets > External Dependency Manager > Version Handler > +Update` menu option. + +##### Listing Managed Plugins + +Plugins managed by the Version Handler, those that ship with manifest files, can +displayed using the `Assets > External Dependency Manager > Version Handler > +Display Managed Packages` menu option. The list of plugins are written to the +console window along with the set of files used by each plugin. + +##### Uninstalling Managed Plugins + +Plugins managed by the Version Handler, those that ship with manifest files, can +be removed using the `Assets > External Dependency Manager > Version Handler > +Uninstall Managed Packages` menu option. This operation will display a window +that allows a developer to select a set of plugins to remove which will remove +all files owned by each plugin excluding those that are in use by other +installed plugins. + +Files managed by the Version Handler, those labeled with the `gvh` asset label, +can be checked to see whether anything needs to be upgraded, disabled or removed +using the `Assets > External Dependency Manager > Version Handler > Update` menu +option. + +##### Restore Install Paths + +Some developers move assets around in their project which can make it harder for +plugin maintainers to debug issues if this breaks Unity's +[special folders](https://docs.unity3d.com/Manual/SpecialFolders.html) rules. If +assets are labeled with their original install/export path (see +`gvhp_exportpath` below), Version Handler can restore assets to their original +locations when using the `Assets > External Dependency Manager > Version +Handler > Move Files To Install Locations` menu option. + +##### Settings + +Some behavior of the Version Handler can be configured via the `Assets > +External Dependency Manager > Version Handler > Settings` menu option. + +* `Enable version management` controls whether the plugin should automatically + check asset versions and apply changes. If this is disabled the process + should be run manually when installing or upgrading managed plugins using + `Assets > External Dependency Manager > Version Handler > Update`. + +* `Rename to canonical filenames` is a legacy option that will rename files to + remove version numbers and other labels from filenames. + +* `Prompt for obsolete file deletion` enables the display of a window when + obsolete files are deleted allowing the developer to select which files to + delete and those to keep. + +* `Allow disabling files via renaming` controls whether obsolete or disabled + files should be disabled by renaming them to `myfilename_DISABLED`. Renaming + to disable files is required in some scenarios where Unity doesn't support + removing files from the build via the PluginImporter. + +* `Enable Analytics Reporting` enables/disables usage reporting to plugin + developers to improve the product. + +* `Verbose logging` enables *very* noisy log output that is useful for + debugging while filing a bug report or building a new managed plugin. + +* `Use project settings` saves settings for the plugin in the project rather + than system-wide. + +#### Redistributing a Managed Plugin + +The Version Handler employs a couple of methods for managing version selection, +upgrade and removal of plugins. + +* Each plugin can ship with a manifest file that lists the files it includes. + This makes it possible for Version Handler to calculate the difference in + assets between the most recent release of a plugin and the previous release + installed in a project. If a files are removed the Version Handler will + prompt the user to clean up obsolete files. + +* Plugins can ship using assets with unique names, unique GUIDs and version + number labels. Version numbers can be attached to assets using labels or + added to the filename (e.g `myfile.txt` would be `myfile_version-x.y.z.txt). + This allows the Version Handler to determine which set of files are the same + file at different versions, select the most recent version and prompt the + developer to clean up old versions. + +Unity plugins can be managed by the Version Handler using the following steps: + +1. Add the `gvh` asset label to each asset (file) you want Version Handler to + manage. + +1. Add the `gvh_version-VERSION` label to each asset where `VERSION` is the + version of the plugin you're releasing (e.g 1.2.3). + +1. Add the `gvhp_exportpath-PATH` label to each asset where `PATH` is the + export path of the file when the `.unitypackage` is created. This is used to + track files if they're moved around in a project by developers. + +1. Optional: Add `gvh_targets-editor` label to each editor DLL in your plugin + and disable `editor` as a target platform for the DLL. The Version Handler + will enable the most recent version of this DLL when the plugin is imported. + +1. Optional: If your plugin is included in other Unity plugins, you should add + the version number to each filename and change the GUID of each asset. This + allows multiple versions of your plugin to be imported into a Unity project, + with the Version Handler component activating only the most recent version. + +1. Create a manifest text file named `MY_UNIQUE_PLUGIN_NAME_VERSION.txt` that + lists all the files in your plugin relative to the project root. Then add + the `gvh_manifest` label to the asset to indicate this file is a plugin + manifest. + +1. Optional: Add a `gvhp_manifestname-NAME` label to your manifest file to + provide a human readable name for your package. If this isn't provided the + name of the manifest file will be used as the package name. NAME can match + the pattern `[0-9]+[a-zA-Z -]` where a leading integer will set the priority + of the name where `0` is the highest priority and preferably used as the + display name. The lowest value (i.e highest priority name) will be used as + the display name and all other specified names will be aliases of the + display name. Aliases can refer to previous names of the package allowing + renaming across published versions. + +1. Redistribute EDM4U Unity plugin with your plugin. See the + [Plugin Redistribution](#plugin-redistribution) section for details. + +If you follow these steps: + +* When users import a newer version of your plugin, files referenced by the + older version's manifest are cleaned up. + +* The latest version of the plugin will be selected when users import multiple + packages that include your plugin, assuming the steps in + [Plugin Redistribution](#plugin-redistribution) are followed. + +## Background + +Many Unity plugins have dependencies upon Android specific libraries, iOS +CocoaPods, and sometimes have transitive dependencies upon other Unity plugins. +This causes the following problems: + +* Integrating platform specific (e.g Android and iOS) libraries within a Unity + project can be complex and a burden on a Unity plugin maintainer. +* The process of resolving conflicting dependencies on platform specific + libraries is pushed to the developer attempting to use a Unity plugin. The + developer trying to use your plugin is very likely to give up when faced + with Android or iOS specific build errors. +* The process of resolving conflicting Unity plugins (due to shared Unity + plugin components) is pushed to the developer attempting to use your Unity + plugin. In an effort to resolve conflicts, the developer will very likely + attempt to resolve problems by deleting random files in your plugin, report + bugs when that doesn't work and finally give up. + +EDM4U provides solutions for each of these problems. + +### Android Dependency Management + +The *Android Resolver* component of this plugin will download and integrate +Android library dependencies and handle any conflicts between plugins that share +the same dependencies. + +Without the Android Resolver, typically Unity plugins bundle their AAR and JAR +dependencies, e.g. a Unity plugin `SomePlugin` that requires the Google Play +Games Android library would redistribute the library and its transitive +dependencies in the folder `SomePlugin/Android/`. When a user imports +`SomeOtherPlugin` that includes the same libraries (potentially at different +versions) in `SomeOtherPlugin/Android/`, the developer using `SomePlugin` and +`SomeOtherPlugin` will see an error when building for Android that can be hard +to interpret. + +Using the Android Resolver to manage Android library dependencies: + +* Solves Android library conflicts between plugins. +* Handles all of the various processing steps required to use Android + libraries (AARs, JARs) in Unity 4.x and above projects. Almost all versions + of Unity have - at best - partial support for AARs. +* (Experimental) Supports minification of included Java components without + exporting a project. + +### iOS Dependency Management + +The *iOS Resolver* component of this plugin integrates with +[CocoaPods](https://cocoapods.org/) to download and integrate iOS libraries and +frameworks into the Xcode project Unity generates when building for iOS. Using +CocoaPods allows multiple plugins to utilize shared components without forcing +developers to fix either duplicate or incompatible versions of libraries +included through multiple Unity plugins in their project. + +### Package Manager Registry Setup + +The [Package Manager](https://docs.unity3d.com/Manual/Packages.html) (PM) makes +use of [NPM](https://www.npmjs.com/) registry servers for package hosting and +provides ways to discover, install, upgrade and uninstall packages. This makes +it easier for developers to manage plugins within their projects. + +However, installing additional package registries requires a few manual steps +that can potentially be error prone. The *Package Manager Resolver* component of +this plugin integrates with [PM](https://docs.unity3d.com/Manual/Packages.html) +to provide a way to auto-install PM package registries when a `.unitypackage` is +installed which allows plugin maintainers to ship a `.unitypackage` that can +provide access to their own PM registry server to make it easier for developers +to manage their plugins. + +### Unity Plugin Version Management + +Finally, the *Version Handler* component of this plugin simplifies the process +of managing transitive dependencies of Unity plugins and each plugin's upgrade +process. + +For example, without the Version Handler plugin, if: + +* Unity plugin `SomePlugin` includes `EDM4U` plugin at version 1.1. +* Unity plugin `SomeOtherPlugin` includes `EDM4U` plugin at version 1.2. + +The version of `EDM4U` included in the developer's project depends upon the +order the developer imports `SomePlugin` or `SomeOtherPlugin`. + +This results in: + +* `EDM4U` at version 1.2, if `SomePlugin` is imported then `SomeOtherPlugin` + is imported. +* `EDM4U` at version 1.1, if `SomeOtherPlugin` is imported then `SomePlugin` + is imported. + +The Version Handler solves the problem of managing transitive dependencies by: + +* Specifying a set of packaging requirements that enable a plugin at different + versions to be imported into a Unity project. +* Providing activation logic that selects the latest version of a plugin + within a project. + +When using the Version Handler to manage `EDM4U` included in `SomePlugin` and +`SomeOtherPlugin`, from the prior example, version 1.2 will always be the +version activated in a developer's Unity project. + +Plugin creators are encouraged to adopt this library to ease integration for +their customers. For more information about integrating EDM4U into your own +plugin, see the [Plugin Redistribution](#plugin-redistribution) section of this +document. + +## Analytics + +The External Dependency Manager for Unity plugin by default logs usage to Google +Analytics. The purpose of the logging is to quantitatively measure the usage of +functionality, to gather reports on integration failures and to inform future +improvements to the developer experience of the External Dependency Manager +plugin. Note that the analytics collected are limited to the scope of the EDM4U +plugin’s usage. + +For details of what is logged, please refer to the usage of +`EditorMeasurement.Report()` in the source code. + +## Plugin Redistribution + +If you are a package maintainer and your package depends on EDM4U, it is highly +recommended to use the UPM format and add EDM4U as a dependency. If you must +include it in your `.unitypackage`, redistributing `EDM4U` inside your own +plugin might ease the integration process for your users. + +If you wish to redistribute `EDM4U` inside your plugin, you **must** follow +these steps when importing the `external-dependency-manager-*.unitypackage`, and +when exporting your own plugin package: + +1. Import the `external-dependency-manager-*.unitypackage` into your plugin + project by + [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), + ensuring that you add the `-gvh_disable` option. +1. Export your plugin by + [running Unity from the command line](https://docs.unity3d.com/Manual/CommandLineArguments.html), + ensuring that you: + - Include the contents of the `Assets/PlayServicesResolver` and + `Assets/ExternalDependencyManager` directory. + - Add the `-gvh_disable` option. + +You **must** specify the `-gvh_disable` option in order for the Version Handler +to work correctly! + +For example, the following command will import the +`external-dependency-manager-1.2.46.0.unitypackage` into the project +`MyPluginProject` and export the entire Assets folder to +`MyPlugin.unitypackage`: + +```shell +Unity -gvh_disable \ + -batchmode \ + -importPackage external-dependency-manager-1.2.46.0.unitypackage \ + -projectPath MyPluginProject \ + -exportPackage Assets MyPlugin.unitypackage \ + -quit +``` + +### Background + +The *Version Handler* component relies upon deferring the load of editor DLLs so +that it can run first and determine the latest version of a plugin component to +activate. The build of `EDM4U` plugin has Unity asset metadata that is +configured so that the editor components are not initially enabled when it's +imported into a Unity project. To maintain this configuration when importing the +`external-dependency-manager.unitypackage` into a Unity plugin project, you +*must* specify the command line option `-gvh_disable` which will prevent the +Version Handler component from running and changing the Unity asset metadata. + +## Building from Source + +To build this plugin from source you need the following tools installed: * Unity +2021 and below (with iOS and Android modules installed) * Java 11 + +You can build the plugin by running the following from your shell (Linux / OSX): + +```shell +./gradlew build + +``` + +or Windows: + +```shell +./gradlew.bat build +``` + +If Java 11 is not your default Java command, add +`-Dorg.gradle.java.home=` to the command above. + +## Testing + +You can run the tests by running the following from your shell (Linux / OSX): + +```shell +./gradlew test +``` + +or Windows: + +```shell +./gradlew.bat test +``` + +The following properties can be set to narrow down the tests to run or change +the test run behavior. + +* `INTERACTIVE_MODE_TESTS_ENABLED` - Default to `1`. Set to `1` to enable + interactive mode tests, which requires GPU on the machine. Otherwise, only + run tests in the batch mode. +* `INCLUDE_TEST_TYPES` - Default to empty string, which means to include every + type of the test. To narrow down the types of test to run, set this + properties with a list of case-insensitive type strings separated by comma. + For instance, `-PINCLUDE_TEST_TYPES="Python,NUnit"` means to include only + Python tests and NUnit tests. See `TestTypeEnum` in `build.gradle` for + available options. +* `EXCLUDE_TEST_TYPES` - Default to empty string, which means to exclude none. + To add types of tests to exclude, set this properties with a list of + case-insensitive type strings separated by comma. For instance, + `-PEXCLUDE_TEST_TYPES="Python,NUnit"` means to exclude Python tests and + NUnit tests. See `TestTypeEnum` in `build.gradle` for available options. +* `INCLUDE_TEST_MODULES` - Default to empty string, which means to include the + tests for every modules. To narrow down modules to test, set this properties + with a list of case-insensitive module strings separated by comma. For + instance, `-PINCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests + for tools and Android Resolver only. See `TestModuleEnum` in `build.gradle` + for available options. +* `EXCLUDE_TEST_MODULES` - Default to empty string, which means to exclude + none. To add modules to exclude, set this properties with a list of + case-insensitive module strings separated by comma. For instance, + `-PEXCLUDE_TEST_MODULES="Tool,AndroidResolver"` means to run tests for any + modules other than tools and Android Resolver. See `TestModuleEnum` in + `build.gradle` for available options. +* `EXCLUDE_TESTS` - Default to empty string, which means to exclude none. To + add tests to exclude, set this properties with a list of case-insensitive + test names separated by comma. For instance, + `-PEXCLUDE_TESTS="testGenGuids,testDownloadArtifacts"` means to run tests + except the tests with name of `testGenGuids` and `testDownloadArtifacts`. +* `CONTINUE_ON_FAIL_FOR_TESTS_ENABLED` - Default to `1`. Set to `1` to + continue running the next test when the current one fails. Otherwise, the + build script stops whenever any test fails. + +For instance, by running the following command, it only runs the Unity +integration tests that does not requires GPU, but exclude tests for Android +Resolver module and iOS Resolver module. + +```shell +./gradlew test \ + -PINTERACTIVE_MODE_TESTS_ENABLED=0 \ + -PINCLUDE_TEST_TYPES="Integration" \ + -PEXCLUDE_TEST_MODULES="AndroidResolver,iOSResolver" +``` + +## Releasing + +Each time a new build of this plugin is checked into the source tree you need to +do the following: + +* Bump the plugin version variable `pluginVersion` in `build.gradle` +* Update `CHANGELOG.md` with the new version number and changes included in + the release. +* Build the release using `./gradlew release` which performs the following: + * Updates `external-dependency-manager-*.unitypackage` + * Copies the unpacked plugin to the `exploded` directory. + * Updates template metadata files in the `plugin` directory. The GUIDs of + all asset metadata is modified due to the version number change. Each + file within the plugin is versioned to allow multiple versions of the + plugin to be imported into a Unity project which allows the most recent + version to be activated by the Version Handler component. +* Create release commit using `./gradlew gitCreateReleaseCommit` which + performs `git commit -a -m "description from CHANGELOG.md"` +* Once the release commit is merge, tag the release using `./gradlew + gitTagRelease` which performs the following: + * `git tag -a pluginVersion -m "version RELEASE"` to tag the release. +* Update tags on remote branch using `git push --tag REMOTE HEAD:master` diff --git a/Assets/ExternalDependencyManager/Editor/README.md.meta b/Assets/ExternalDependencyManager/Editor/README.md.meta new file mode 100644 index 0000000..4887a04 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/README.md.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 77919e84cef8419ab4b725fc16e83d52 +labels: +- gvh +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/README.md +timeCreated: 1584567712 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt new file mode 100644 index 0000000..81c97ed --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt @@ -0,0 +1,13 @@ +Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md diff --git a/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt.meta b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt.meta new file mode 100644 index 0000000..dca3f95 --- /dev/null +++ b/Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: c9a3138961c74d99b7046b783112fceb +labels: +- gvh +- gvh_manifest +- gvh_version-1.2.186 +- gvhp_exportpath-ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt +- gvhp_manifestname-0External Dependency Manager +- gvhp_manifestname-play-services-resolver +timeCreated: 1474401009 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase.meta b/Assets/Firebase.meta new file mode 100644 index 0000000..6d29d43 --- /dev/null +++ b/Assets/Firebase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3ec08b98a0bbe0e4982efbe3ee6c33ac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor.meta b/Assets/Firebase/Editor.meta new file mode 100644 index 0000000..afe521f --- /dev/null +++ b/Assets/Firebase/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e8f7d71b39131a448de54c9ec6777b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/AnalyticsDependencies.xml b/Assets/Firebase/Editor/AnalyticsDependencies.xml new file mode 100644 index 0000000..1cccffe --- /dev/null +++ b/Assets/Firebase/Editor/AnalyticsDependencies.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + Assets/Firebase/m2repository + + + + diff --git a/Assets/Firebase/Editor/AnalyticsDependencies.xml.meta b/Assets/Firebase/Editor/AnalyticsDependencies.xml.meta new file mode 100644 index 0000000..4afd953 --- /dev/null +++ b/Assets/Firebase/Editor/AnalyticsDependencies.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1e3c2da79be842cd838a9ddd70d20fa9 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/AnalyticsDependencies.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/AppDependencies.xml b/Assets/Firebase/Editor/AppDependencies.xml new file mode 100644 index 0000000..61e899d --- /dev/null +++ b/Assets/Firebase/Editor/AppDependencies.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + Assets/Firebase/m2repository + + + + diff --git a/Assets/Firebase/Editor/AppDependencies.xml.meta b/Assets/Firebase/Editor/AppDependencies.xml.meta new file mode 100644 index 0000000..e34bfdc --- /dev/null +++ b/Assets/Firebase/Editor/AppDependencies.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b63af95d9364af4a3d8ce58738b6223 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/AppDependencies.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/CrashlyticsDependencies.xml b/Assets/Firebase/Editor/CrashlyticsDependencies.xml new file mode 100644 index 0000000..6fccc35 --- /dev/null +++ b/Assets/Firebase/Editor/CrashlyticsDependencies.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + Assets/Firebase/m2repository + + + + diff --git a/Assets/Firebase/Editor/CrashlyticsDependencies.xml.meta b/Assets/Firebase/Editor/CrashlyticsDependencies.xml.meta new file mode 100644 index 0000000..956d5df --- /dev/null +++ b/Assets/Firebase/Editor/CrashlyticsDependencies.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be690db6bda046a89e38b20ef9bfe06c +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/CrashlyticsDependencies.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll new file mode 100644 index 0000000..088288a Binary files /dev/null and b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll differ diff --git a/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll.meta b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll.meta new file mode 100644 index 0000000..3ea95b5 --- /dev/null +++ b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll.meta @@ -0,0 +1,118 @@ +fileFormatVersion: 2 +guid: 3781f2218eef4d5a823dba406baa434b +labels: +- gvh +- gvh_targets-editor +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Firebase.Crashlytics.Editor.dll +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Linux + second: + enabled: 0 + settings: + CPU: None + - first: + : LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + : OSXIntel + second: + enabled: 0 + settings: + CPU: None + - first: + : OSXIntel64 + second: + enabled: 0 + settings: + CPU: None + - first: + : Web + second: + enabled: 0 + settings: {} + - first: + : WebStreamed + second: + enabled: 0 + settings: {} + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + - first: + tvOS: tvOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb new file mode 100644 index 0000000..6061804 Binary files /dev/null and b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb differ diff --git a/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb.meta b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb.meta new file mode 100644 index 0000000..bd4b11a --- /dev/null +++ b/Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 78466de0dce747f9bf1d009be141cf6f +labels: +- gvh +- gvh_rename_to_disable +- gvh_targets-editor +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Firebase.Crashlytics.Editor.pdb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Firebase.Editor.dll b/Assets/Firebase/Editor/Firebase.Editor.dll new file mode 100644 index 0000000..e03072c Binary files /dev/null and b/Assets/Firebase/Editor/Firebase.Editor.dll differ diff --git a/Assets/Firebase/Editor/Firebase.Editor.dll.meta b/Assets/Firebase/Editor/Firebase.Editor.dll.meta new file mode 100644 index 0000000..b511518 --- /dev/null +++ b/Assets/Firebase/Editor/Firebase.Editor.dll.meta @@ -0,0 +1,118 @@ +fileFormatVersion: 2 +guid: 9f2edbf81053418f879076c05f816dc2 +labels: +- gvh +- gvh_targets-editor +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Firebase.Editor.dll +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Linux + second: + enabled: 0 + settings: + CPU: None + - first: + : LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + : OSXIntel + second: + enabled: 0 + settings: + CPU: None + - first: + : OSXIntel64 + second: + enabled: 0 + settings: + CPU: None + - first: + : Web + second: + enabled: 0 + settings: {} + - first: + : WebStreamed + second: + enabled: 0 + settings: {} + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + - first: + tvOS: tvOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Firebase.Editor.pdb b/Assets/Firebase/Editor/Firebase.Editor.pdb new file mode 100644 index 0000000..d90fb86 Binary files /dev/null and b/Assets/Firebase/Editor/Firebase.Editor.pdb differ diff --git a/Assets/Firebase/Editor/Firebase.Editor.pdb.meta b/Assets/Firebase/Editor/Firebase.Editor.pdb.meta new file mode 100644 index 0000000..b447a3d --- /dev/null +++ b/Assets/Firebase/Editor/Firebase.Editor.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: f2ceb9c446ee4196b6476d4978a416b6 +labels: +- gvh +- gvh_rename_to_disable +- gvh_targets-editor +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Firebase.Editor.pdb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Firebase.Messaging.Editor.dll b/Assets/Firebase/Editor/Firebase.Messaging.Editor.dll new file mode 100644 index 0000000..3c4b5ba Binary files /dev/null and b/Assets/Firebase/Editor/Firebase.Messaging.Editor.dll differ diff --git a/Assets/Firebase/Editor/Firebase.Messaging.Editor.dll.meta b/Assets/Firebase/Editor/Firebase.Messaging.Editor.dll.meta new file mode 100644 index 0000000..a2e42b2 --- /dev/null +++ b/Assets/Firebase/Editor/Firebase.Messaging.Editor.dll.meta @@ -0,0 +1,118 @@ +fileFormatVersion: 2 +guid: 9555198c219241e0b850872f8732192f +labels: +- gvh +- gvh_targets-editor +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Firebase.Messaging.Editor.dll +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + : Linux + second: + enabled: 0 + settings: + CPU: None + - first: + : LinuxUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + : OSXIntel + second: + enabled: 0 + settings: + CPU: None + - first: + : OSXIntel64 + second: + enabled: 0 + settings: + CPU: None + - first: + : Web + second: + enabled: 0 + settings: {} + - first: + : WebStreamed + second: + enabled: 0 + settings: {} + - first: + Android: Android + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + - first: + iPhone: iOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + - first: + tvOS: tvOS + second: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb b/Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb new file mode 100644 index 0000000..c9eb285 Binary files /dev/null and b/Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb differ diff --git a/Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb.meta b/Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb.meta new file mode 100644 index 0000000..d306767 --- /dev/null +++ b/Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: dfa822a1009f4d90972aac668718aaaa +labels: +- gvh +- gvh_rename_to_disable +- gvh_targets-editor +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Firebase.Messaging.Editor.pdb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt b/Assets/Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt new file mode 100644 index 0000000..671057b --- /dev/null +++ b/Assets/Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt @@ -0,0 +1,73 @@ +Assets/Editor Default Resources/Firebase/fb_analytics.png +Assets/Editor Default Resources/Firebase/fb_analytics_dark.png +Assets/Editor Default Resources/Firebase/fb_auth.png +Assets/Editor Default Resources/Firebase/fb_auth_dark.png +Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png +Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png +Assets/Editor Default Resources/Firebase/fb_config.png +Assets/Editor Default Resources/Firebase/fb_config_dark.png +Assets/Editor Default Resources/Firebase/fb_crashlytics.png +Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png +Assets/Editor Default Resources/Firebase/fb_database.png +Assets/Editor Default Resources/Firebase/fb_database_dark.png +Assets/Editor Default Resources/Firebase/fb_dynamic_links.png +Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png +Assets/Editor Default Resources/Firebase/fb_functions.png +Assets/Editor Default Resources/Firebase/fb_functions_dark.png +Assets/Editor Default Resources/Firebase/fb_invites.png +Assets/Editor Default Resources/Firebase/fb_invites_dark.png +Assets/Editor Default Resources/Firebase/fb_storage.png +Assets/Editor Default Resources/Firebase/fb_storage_dark.png +Assets/Editor Default Resources/Firebase/firebase_lockup.png +Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png +Assets/ExternalDependencyManager/Editor/1.2.185/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.IOSResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.JarResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.PackageManagerResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.VersionHandlerImpl.pdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md +Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.185_manifest.txt +Assets/Firebase/Editor/AnalyticsDependencies.xml +Assets/Firebase/Editor/AppDependencies.xml +Assets/Firebase/Editor/Firebase.Editor.dll +Assets/Firebase/Editor/Firebase.Editor.pdb +Assets/Firebase/Editor/generate_xml_from_google_services_json.exe +Assets/Firebase/Editor/generate_xml_from_google_services_json.py +Assets/Firebase/Editor/network_request.exe +Assets/Firebase/Editor/network_request.py +Assets/Firebase/Plugins/Firebase.Analytics.dll +Assets/Firebase/Plugins/Firebase.Analytics.pdb +Assets/Firebase/Plugins/Firebase.App.dll +Assets/Firebase/Plugins/Firebase.App.pdb +Assets/Firebase/Plugins/Firebase.Platform.dll +Assets/Firebase/Plugins/Firebase.Platform.pdb +Assets/Firebase/Plugins/Firebase.TaskExtension.dll +Assets/Firebase/Plugins/Firebase.TaskExtension.pdb +Assets/Firebase/Plugins/Google.MiniJson.dll +Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll +Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb +Assets/Firebase/Plugins/iOS/Firebase.App.dll +Assets/Firebase/Plugins/iOS/Firebase.App.pdb +Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle +Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll +Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so +Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom +Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar +Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml +Assets/Plugins/iOS/Firebase/libFirebaseCppAnalytics.a +Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a +Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a +Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a diff --git a/Assets/Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt.meta b/Assets/Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt.meta new file mode 100644 index 0000000..49eada2 --- /dev/null +++ b/Assets/Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a4e8e6cc224a43209c603e3759695835 +labels: +- gvh +- gvh_manifest +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/FirebaseAnalytics_version-12.8.0_manifest.txt +- gvhp_manifestname-0Google Analytics +- gvhp_manifestname-1FirebaseAnalytics +timeCreated: 0 diff --git a/Assets/Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt b/Assets/Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt new file mode 100644 index 0000000..ee5198b --- /dev/null +++ b/Assets/Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt @@ -0,0 +1,72 @@ +Assets/Editor Default Resources/Firebase/fb_analytics.png +Assets/Editor Default Resources/Firebase/fb_analytics_dark.png +Assets/Editor Default Resources/Firebase/fb_auth.png +Assets/Editor Default Resources/Firebase/fb_auth_dark.png +Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png +Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png +Assets/Editor Default Resources/Firebase/fb_config.png +Assets/Editor Default Resources/Firebase/fb_config_dark.png +Assets/Editor Default Resources/Firebase/fb_crashlytics.png +Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png +Assets/Editor Default Resources/Firebase/fb_database.png +Assets/Editor Default Resources/Firebase/fb_database_dark.png +Assets/Editor Default Resources/Firebase/fb_dynamic_links.png +Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png +Assets/Editor Default Resources/Firebase/fb_functions.png +Assets/Editor Default Resources/Firebase/fb_functions_dark.png +Assets/Editor Default Resources/Firebase/fb_invites.png +Assets/Editor Default Resources/Firebase/fb_invites_dark.png +Assets/Editor Default Resources/Firebase/fb_storage.png +Assets/Editor Default Resources/Firebase/fb_storage_dark.png +Assets/Editor Default Resources/Firebase/firebase_lockup.png +Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png +Assets/ExternalDependencyManager/Editor/1.2.185/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.IOSResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.JarResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.PackageManagerResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.VersionHandlerImpl.pdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md +Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.185_manifest.txt +Assets/Firebase/Editor/AppDependencies.xml +Assets/Firebase/Editor/CrashlyticsDependencies.xml +Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll +Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb +Assets/Firebase/Editor/Firebase.Editor.dll +Assets/Firebase/Editor/Firebase.Editor.pdb +Assets/Firebase/Editor/generate_xml_from_google_services_json.exe +Assets/Firebase/Editor/generate_xml_from_google_services_json.py +Assets/Firebase/Editor/network_request.exe +Assets/Firebase/Editor/network_request.py +Assets/Firebase/Plugins/Firebase.App.dll +Assets/Firebase/Plugins/Firebase.App.pdb +Assets/Firebase/Plugins/Firebase.Crashlytics.dll +Assets/Firebase/Plugins/Firebase.Crashlytics.pdb +Assets/Firebase/Plugins/Firebase.Platform.dll +Assets/Firebase/Plugins/Firebase.Platform.pdb +Assets/Firebase/Plugins/Firebase.TaskExtension.dll +Assets/Firebase/Plugins/Firebase.TaskExtension.pdb +Assets/Firebase/Plugins/Google.MiniJson.dll +Assets/Firebase/Plugins/iOS/Firebase.App.dll +Assets/Firebase/Plugins/iOS/Firebase.App.pdb +Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll +Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml +Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom +Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar +Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml +Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a +Assets/Plugins/iOS/Firebase/libFirebaseCppCrashlytics.a +Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a +Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a diff --git a/Assets/Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt.meta b/Assets/Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt.meta new file mode 100644 index 0000000..d491abe --- /dev/null +++ b/Assets/Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f4491847e2c04c6584a04d9f49337afe +labels: +- gvh +- gvh_manifest +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/FirebaseCrashlytics_version-12.8.0_manifest.txt +- gvhp_manifestname-0Firebase Crashlytics +- gvhp_manifestname-1FirebaseCrashlytics +timeCreated: 0 diff --git a/Assets/Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt b/Assets/Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt new file mode 100644 index 0000000..a2f8a78 --- /dev/null +++ b/Assets/Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt @@ -0,0 +1,78 @@ +Assets/Editor Default Resources/Firebase/fb_analytics.png +Assets/Editor Default Resources/Firebase/fb_analytics_dark.png +Assets/Editor Default Resources/Firebase/fb_auth.png +Assets/Editor Default Resources/Firebase/fb_auth_dark.png +Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png +Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png +Assets/Editor Default Resources/Firebase/fb_config.png +Assets/Editor Default Resources/Firebase/fb_config_dark.png +Assets/Editor Default Resources/Firebase/fb_crashlytics.png +Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png +Assets/Editor Default Resources/Firebase/fb_database.png +Assets/Editor Default Resources/Firebase/fb_database_dark.png +Assets/Editor Default Resources/Firebase/fb_dynamic_links.png +Assets/Editor Default Resources/Firebase/fb_dynamic_links_dark.png +Assets/Editor Default Resources/Firebase/fb_functions.png +Assets/Editor Default Resources/Firebase/fb_functions_dark.png +Assets/Editor Default Resources/Firebase/fb_invites.png +Assets/Editor Default Resources/Firebase/fb_invites_dark.png +Assets/Editor Default Resources/Firebase/fb_storage.png +Assets/Editor Default Resources/Firebase/fb_storage_dark.png +Assets/Editor Default Resources/Firebase/firebase_lockup.png +Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png +Assets/ExternalDependencyManager/Editor/1.2.185/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.IOSResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.JarResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.PackageManagerResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.185/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.185/Google.VersionHandlerImpl.pdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md +Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.185_manifest.txt +Assets/Firebase/Editor/AppDependencies.xml +Assets/Firebase/Editor/Firebase.Editor.dll +Assets/Firebase/Editor/Firebase.Editor.pdb +Assets/Firebase/Editor/Firebase.Messaging.Editor.dll +Assets/Firebase/Editor/Firebase.Messaging.Editor.pdb +Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef +Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs +Assets/Firebase/Editor/MessagingDependencies.xml +Assets/Firebase/Editor/generate_xml_from_google_services_json.exe +Assets/Firebase/Editor/generate_xml_from_google_services_json.py +Assets/Firebase/Editor/network_request.exe +Assets/Firebase/Editor/network_request.py +Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar +Assets/Firebase/Plugins/Firebase.App.dll +Assets/Firebase/Plugins/Firebase.App.pdb +Assets/Firebase/Plugins/Firebase.Messaging.dll +Assets/Firebase/Plugins/Firebase.Messaging.pdb +Assets/Firebase/Plugins/Firebase.Platform.dll +Assets/Firebase/Plugins/Firebase.Platform.pdb +Assets/Firebase/Plugins/Firebase.TaskExtension.dll +Assets/Firebase/Plugins/Firebase.TaskExtension.pdb +Assets/Firebase/Plugins/Google.MiniJson.dll +Assets/Firebase/Plugins/iOS/Firebase.App.dll +Assets/Firebase/Plugins/iOS/Firebase.App.pdb +Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll +Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll +Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so +Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle +Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll +Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar +Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml +Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom +Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar +Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml +Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a +Assets/Plugins/iOS/Firebase/libFirebaseCppMessaging.a +Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a +Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a diff --git a/Assets/Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt.meta b/Assets/Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt.meta new file mode 100644 index 0000000..809625e --- /dev/null +++ b/Assets/Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 523f177029b14503bb7d5806578a7c33 +labels: +- gvh +- gvh_manifest +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/FirebaseMessaging_version-12.8.0_manifest.txt +- gvhp_manifestname-0Firebase Cloud Messaging +- gvhp_manifestname-1FirebaseMessaging +timeCreated: 0 diff --git a/Assets/Firebase/Editor/Messaging.meta b/Assets/Firebase/Editor/Messaging.meta new file mode 100644 index 0000000..9557866 --- /dev/null +++ b/Assets/Firebase/Editor/Messaging.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 19ed14142d00f564d83c9e631862d46f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef new file mode 100644 index 0000000..37fef88 --- /dev/null +++ b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef @@ -0,0 +1,16 @@ +{ + "name": "FirebaseMessagingActivityGenerator", + "rootNamespace": "", + "references": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef.meta b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef.meta new file mode 100644 index 0000000..132b92b --- /dev/null +++ b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23dad9d59a474cb6a052bb9322271ae3 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.asmdef +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs new file mode 100644 index 0000000..133e3a1 --- /dev/null +++ b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs @@ -0,0 +1,198 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System.IO; +using System.Linq; +using UnityEngine; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; + +namespace Firebase.Messaging.Editor { + +// Handles the generation of the MessagingUnityPlayerActivity java file. +// Note this regenerates the file every time an Android build occurs, +// but local changes can be preserved by using the PreserveTag below. +// This is needed because the source code needs to be present to work across +// different Unity versions, due to changes in mUnityPlayer. +// It also adjusts the base class of the file based on if GameActivity is being +// used (a new feature in Unity 2023). +public class FirebaseMessagingActivityGenerator : IPreprocessBuildWithReport { + // TODO: Ideally this should use a template file, the tricky part is locating + // the template file when it is either in the Assets path, or the Packages path. + // There are some similar cases in EDM4U, so a solution might be to use that. + private readonly string[] ActivityClassContents = new string[]{ +"/*", +" * This file is generated by the FirebaseMessagingActivityGenerator script.", +" * Refer to that script for more information.", +" */", +"", +"package com.google.firebase;", +"", +"import android.content.Intent;", +"import android.os.Bundle;", +"import com.google.firebase.messaging.MessageForwardingService;", +"import com.unity3d.player.{0};", +"", +"/**", +" * MessagingUnityPlayerActivity is a {0} that updates its intent when new intents", +" * are sent to it.", +" *", +" * This is a workaround for a known issue that prevents Firebase Cloud Messaging from responding to", +" * data payloads when both a data and notification payload are sent to the app while it is in the", +" * background.", +" */", +"public class MessagingUnityPlayerActivity extends {0} {{", +" // The key in the intent's extras that maps to the incoming message's message ID. Only sent by", +" // the server, GmsCore sends EXTRA_MESSAGE_ID_KEY below. Server can't send that as it would get", +" // stripped by the client.", +" private static final String EXTRA_MESSAGE_ID_KEY_SERVER = \"message_id\";", +"", +" // An alternate key value in the intent's extras that also maps to the incoming message's message", +" // ID. Used by upstream, and set by GmsCore.", +" private static final String EXTRA_MESSAGE_ID_KEY = \"google.message_id\";", +"", +" // The key in the intent's extras that maps to the incoming message's sender value.", +" private static final String EXTRA_FROM = \"google.message_id\";", +"", +" /**", +" * Workaround for when a message is sent containing both a Data and Notification payload.", +" *", +" *

When the app is in the background, if a message with both a data and notification payload is", +" * received the data payload is stored on the Intent passed to onNewIntent. By default, that", +" * intent does not get set as the Intent that started the app, so when the app comes back online", +" * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so", +" * that it sends the intent to the MessageForwardingService which forwards the message to the", +" * FirebaseMessagingService which in turn sends the message to the application.", +" */", +" @Override", +" protected void onNewIntent(Intent intent) {{", +" super.onNewIntent(intent);", +"", +" // If we do not have a 'from' field this intent was not a message and should not be handled. It", +" // probably means this intent was fired by tapping on the app icon.", +" Bundle extras = intent.getExtras();", +" if (extras == null) {{", +" return;", +" }}", +" String from = extras.getString(EXTRA_FROM);", +" String messageId = extras.getString(EXTRA_MESSAGE_ID_KEY);", +" if (messageId == null) {{", +" messageId = extras.getString(EXTRA_MESSAGE_ID_KEY_SERVER);", +" }}", +" if (from != null && messageId != null) {{", +" Intent message = new Intent(this, MessageForwardingService.class);", +" message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);", +" message.putExtras(intent);", +" message.setData(intent.getData());", +" MessageForwardingService.enqueueWork(this, message);", +" }}", +" setIntent(intent);", +" }}", +"", +" /**", +" * Dispose of the mUnityPlayer when restarting the app.", +" *", +" *

This ensures that when the app starts up again it does not start with stale data.", +" */", +" @Override", +" protected void onCreate(Bundle savedInstanceState) {{", +" if (mUnityPlayer != null) {{", +" mUnityPlayer.{1}();", +" mUnityPlayer = null;", +" }}", +" super.onCreate(savedInstanceState);", +" }}", +"}}" + }; + private readonly string BaseActivityClass = "UnityPlayerActivity"; +#if UNITY_2023_1_OR_NEWER + private readonly string BaseGameActivityClass = "UnityPlayerGameActivity"; +#endif + +#if UNITY_2023_1_OR_NEWER + private readonly string UnityPlayerQuitFunction = "destroy"; +#else + private readonly string UnityPlayerQuitFunction = "quit"; +#endif + + private readonly string GeneratedFileTag = "FirebaseMessagingActivityGenerated"; + // If this tag is present on the generated file, it will not be replaced. + private readonly string PreserveTag = "FirebasePreserve"; + + private readonly string OutputPath = Path.Combine("Plugins", "Android"); + private readonly string OutputFilename = "MessagingUnityPlayerActivity.java"; + + public int callbackOrder { get { return 0; } } + public void OnPreprocessBuild(BuildReport report) { + // Only run this logic when building for Android. + if (EditorUserBuildSettings.activeBuildTarget != BuildTarget.Android) { + return; + } + + // Determine what the contents of the generated file should be. + string baseClass = BaseActivityClass; +#if UNITY_2023_1_OR_NEWER + // If using the new GameActivity logic, we want to generate with that base class. + if (PlayerSettings.Android.applicationEntry.HasFlag(AndroidApplicationEntry.GameActivity)) { + baseClass = BaseGameActivityClass; + } +#endif + string fileContents = System.String.Format(System.String.Join("\n", ActivityClassContents), + baseClass, UnityPlayerQuitFunction); + + // Check if the file has already been generated. + string[] oldAssetGuids = AssetDatabase.FindAssets("l:" + GeneratedFileTag); + if (oldAssetGuids != null && oldAssetGuids.Length > 0) { + if (oldAssetGuids.Length != 1) { + Debug.LogWarning("FirebaseMessagingActivityEditor found multiple generated files with the label: " + + GeneratedFileTag + " \n" + + "No changes will be made, but this can potentially cause problems on Android with duplicate classes.\n" + + "Please check for duplicate classes, and remove any unnecessary uses of the label."); + return; + } + string oldAssetPath = AssetDatabase.GUIDToAssetPath(oldAssetGuids[0]); + Object oldAsset = AssetDatabase.LoadMainAssetAtPath(oldAssetPath); + if (oldAsset != null) { + string oldAssetFullPath = Path.Combine(Application.dataPath, "..", oldAssetPath); + string oldFileContents = System.IO.File.ReadAllText(oldAssetFullPath); + // If the old file matches what we would generate, exit early. + if (oldFileContents == fileContents) { + return; + } + // If the generated file has been tagged to be preserved, don't change it. + string[] labelList = AssetDatabase.GetLabels(oldAsset); + if (labelList.Contains(PreserveTag)) { + return; + } + // Delete the old asset. + Debug.Log("Changes detected, regenerating " + oldAssetPath + "\n" + + "To preserve local changes to that file, add the label: " + PreserveTag); + AssetDatabase.DeleteAsset(oldAssetPath); + } + } + + // Generate the new file. + string newAssetFullDirectory = Path.Combine(Application.dataPath, OutputPath); + System.IO.Directory.CreateDirectory(newAssetFullDirectory); + System.IO.File.WriteAllText(Path.Combine(newAssetFullDirectory, OutputFilename), fileContents); + string newAssetLocalPath = Path.Combine("Assets", OutputPath, OutputFilename); + AssetDatabase.ImportAsset(newAssetLocalPath); + Object newAsset = AssetDatabase.LoadMainAssetAtPath(newAssetLocalPath); + AssetDatabase.SetLabels(newAsset, new[]{GeneratedFileTag}); + } +} + +} // namespace Firebase.Messaging.Editor diff --git a/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs.meta b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs.meta new file mode 100644 index 0000000..37fab22 --- /dev/null +++ b/Assets/Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38cf8316372e4943aee735c624262e05 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/Messaging/FirebaseMessagingActivityGenerator.cs +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/MessagingDependencies.xml b/Assets/Firebase/Editor/MessagingDependencies.xml new file mode 100644 index 0000000..418788a --- /dev/null +++ b/Assets/Firebase/Editor/MessagingDependencies.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + Assets/Firebase/m2repository + + + + diff --git a/Assets/Firebase/Editor/MessagingDependencies.xml.meta b/Assets/Firebase/Editor/MessagingDependencies.xml.meta new file mode 100644 index 0000000..5e893fb --- /dev/null +++ b/Assets/Firebase/Editor/MessagingDependencies.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 992fedef98ac42209a9d26d5bf364adf +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/MessagingDependencies.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/generate_xml_from_google_services_json.exe b/Assets/Firebase/Editor/generate_xml_from_google_services_json.exe new file mode 100644 index 0000000..2d31b04 Binary files /dev/null and b/Assets/Firebase/Editor/generate_xml_from_google_services_json.exe differ diff --git a/Assets/Firebase/Editor/generate_xml_from_google_services_json.exe.meta b/Assets/Firebase/Editor/generate_xml_from_google_services_json.exe.meta new file mode 100644 index 0000000..4a3249c --- /dev/null +++ b/Assets/Firebase/Editor/generate_xml_from_google_services_json.exe.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae88c0972b7448b5b36def1716f1d711 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.exe +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/generate_xml_from_google_services_json.py b/Assets/Firebase/Editor/generate_xml_from_google_services_json.py new file mode 100644 index 0000000..789dceb --- /dev/null +++ b/Assets/Firebase/Editor/generate_xml_from_google_services_json.py @@ -0,0 +1,498 @@ +#!/usr/bin/python + +# Copyright 2016 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Stand-alone implementation of the Gradle Firebase plugin. + +Converts the services json file to xml: +https://googleplex-android.googlesource.com/platform/tools/base/+/studio-master-dev/build-system/google-services/src/main/groovy/com/google/gms/googleservices +""" + +__author__ = 'Wouter van Oortmerssen' + +import argparse +import ctypes +import json +import os +import platform +import sys +from xml.etree import ElementTree + +if platform.system().lower() == 'windows': + import ctypes.wintypes # pylint: disable=g-import-not-at-top + +# Map Python 2's unicode method to encode a string as bytes in python 3. +try: + unicode('') # See whether unicode class is available (Python < 3) +except NameError: + unicode = str # pylint: disable=redefined-builtin,invalid-name + +# Input filename if it isn't set. +DEFAULT_INPUT_FILENAME = 'app/google-services.json' +# Output filename if it isn't set. +DEFAULT_OUTPUT_FILENAME = 'res/values/googleservices.xml' +# Input filename for .plist files, if it isn't set. +DEFAULT_PLIST_INPUT_FILENAME = 'GoogleService-Info.plist' +# Output filename for .json files, if it isn't set. +DEFAULT_JSON_OUTPUT_FILENAME = 'google-services-desktop.json' + +OAUTH_CLIENT_TYPE_ANDROID_APP = 1 +OAUTH_CLIENT_TYPE_WEB = 3 + + +def read_xml_value(xml_node): + """Utility method for reading values from the plist XML. + + Args: + xml_node: An ElementTree node, that contains a value. + + Returns: + The value of the node, or None, if it could not be read. + """ + if xml_node.tag == 'string': + return xml_node.text + elif xml_node.tag == 'integer': + return int(xml_node.text) + elif xml_node.tag == 'real': + return float(xml_node.text) + elif xml_node.tag == 'false': + return 0 + elif xml_node.tag == 'true': + return 1 + else: + # other types of input are ignored. (data, dates, arrays, etc.) + return None + + +def construct_plist_dictionary(xml_root): + """Constructs a dictionary of values based on the contents of a plist file. + + Args: + xml_root: An ElementTree node, that represents the root of the xml file + that is to be parsed. (Which should be a dictionary containing + key-value pairs of the properties that need to be extracted.) + + Returns: + A dictionary, containing key-value pairs for all (supported) entries in the + node. + """ + xml_dict = xml_root.find('dict') + + if xml_dict is None: + return None + + plist_dict = {} + i = 0 + while i < len(xml_dict): + if xml_dict[i].tag == 'key': + key = xml_dict[i].text + i += 1 + if i < len(xml_dict): + value = read_xml_value(xml_dict[i]) + if value is not None: + plist_dict[key] = value + i += 1 + + return plist_dict + + +def update_dict_keys(key_map, input_dict): + """Creates a dict from input_dict with the same values but new keys. + + Two dictionaries are passed to this function: the key_map that represents a + mapping of source keys to destination keys, and the input_dict that is the + dictionary that is to be duplicated, replacing any key that matches a source + key with a destination key. Source keys that are not present in the + input_dict will not have their destination key represented in the result. + + In other words, if key_map is `{'old': 'new', 'foo': 'bar'}`, and input_dict + is `{'old': 10}`, the result will be `{'new': 10}`. + + Args: + key_map (dict): A dictionary of strings to strings that maps source keys to + destination keys. + input_dict (dict): The dictionary of string keys to any value type, which + is to be duplicated, replacing source keys with the corresponding + destination keys from key_map. + + Returns: + dict: A new dictionary with updated keys. + """ + return { + new_key: input_dict[old_key] + for (old_key, new_key) in key_map.items() + if old_key in input_dict + } + + +def construct_google_services_json(xml_dict): + """Constructs a google services json file from a dictionary. + + Args: + xml_dict: A dictionary of all the key/value pairs that are needed for the + output json file. + Returns: + A string representing the output json file. + """ + + try: + json_struct = { + 'project_info': + update_dict_keys( + { + 'GCM_SENDER_ID': 'project_number', + 'DATABASE_URL': 'firebase_url', + 'PROJECT_ID': 'project_id', + 'STORAGE_BUCKET': 'storage_bucket' + }, xml_dict), + 'client': [{ + 'client_info': { + 'mobilesdk_app_id': xml_dict['GOOGLE_APP_ID'], + 'android_client_info': { + 'package_name': xml_dict['BUNDLE_ID'] + } + }, + 'api_key': [{ + 'current_key': xml_dict['API_KEY'] + }], + 'services': { + 'analytics_service': { + 'status': xml_dict['IS_ANALYTICS_ENABLED'] + }, + 'appinvite_service': { + 'status': xml_dict['IS_APPINVITE_ENABLED'] + } + } + },], + 'configuration_version': + '1' + } + # OAuth client is optional, but include it if present. + if 'CLIENT_ID' in xml_dict: + json_struct['client'][0]['oauth_client'] = [{ + 'client_id': xml_dict['CLIENT_ID'], + }] + return json.dumps(json_struct, indent=2) + except KeyError as e: + sys.stderr.write('Could not find key in plist file: [%s]\n' % (e.args[0])) + return None + + +def convert_plist_to_json(plist_string, input_filename): + """Converts an input plist string into a .json file and saves it. + + Args: + plist_string: The contents of the loaded plist file. + + input_filename: The file name that the plist data was read from. + Returns: + the converted string, or None if there were errors. + """ + + try: + root = ElementTree.fromstring(plist_string) + except ElementTree.ParseError: + sys.stderr.write('Error parsing file %s.\n' + 'It does not appear to be valid XML.\n' % (input_filename)) + return None + + plist_dict = construct_plist_dictionary(root) + if plist_dict is None: + sys.stderr.write('In file %s, could not locate a top-level \'dict\' ' + 'element.\n' + 'File format should be plist XML, with a top-level ' + 'dictionary containing project settings as key-value ' + 'pairs.\n' % (input_filename)) + return None + + json_string = construct_google_services_json(plist_dict) + return json_string + + +def gen_string(parent, name, text): + """Generate one element and put into the list of keeps. + + Args: + parent: The object that will hold the string. + name: The name to store the string under. + text: The text of the string. + """ + if text: + prev = parent.get('tools:keep', '') + if prev: + prev += ',' + parent.set('tools:keep', prev + '@string/' + name) + child = ElementTree.SubElement(parent, 'string', { + 'name': name, + 'translatable': 'false' + }) + child.text = text + + +def indent(elem, level=0): + """Recurse through XML tree and add indentation. + + Args: + elem: The element to recurse over + level: The current indentation level. + """ + i = '\n' + level*' ' + if elem is not None: + if not elem.text or not elem.text.strip(): + elem.text = i + ' ' + if not elem.tail or not elem.tail.strip(): + elem.tail = i + for elem in elem: + indent(elem, level+1) + if not elem.tail or not elem.tail.strip(): + elem.tail = i + else: + if level and (not elem.tail or not elem.tail.strip()): + elem.tail = i + + +def argv_as_unicode_win32(): + """Returns unicode command line arguments on windows. + """ + + get_command_line_w = ctypes.cdll.kernel32.GetCommandLineW + get_command_line_w.restype = ctypes.wintypes.LPCWSTR + + # CommandLineToArgvW parses the Unicode command line + command_line_to_argv_w = ctypes.windll.shell32.CommandLineToArgvW + command_line_to_argv_w.argtypes = [ + ctypes.wintypes.LPCWSTR, + ctypes.POINTER(ctypes.c_int) + ] + command_line_to_argv_w.restype = ctypes.POINTER( + ctypes.wintypes.LPWSTR) + + argc = ctypes.c_int(0) + argv = command_line_to_argv_w(get_command_line_w(), argc) + + # Strip the python executable from the arguments if it exists + # (It would be listed as the first argument on the windows command line, but + # not in the arguments to the python script) + sys_argv_len = len(sys.argv) + return [unicode(argv[i]) for i in + range(argc.value - sys_argv_len, argc.value)] + + +def main(): + parser = argparse.ArgumentParser( + description=(( + 'Converts a Firebase %s into %s similar to the Gradle plugin, or ' + 'converts a Firebase %s into a %s suitible for use on desktop apps.' % + (DEFAULT_INPUT_FILENAME, DEFAULT_OUTPUT_FILENAME, + DEFAULT_PLIST_INPUT_FILENAME, DEFAULT_JSON_OUTPUT_FILENAME)))) + parser.add_argument('-i', help='Override input file name', + metavar='FILE', required=False) + parser.add_argument('-o', help='Override destination file name', + metavar='FILE', required=False) + parser.add_argument('-p', help=('Package ID to select within the set of ' + 'packages in the input file. If this is ' + 'not specified, the first package in the ' + 'input file is selected.')) + parser.add_argument('-l', help=('List all package IDs referenced by the ' + 'input file. If this is specified, ' + 'the output file is not created.'), + action='store_true', default=False, required=False) + parser.add_argument('-f', help=('Print project fields from the input file ' + 'in the form \'name=value\\n\' for each ' + 'field. If this is specified, the output ' + 'is not created.'), + action='store_true', default=False, required=False) + parser.add_argument( + '--plist', + help=( + 'Specifies a plist file to convert to a JSON configuration file. ' + 'If this is enabled, the script will expect a .plist file as input, ' + 'which it will convert into %s file. The output file is ' + '*not* suitable for use with Firebase on Android.' % + (DEFAULT_JSON_OUTPUT_FILENAME)), + action='store_true', + default=False, + required=False) + + # python 2 on Windows doesn't handle unicode arguments well, so we need to + # pre-process the command line arguments before trying to parse them. + if platform.system() == 'Windows': + sys.argv = argv_as_unicode_win32() + + args = parser.parse_args() + + if args.plist: + input_filename = DEFAULT_PLIST_INPUT_FILENAME + output_filename = DEFAULT_JSON_OUTPUT_FILENAME + else: + input_filename = DEFAULT_INPUT_FILENAME + output_filename = DEFAULT_OUTPUT_FILENAME + + if args.i: + # Encode the input string (type unicode) as a normal string (type str) + # using the 'utf-8' encoding so that it can be worked with the same as + # input names from other sources (like the defaults). + input_filename_raw = args.i.encode('utf-8') + # Decode the filename to a unicode string using the 'utf-8' encoding to + # properly handle filepaths with unicode characters in them. + input_filename = input_filename_raw.decode('utf-8') + + if args.o: + output_filename = args.o + + with open(input_filename, 'r') as ifile: + file_string = ifile.read() + + json_string = None + if args.plist: + json_string = convert_plist_to_json(file_string, input_filename) + if json_string is None: + return 1 + jsobj = json.loads(json_string) + else: + jsobj = json.loads(file_string) + + root = ElementTree.Element('resources') + root.set('xmlns:tools', 'http://schemas.android.com/tools') + + project_info = jsobj.get('project_info') + if project_info: + gen_string(root, 'firebase_database_url', project_info.get('firebase_url')) + gen_string(root, 'gcm_defaultSenderId', project_info.get('project_number')) + gen_string(root, 'google_storage_bucket', + project_info.get('storage_bucket')) + gen_string(root, 'project_id', project_info.get('project_id')) + + if args.f: + if not project_info: + sys.stderr.write('No project info found in %s.' % input_filename) + return 1 + for field, value in sorted(project_info.items()): + sys.stdout.write('%s=%s\n' % (field, value)) + return 0 + + packages = set() + client_list = jsobj.get('client') + if client_list: + # Search for the user specified package in the file. + selected_package_name = '' + selected_client = client_list[0] + find_package_name = args.p + for client in client_list: + package_name = client.get('client_info', {}).get( + 'android_client_info', {}).get('package_name', '') + if not package_name: + package_name = client.get('oauth_client', {}).get( + 'android_info', {}).get('package_name', '') + if package_name: + if not selected_package_name: + selected_package_name = package_name + selected_client = client + if package_name == find_package_name: + selected_package_name = package_name + selected_client = client + packages.add(package_name) + + if args.p and selected_package_name != find_package_name: + sys.stderr.write('No packages found in %s which match the package ' + 'name %s\n' + '\n' + 'Found the following:\n' + '%s\n' % (input_filename, find_package_name, + '\n'.join(packages))) + return 1 + + client_api_key = selected_client.get('api_key') + if client_api_key: + client_api_key0 = client_api_key[0] + gen_string(root, 'google_api_key', client_api_key0.get('current_key')) + gen_string(root, 'google_crash_reporting_api_key', + client_api_key0.get('current_key')) + + client_info = selected_client.get('client_info') + if client_info: + gen_string(root, 'google_app_id', client_info.get('mobilesdk_app_id')) + + # Only include the first matching OAuth client ID per type. + client_id_web_parsed = False + client_id_android_parsed = False + + oauth_client_list = selected_client.get('oauth_client') + if oauth_client_list: + for oauth_client in oauth_client_list: + client_type = oauth_client.get('client_type') + client_id = oauth_client.get('client_id') + if not (client_type and client_id): continue + if (client_type == OAUTH_CLIENT_TYPE_WEB and + not client_id_web_parsed): + gen_string(root, 'default_web_client_id', client_id) + client_id_web_parsed = True + if (client_type == OAUTH_CLIENT_TYPE_ANDROID_APP and + not client_id_android_parsed): + gen_string(root, 'default_android_client_id', client_id) + client_id_android_parsed = True + + services = selected_client.get('services') + if services: + ads_service = services.get('ads_service') + if ads_service: + gen_string(root, 'test_banner_ad_unit_id', + ads_service.get('test_banner_ad_unit_id')) + gen_string(root, 'test_interstitial_ad_unit_id', + ads_service.get('test_interstitial_ad_unit_id')) + analytics_service = services.get('analytics_service') + if analytics_service: + analytics_property = analytics_service.get('analytics_property') + if analytics_property: + gen_string(root, 'ga_trackingId', + analytics_property.get('tracking_id')) + # enable this once we have an example if this service being present + # in the json data: + maps_service_enabled = False + if maps_service_enabled: + maps_service = services.get('maps_service') + if maps_service: + maps_api_key = maps_service.get('api_key') + if maps_api_key: + for k in range(0, len(maps_api_key)): + # generates potentially multiple of these keys, which is + # the same behavior as the java plugin. + gen_string(root, 'google_maps_key', + maps_api_key[k].get('maps_api_key')) + + tree = ElementTree.ElementTree(root) + + indent(root) + + if args.l: + for package in sorted(packages): + if package: + sys.stdout.write(package + '\n') + else: + path = os.path.dirname(output_filename) + + if path and not os.path.exists(path): + os.makedirs(path) + + if not args.plist: + tree.write(output_filename, 'utf-8', True) + else: + with open(output_filename, 'w') as ofile: + ofile.write(json_string) + + return 0 + +if __name__ == '__main__': + sys.exit(main()) diff --git a/Assets/Firebase/Editor/generate_xml_from_google_services_json.py.meta b/Assets/Firebase/Editor/generate_xml_from_google_services_json.py.meta new file mode 100644 index 0000000..4af4016 --- /dev/null +++ b/Assets/Firebase/Editor/generate_xml_from_google_services_json.py.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f18ed76c0f04ce0a65736104f913ef8 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.py +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/network_request.exe b/Assets/Firebase/Editor/network_request.exe new file mode 100644 index 0000000..30f5e8e Binary files /dev/null and b/Assets/Firebase/Editor/network_request.exe differ diff --git a/Assets/Firebase/Editor/network_request.exe.meta b/Assets/Firebase/Editor/network_request.exe.meta new file mode 100644 index 0000000..5d1fb54 --- /dev/null +++ b/Assets/Firebase/Editor/network_request.exe.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3cd5d0a941c4cdc8ab4b1b684b05191 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/network_request.exe +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Editor/network_request.py b/Assets/Firebase/Editor/network_request.py new file mode 100644 index 0000000..04f055f --- /dev/null +++ b/Assets/Firebase/Editor/network_request.py @@ -0,0 +1,416 @@ +# Copyright 2019 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Wrapper script which makes a network request. + +Basic Usage: network_request.py post + --url + --header

(optional, support multiple) + --body (optional) + --timeout (optional) + --verbose (optional) +""" + +import argparse +import inspect +import logging +import socket +import sys + +# pylint: disable=g-import-not-at-top +# pylint: disable=g-importing-member +try: + from six.moves.http_client import HTTPSConnection + from six.moves.http_client import HTTPConnection + from six.moves.http_client import HTTPException +except ImportError: + from http.client import HTTPSConnection + from http.client import HTTPConnection + from http.client import HTTPException + +try: + from six.moves.urllib.parse import urlparse +except ImportError: + from urllib.parse import urlparse +# pylint: enable=g-import-not-at-top +# pylint: enable=g-importing-member + +# Set up logger as soon as possible +formatter = logging.Formatter('[%(levelname)s] %(message)s') + +handler = logging.StreamHandler(stream=sys.stdout) +handler.setFormatter(formatter) +handler.setLevel(logging.INFO) + +logger = logging.getLogger(__name__) +logger.addHandler(handler) +logger.setLevel(logging.INFO) + +# Custom exit codes for known issues. +# System exit codes in python are valid from 0 - 256, so we will map some common +# ones here to understand successes and failures. +# Uses lower ints to not collide w/ HTTP status codes that the script may return +EXIT_CODE_SUCCESS = 0 +EXIT_CODE_SYS_ERROR = 1 +EXIT_CODE_INVALID_REQUEST_VALUES = 2 +EXIT_CODE_GENERIC_HTTPLIB_ERROR = 3 +EXIT_CODE_HTTP_TIMEOUT = 4 +EXIT_CODE_HTTP_REDIRECT_ERROR = 5 +EXIT_CODE_HTTP_NOT_FOUND_ERROR = 6 +EXIT_CODE_HTTP_SERVER_ERROR = 7 +EXIT_CODE_HTTP_UNKNOWN_ERROR = 8 + +MAX_EXIT_CODE = 8 + +# All used http verbs +POST = 'POST' + + +def unwrap_kwarg_namespace(func): + """Transform a Namespace object from argparse into proper args and kwargs. + + For a function that will be delegated to from argparse, inspect all of the + argments and extract them from the Namespace object. + + Args: + func: the function that we are wrapping to modify behavior + + Returns: + a new function that unwraps all of the arguments in a namespace and then + delegates to the passed function with those args. + """ + # When we move to python 3, getfullargspec so that we can tell the + # difference between args and kwargs -- then this could be used for functions + # that have both args and kwargs + if 'getfullargspec' in dir(inspect): + argspec = inspect.getfullargspec(func) + else: + argspec = inspect.getargspec(func) # Python 2 compatibility. + + def wrapped(argparse_namespace=None, **kwargs): + """Take a Namespace object and map it to kwargs. + + Inspect the argspec of the passed function. Loop over all the args that + are present in the function and try to map them by name to arguments in the + namespace. For keyword arguments, we do not require that they be present + in the Namespace. + + Args: + argparse_namespace: an arparse.Namespace object, the result of calling + argparse.ArgumentParser().parse_args() + **kwargs: keyword arguments that may be passed to the original function + Returns: + The return of the wrapped function from the parent. + + Raises: + ValueError in the event that an argument is passed to the cli that is not + in the set of named kwargs + """ + if not argparse_namespace: + return func(**kwargs) + + reserved_namespace_keywords = ['func'] + new_kwargs = {} + + args = argspec.args or [] + for arg_name in args: + passed_value = getattr(argparse_namespace, arg_name, None) + if passed_value is not None: + new_kwargs[arg_name] = passed_value + + for namespace_key in vars(argparse_namespace).keys(): + # ignore namespace keywords that have been set not passed in via cli + if namespace_key in reserved_namespace_keywords: + continue + + # make sure that we haven't passed something we should be processing + if namespace_key not in args: + raise ValueError('CLI argument "{}" does not match any argument in ' + 'function {}'.format(namespace_key, func.__name__)) + + return func(**new_kwargs) + + wrapped.__name__ = func.__name__ + return wrapped + + +class NetworkRequest(object): + """A container for an network request object. + + This class holds on to all of the attributes necessary for making a + network request via httplib. + """ + + def __init__(self, url, method, headers, body, timeout): + self.url = url.lower() + self.parsed_url = urlparse(self.url) + self.method = method + self.headers = headers + self.body = body + self.timeout = timeout + self.is_secure_connection = self.is_secure_connection() + + def execute_request(self): + """"Execute the request, and get a response. + + Returns: + an HttpResponse object from httplib + """ + if self.is_secure_connection: + conn = HTTPSConnection(self.get_hostname(), timeout=self.timeout) + else: + conn = HTTPConnection(self.get_hostname(), timeout=self.timeout) + + conn.request(self.method, self.url, self.body, self.headers) + response = conn.getresponse() + return response + + def get_hostname(self): + """Return the hostname for the url.""" + return self.parsed_url.netloc + + def is_secure_connection(self): + """Checks for a secure connection of https. + + Returns: + True if the scheme is "https"; False if "http" + + Raises: + ValueError when the scheme does not match http or https + """ + scheme = self.parsed_url.scheme + + if scheme == 'http': + return False + elif scheme == 'https': + return True + else: + raise ValueError('The url scheme is not "http" nor "https"' + ': {}'.format(scheme)) + + +def parse_colon_delimited_options(option_args): + """Parses a key value from a string. + + Args: + option_args: Key value string delimited by a color, ex: ("key:value") + + Returns: + Return an array with the key as the first element and value as the second + + Raises: + ValueError: If the key value option is not formatted correctly + """ + options = {} + + if not option_args: + return options + + for single_arg in option_args: + values = single_arg.split(':') + if len(values) != 2: + raise ValueError('An option arg must be a single key/value pair ' + 'delimited by a colon - ex: "thing_key:thing_value"') + + key = values[0].strip() + value = values[1].strip() + options[key] = value + + return options + + +def make_request(request): + """Makes a synchronous network request and return the HTTP status code. + + Args: + request: a well formulated request object + + Returns: + The HTTP status code of the network request. + '1' maps to invalid request headers. + """ + + logger.info('Sending network request -') + logger.info('\tUrl: %s', request.url) + logger.debug('\tMethod: %s', request.method) + logger.debug('\tHeaders: %s', request.headers) + logger.debug('\tBody: %s', request.body) + + try: + response = request.execute_request() + except socket.timeout: + logger.exception( + 'Timed out post request to %s in %d seconds for request body: %s', + request.url, request.timeout, request.body) + return EXIT_CODE_HTTP_TIMEOUT + except (HTTPException, socket.error): + logger.exception( + 'Encountered generic exception in posting to %s with request body %s', + request.url, request.body) + return EXIT_CODE_GENERIC_HTTPLIB_ERROR + + status = response.status + headers = response.getheaders() + logger.info('Received Network response -') + logger.info('\tStatus code: %d', status) + logger.debug('\tResponse headers: %s', headers) + + if status < 200 or status > 299: + logger.error('Request (%s) failed with status code %d\n', request.url, + status) + + # If we wanted this script to support get, we need to + # figure out what mechanism we intend for capturing the response + return status + + +@unwrap_kwarg_namespace +def post(url=None, header=None, body=None, timeout=5, verbose=False): + """Sends a post request. + + Args: + url: The url of the request + header: A list of headers for the request + body: The body for the request + timeout: Timeout in seconds for the request + verbose: Should debug logs be displayed + + Returns: + Return an array with the key as the first element and value as the second + """ + + if verbose: + handler.setLevel(logging.DEBUG) + logger.setLevel(logging.DEBUG) + + try: + logger.info('Parsing headers: %s', header) + headers = parse_colon_delimited_options(header) + except ValueError: + logging.exception('Could not parse the parameters with "--header": %s', + header) + return EXIT_CODE_INVALID_REQUEST_VALUES + + try: + request = NetworkRequest(url, POST, headers, body, float(timeout)) + except ValueError: + logger.exception('Invalid request values passed into the script.') + return EXIT_CODE_INVALID_REQUEST_VALUES + + status = make_request(request) + + # View exit code after running to get the http status code: 'echo $?' + return status + + +def get_argsparser(): + """Returns the argument parser. + + Returns: + Argument parser for the script. + """ + + parser = argparse.ArgumentParser( + description='The script takes in the arguments of a network request. ' + 'The network request is sent and the http status code will be' + 'returned as the exit code.') + subparsers = parser.add_subparsers(help='Commands:') + post_parser = subparsers.add_parser( + post.__name__, help='{} help'.format(post.__name__)) + post_parser.add_argument( + '--url', + help='Request url. Ex: https://www.google.com/somePath/', + required=True, + dest='url') + post_parser.add_argument( + '--header', + help='Request headers as a space delimited list of key ' + 'value pairs. Ex: "key1:value1 key2:value2"', + action='append', + required=False, + dest='header') + post_parser.add_argument( + '--body', + help='The body of the network request', + required=True, + dest='body') + post_parser.add_argument( + '--timeout', + help='The timeout in seconds', + default=10.0, + required=False, + dest='timeout') + post_parser.add_argument( + '--verbose', + help='Should verbose logging be outputted', + action='store_true', + default=False, + required=False, + dest='verbose') + post_parser.set_defaults(func=post) + return parser + + +def map_http_status_to_exit_code(status_code): + """Map an http status code to the appropriate exit code. + + Exit codes in python are valid from 0-256, so we want to map these to + predictable exit codes within range. + + Args: + status_code: the input status code that was output from the network call + function + + Returns: + One of our valid exit codes declared at the top of the file or a generic + unknown error code + """ + if status_code <= MAX_EXIT_CODE: + return status_code + + if status_code > 199 and status_code < 300: + return EXIT_CODE_SUCCESS + + if status_code == 302: + return EXIT_CODE_HTTP_REDIRECT_ERROR + + if status_code == 404: + return EXIT_CODE_HTTP_NOT_FOUND_ERROR + + if status_code > 499: + return EXIT_CODE_HTTP_SERVER_ERROR + + return EXIT_CODE_HTTP_UNKNOWN_ERROR + + +def main(): + """Main function to run the program. + + Parse system arguments and delegate to the appropriate function. + + Returns: + A status code - either an http status code or a custom error code + """ + parser = get_argsparser() + subparser_action = parser.parse_args() + try: + return subparser_action.func(subparser_action) + except ValueError: + logger.exception('Invalid arguments passed.') + parser.print_help(sys.stderr) + return EXIT_CODE_INVALID_REQUEST_VALUES + return EXIT_CODE_GENERIC_HTTPLIB_ERROR + +if __name__ == '__main__': + exit_code = map_http_status_to_exit_code(main()) + sys.exit(exit_code) diff --git a/Assets/Firebase/Editor/network_request.py.meta b/Assets/Firebase/Editor/network_request.py.meta new file mode 100644 index 0000000..c8450b3 --- /dev/null +++ b/Assets/Firebase/Editor/network_request.py.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6e32fecbfd44fab946fa160e4861924 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Editor/network_request.py +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins.meta b/Assets/Firebase/Plugins.meta new file mode 100644 index 0000000..25833da --- /dev/null +++ b/Assets/Firebase/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74641d9677971a54a943a4df768f2917 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Android.meta b/Assets/Firebase/Plugins/Android.meta new file mode 100644 index 0000000..7cca179 --- /dev/null +++ b/Assets/Firebase/Plugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56dcb07281839a24d96a78d39d49089c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar b/Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar new file mode 100644 index 0000000..c1a8107 Binary files /dev/null and b/Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar differ diff --git a/Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar.meta b/Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar.meta new file mode 100644 index 0000000..8420858 --- /dev/null +++ b/Assets/Firebase/Plugins/Android/firebase-messaging-cpp.aar.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 0be2cda49adc4b61a7e9eb9bf669fdab +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Android/firebase-messaging-cpp.aar +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Analytics.dll b/Assets/Firebase/Plugins/Firebase.Analytics.dll new file mode 100644 index 0000000..6228d2a Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Analytics.dll differ diff --git a/Assets/Firebase/Plugins/Firebase.Analytics.dll.meta b/Assets/Firebase/Plugins/Firebase.Analytics.dll.meta new file mode 100644 index 0000000..bf8d631 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Analytics.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 816270c2a2a348e59cb9b7b096a24f50 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Analytics.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Analytics.pdb b/Assets/Firebase/Plugins/Firebase.Analytics.pdb new file mode 100644 index 0000000..ee4b13e Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Analytics.pdb differ diff --git a/Assets/Firebase/Plugins/Firebase.Analytics.pdb.meta b/Assets/Firebase/Plugins/Firebase.Analytics.pdb.meta new file mode 100644 index 0000000..0d924c1 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Analytics.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 778e0739eb634ac6beb8b1dbac5d17f0 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Analytics.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.App.dll b/Assets/Firebase/Plugins/Firebase.App.dll new file mode 100644 index 0000000..58df162 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.App.dll differ diff --git a/Assets/Firebase/Plugins/Firebase.App.dll.meta b/Assets/Firebase/Plugins/Firebase.App.dll.meta new file mode 100644 index 0000000..e47da3f --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.App.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 7311924048bd457bac6d713576c952da +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.App.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.App.pdb b/Assets/Firebase/Plugins/Firebase.App.pdb new file mode 100644 index 0000000..bfdeba9 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.App.pdb differ diff --git a/Assets/Firebase/Plugins/Firebase.App.pdb.meta b/Assets/Firebase/Plugins/Firebase.App.pdb.meta new file mode 100644 index 0000000..d1fa8b8 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.App.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 44907853a9e64be4a31076a763ae13b3 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.App.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Crashlytics.dll b/Assets/Firebase/Plugins/Firebase.Crashlytics.dll new file mode 100644 index 0000000..204d673 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Crashlytics.dll differ diff --git a/Assets/Firebase/Plugins/Firebase.Crashlytics.dll.meta b/Assets/Firebase/Plugins/Firebase.Crashlytics.dll.meta new file mode 100644 index 0000000..1be1093 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Crashlytics.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 4a712f6ef12f441e9d8b053a3c30ad55 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Crashlytics.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Crashlytics.pdb b/Assets/Firebase/Plugins/Firebase.Crashlytics.pdb new file mode 100644 index 0000000..eefa1c2 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Crashlytics.pdb differ diff --git a/Assets/Firebase/Plugins/Firebase.Crashlytics.pdb.meta b/Assets/Firebase/Plugins/Firebase.Crashlytics.pdb.meta new file mode 100644 index 0000000..2efa7bb --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Crashlytics.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: cf098bb37bd1464083da05173619936e +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Crashlytics.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Messaging.dll b/Assets/Firebase/Plugins/Firebase.Messaging.dll new file mode 100644 index 0000000..cb3295d Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Messaging.dll differ diff --git a/Assets/Firebase/Plugins/Firebase.Messaging.dll.meta b/Assets/Firebase/Plugins/Firebase.Messaging.dll.meta new file mode 100644 index 0000000..f1cca28 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Messaging.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 0177f1334f3944ac8ca3df55e1d98660 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Messaging.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Messaging.pdb b/Assets/Firebase/Plugins/Firebase.Messaging.pdb new file mode 100644 index 0000000..286eae1 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Messaging.pdb differ diff --git a/Assets/Firebase/Plugins/Firebase.Messaging.pdb.meta b/Assets/Firebase/Plugins/Firebase.Messaging.pdb.meta new file mode 100644 index 0000000..c4d55a9 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Messaging.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 45f91ddef5f24fee8410c18fdc5e55b6 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Messaging.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Platform.dll b/Assets/Firebase/Plugins/Firebase.Platform.dll new file mode 100644 index 0000000..5a9f083 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Platform.dll differ diff --git a/Assets/Firebase/Plugins/Firebase.Platform.dll.meta b/Assets/Firebase/Plugins/Firebase.Platform.dll.meta new file mode 100644 index 0000000..24385bd --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Platform.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 7d3eec03d7e241a48941e038118c5e6a +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Platform.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.Platform.pdb b/Assets/Firebase/Plugins/Firebase.Platform.pdb new file mode 100644 index 0000000..0cf413f Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.Platform.pdb differ diff --git a/Assets/Firebase/Plugins/Firebase.Platform.pdb.meta b/Assets/Firebase/Plugins/Firebase.Platform.pdb.meta new file mode 100644 index 0000000..33e86ed --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.Platform.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: af8fc0c835824578b855d4c0ed7b16ab +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.Platform.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.TaskExtension.dll b/Assets/Firebase/Plugins/Firebase.TaskExtension.dll new file mode 100644 index 0000000..94637a4 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.TaskExtension.dll differ diff --git a/Assets/Firebase/Plugins/Firebase.TaskExtension.dll.meta b/Assets/Firebase/Plugins/Firebase.TaskExtension.dll.meta new file mode 100644 index 0000000..097f6e6 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.TaskExtension.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: f5d4069c578548ba9f199b46d61bf06d +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.TaskExtension.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Firebase.TaskExtension.pdb b/Assets/Firebase/Plugins/Firebase.TaskExtension.pdb new file mode 100644 index 0000000..deb9b06 Binary files /dev/null and b/Assets/Firebase/Plugins/Firebase.TaskExtension.pdb differ diff --git a/Assets/Firebase/Plugins/Firebase.TaskExtension.pdb.meta b/Assets/Firebase/Plugins/Firebase.TaskExtension.pdb.meta new file mode 100644 index 0000000..1dfb4a7 --- /dev/null +++ b/Assets/Firebase/Plugins/Firebase.TaskExtension.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 736717de9e57417d930d929ac556b287 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Firebase.TaskExtension.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/Google.MiniJson.dll b/Assets/Firebase/Plugins/Google.MiniJson.dll new file mode 100644 index 0000000..e06aa56 Binary files /dev/null and b/Assets/Firebase/Plugins/Google.MiniJson.dll differ diff --git a/Assets/Firebase/Plugins/Google.MiniJson.dll.meta b/Assets/Firebase/Plugins/Google.MiniJson.dll.meta new file mode 100644 index 0000000..eb7e33a --- /dev/null +++ b/Assets/Firebase/Plugins/Google.MiniJson.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 3ebb289656f1477fa263e62d36c6e329 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/Google.MiniJson.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS.meta b/Assets/Firebase/Plugins/iOS.meta new file mode 100644 index 0000000..587d77f --- /dev/null +++ b/Assets/Firebase/Plugins/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b78b51a58e165994f81fcb3ba889d64e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll new file mode 100644 index 0000000..ae18205 Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll.meta b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll.meta new file mode 100644 index 0000000..98f9ffb --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 52718a3a80d44aacb368bcc9d62dd804 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.Analytics.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb new file mode 100644 index 0000000..0266473 Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb.meta b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb.meta new file mode 100644 index 0000000..eefbe13 --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: e0a3fec4e6044b70added51eb3d310ee +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.Analytics.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.App.dll b/Assets/Firebase/Plugins/iOS/Firebase.App.dll new file mode 100644 index 0000000..8fec003 Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.App.dll differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.App.dll.meta b/Assets/Firebase/Plugins/iOS/Firebase.App.dll.meta new file mode 100644 index 0000000..51505a7 --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.App.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 5f3feda1a91343759b7eb58a29b492b7 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.App.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.App.pdb b/Assets/Firebase/Plugins/iOS/Firebase.App.pdb new file mode 100644 index 0000000..165d738 Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.App.pdb differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.App.pdb.meta b/Assets/Firebase/Plugins/iOS/Firebase.App.pdb.meta new file mode 100644 index 0000000..3122343 --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.App.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: e96748f6edd2467b95622dee98523c65 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.App.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll new file mode 100644 index 0000000..e08789b Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll.meta b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll.meta new file mode 100644 index 0000000..3f2245b --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 3c83c9a9845245cfbbab5a52932b5045 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.Crashlytics.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb new file mode 100644 index 0000000..b04a33d Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb.meta b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb.meta new file mode 100644 index 0000000..6aaf699 --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: fc067b050957416ea05be8e76ac98a69 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.Crashlytics.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll new file mode 100644 index 0000000..ce9850d Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll.meta b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll.meta new file mode 100644 index 0000000..f460951 --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 104bd79795964dd3a77a6fa53e729421 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.Messaging.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb new file mode 100644 index 0000000..74187b5 Binary files /dev/null and b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb differ diff --git a/Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb.meta b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb.meta new file mode 100644 index 0000000..5e64d57 --- /dev/null +++ b/Assets/Firebase/Plugins/iOS/Firebase.Messaging.pdb.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: db52be13d765411796629c696730d984 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/iOS/Firebase.Messaging.pdb +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64.meta b/Assets/Firebase/Plugins/x86_64.meta new file mode 100644 index 0000000..67b60b5 --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85c575d8a92a29c4cb562ecbac1c215a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle new file mode 100644 index 0000000..b8b312a Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle.meta new file mode 100644 index 0000000..6f28647 --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 35bfcced25264151bd76b628a1dfa989 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll new file mode 100644 index 0000000..6de3bb9 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll.meta new file mode 100644 index 0000000..97b1a78 --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: c48626ae27ed478483ba85fd7c81c04b +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so new file mode 100644 index 0000000..e7f3ae4 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so.meta new file mode 100644 index 0000000..7c5f43e --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 590090df30d142acba7e7be939fd2988 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppAnalytics.so +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle new file mode 100644 index 0000000..60189d6 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle.meta new file mode 100644 index 0000000..29b0c9d --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: db33cacaee9244768effe1c685b48760 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.bundle +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll new file mode 100644 index 0000000..13aa0f1 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll.meta new file mode 100644 index 0000000..e50eadb --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 66adb52e65464b858b1fe1b6e092a9dd +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so new file mode 100644 index 0000000..9275ca7 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so.meta new file mode 100644 index 0000000..4f23471 --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 7e0dbda61aaa430fb7d0913f7f100eef +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppApp-12_8_0.so +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle new file mode 100644 index 0000000..c28d4d6 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle.meta new file mode 100644 index 0000000..2c74bd1 --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 5d46f3be89af4272b9f8990f26048598 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppMessaging.bundle +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll new file mode 100644 index 0000000..1b2395b Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll.meta new file mode 100644 index 0000000..6e08f9f --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 25030b1944ee412881e89b8967a05294 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppMessaging.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so new file mode 100644 index 0000000..48d8889 Binary files /dev/null and b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so differ diff --git a/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so.meta b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so.meta new file mode 100644 index 0000000..6e6e0a5 --- /dev/null +++ b/Assets/Firebase/Plugins/x86_64/FirebaseCppMessaging.so.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 0625d28dbdd6464a9915e074cb465acf +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/Plugins/x86_64/FirebaseCppMessaging.so +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository.meta b/Assets/Firebase/m2repository.meta new file mode 100644 index 0000000..fbf0680 --- /dev/null +++ b/Assets/Firebase/m2repository.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1cf9e5a06b484d645af49ced897aec26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com.meta b/Assets/Firebase/m2repository/com.meta new file mode 100644 index 0000000..435942c --- /dev/null +++ b/Assets/Firebase/m2repository/com.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 946c2a0cf1bc5db46bf8d34f0aa30b27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google.meta b/Assets/Firebase/m2repository/com/google.meta new file mode 100644 index 0000000..bd26ea6 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 603b13f7ef5dcbb4e82488d0edb08a15 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase.meta b/Assets/Firebase/m2repository/com/google/firebase.meta new file mode 100644 index 0000000..b714619 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49e471f77d9ee984c8f021d12c3ec434 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity.meta new file mode 100644 index 0000000..af5a35d --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 017e482facc455f45a167c1346f3335c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0.meta new file mode 100644 index 0000000..cd86344 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4af573860f3cf5341bc33823748b758a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom new file mode 100644 index 0000000..55594df --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-analytics-unity + 12.8.0 + srcaar + + \ No newline at end of file diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom.meta new file mode 100644 index 0000000..319a55f --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 487dec2845d948a3bc1e62c5156f3912 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar new file mode 100644 index 0000000..7ba86e6 Binary files /dev/null and b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar differ diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar.meta new file mode 100644 index 0000000..b969003 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54052cbecb874f9692a8b382b61f214c +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.srcaar +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml new file mode 100644 index 0000000..d7df9fa --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml @@ -0,0 +1,9 @@ + + com.google.firebase + firebase-analytics-unity + + 12.8.0 + 12.8.0 + + + diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml.meta new file mode 100644 index 0000000..2f9d206 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 291f81d8ae2745cf913a96d116f2e3f7 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity.meta new file mode 100644 index 0000000..8071212 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 582d326c3f53fda469626ce8f3a3b869 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0.meta new file mode 100644 index 0000000..741ce54 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9622959658a108941941f91dbce13455 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom new file mode 100644 index 0000000..6a0a771 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-app-unity + 12.8.0 + srcaar + + \ No newline at end of file diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom.meta new file mode 100644 index 0000000..df315b7 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7114db9d92c4fe5bf7c3a64c9b144fd +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar new file mode 100644 index 0000000..7bae5c4 Binary files /dev/null and b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar differ diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar.meta new file mode 100644 index 0000000..a0380c9 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dcdbd7f82aa84194ad72a68e3ce9b47d +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.srcaar +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml new file mode 100644 index 0000000..9f17e50 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml @@ -0,0 +1,9 @@ + + com.google.firebase + firebase-app-unity + + 12.8.0 + 12.8.0 + + + diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml.meta new file mode 100644 index 0000000..68113e2 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96337775a7c941d88ea15f8026ad6f8e +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity.meta new file mode 100644 index 0000000..2219470 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3842e3e163edd5e48be271ba2839dcd6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0.meta new file mode 100644 index 0000000..50d85e9 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4d712409c2c945478f2edbc2d7ef21c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom new file mode 100644 index 0000000..737e0e8 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-crashlytics-unity + 12.8.0 + srcaar + + \ No newline at end of file diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom.meta new file mode 100644 index 0000000..037b09e --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 951ffca241f3498dab7f2e8a17e86c5e +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar new file mode 100644 index 0000000..71df1af Binary files /dev/null and b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar differ diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar.meta new file mode 100644 index 0000000..d5fd1a5 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 267d8a989a0b48b5be3ba6b7c7c95716 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.srcaar +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml new file mode 100644 index 0000000..2054061 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml @@ -0,0 +1,9 @@ + + com.google.firebase + firebase-crashlytics-unity + + 12.8.0 + 12.8.0 + + + diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml.meta new file mode 100644 index 0000000..c1893a5 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eda65244fc1b407e8948b25b31c17991 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity.meta new file mode 100644 index 0000000..111b081 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93d8867ae32fcd044b24237cd23f39b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0.meta new file mode 100644 index 0000000..db01989 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2a9a16643e9b16748a01cb73e813dada +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom new file mode 100644 index 0000000..ae1ae5f --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-messaging-unity + 12.8.0 + srcaar + + \ No newline at end of file diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom.meta new file mode 100644 index 0000000..2778f64 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46b0b84f2b4245feb818749b379fc5e1 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar new file mode 100644 index 0000000..2d49fc8 Binary files /dev/null and b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar differ diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar.meta new file mode 100644 index 0000000..7c17573 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73575eff53f94b15b607c2e2defa3d0b +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.srcaar +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml new file mode 100644 index 0000000..ed7fa68 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml @@ -0,0 +1,9 @@ + + com.google.firebase + firebase-messaging-unity + + 12.8.0 + 12.8.0 + + + diff --git a/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml.meta b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml.meta new file mode 100644 index 0000000..1f05a73 --- /dev/null +++ b/Assets/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6a5eb4df3694f6dac9ddc5451ac17db +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Firebase/m2repository/com/google/firebase/firebase-messaging-unity/maven-metadata.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo.meta b/Assets/GeneratedLocalRepo.meta new file mode 100644 index 0000000..e913853 --- /dev/null +++ b/Assets/GeneratedLocalRepo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef31d9304c845a5409e16cc234aa2b27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase.meta b/Assets/GeneratedLocalRepo/Firebase.meta new file mode 100644 index 0000000..6e7c252 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ad33eef1e326a046abe885dc4ad70c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository.meta new file mode 100644 index 0000000..522b99c --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e3cb11db6a63e24c9a2b519c7eb839a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com.meta new file mode 100644 index 0000000..d128865 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1d333d8717a443941914e587abd1b8a7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google.meta new file mode 100644 index 0000000..2dcbe92 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d829867bf6b775d418c66b24abb19984 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase.meta new file mode 100644 index 0000000..970881a --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8e811b9f66d6484a973d08d5d2ee3f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity.meta new file mode 100644 index 0000000..454c311 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9b0c5a2aedd723d4ab0fc02caf561d6b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0.meta new file mode 100644 index 0000000..98e7c74 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 44f0a95af761f9249a428d284df8d666 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.aar b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.aar new file mode 100644 index 0000000..7ba86e6 Binary files /dev/null and b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.aar differ diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.aar.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.aar.meta new file mode 100644 index 0000000..d3aa964 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: d329be592e4c5cc4480c2b33699a1915 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 0 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom new file mode 100644 index 0000000..441a75b --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-analytics-unity + 12.8.0 + aar + + \ No newline at end of file diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom.meta new file mode 100644 index 0000000..3c10019 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/12.8.0/firebase-analytics-unity-12.8.0.pom.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a2aa40ce243681f4d85a56aace6294c9 +labels: +- gpsr +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity.meta new file mode 100644 index 0000000..0a6ae3c --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90f19498e8d9fd4418fa7d154ff9e000 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0.meta new file mode 100644 index 0000000..37a5163 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7d1c44b73803dad46a71faba9ef925c2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.aar b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.aar new file mode 100644 index 0000000..7bae5c4 Binary files /dev/null and b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.aar differ diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.aar.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.aar.meta new file mode 100644 index 0000000..a2c7f9a --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 24c85b4455086ca40b18125a193bb16c +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 0 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom new file mode 100644 index 0000000..eba6576 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-app-unity + 12.8.0 + aar + + \ No newline at end of file diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom.meta new file mode 100644 index 0000000..f719b85 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-app-unity/12.8.0/firebase-app-unity-12.8.0.pom.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 054e8e14b678df3458cedd8b1896f2a0 +labels: +- gpsr +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity.meta new file mode 100644 index 0000000..61365ae --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d3fbf3eb6b9c3e4eaa65d4014cc6ebf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0.meta new file mode 100644 index 0000000..853af85 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 93437f1ad21bb5240bb790e22f310ef4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.aar b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.aar new file mode 100644 index 0000000..71df1af Binary files /dev/null and b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.aar differ diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.aar.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.aar.meta new file mode 100644 index 0000000..cb40949 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: f9a69ca143f5c37468611f4e763ec238 +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 0 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom new file mode 100644 index 0000000..f69e5a5 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-crashlytics-unity + 12.8.0 + aar + + \ No newline at end of file diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom.meta new file mode 100644 index 0000000..6b1a094 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/12.8.0/firebase-crashlytics-unity-12.8.0.pom.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 94dc1b2920705cb4aae3811bb93bb310 +labels: +- gpsr +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity.meta new file mode 100644 index 0000000..f352e21 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db81791426a7d404f952d45a7f3bb6f1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0.meta new file mode 100644 index 0000000..6f6abf0 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 444271c4e2f561640b89bece9ab979fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.aar b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.aar new file mode 100644 index 0000000..2d49fc8 Binary files /dev/null and b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.aar differ diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.aar.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.aar.meta new file mode 100644 index 0000000..f8e808d --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.aar.meta @@ -0,0 +1,34 @@ +fileFormatVersion: 2 +guid: 35c3b6861274f844da75a0ce799697bb +labels: +- gpsr +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 0 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom new file mode 100644 index 0000000..0daa8b4 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom @@ -0,0 +1,9 @@ + + + 4.0.0 + com.google.firebase + firebase-messaging-unity + 12.8.0 + aar + + \ No newline at end of file diff --git a/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom.meta b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom.meta new file mode 100644 index 0000000..ea9ece4 --- /dev/null +++ b/Assets/GeneratedLocalRepo/Firebase/m2repository/com/google/firebase/firebase-messaging-unity/12.8.0/firebase-messaging-unity-12.8.0.pom.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5e2310355589f2240b1c265be20ff953 +labels: +- gpsr +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds.meta b/Assets/GoogleMobileAds.meta new file mode 100644 index 0000000..c942cc9 --- /dev/null +++ b/Assets/GoogleMobileAds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05951c9eb5d88414e81c0c7f9c565947 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/CHANGELOG.md b/Assets/GoogleMobileAds/CHANGELOG.md new file mode 100644 index 0000000..3c6f69c --- /dev/null +++ b/Assets/GoogleMobileAds/CHANGELOG.md @@ -0,0 +1,1502 @@ +Google Mobile Ads Unity Plugin Change Log + +************** +Version 10.6.0 +************** + +- Updated the GMA iOS SDK dependency version to 12.12.0. +- Added proguard rules to prevent minification of public APIs of GMA Android and UMP SDK. + +Built and tested with: + +- Google Mobile Ads Android SDK 24.5.0. +- Google Mobile Ads iOS SDK 12.12.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.5.0 +************** + +- Add `PlacementID` field to all formats. +- Enable loading EDM4U for Editor platform while importing. +- Fix a crash when `MobileAds.GetPlatformVersion` is called. +- Fix missing `link.xml` when using the UPM package ([#3951](https://github.com/googleads/googleads-mobile-unity/issues/3951)). +- Add the latest Unity Editor LTS version flag `2021_3_56` to `AndroidBuildPreProcessor`. + +Built and tested with: + +- Google Mobile Ads Android SDK 24.5.0. +- Google Mobile Ads iOS SDK 12.11.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.4.2 +************** + +- Fix issue with macros in `BuildPreProcessor` for Unity Editor 2021. +- Added `androidx.lifecycle` dependency required for AppOpenAd. + +Built and tested with: + +- Google Mobile Ads Android SDK 24.5.0. +- Google Mobile Ads iOS SDK 12.9.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.4.1 +************** + +- **Version 10.4.0 has been deprecated. Please update to 10.4.1 instead.** +- Add `package` and `minSdkVersion` attribute to AndroidManifest.xml. + +Built and tested with: + +- Google Mobile Ads Android SDK 24.5.0. +- Google Mobile Ads iOS SDK 12.9.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.4.0 +************** + +- Updated the GMA Android SDK dependency version to 24.5.0. +- Updated the GMA iOS SDK dependency version to 12.9.0. +- Added Android build post processor to solve common build issues. For more information see, [Enable Gradle build post processor](https://developers.google.com/admob/unity/android). +- Fixed [#3718](https://github.com/googleads/googleads-mobile-unity/issues/3718). +- Updated the Android library source code location according to Unity's [Android Library](https://docs.unity3d.com/Manual/android-library-plugin-create.html) [(aka bundled) plug-in](https://docs.unity3d.com/2019.4/Documentation/Manual/PluginInspector.html) format. + - **Old location:** [source/android-library](https://github.com/googleads/googleads-mobile-unity/tree/main/source/android-library) + - **New location:** [source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib](https://github.com/googleads/googleads-mobile-unity/tree/main/source/plugin/Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib) + - This change makes the SDK more streamlined to build from source. +- Merged the Android Manifest files into a single one located under `src/main`. +- Fixed [#3810](https://github.com/googleads/googleads-mobile-unity/issues/3810) - crash on `AdapterResponseInfo.AdSourceName`. + +Built and tested with: + +- Google Mobile Ads Android SDK 24.5.0. +- Google Mobile Ads iOS SDK 12.9.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.3.0 +************** + +- Updated the GMA Android SDK dependency version to 24.4.0. +- Updated the GMA iOS SDK dependency version to 12.6.0. +- Fixed `RaiseAdEventsOnUnityMainThread ` by ensuring the events are always called back on Main thread even if the SDK is called on background thread. + +Built and tested with: + +- Google Mobile Ads Android SDK 24.4.0. +- Google Mobile Ads iOS SDK 12.6.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.2.0 +************** +- Updated the GMA Android SDK dependency version to 24.3.0. +- Updated the GMA iOS SDK dependency version to 12.5.0. +- Run AppOpen ads in Immersive mode for Android. This will prevent the 3 button navigation from showing up when ads are shown. + +Built and tested with: +- Google Mobile Ads Android SDK 24.3.0. +- Google Mobile Ads iOS SDK 12.5.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.186 + +************** +Version 10.1.0 +************** +- Updated UMP SDK dependency on Android to 3.2.0 and on iOS to 3.0.0. +- Updated the GMA Android SDK dependency version to 24.2.0. +- Updated the GMA iOS SDK dependency version to 12.3.0. +- Updated SKAdNetworkIdentifiers List on iOS to reflect latest additions. +- Supports Preloading APIs on iOS and Android. +- Refactored Unity Editor Banner experience to be inline with Android and iOS behavior. +- Fixed a bug on AdRequest where setting the CustomTargeting parameter was not being propagated. +- Run fullscreen ads in Immersive mode for Android. This will prevent the 3 button navigation from showing up when ads are shown. +- Fixed crash on rendering Native Overlay ads due to conflict of icon and background IDs with other similarly named Resource ID's. + +Built and tested with: +- Google Mobile Ads Android SDK 24.2.0. +- Google Mobile Ads iOS SDK 12.3.0. +- Google User Messaging Platform Android SDK 3.2.0 +- Google User Messaging Platform iOS SDK 3.0.0 +- External Dependency Manager for Unity 1.2.185 + +************** +Version 10.0.0 +************** +- Updated the GMA Android SDK dependency version to 24.1.0. +- Updated the GMA iOS SDK dependency version to 12.2.0. +- Removed deprecated `AdFailedToLoadEventArgs` class. Use `LoadAdError` directly. +- Removed deprecated `AdValueEventArgs` class. Use `AdValue` directly. +- Changed the default behavior to True for OPTIMIZE_INITIALIZATION and +OPTIMIZE_AD_LOADING flags to align with GMA Android 24.0.0. +- Replaced `Optimize Ad Loading` and `Optimize Initialization` with +`Disable ad loading optimization` and `Disable initialization optimzation` +- Removed "Remove property tag from GMA Android SDK" feature from Google Mobile +Ads Editor Settings as this tag has been removed from GMA Android SDK v.24.0.0. +- Removed Preloading APIs for iOS as part of upgrade to newer to newer APIs. + +Built and tested with: +- Google Mobile Ads Android SDK 24.1.0. +- Google Mobile Ads iOS SDK 12.2.0. +- Google User Messaging Platform Android SDK 3.1.0 +- Google User Messaging Platform iOS SDK 2.7.0 +- External Dependency Manager for Unity 1.2.185 + +************** +Version 9.6.0 +************** +- Added ability to return correct native template view size on Android. +- Fixed issue with Native Overlay Icon not being clickable. +- Added `GetVersion` API to MobileAds class to be able to fetch the GMA Unity SDK Version. +- Fire `OnUserEarnedReward` once the ad counter expires when showing Rewarded ads in Unity Editor. + +Built and tested with: +- Google Mobile Ads Android SDK 23.6.0 +- Google Mobile Ads iOS SDK 11.13.0 +- Google User Messaging Platform Android SDK 3.1.0 +- Google User Messaging Platform iOS SDK 2.7.0 +- External Dependency Manager for Unity 1.2.185 + +************** +Version 9.5.0 +************** +- Added `CustomTargeting` field to AdRequest. +- Added `GetPlatformVersion` API to MobileAds class to be able to fetch the version info of the underlying GMA Android or iOS SDK. +- Updated the GMA iOS SDK dependency version to 11.13.0. +- Updated the GMA Android SDK dependency version to 23.6.0. + +Built and tested with: +- Google Mobile Ads Android SDK 23.6.0 +- Google Mobile Ads iOS SDK 11.13.0 +- Google User Messaging Platform Android SDK 3.1.0 +- Google User Messaging Platform iOS SDK 2.7.0 +- External Dependency Manager for Unity 1.2.183 + +************** +Version 9.4.0 +************** + +- To support testing with regulated US states, added the following options to UMPDebugGeography: + - RegulatedUSState + - Other +- Deprecated `DebugGeography.NotEEA`. Use `DebugGeography.Other` instead. +- Updated the GMA iOS SDK dependency version to 11.12.0. +- Updated the GMA Android SDK dependency version to 23.5.0. +- Updated UMP SDK dependency on Android to 3.1.0 and on iOS to 2.7.0. + +Built and tested with: +- Google Mobile Ads Android SDK 23.5.0 +- Google Mobile Ads iOS SDK 11.12.0 +- Google User Messaging Platform Android SDK 3.1.0 +- Google User Messaging Platform iOS SDK 2.7.0 +- External Dependency Manager for Unity 1.2.183 + +************** +Version 9.3.0 +************** +- Updated the iOS GMA SDK dependency version to 11.11.0. + +Built and tested with: +- Google Mobile Ads Android SDK 23.4.0 +- Google Mobile Ads iOS SDK 11.11.0 +- Google User Messaging Platform Android SDK 3.0.0 +- Google User Messaging Platform iOS SDK 2.6.0 +- External Dependency Manager for Unity 1.2.183 + +************** +Version 9.2.1 +************** +- Added French language support for Settings Inspector window. +- Fixed [#3510] by specifying the minSdkVersion in the library. +- Updated the dependency version for Android GMA SDK to 23.4.0 and iOS GMA SDK to 11.10.0. +- Updated iOS UMP SDK dependency to 2.6.0. + +Built and tested with: +- Google Mobile Ads Android SDK 23.4.0 +- Google Mobile Ads iOS SDK 11.10.0 +- Google User Messaging Platform Android SDK 3.0.0 +- Google User Messaging Platform iOS SDK 2.6.0 +- External Dependency Manager for Unity 1.2.183 + +************** +Version 9.2.0 +************** +- Added `IsCollapsible` API to `BannerView` to check if a collapsible banner was loaded. +- Fixed [#3369] by using appropriate LayoutParams. +- Fixed [#3455] Banner ad positioning not working on iOS. +- Updated GoogleMobileAds iOS SDK to 11.7.0. + +Built and tested with: +- Google Mobile Ads Android SDK 23.2.0 +- Google Mobile Ads iOS SDK 11.7.0 +- Google User Messaging Platform 2.2.0 +- External Dependency Manager for Unity 1.2.181 + +************** +Version 9.1.1 +************** +- Updated GoogleMobileAds Android SDK to 23.2.0. +- Updated GoogleMobileAds iOS SDK to 11.6.0. +- Updated External Dependency Manager for Unity to 1.2.181. +- Added the AndroidJNI dependency to the UPM package. + +Built and tested with: +- Google Mobile Ads Android SDK 23.2.0 +- Google Mobile Ads iOS SDK 11.6.0 +- Google User Messaging Platform 2.2.0 +- External Dependency Manager for Unity 1.2.181 + +************** +Version 9.1.0 +************** + +- Removed the app measurement feature as Android/iOS SDKs [no longer](https://support.google.com/admob/answer/13973847) initialize App measurement. +- Fixed [#3290] by calling static putPublisherFirstPartyIdEnabled with boolean return type. +- Fixed [#3042] by explicitly adding gradle.projectsEvaluated for executing validate_dependencies gradle script. +- Fixed [#2801] incorrect value for `AdapterResponseInfo.LatencyMillis` on iOS. +- Added `GetAdUnitID` API that allows reading the ad unit id for all ad formats. +- Enabled passing AdManagerAdRequest as part of Load API for Rewarded, Rewarded Interstitial and AppOpen formats. +- Updated Google Mobile Ads SDK dependency to use v11.3.0 on iOS. + +Built and tested with: +- Google Mobile Ads Android SDK 23.0.0 +- Google Mobile Ads iOS SDK 11.3.0 +- Google User Messaging Platform 2.2.0 +- External Dependency Manager for Unity 1.2.179 + +************** +Version 9.0.0 +************** + +- Removed `SameAppKeyEnabled` in `RequestConfiguration`. Use `PublisherFirstPartyIdEnabled` instead. +- Removed `ServerSideVerificationOptions.Builder`. Use `ServerSideVerificationOptions` directly. +- Removed `RequestConfiguration.Builder`. Use `RequestConfiguration` directly. +- Removed `AdRequest.Builder`. Use `AdRequest` directly. +- Removed `AdErrorEventArgs`. Use `AdError` directly. +- Removed `AppOpenAd.Load` API that takes a `ScreenOrientation` parameter. +- Made `AdValueEventArgs` Obsolete. Use `AdValue` directly. +- Made `AdFailedToLoadEventArgs` Obsolete. Use `LoadAdError` directly. +- Updated Google Mobile Ads SDK dependency to use v11.2.0 on iOS. +- Updated the Android User Messaging Platform dependency version to 2.2.0. +- Added the `NativeOverlayAd` class to fetch and display native ads using templates. +- Using `CFPreferences` APIs for `ApplicationPreferences` instead of `NSUserDefaults` on iOS. + +Built and tested with: +- Google Mobile Ads Android SDK 23.0.0 +- Google Mobile Ads iOS SDK 11.2.0 +- Google User Messaging Platform 2.2.0 +- External Dependency Manager for Unity 1.2.179 + +************** +Version 8.7.0 +************** + +- Added PublisherPrivacyPersonalizationState property accessible via RequestConfiguration. +- Added PublisherFirstPartyIdEnabled property in RequestConfiguration. +- Deprecated SameAppKeyEnabled in RequestConfiguration. Use PublisherFirstPartyIdEnabled instead. +- Added ApplicationPreferences GetString and GetInt APIs. +- Fixed [#3048] by applying accurate path for gradle scripts on Windows. +- Updated Google Mobile Ads SDK dependency to use v22.6.0 on Android. +- Updated Google Mobile Ads SDK dependency to use v10.14 on iOS. + +Built and tested with: +- Google Mobile Ads Android SDK 22.6.0 +- Google Mobile Ads iOS SDK 10.14 +- Google User Messaging Platform 2.1.0 +- External Dependency Manager for Unity 1.2.177 + +************** +Version 8.6.0 +************** + +- Fixed [#3007] by aligning the PrivacyOptionsRequirementStatus Enum on iOS with Android Plugin. +- Fixed [#2930] for Projects using Android Gradle Plugin less than 4.2.2. +- Added Editor Options to toggle adding packagingOptions to gradle files to pick the first occurrence of META-INF/kotlinx_coroutines_core.version file. +- Added Editor Options to enable removing the property tag from the Android Manifest of the GMA Android SDK. This is enabled by default for projects using Android Gradle Plugin version 4.2.1 and lower. +- Updated Google Mobile Ads SDK dependency to use v22.5.0 on Android. +- Updated Google Mobile Ads SDK dependency to use v10.13 on iOS. + +Built and tested with: +- Google Mobile Ads Android SDK 22.5.0 +- Google Mobile Ads iOS SDK 10.13 +- Google User Messaging Platform 2.1.0 +- External Dependency Manager for Unity 1.2.177 + +************** +Version 8.5.3 +************** + +- Fixed "cannot find symbol" error when building the Android bridge project using gradle. +- Fixed [#2930] by pinning the Google Mobile Ads SDK dependency to use v22.3.0 on Android. +- Fixed [#2974] ConsentInformation.Update() wasn't working as expected on consecutive requests. + +Built and tested with: +- Google Mobile Ads Android SDK 22.3.0 +- Google Mobile Ads iOS SDK 10.9 +- Google User Messaging Platform 2.1.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.5.2 +************** + +- Fixed AndroidJavaException when using AdManagerAdRequest custom targeting. +- Fixed [#2826] "No such proxy method" error within GoogleMobileAds.Ump. +- Updated Google Mobile Ads SDK dependency to use v22.3.0 on Android. + +Built and tested with: +- Google Mobile Ads Android SDK 22.3.0 +- Google Mobile Ads iOS SDK 10.9 +- Google User Messaging Platform 2.1.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.5.1 +************** + +- Version 8.5.0 has been deprecated. Please upgrade to 8.5.1 instead. +- Fixed [#2866] Read enum from getPrivacyOptionsRequirementStatus. +- Removed double quotes from GoogleMobileAdsSKAdNetworkItems.xml. + +Built and tested with: +- Google Mobile Ads Android SDK 22.2.0 +- Google Mobile Ads iOS SDK 10.9 +- Google User Messaging Platform 2.1.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.5.0 +************** + +- Requires apps to build against Xcode 14.1 or higher. +- This release introduces several new APIs to simplify the consent gathering + process. + - Calling `ConsentInformation.Update()` is now required before interacting + with other `ConsentInformation` public APIs. Before calling it, the following are returned: + - `ConsentStatus` returns `ConsentStatus.Unknown` + - `PrivacyOptionsRequirementStatus` returns + `PrivacyOptionsRequirementStatus.Unknown` + - `ConsentInformation.CanRequestAds` returns `false`. + - [ConsentForm](https://github.com/googleads/googleads-mobile-unity/blob/main/source/plugin/Assets/GoogleMobileAds/Ump/Api/ConsentForm.cs) + - Added method `LoadAndPresentIfRequired` to combine load and show calls. + This method is intended for the use case of showing a form if needed + when the app starts. + - Added method `ShowPrivacyOptionsForm`, to be called when users interact + with your app's privacy setting. + - [ConsentInformation](https://github.com/googleads/googleads-mobile-unity/blob/main/source/plugin/Assets/GoogleMobileAds/Ump/Api/ConsentInformation.cs) + - Added `CanRequestAds` property. + - Added `PrivacyOptionsRequirementStatus` property to indicate whether + privacy options are required to be shown in this session. +- Updated the Android User Messaging Platform dependency version to 2.1.0. +- Updated the Google Mobile Ads iOS SDK dependency version to 10.9. +- Fixed [#2840] Check if the ad references get deallocated in the iOS + plugin (bridge). +- Updated [SKAdNetwork](https://developers.google.com/admob/unity/3p-skadnetworks) + list with values from the July 13, 2023 update. + +Built and tested with: +- Google Mobile Ads Android SDK 22.2.0 +- Google Mobile Ads iOS SDK 10.9 +- Google User Messaging Platform 2.1.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.4.1 +************** + +- Fixed [#2815] Setting ApplicationPreferences on Android. + +Built and tested with: +- Google Mobile Ads Android SDK 22.2.0 +- Google Mobile Ads iOS SDK 10.7 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.4.0 +************** + +- Fixed [#2757] Rewarded Interstitial events not raising on the main thread. +- Added support for rendering Ad Manager banner ad. +- Removed method call logs from showing up in Unity Editor Console. +- Deprecated ScreenOrientation parameter of the AppOpenAd Load() API. Added AppOpenAd.Load() API for loading AppOpen Ads using ad unit ID, ad request and ad load callbacks. +- Added ApplicationPreferences API to manage GMA preferences. +- Updated Google Mobile Ads SDK dependency to use v10.7 on iOS. +- Updated Google Mobile Ads SDK dependency to use v22.2.0 on Android. + +Built and tested with: +- Google Mobile Ads Android SDK 22.2.0 +- Google Mobile Ads iOS SDK 10.7 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.3.0 +************** + +- Added support to RaiseAdEventsOnUnityMainThread for UMP callbacks. +- Added support for Ad Manager interstitial ad. +- Updated Google Mobile Ads SDK dependency to use v22.1.0 on Android. +- Updated Google Mobile Ads SDK dependency to use v10.5 on iOS. + +Built and tested with: +- Google Mobile Ads Android SDK 22.1.0 +- Google Mobile Ads iOS SDK 10.5 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.2.0 +************** + +- Fixed [#2646] Android Banner 'Descendant focus' crash. +- Fixed [#2676] Raising Interstitial events on main thread. +- Deprecated builder pattern in AdRequest, RequestConfiguration and ServerSideVerificationOptions Class. Utilize fields instead. +- Added AdManagerAdRequest class to allow passing CustomTargeting, CategoryExclusions and PublisherProvidedId as part of AdManager requests. +- Updated Google Mobile Ads SDK dependency to use v10.4 on iOS. + +Built and tested with: +- Google Mobile Ads Android SDK 22.0.0 +- Google Mobile Ads iOS SDK 10.4 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.176 + +************** +Version 8.1.0 +************** + +- Requires apps to build against Xcode 14.0 or higher. +- Fixed [#2611] [UMP] Exception raised when calling Update of ConsentInformation on Android + +Built and tested with: +- Google Mobile Ads Android SDK 22.0.0 +- Google Mobile Ads iOS SDK 10.3 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.175 + +************** +Version 8.0.0 +************** + +Plugin: +- Removed obsolete APIs for AppOpenAd. +- Removed obsolete APIs for InterstitialAd. +- Added the MobileAds.RaiseAdEventsOnUnityMainThread option for raising ad events on the Unity main thread. +- Dropped support for `armv7` and `i386` architectures. +- Requires minimum iOS version 11.0. +- Fixed [#2543] NullReferenceException when UMP ConsentDebugSettings are null. +- Fixed [#2531] Xcode 13 compile time error. +- Fixed [#1779] Crash with custom Banner Ad Sizes on the Unity platform. +- Fixed [#2553] Banner position in Unity Editor to reflect Android and iOS position. +- Added support for GMA Android SDK v22.0.0. Requires using GMA Android SDK v22.0.0 or higher. +- Added support for GMA iOS SDK v10.3. Requires using GMA iOS SDK v10.3 or higher. + +Built and tested with: +- Google Mobile Ads Android SDK 22.0.0 +- Google Mobile Ads iOS SDK 10.3 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.175 + +************** +Version 7.4.1 +************** + +Plugin: +- Added support for GMA iOS SDK v10. Requires using Google Mobile Ads iOS SDK v10.0 or higher. + +Built and tested with: +- Google Mobile Ads Android SDK 21.3.0 +- Google Mobile Ads iOS SDK 10.0 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.175 + +************** +Version 7.4.0 +************** + +Plugin: +- Added OnAdClicked and OnAdImpressionRecorded events to BannerView. +- Updated all ad format APIs to have consistent nomenclature. +- Added new InterstitialAd.OnAdClicked event to interstitial ads. +- Added new InterstitialAd.Load() API for loading interstitial ads. +- Added new InterstitialAd.CanShowAd() API for checking interstitial ad state. +- Added new RewardedAd.OnAdClicked event to rewarded ads. +- Added new RewardedAd.Load() API for loading rewarded ads. +- Added new RewardedAd.CanShowAd() API for checking rewarded ad state. +- Added new RewardedInterstitialAd.OnAdClicked event to rewarded interstitial ads. +- Added new RewardedInterstitialAd.Load() API for loading rewarded interstitial ads. +- Added new RewardedInterstitialAd.CanShowAd() API for checking rewarded interstitial ad state. +- Added new AppOpenAd.OnAdClicked event to app open ads. +- Added new AppOpenAd.Load() API for loading app open ads. +- Added new AppOpenAd.CanShowAd() API for checking app open ad state. +- Fixed [#2453] and [#2450] XCode build error when using iOS SDK 9.14.0 or greater. +- Added User Messaging Platform (UMP) APIs. + +Built and tested with: +- Google Mobile Ads Android SDK 21.3.0 +- Google Mobile Ads iOS SDK 9.11.0 +- Google User Messaging Platform 2.0.0 +- External Dependency Manager for Unity 1.2.175 + +************** +Version 7.3.1 +************** + +Plugin: +- Fixed [#1799](https://github.com/googleads/googleads-mobile-unity/issues/1799) RewardedAd OnAdFailedToPresentFullScreenContent called twice. + +Built and tested with: +- Google Mobile Ads Android SDK 21.3.0. +- Google Mobile Ads iOS SDK 9.11.0 +- External Dependency Manager for Unity 1.2.171 + +************** +Version 7.3.0 +************** + +Plugin: +- Requires using Google Mobile Ads Android SDK v21.3.0 or higher. +- Requires using Google Mobile Ads iOS SDK v9.11.0 or higher. +- Added response information for ad networks to the [ad response](https://developers.google.com/admob/unity/response-info). + +Built and tested with: +- Google Mobile Ads Android SDK 21.3.0. +- Google Mobile Ads iOS SDK 9.11.0 +- External Dependency Manager for Unity 1.2.171. + +************** +Version 7.2.0 +************** + +Plugin: +- Added settings to optimize Android initialization and ad loading thread usage. +- Fixed issue with AppOpenAd.GetResponseInfo() not completing on Android. +- Fixed display issue for AdInspector on the Unity Editor platform. + +Built and tested with: +- Google Mobile Ads Android SDK 21.0.0. +- Google Mobile Ads iOS SDK 9.9.0 +- External Dependency Manager for Unity 1.2.171. + +************** +Version 7.1.0 +************** + +Plugin: +- Added AppStateEventNotifier as a better option to OnApplicationPause for app open ads. + +Built and tested with: +- Google Mobile Ads Android SDK 21.0.0. +- Google Mobile Ads iOS SDK 9.0.0 +- External Dependency Manager for Unity 1.2.171. + +************** +Version 7.0.2 +************** + +Plugin: +- Added support for GMA Android SDK v21. Requires using GMA Android SDK v21.0.0 or higher. + +Built and tested with: +- Google Mobile Ads Android SDK 21.0.0. +- Google Mobile Ads iOS SDK 9.0.0 +- External Dependency Manager for Unity 1.2.171. + +************** +Version 7.0.1 +************** + +Plugin: +- Fixed Github issue [1943](https://github.com/googleads/googleads-mobile-unity/issues/1943) related App Id saving. +- Fixed Github issue [2001](https://github.com/googleads/googleads-mobile-unity/issues/2001) related to Android manifest. +- Fixed Github issue [2003](https://github.com/googleads/googleads-mobile-unity/issues/2003) related to Ad Inspector crash. +- Added placeholder AdInspector for Unity editor. + +Built and tested with: +- Google Play services 20.2.0 +- Google Mobile Ads iOS SDK 9.0.0 +- External Dependency Manager for Unity 1.2.171. + +************** +Version 7.0.0 +************** + +Plugin: +- Added support for GMA iOS SDK v9. Requires using GMA iOS SDK v9.0.0 or higher. +- Fixed https://github.com/googleads/googleads-mobile-unity/issues/1620 +- Updated to use External Dependency Manager for Unity 1.2.169. + +Built and tested with: +- Google Play services 20.2.0 +- Google Mobile Ads iOS SDK 9.0.0 +- External Dependency Manager for Unity 1.2.171. + +************** +Version 6.1.2 +************** + +Plugin: +- Fixed Github issue [1786](https://github.com/googleads/googleads-mobile-unity/issues/1786) related to GoogleMobileAdsSettings. +- Fixed issue related to missing GADUAdNetworkExtras.h file when using some mediation adapters. + +Built and tested with: +- Google Play services 20.2.0 +- Google Mobile Ads iOS SDK 8.8.0 +- External Dependency Manager for Unity 1.2.165. + +Known issue: +- iOS Resolver library cannot be loaded in Unity 2021.1.11 and 2021.1.12. It can be loaded properly with Unity 2021.1.10. See https://github.com/googlesamples/unity-jar-resolver/issues/441 for more information. + +************** +Version 6.1.1 +************** + +Plugin: +- Added support for ad inspector. + +Built and tested with: +- Google Play services 20.2.0 +- Google Mobile Ads iOS SDK 8.8.0 +- External Dependency Manager for Unity 1.2.165. + +Known issue: +- iOS Resolver library cannot be loaded in Unity 2021.1.11 and 2021.1.12. It can be loaded properly with Unity 2021.1.10. See https://github.com/googlesamples/unity-jar-resolver/issues/441 for more information. + + +************** +Version 6.1.0 +************** + +Plugin: +- Fixed https://github.com/googleads/googleads-mobile-unity/issues/1620 +- Added support for iOS 14+ [same app key](https://developers.google.com/admob/ios/ios14) +- Added support for App Open ads. + +Built and tested with: +- Google Play services 20.2.0 +- Google Mobile Ads iOS SDK 8.8.0 +- External Dependency Manager for Unity 1.2.165. + +Known issue: +- iOS Resolver library cannot be loaded in Unity 2021.1.11 and 2021.1.12. It can be loaded properly with Unity 2021.1.10. See https://github.com/googlesamples/unity-jar-resolver/issues/441 for more information. + +************** +Version 6.0.2 +************** + +Plugin: +- Fixed https://github.com/googleads/googleads-mobile-unity/issues/1677 This version requires Xcode 12.4 where the previous version required Xcode 12.5.1. +- You no longer need to enable "Link frameworks statically" for the Google Mobile Ads plugin to work. + +Built and tested with: +- Google Play services 20.2.0 +- Google Mobile Ads iOS SDK 8.8.0 +- External Dependency Manager for Unity 1.2.165. + +Known issue: +- iOS Resolver library cannot be loaded in Unity 2021.1.11 and 2021.1.12. It can be loaded properly with Unity 2021.1.10. See https://github.com/googlesamples/unity-jar-resolver/issues/441 for more information. + +************** +Version 6.0.1 +************** + +Plugin: +- Fixed https://github.com/googleads/googleads-mobile-unity/issues/1613 where build error occurs on Unity 2021. +- Fixed https://github.com/googleads/googleads-mobile-unity/issues/1616 where iOS build contains undefined symbol. +- Automatically added SKAdNetworkIdentifiers recommended by https://developers.google.com/admob/ios/ios14#skadnetwork into generated iOS builds. You can manage the list of SKAdNetworkIdentifier values by editing `Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml`. + +Built and tested with: +- Google Play services 20.0.0 +- Google Mobile Ads iOS SDK 8.2.0 +- External Dependency Manager for Unity 1.2.165. + +Known issue: +- iOS Resolver library cannot be loaded in Unity 2021.1.11 and 2021.1.12. It can be loaded properly with Unity 2021.1.10. See https://github.com/googlesamples/unity-jar-resolver/issues/441 for more information. + +************** +Version 6.0.0 +************** + +Plugin: +- Added support for GMA iOS SDK v8 and GMA Android SDK v20. Requires using GMA iOS SDK v8.0.0 or higher, and GMA Android SDK 20.0.0 or higher. +- Removed MobileAds.Initialize(string appId). +- Removed Birthday, Gender, TestDevices, TagForChildDirectedTreatment properties on AdRequest. TagForChildDirectedTreatment and TestDeviceIds properties are available under RequestConfiguration.. +- Removed OnAdLeavingApplication event for all formats. +- Removed MediationAdapterClassName from all formats in favor of ResponseInfo. +- Removed Message from AdErrorEventArgs class in favor of AdError. +- Removed RewardBasedVideoAd in favor of RewardedAd. +- Added support for ad load errors, please see https://developers.google.com/admob/unity/ad-load-errors for details. +- Ad Manager integration now requires providing the app ID in the Unity Editor. +- Changed package format to contain compiled assemblies in DLL format in place of the uncompiled code. +- You need to enable "Link frameworks statically" in Unity Editor -> Assets -> External Dependency Manager -> iOS Resolver -> Settings, or else the GMA plugin does not work. + +Built and tested with: +- Google Play services 20.0.0 +- Google Mobile Ads iOS SDK 8.2.0 +- External Dependency Manager for Unity 1.2.165. + +************** +Version 5.4.0 +************** + +Plugin: +- Add support for iOS14 with Googles `SKAdNetwork` identifiers automatically included in + `Info.plist`. +- Added the RewardedInterstitialAd format. This feature is currently in private beta. Reach out to your account manager to request access. +- Added mock ad views to enable developers to test ad placement and callback logic within the Unity editor. +- Added fix for crash that occurs when attempting to show interstitial when app is closing. +- Added fix for crash that occurs when calling `GetResponseInfo()` on iOS before ad is loaded. + +Built and tested with: +- Google Play services 19.5.0 +- Google Mobile Ads iOS SDK 7.68.0 +- External Dependency Manager for Unity 1.2.161. + +************** +Version 5.3.0 +************** + +Plugin: +- Add InitializationStatusClient for Init callback in Unity Editor. Fixes #1394. +- Update to Android SDK version 19.3.0 + +Built and tested with: +- Google Play services 19.3.0 +- Google Mobile Ads iOS SDK 7.63.0 +- External Dependency Manager for Unity 1.2.156. + +************** +Version 5.2.0 +************** + +Plugin: + - Added ResponseInfo class. See + https://developers.google.com/admob/unity/response-info for usage details. + - Fixes #1307 - issue with running in Unity Editor when targeting iOS platform. + - Fixes #1287 - issue where a crash is caused in equality check when AdSize is + null. + - Moved GoogleMobileAdsPlugin to GoogleMobileAdsPlugin.androidlib to ensure manifest + is picked up when building android app in Unity 2020. Fixes issue #1310. Thanks @pipe-alt! + - Fix error messages for iOS plugin. + - Added the DisableMediationInitialization() method to MobileAds. + Warning: Calling this method may negatively impact your Google mediation performance. + This method should only be called if you include Google mediation adapters in your app, but you + won't use mediate through Google during a particular app session (for example, you are running + an A/B mediation test). + +Built and tested with: +- Google Play services 19.2.0 +- Google Mobile Ads iOS SDK 7.60.0 +- External Dependency Manager for Unity 1.2.156. + +************** +Version 5.1.0 +************** + +Plugin: + - Added RequestConfiguration class. See + https://developers.google.com/admob/unity/targeting for usage details. + - Fixed issue with building for IL2CPP in versions of Unity 2017 and earlier. + - Adding missing imports for Unity 5.6 build (Thanks @EldersJavas !). + - Added GoogleMobileAds assembly definition. + - Added thread safety to GADUObjectCache in iOS plugin. + - Revised project structure. If upgrading from a previous version, delete + your GoogleMobileAds/ folder before importing this plugin. + +Built and tested with: +- Google Play services 19.1.0 +- Google Mobile Ads iOS SDK 7.58.0 +- Unity Jar Resolver 1.2.152 + + +************** +Version 5.0.1 +************** + +Plugin: + - Fixed issue with externs.cpp in pre-2019 versions of Unity + +Built and tested with: +- Google Play services 19.0.0 +- Google Mobile Ads iOS SDK 7.56.0 +- Unity Jar Resolver 1.2.136 + +************** +Version 5.0.0 +************** + +Plugin: + - Removed preprocessor directives for custom assembly support. + - Fixed IL2CPP build support on Android. + - Updated to Google Play services 19.0.0. + - Updated minimum Android API level to 16. + +Built and tested with: +- Google Play services 19.0.0 +- Google Mobile Ads iOS SDK 7.56.0 +- Unity Jar Resolver 1.2.136 + +************** +Version 4.2.1 +************** + +Plugin: + - Fixed issue with using `AdSize.FullWidth` API for apps that only support landscape. + +Built and tested with: +- Google Play services 18.3.0 +- Google Mobile Ads iOS SDK 7.53.1 +- Unity Jar Resolver 1.2.135 + +************** +Version 4.2.0 +************** + +Plugin: + - Added support for using AdSize.FullWidth with Adaptive banner APIs. + - Added `GetRewardItem()` API for `RewardedAd`. + - Fixed issue with Android implementation of `GetPortraitAnchoredAdaptiveBannerAdSizeWithWidth`. + +Built and tested with: +- Google Play services 18.3.0 +- Google Mobile Ads iOS SDK 7.53.1 +- Unity Jar Resolver 1.2.135 + +************** +Version 4.1.0 +************** + +Plugin: + - Released Anchored Adaptive Banner APIs. + +Built and tested with: +- Google Play services 18.2.0 +- Google Mobile Ads iOS SDK 7.51.0 +- Unity Jar Resolver 1.2.130 + +************** +Version 4.0.0 +************** + +Plugin: +- Breaking change: The Android library included in this plugin is now distributed as an aar, and + lives at `Assets/Plugins/Android/googlemobileads-unity.aar'. If you are upgrading from a previous + version, remove the `Assets/Plugins/Android/GoogleMobileAdsPlugin' folder prior to importing this + latest version of the plugin. +- Added proguard support on Android. +- Update Android Google Mobile Ads SDK version to 18.2.0. +- Fixed a bug where the AdSize.SMART_BANNER banner size did not work on Unity 2019.2+. +- Added assertion to stop Android builds when Google Mobile Ads settings are invalid. + +Built and tested with: +- Google Play services 18.2.0 +- Google Mobile Ads iOS SDK 7.50.0 +- Unity Jar Resolver 1.2.125 + +************** +Version 3.18.3 +************** + +Plugin: +- Update JAR resolver. + +Built and tested with: +- Google Play services 18.1.1 +- Google Mobile Ads iOS SDK 7.48.0 +- Unity Jar Resolver 1.2.124 + +************** +Version 3.18.2 +************** + +Plugin: +- Update to Android release 18.1.1. + +Built and tested with: +- Google Play services 18.1.1 +- Google Mobile Ads iOS SDK 7.47.0 +- Unity Jar Resolver 1.2.123 + +************** +Version 3.18.1 +************** + +Plugin: +- Add new Initialization API. +- Fixed Android compile error with PListProcessor. +- Removed reflection for improved IL2CPP support. +- Fixed iOS dependency to not use patch version. + +Built and tested with: +- Google Play services 18.1.0 +- Google Mobile Ads iOS SDK 7.46.0 +- Unity Jar Resolver 1.2.122 + +************** +Version 3.18.0 +************** + +Plugin: +- Added GoogleMobileAdsSettings editor UI for making Plist / manifest changes. +- Fix OnRewardedAdFailedToShow callbacks. +- Migrated android support library to androidx (JetPack) with Google Mobile Ads + SDK version 18.0.0. + +Built and tested with: +- Google Play services 18.0.0 +- Google Mobile Ads iOS SDK 7.45.0 +- Unity Jar Resolver 1.2.119 + +************** +Version 3.17.0 +************** + +Plugin: +- Revised Banner positioning code to use gravity instead of popup window. +- Tested Banner positioning with notched devices supporting Google P APIs. +- Added Rewarded Ads ServerSideVerificationOptions (thanks @halfdevil !) +- Fixed issue with PListProcessor macro. +- Added whitelist for apache http library (thanks @RolandSzep !) +- Specified package for gender enum (thanks @armnotstrong !) +- Added mediation extras for custom events (thanks SeanPONeil !) + +Built and tested with: +- Google Play services 17.2.0 +- Google Mobile Ads iOS SDK 7.44.0 +- Unity Jar Resolver 1.2.111 + +************** +Version 3.16.0 +************** + +Plugin: +- Added new RewardedAd APIs support. +- Added PListProcessor to assist in adding the GADApplicationIdentifier +to iOS build Info.plist. + +Built and tested with: +- Google Play services 17.2.0 +- Google Mobile Ads iOS SDK 7.42.0 +- Unity Jar Resolver 1.2.102.0 + +************** +Version 3.15.1 +************** + +Plugin: +- Fixed crash when adding mediation extras to ad request. + +Built and tested with: +- Google Play services 15.0.1 +- Google Mobile Ads iOS SDK 7.32.0 +- Unity Jar Resolver 1.2.88.0 + +************** +Version 3.15.0 +************** + +Plugin: +- Forward Android ad events on background thread through JNI interface +to mitigate ANRs. + +Mediation packages: +- Updated AppLovin Unity package to v3.0.3. +- Updated Chartboost Unity package to v1.1.1. +- Updated Facebook Unity package to v1.1.3. +- Updated IronSource Unity package to v1.0.2. +- Updated Nend Unity package to v2.0.0. +- Updated Tapjoy Unity package to v2.0.0. + +Built and tested with: +- Google Play services 15.0.1 +- Google Mobile Ads iOS SDK 7.31.0 +- Unity Jar Resolver 1.2.79.0 + +************** +Version 3.14.0 +************** + +Plugin: +- Fixed Google Play dependencies version conflict with Firebase plugins. + +Mediation packages: +- Updated AdColony Unity package to v1.2.1. +- Updated AppLovin Unity package to v3.0.2. +- Updated Chartboost Unity package to v1.1.0. +- Updated Facebook Unity package to v1.1.2. +- Updated InMobi Unity package to v2.1.0. +- Updated IronSource Unity package to v1.0.1. +- Updated Maio Unity package to v1.1.0. +- Updated MoPub Unity package to v2.1.0. +- Updated MyTarget Unity package to v2.1.0. +- Updated Nend Unity package to v1.0.2. +- Updated Tapjoy Unity package to v1.1.1. +- Updated UnityAds Unity package to v1.1.3. + +Built and tested with: +- Google Play services 15.0.1 +- Google Mobile Ads iOS SDK 7.31.0 +- Unity Jar Resolver 1.2.75.0 + +************** +Version 3.13.1 +************** + +Plugin: +- Fixed issue where banner ads reposition to top of screen after a full +screen ad is displayed. + +Built and tested with: +- Google Play services 12.0.1 +- Google Mobile Ads iOS SDK 7.30.0 +- Unity Jar Resolver 1.2.64.0 + +************** +Version 3.13.0 +************** + +Plugin: +- Added `OnAdCompleted` ad event to rewarded video ads. +- Removed support for Native Ads Express. + +Mediation packages: +- Added Chartboost mediation support package. +- Added MoPub mediation support package. +- Updated AppLovin Unity package to v1.2.1. +- Updated AdColony Unity package to v1.0.1. +- Updated myTarget Unity package to v2.0.0. + +Built and tested with: +- Google Play services 12.0.1 +- Google Mobile Ads iOS SDK 7.30.0 +- Unity Jar Resolver 1.2.64.0 + +************** +Version 3.12.0 +************** + +Plugin: +- Added `setUserId` API to rewarded video ads to identify users in +server-to-server reward callbacks. +- Removed functionality that forced ad events to be invoked on the +main thread. + +Mediation packages: +- Updated maio Unity package to v1.0.1. + +Built and tested with: +- Google Play services 11.8.0 +- Google Mobile Ads iOS SDK 7.29.0 +- Unity Jar Resolver 1.2.61.0 + +************** +Version 3.11.1 +************** + +Plugin: +- Fixed issue where calling GetWidthInPixels() or GetHeightInPixels() resulted +in a null pointer exception. + +Mediation packages: +- Added Facebook mediation support package. + +Built and tested with: +- Google Play services 11.8.0 +- Google Mobile Ads iOS SDK 7.28.0 +- Unity Jar Resolver 1.2.61.0 + +************** +Version 3.11.0 +************** + +Plugin: +- Updated Android ad events to be invoked on the main thread. +- Added `MobileAds.SetiOSAppPauseOnBackground()` method to pause iOS apps when +displaying full screen ads. +- Fixed issue were banners repositioned incorrectly following an orientation +change. + +Mediation packages: +- Added maio mediation support package. +- Added nend mediation support package. + +Built and tested with: +- Google Play services 11.8.0 +- Google Mobile Ads iOS SDK 7.27.0 +- Unity Jar Resolver 1.2.61.0 + +************** +Version 3.10.0 +************** + +Plugin: +- Updated Smart Banner positioning to render within safe area on iOS 11. +- Added API to return height and width of BannerView in pixels. +- Added SetPosition method to reposition banner ads. +- Updated AppLovin Unity mediation package to support AppLovin initialization +integration. + +Mediation packages: +- Added InMobi mediation support package. +- Added Tapjoy mediation support package. +- Added Unity Ads mediation support package. +- Added myTarget mediation support package. + +Built and tested with: +- Google Play services 11.6.2 +- Google Mobile Ads iOS SDK 7.27.0 +- Unity Jar Resolver 1.2.59.0 + +************* +Version 3.9.0 +************* + +Plugin: +- Implemented workaround for issue where ad views are rendered in incorrect +position. +- Resolved compatibility issues with Gradle 4. +- Resolved comnpatilbity issues with older versions of Xcode. + +Mediation packages: +- Added API for video ad volume control. +- Added AdColony mediation support package. +- Added AppLovin mediation support package. + +Built and tested with: +- Google Play services 11.6.0 +- Google Mobile Ads iOS SDK 7.25.0 +- Unity Jar Resolver 1.2.59.0 + +************* +Version 3.8.0 +************* + +- Added support for Vungle mediation extras. +- Updated ad views to render within safe area on iOS 11 when using predefined +AdPosition constants. +- Added MediationAdapterClassName() method to all ad formats. +- Fixed issue where ad views are always rendered on the top of the screen for +certain devices. + +Built and tested with: +- Google Play services 11.4.0 +- Google Mobile Ads iOS SDK 7.24.1 +- Unity Jar Resolver 1.2.59.0 + +************* +Version 3.7.1 +************* + +- Fix issue where banner and Native Express ads fail to show after being hidden. + +Built and tested with: +- Google Play services 11.4.0 +- Google Mobile Ads iOS SDK 7.24.0 +- Unity Jar Resolver 1.2.52.0 + +************* +Version 3.7.0 +************* + +- Updated dependency specification for JarResolver to use new XML format. +- Resolved JarResolver incompatibility issues when using Firebase Unity plugins. + +Built and tested with: +- Google Play services 11.2.0 +- Google Mobile Ads iOS SDK 7.23.0 +- Unity Jar Resolver 1.2.48.0 + +************* +Version 3.6.3 +************* + +- Fixed serving of live ads to iOS simulator when simulator set as test +device. +- Reverted addition of mediation sub-directories to Plugin folder. + +Built and tested with: +- Google Play services 11.0.4 +- Google Mobile Ads iOS SDK 7.21.0 +- Unity Jar Resolver 1.2.35.0 + +************* +Version 3.6.2 +************* + +- Add mediation sub-directories to Plugin folder. + +Built and tested with: +- Google Play services 11.0.4 +- Google Mobile Ads iOS SDK 7.21.0 +- Unity Jar Resolver 1.2.35.0 + +************* +Version 3.6.1 +************* + +- Updated Unity Jar Resolver. + +Built and tested with: +- Google Play services 11.0.0 +- Google Mobile Ads iOS SDK 7.21.0 +- Unity Jar Resolver 1.2.32.0 + +************* +Version 3.6.0 +************* + +- Added method to initialize the GMA SDK. +- Added FullWidth AdSize constant. +- Fixed incompatibility with Gradle build system. +- Updated iOS code to remove modular imports. + +Built and tested with: +- Google Play services 11.0.0 +- Google Mobile Ads iOS SDK 7.21.0 +- Unity Jar Resolver 1.2.31.0 + +************* +Version 3.5.0 +************* +- Fix ad views losing visibility after an activity change for certain devices +(eg. Huaweai devices). + +Built and tested with: +- Google Play services 10.2.4 +- Google Mobile Ads iOS SDK 7.20.0 +- Unity Jar Resolver 1.2.20.0 + +************* +Version 3.4.0 +************* +- Fix native express and banner ad behavior where initializing and +hidden ads create unclickable region. + +Built and tested with: +- Google Play services 10.2.1 +- Google Mobile Ads iOS SDK 7.19.0 +- Unity Jar Resolver 1.2.14.0 + +************* +Version 3.3.0 +************* +- Removed support for in-app purchases. +- Fix positioning of ads in sticky-immersive mode. +- Fix issue were ads larger than 320dp could not be rendered. +- Fix incorrect positioning of ads in iOS for ad position BOTTOM. +- Add rewarded video test ad units to HelloWorld sample app. +- Suppress warnings for unused placeholder ad events. + +Built and tested with: +- Google Play services 10.2.0 +- Google Mobile Ads iOS SDK 7.18.0 +- Unity Jar Resolver 1.2.12.0 + +************* +Version 3.2.0 +************* +- Banner ads and native express ads display correctly on Unity 5.6. +- Add ability to specify x, y location of ad views. + +Built and tested with: +- Google Play services 10.0.1 +- Google Mobile Ads iOS SDK 7.16.0 +- Unity Jar Resolver 1.2.9.0 + +************* +Version 3.1.3 +************* +- Fix incorrect invocation of events on ads failing to load. + +Built and tested with: +- Google Play services 10.0.0 +- Google Mobile Ads iOS SDK 7.15.0 +- Unity Jar Resolver 1.2.6.0 + +************* +Version 3.1.2 +************* +- Fix NPE when ad events are not hooked up. + +Built and tested with: +- Google Play services 9.8.0 +- Google Mobile Ads iOS SDK 7.13.0 +- Unity Jar Resolver 1.2.2.0 + +************* +Version 3.1.1 +************* +- Remove dependency on Android Support Library and update GMA iOS SDK +version in `AdMobDependencies.cs`. + +Built and tested with: +- Google Play services 9.6.1 +- Google Mobile Ads iOS SDK 7.13.0 +- Unity Jar Resolver 1.2.2.0 + +************* +Version 3.1.0 +************* +- Integrate plugin with play-services-resolver-1.2.1.0. +- Removal of CocoaPods integration. + +Built and tested with: +- Google Play services 9.6.0 +- Google Mobile Ads iOS SDK 7.12.0 +- Unity Jar Resolver 1.2.1.0 + +************* +Version 3.0.7 +************* +- Fix crash within OnAdLoaded ad event for rewarded video ads on iOS. + +Built and tested with: +- Google Play services 9.4.0 +- Google Mobile Ads iOS SDK 7.11.0 +- Unity Jar Resolver 1.2 + +************* +Version 3.0.6 +************* +- Add support for Native Ads express. +- Fix compatibility issues with Android IL2CPP compilation. +- Fix memory leak of C# client objects + +Built and tested with: +- Google Play services 9.4.0 +- Google Mobile Ads iOS SDK 7.10.1 +- Unity Jar Resolver 1.2 + +************* +Version 3.0.5 +************* +- Remove use of JSONUtility. + +Built and tested with: +- Google Play services 9.2.0 +- Google Mobile Ads iOS SDK 7.8.1 +- Unity Jar Resolver 1.2 + +************* +Version 3.0.4 +************* +- Fix Podfile compatibility with CocoaPods 1.0.0. +- Add support for DFP custom native ad formats. + +Built and tested with: +- Google Play services 9.0.0 +- Google Mobile Ads iOS SDK 7.8.1 +- Unity Jar Resolver 1.2 + +************* +Version 3.0.3 +************* +- Restrict simultaneous rewarded video requests on Android. + +Built and tested with: +- Google Play services 8.4.0 +- Google Mobile Ads iOS SDK 7.7.0 + +************* +Version 3.0.2 +************* +- Fix compatibility issues with Google Mobile Ads iOS SDK 7.7.0 + +Built and tested with: +- Google Play services 8.4.0 +- Google Mobile Ads iOS SDK 7.7.0 + +************* +Version 3.0.1 +************* +- Update preprocessor directives for iOS post build setup +- Add request agent to all ad requests from plugin + +Built and tested with: +- Google Play services 8.4.0 +- Google Mobile Ads iOS SDK 7.6.0 + +************* +Version 3.0.0 +************* +- Add support for Custom In-App purchase flow on Android +- Add CocoaPods integration and automated build settings for iOS projects +- Use JarResolver plugin to resolve Google Play services client dependencies +- Ad events for banners and interstitials refactored with new names + +Built and tested with: +- Google Play services 8.4.0 +- Google Mobile Ads iOS SDK 7.6.0 + +************* +Version 2.3.1 +************* +- Move IInAppBillingService into its own JAR + +************* +Version 2.3.0 +************* +- Add support for In-App Purchase house ads on Android + +************* +Version 2.2.1 +************* +- Fix for Android manifest merge issues on Unity 4.x +- Fix for TouchCount issue on Unity 5.0 + +*********** +Version 2.2 +*********** +- Support for Unity 5.0 & ARC +- Additional Banner positions +- iOS Ads SDK 7.0.0 compatibility + +*********** +Version 2.1 +*********** +- Support for Interstitial Ads +- Ad events use EventHandlers + +*********** +Version 2.0 +*********** +- A single package with cross platform (Android/iOS) support +- Mock ad calls when running inside Unity editor +- Support for Banner Ads +- Custom banner sizes +- Banner ad events listeners +- AdRequest targeting methods +- A sample project to demonstrate plugin integration + +*********** +Version 1.2 +*********** +- Initial Android version with Google Play services support +- Support for Banner Ads only + +*********** +Version 1.1 +*********** +- Initial iOS only version +- Support for Banner Ads only + +*********** +Version 1.0 +*********** +- Initial version for Android (using now deprecated legacy Android SDK) diff --git a/Assets/GoogleMobileAds/CHANGELOG.md.meta b/Assets/GoogleMobileAds/CHANGELOG.md.meta new file mode 100644 index 0000000..f4e5d7f --- /dev/null +++ b/Assets/GoogleMobileAds/CHANGELOG.md.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 161c4904cd2045a1bf046453a58a9d7b +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/CHANGELOG.md +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor.meta b/Assets/GoogleMobileAds/Editor.meta new file mode 100644 index 0000000..dd81e72 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad2c7d42170b57d41bbce607405135c5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs b/Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs new file mode 100644 index 0000000..17c58cd --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs @@ -0,0 +1,191 @@ +#if UNITY_ANDROID +#if UNITY_2022 || UNITY_2021_3_58 || UNITY_2021_3_57 || UNITY_2021_3_56 || UNITY_2021_3_55 || UNITY_2021_3_54 || UNITY_2021_3_53 || UNITY_2021_3_52 || UNITY_2021_3_51 || UNITY_2021_3_50 || UNITY_2021_3_49 || UNITY_2021_3_48 || UNITY_2021_3_47 || UNITY_2021_3_46 || UNITY_2021_3_45 || UNITY_2021_3_44 || UNITY_2021_3_43 || UNITY_2021_3_42 || UNITY_2021_3_41 +// 2021.3.41f1+ Gradle version 7.5.1+ +// https://docs.unity3d.com/2021.3/Documentation/Manual/android-gradle-overview.html +#define ANDROID_GRADLE_BUILD_JETIFIER_ENTRY_ENABLED +#endif + +#if UNITY_6000_0_OR_NEWER || UNITY_2023 || ANDROID_GRADLE_BUILD_JETIFIER_ENTRY_ENABLED +#define ANDROID_GRADLE_BUILD_PRE_PROCESSOR_ENABLED +#endif + +using System; +using UnityEngine; +using UnityEditor; +using System.IO; +using GooglePlayServices; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; + +namespace GoogleMobileAds.Editor +{ + /// + /// This script will verify and configure your Android build settings to be compatible + /// with the Google Mobile Ads SDK. This includes: + /// - Verify the Android Google Mobile Ads app ID is set. + /// - Throw an exception if the Android Google Mobile Ads app ID is not set. + /// - Set minimum API level to 23 (the target API level may be automatically set, we should not + /// hardcode it). + /// - Enable Custom Main Gradle Template. + /// - Update Custom Main Gradle Template with dependencies using the Play Services Resolver. + /// - Enable Custom Gradle Properties Template. + /// - Update Custom Gradle Properties Template with the Jetifier Ignorelist. + /// + public class AndroidBuildPreProcessor : IPreprocessBuildWithReport + { + const int MinimumAPILevel = 23; + const string CustomGradlePropertiesTemplatesFileName = "gradleTemplate.properties"; + const string CustomMainGradleTemplateFileName = "mainTemplate.gradle"; + const string JetifierEntry = + "android.jetifier.ignorelist=annotation-experimental-1.4.0.aar"; + + // Set the callback order to be before EDM4U. + // https://github.com/googlesamples/unity-jar-resolver/blob/master/source/AndroidResolver/src/PlayServicesPreBuild.cs#L39 + public int callbackOrder { get { return -1; } } + + public void OnPreprocessBuild(BuildReport report) + { + if(!GoogleMobileAdsSettings.LoadInstance().EnableGradleBuildPreProcessor) + { + return; + } + // For more details see, https://developers.google.com/admob/unity/android +#if ANDROID_GRADLE_BUILD_PRE_PROCESSOR_ENABLED + ApplyBuildSettings(report); +#endif + } + + private void ApplyBuildSettings(BuildReport report) + { + Debug.Log("Running Android Gradle Build Pre-Processor."); + + // Set Minimum Api Level. + if (PlayerSettings.Android.minSdkVersion < (AndroidSdkVersions)MinimumAPILevel) + { + PlayerSettings.Android.minSdkVersion = (AndroidSdkVersions)MinimumAPILevel; + Debug.Log($"Set minimum API Level to: {MinimumAPILevel}."); + } + else + { + Debug.Log($"Verified Minimum API Level is >= {MinimumAPILevel}."); + } + + // Create Assets/Plugins folder. + if (!AssetDatabase.IsValidFolder(Path.Combine("Assets", "Plugins"))) + { + AssetDatabase.CreateFolder("Assets", "Plugins"); + AssetDatabase.Refresh(); + } + + // Create Assets/Plugins/Android folder. + if (!AssetDatabase.IsValidFolder(Path.Combine("Assets", "Plugins", "Android"))) + { + AssetDatabase.CreateFolder(Path.Combine("Assets", "Plugins"), "Android"); + AssetDatabase.Refresh(); + } + + // Ensure Custom Main Gradle Template. + EnsureGradleFileExists(CustomMainGradleTemplateFileName); + + // Ensure Custom Gradle Properties Templates. + EnsureGradleFileExists(CustomGradlePropertiesTemplatesFileName); + + #if ANDROID_GRADLE_BUILD_JETIFIER_ENTRY_ENABLED + string customGradlePropertiesTemplatesFilePath = Path.Combine( + Application.dataPath, + "Plugins", "Android", + CustomGradlePropertiesTemplatesFileName); + if (File.Exists(customGradlePropertiesTemplatesFilePath)) + { + var gradlePropertiesFileContent = + File.ReadAllText(customGradlePropertiesTemplatesFilePath); + if (!gradlePropertiesFileContent.Contains(JetifierEntry)) + { + File.AppendAllText( + customGradlePropertiesTemplatesFilePath, + Environment.NewLine + JetifierEntry); + Debug.Log($"Added Jetifier Entry."); + } + else + { + Debug.Log($"Verified Jetifier Entry exists."); + } + } + else + { + Debug.LogError("Failed to add Jetifier Entry."); + } + #endif + + Debug.Log("Resolving Android Gradle dependencies."); + PlayServicesResolver.ResolveSync(true); + Debug.Log("Android Build Pre-Processor finished."); + } + + /// + /// Ensures that the given Gradle file exists. + /// + /// name of the given Gradle file. + private void EnsureGradleFileExists(string fileName) + { + bool foundTargetFile = false; + bool foundDisabledFile = false; + + // Check for target file. + string targetPath = Path.Combine(Application.dataPath, "Plugins", "Android", fileName); + if (File.Exists(targetPath)) + { + foundTargetFile = true; + } + + // Check for the ".DISABLED" file. + string disabledPath = Path.Combine(Application.dataPath, "Plugins", "Android", + $"{fileName}.DISABLED"); + if (File.Exists(disabledPath)) + { + foundDisabledFile = true; + } + + // If DISABLED and target exist, delete DISABLED. + if (foundTargetFile && foundDisabledFile) + { + File.Delete(disabledPath); + Debug.Log($"Removed disabled {fileName}."); + return; + } + // If DISABLED exists, move it to target. + if (foundDisabledFile) + { + File.Move(disabledPath, targetPath); + AssetDatabase.Refresh(); + Debug.Log($"Enabled {fileName}."); + return; + } + // If target exists, return true. + if (foundTargetFile) + { + Debug.Log($"Verified {fileName}."); + return; + } + + // If target does not exist, create it from source. + var unityGradleTemplateDirectory = Path.Combine( + PlayServicesResolver.AndroidPlaybackEngineDirectory, + "Tools", + "GradleTemplates"); + string sourceFileName = Path.Combine(unityGradleTemplateDirectory, fileName); + if (!File.Exists(sourceFileName)) + { + throw new BuildFailedException( + "Android Build Pre-Processor failed. "+ + $"Unable to find source {sourceFileName}. Is your file system read-only?" + + "If this issue persists, contact Google Mobile Ads Support "+ + "at https://developers.google.com/admob/support"); + } + File.Copy(sourceFileName, targetPath); + AssetDatabase.Refresh(); + Debug.Log($"Created {fileName}."); + } + } +} +#endif diff --git a/Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs.meta b/Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs.meta new file mode 100644 index 0000000..61b58c5 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c0080e86890c24abba53b3f4d2daf6db +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs +timeCreated: 1480838400 diff --git a/Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs b/Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs new file mode 100644 index 0000000..54ac86e --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs @@ -0,0 +1,55 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.IO; +using GooglePlayServices; +using UnityEditor.Build; +using UnityEditor.Build.Reporting; + +namespace GoogleMobileAds.Editor +{ + /// + /// Pre-processor that performs common setup tasks for all platforms before a build. + /// + public class BuildPreProcessor : IPreprocessBuildWithReport + { + // Set the callback order to be before EDM4U. + // https://github.com/googlesamples/unity-jar-resolver/blob/master/source/AndroidResolver/src/PlayServicesPreBuild.cs#L39 + public int callbackOrder { get { return -1; } } + + private readonly static string _linkXmlAssetsPath = + Path.Combine(Application.dataPath, "GoogleMobileAds", "link.xml"); + + public void OnPreprocessBuild(BuildReport report) + { + // Unity's managed code stripping process does not inherently process `link.xml` files + // in UPM packages. This pre-processor copies the `link.xml` file from the UPM package + // to the Unity project's `Assets/GoogleMobileAds` directory if it does not exist. + if (!File.Exists(_linkXmlAssetsPath)) + { + CopyLinkXml(); + } + } + + private static void CopyLinkXml() + { + if (!AssetDatabase.IsValidFolder(Path.Combine("Assets", "GoogleMobileAds"))) + { + AssetDatabase.CreateFolder("Assets", "GoogleMobileAds"); + } + var pathUtils = ScriptableObject.CreateInstance(); + if (pathUtils.IsPackageRootPath()) + { + string parentDirectoryPath = pathUtils.GetParentDirectoryAssetPath(); + string linkXmlPackagePath = Path.Combine(parentDirectoryPath, "link.xml"); + if(String.IsNullOrEmpty(linkXmlPackagePath)) + { + Debug.LogWarning("link.xml not found in the package."); + return; + } + AssetDatabase.CopyAsset(linkXmlPackagePath, _linkXmlAssetsPath); + } + AssetDatabase.Refresh(); + } + } +} diff --git a/Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs.meta b/Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs.meta new file mode 100644 index 0000000..159958b --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: 79760efe9b6bb4736aa4ffd869e2ed0c +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/BuildPreProcessor.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/EditorLocalization.cs b/Assets/GoogleMobileAds/Editor/EditorLocalization.cs new file mode 100644 index 0000000..d3c6d29 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/EditorLocalization.cs @@ -0,0 +1,172 @@ +using System; +using System.Text.RegularExpressions; +using System.Collections.Generic; +using System.IO; +using UnityEngine; + +namespace GoogleMobileAds.Editor +{ + public class EditorLocalization + { + private const string LOCALIZATION_DATA_JSON_RELATIVE_PATH = "GoogleMobileAds/Editor"; + private const string LOCALIZATION_DATA_JSON_FILENAME = + "gma_settings_editor_localization_data.json"; + private const string LOCALIZATIONS_JSON_KEY = "LocalizationsByKey"; + private const string LOCALIZATION_KEY_PREFIX = "KEY_"; + + private readonly Lazy _localizationData = + new Lazy(() => InitLocalizationDataOrThrow()); + private EditorLocalizationData GetLocalizationData() => _localizationData.Value; + + /** + * Gets the default language for the settings editor. + * We assume the default locale used belong to the list of supported cultures + * (https://www.csharp-examples.net/culture-names/), and that each key has a default + * localization provided. + */ + public string GetDefaultLanguage() + { + return "en"; // English + } + + /** + * Checks that a localization key exists. + */ + public bool HasKey(string key) + { + return GetLocalizationData().LocalizationsByKey.ContainsKey(key); + } + + /** + * Localizes a resource key based on a provided user language. + * Returns the key name if the key could not be localized. + */ + public string ForKey(string key) + { + key = key.ToUpper(); + // Accept both key syntaxes. + if (key.StartsWith(LOCALIZATION_KEY_PREFIX)) + key = key.Replace(LOCALIZATION_KEY_PREFIX, ""); + + if (GetLocalizationData().LocalizationsByKey.TryGetValue(key, + out Dictionary localizations)) + { + // Key was found. Try to localize the key with the user language (e.g., "en" or "fr"). + // Else, use the default (fallback) language, if the localization key is missing for + // the chosen language (or no language was selected). + // The region is omitted purposely as we don't currently require this level of details. + string userLanguage = GoogleMobileAdsSettings.LoadInstance().UserLanguage; + if (localizations == null) + { + return null; + } + bool userLanguageExists = localizations.TryGetValue(userLanguage, + out string userLocalization); + bool userLocalizationIsValid = userLanguageExists && + !string.IsNullOrEmpty(userLocalization); + return userLocalizationIsValid ? userLocalization: localizations[GetDefaultLanguage()]; + } + + // Error, key not found, no localization to return so let's fallback to the key name + // to provide some sort of indication in the UI. + Debug.LogError($"Localization key not found: {key}."); + return key; + } + + /** + * Deserializes the localization data, encoded in json. + * Returns the json deserialized to a EditorLocalizationData class instance. + * Throws an ArgumentException if the json file cannot be deserialized. + */ + private static EditorLocalizationData InitLocalizationDataOrThrow() + { + string localizationDataPath = + Path.Combine(Application.dataPath, LOCALIZATION_DATA_JSON_RELATIVE_PATH, + LOCALIZATION_DATA_JSON_FILENAME); + // Handle importing the localization data file via Unity Package Manager. + var pathUtils = ScriptableObject.CreateInstance(); + if (pathUtils.IsPackageRootPath()) + { + localizationDataPath = + Path.Combine(pathUtils.GetDirectoryAssetPath(), LOCALIZATION_DATA_JSON_FILENAME); + } + try + { + string json = File.ReadAllText(localizationDataPath); + var data = DeserializeFromJson(json); + if (data.LocalizationsByKey == null) + { + throw new ArgumentNullException("LocalizationsByKey"); + } + return data; + } + catch (Exception) + { + throw new ArgumentException( + $"Exception thrown while retrieving localization data from {localizationDataPath}:" + + " {ex:full}"); + } + } + + // We would like to handle the deserialization of the JSON file referenced above but without + // leveraging any JSON library to avoid adding any dependency. + private static EditorLocalizationData DeserializeFromJson(string json) + { + var data = new EditorLocalizationData(); + data.LocalizationsByKey = new Dictionary>(); + // We match every field in the JSON. The order in which those matches are found is used to + // deserialize the localization values. + var regex = new Regex(@"""(?[^""]+)"""); + var matches = regex.Matches(json); + var currentKeys = new List(); + var valueProcessed = false; + foreach (Match match in matches) + { + var val = match.Groups["val"].Value; + if (val.Equals(LOCALIZATIONS_JSON_KEY)) + { + currentKeys.Clear(); + continue; + } + + if (valueProcessed) + { + valueProcessed = false; + if (val.StartsWith(LOCALIZATION_KEY_PREFIX)) + { + // Start a new level. + currentKeys.Clear(); + } + else if (currentKeys.Count > 0) + { + // Go up one level by removing the latest key. + currentKeys.RemoveAt(currentKeys.Count - 1); + } + } + + // The localization values are 2 levels deep. + if (currentKeys.Count < 2) + { + currentKeys.Add(val); + continue; + } + + ProcessValue(data, currentKeys, val); + valueProcessed = true; + } + + return data; + } + + private static void ProcessValue(EditorLocalizationData data, List currentKeys, + string val) + { + if (currentKeys.Count != 2) + return; + currentKeys[0] = currentKeys[0].Replace(LOCALIZATION_KEY_PREFIX, ""); + if (!data.LocalizationsByKey.ContainsKey(currentKeys[0])) + data.LocalizationsByKey[currentKeys[0]] = new Dictionary(); + data.LocalizationsByKey[currentKeys[0]][currentKeys[1]] = val; + } + } +} diff --git a/Assets/GoogleMobileAds/Editor/EditorLocalization.cs.meta b/Assets/GoogleMobileAds/Editor/EditorLocalization.cs.meta new file mode 100644 index 0000000..722729c --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/EditorLocalization.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: 1a843cb3b999a40ea9babd1f69e1232f +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/EditorLocalization.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs b/Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs new file mode 100644 index 0000000..8ff2037 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; + +namespace GoogleMobileAds.Editor +{ + public class EditorLocalizationData + { + // First key: the localization key. Second key: the language to lookup. Value: the resulting + // localization. + public Dictionary> LocalizationsByKey { get; set; } + } +} diff --git a/Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs.meta b/Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs.meta new file mode 100644 index 0000000..87ecf24 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: e7aaa882f59b8405d97e3042283cc034 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/EditorLocalizationData.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/EditorPathUtils.cs b/Assets/GoogleMobileAds/Editor/EditorPathUtils.cs new file mode 100644 index 0000000..a24498c --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/EditorPathUtils.cs @@ -0,0 +1,57 @@ +// Copyright (C) 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.IO; +using UnityEditor; +using UnityEngine; + +/* + * EditorPathUtils class finds and processes the AssetPath for + * EditorPathUtils.cs within unity asset database. + */ +public class EditorPathUtils : ScriptableObject +{ + /* + * Returns the asset path of EditorPathUtils.cs + */ + private string GetFilePath() + { + return AssetDatabase.GetAssetPath(MonoScript.FromScriptableObject(this)); + } + + /* + * Returns the asset directory path of EditorPathUtils.cs + */ + public string GetDirectoryAssetPath() + { + return Path.GetDirectoryName(GetFilePath()); + } + + /* + * Returns the parent asset directory path of EditorPathUtils.cs + */ + public string GetParentDirectoryAssetPath() + { + return Path.GetDirectoryName(GetDirectoryAssetPath()); + } + + /* + * Returns true if GMA import is done via unity package manager, + * false otherwise. + */ + public bool IsPackageRootPath() + { + return GetFilePath().StartsWith("Packages"); + } +} diff --git a/Assets/GoogleMobileAds/Editor/EditorPathUtils.cs.meta b/Assets/GoogleMobileAds/Editor/EditorPathUtils.cs.meta new file mode 100644 index 0000000..3a26ae7 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/EditorPathUtils.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: e1f0097ebfa3e416197e298c9135b6de +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/EditorPathUtils.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef b/Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef new file mode 100644 index 0000000..9cd84ca --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef @@ -0,0 +1,20 @@ +{ + "name": "GoogleMobileAds.Editor", + "references": [ + "GoogleMobileAds", + "GoogleMobileAds.Core", + "GoogleMobileAds.Placement", + "GoogleMobileAds.Placement.Core" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef.meta b/Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef.meta new file mode 100644 index 0000000..6e38880 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cbb42e4cfd9484f52972c8f05e1c3252 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef +timeCreated: 1480838400 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml new file mode 100644 index 0000000..f70ec57 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml @@ -0,0 +1,27 @@ + + + + + https://maven.aliyun.com/repository/google + + + + + https://maven.aliyun.com/repository/google + + + + + https://maven.aliyun.com/repository/google + + + + + + + + https://github.com/CocoaPods/Specs + + + + diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml.meta b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml.meta new file mode 100644 index 0000000..6c43d9d --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2c9357ed17521401bb7b6733145ebcd9 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml +timeCreated: 1504855478 +licenseType: Pro +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml new file mode 100644 index 0000000..bbc9a89 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml @@ -0,0 +1,55 @@ + + + cstr6suwn9.skadnetwork + + + 4fzdc2evr5.skadnetwork + 2fnua5tdw4.skadnetwork + ydx93a7ass.skadnetwork + p78axxw29g.skadnetwork + v72qych5uu.skadnetwork + ludvb6z3bs.skadnetwork + cp8zw746q7.skadnetwork + 3sh42y64q3.skadnetwork + c6k4g5qg8m.skadnetwork + s39g8k73mm.skadnetwork + 3qy4746246.skadnetwork + f38h382jlk.skadnetwork + hs6bdukanm.skadnetwork + mlmmfzh3r3.skadnetwork + v4nxqhlyqp.skadnetwork + wzmmz9fp6w.skadnetwork + su67r6k2v3.skadnetwork + yclnxrl5pm.skadnetwork + t38b2kh725.skadnetwork + 7ug5zh24hu.skadnetwork + gta9lk7p23.skadnetwork + vutu7akeur.skadnetwork + y5ghdn5j9k.skadnetwork + v9wttpbfk9.skadnetwork + n38lu8286q.skadnetwork + 47vhws6wlr.skadnetwork + kbd757ywx3.skadnetwork + 9t245vhmpl.skadnetwork + a2p9lx4jpn.skadnetwork + 22mmun2rn5.skadnetwork + 44jx6755aq.skadnetwork + k674qkevps.skadnetwork + 4468km3ulz.skadnetwork + 2u9pt9hc89.skadnetwork + 8s468mfl3y.skadnetwork + klf5c3l5u5.skadnetwork + ppxm28t8ap.skadnetwork + kbmxgpxpgc.skadnetwork + uw77j35x4d.skadnetwork + 578prtvx9j.skadnetwork + 4dzt52r2t5.skadnetwork + tl55sbb4fm.skadnetwork + c3frkrj4fj.skadnetwork + e5fvkxwrpn.skadnetwork + 8c4e2ghe7u.skadnetwork + 3rd42ekr43.skadnetwork + 97r2b46745.skadnetwork + 3qcr597p9d.skadnetwork + diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml.meta b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml.meta new file mode 100644 index 0000000..5a672b9 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b18ecf64be00344e7b039c69e9af56bf +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml +timeCreated: 1480838400 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs new file mode 100644 index 0000000..3c96473 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs @@ -0,0 +1,115 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace GoogleMobileAds.Editor +{ + internal class GoogleMobileAdsSettings : ScriptableObject + { + private const string MobileAdsSettingsResDir = "Assets/GoogleMobileAds/Resources"; + + private const string MobileAdsSettingsFile = "GoogleMobileAdsSettings"; + + private const string MobileAdsSettingsFileExtension = ".asset"; + + internal static GoogleMobileAdsSettings LoadInstance() + { + // Read from resources. + var instance = Resources.Load(MobileAdsSettingsFile); + + // Create instance if null. + if (instance == null) + { + Directory.CreateDirectory(MobileAdsSettingsResDir); + instance = ScriptableObject.CreateInstance(); + string assetPath = Path.Combine(MobileAdsSettingsResDir, + MobileAdsSettingsFile + MobileAdsSettingsFileExtension); + AssetDatabase.CreateAsset(instance, assetPath); + AssetDatabase.SaveAssets(); + } + + return instance; + } + + [SerializeField] + private string adMobAndroidAppId = string.Empty; + + [SerializeField] + private string adMobIOSAppId = string.Empty; + + [SerializeField] + private bool enableKotlinXCoroutinesPackagingOption = true; + + [SerializeField] + private bool enableGradleBuildPreProcessor = true; + + [SerializeField] + private bool disableOptimizeInitialization; + + [SerializeField] + private bool disableOptimizeAdLoading; + + [SerializeField] + private string userTrackingUsageDescription; + + [SerializeField] + private string userLanguage = "en"; + + public string GoogleMobileAdsAndroidAppId + { + get { return adMobAndroidAppId; } + + set { adMobAndroidAppId = value; } + } + + public bool EnableGradleBuildPreProcessor + { + get { return enableGradleBuildPreProcessor; } + + set { enableGradleBuildPreProcessor = value; } + } + + public bool EnableKotlinXCoroutinesPackagingOption + { + get { return enableKotlinXCoroutinesPackagingOption; } + + set { enableKotlinXCoroutinesPackagingOption = value; } + } + + public string GoogleMobileAdsIOSAppId + { + get { return adMobIOSAppId; } + + set { adMobIOSAppId = value; } + } + + public bool DisableOptimizeInitialization + { + get { return disableOptimizeInitialization; } + + set { disableOptimizeInitialization = value; } + } + + public bool DisableOptimizeAdLoading + { + get { return disableOptimizeAdLoading; } + + set { disableOptimizeAdLoading = value; } + } + + public string UserTrackingUsageDescription + { + get { return userTrackingUsageDescription; } + + set { userTrackingUsageDescription = value; } + } + + public string UserLanguage + { + get { return userLanguage; } + + set { userLanguage = value; } + } + } +} diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs.meta b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs.meta new file mode 100644 index 0000000..21467db --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: a187246822bbb47529482707f3e0eff8 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs new file mode 100644 index 0000000..e747759 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs @@ -0,0 +1,164 @@ +#if UNITY_6000_0_OR_NEWER || UNITY_2023 || UNITY_2022 || UNITY_2021_3_55 || UNITY_2021_3_54 || UNITY_2021_3_53 || UNITY_2021_3_52 || UNITY_2021_3_51 || UNITY_2021_3_50 || UNITY_2021_3_49 || UNITY_2021_3_48 || UNITY_2021_3_47 || UNITY_2021_3_46 || UNITY_2021_3_45 || UNITY_2021_3_44 || UNITY_2021_3_43 || UNITY_2021_3_42 || UNITY_2021_3_41 +#define ANDROID_GRADLE_BUILD_PRE_PROCESSOR_ENABLED +#endif + +using System; +using UnityEditor; +using UnityEngine; + +namespace GoogleMobileAds.Editor +{ + [InitializeOnLoad] + [CustomEditor(typeof(GoogleMobileAdsSettings))] + public class GoogleMobileAdsSettingsEditor : UnityEditor.Editor + { + SerializedProperty _appIdAndroid; + SerializedProperty _appIdiOS; + SerializedProperty _enableGradleBuildPreProcessor; + SerializedProperty _enableKotlinXCoroutinesPackagingOption; + SerializedProperty _disableOptimizeInitialization; + SerializedProperty _disableOptimizeAdLoading; + SerializedProperty _userLanguage; + SerializedProperty _userTrackingUsageDescription; + + // Using an ordered list of languages is computationally expensive when trying to create an + // array out of them for purposes of showing a dropdown menu. Care should be taken to ensure + // these arrays are kept in sync. + string[] availableLanguages = new string[] { "English", "French"}; + string[] languageCodes = new string[] { "en", "fr" }; + int selectedIndex = 0; + + [MenuItem("Assets/Google Mobile Ads/Settings...")] + public static void OpenInspector() + { + Selection.activeObject = GoogleMobileAdsSettings.LoadInstance(); + } + + public void OnEnable() + { + _appIdAndroid = serializedObject.FindProperty("adMobAndroidAppId"); + _appIdiOS = serializedObject.FindProperty("adMobIOSAppId"); + _enableGradleBuildPreProcessor = + serializedObject.FindProperty("enableGradleBuildPreProcessor"); + _enableKotlinXCoroutinesPackagingOption = + serializedObject.FindProperty("enableKotlinXCoroutinesPackagingOption"); + _disableOptimizeInitialization = serializedObject.FindProperty("disableOptimizeInitialization"); + _disableOptimizeAdLoading = serializedObject.FindProperty("disableOptimizeAdLoading"); + _userLanguage = serializedObject.FindProperty("userLanguage"); + _userTrackingUsageDescription = + serializedObject.FindProperty("userTrackingUsageDescription"); + + selectedIndex = Array.IndexOf(languageCodes, _userLanguage.stringValue); + selectedIndex = selectedIndex >= 0 ? selectedIndex : 0; + } + + public override void OnInspectorGUI() + { + // Make sure the Settings object has all recent changes. + serializedObject.Update(); + + var settings = (GoogleMobileAdsSettings)target; + + if (settings == null) + { + UnityEngine.Debug.LogError("GoogleMobileAdsSettings is null."); + return; + } + + EditorLocalization localization = new EditorLocalization(); + EditorGUI.BeginChangeCheck(); + selectedIndex = EditorGUILayout.Popup("Language", selectedIndex, availableLanguages); + if (EditorGUI.EndChangeCheck()) + { + _userLanguage.stringValue = languageCodes[selectedIndex]; + } + + EditorGUIUtility.labelWidth = 60.0f; + EditorGUILayout.LabelField(localization.ForKey("GMA_APP_ID_LABEL"), + EditorStyles.boldLabel); + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(_appIdAndroid, new GUIContent("Android")); + + EditorGUILayout.PropertyField(_appIdiOS, new GUIContent("iOS")); + + EditorGUILayout.HelpBox(localization.ForKey("GMA_APP_ID_HELPBOX"), MessageType.Info); + + EditorGUI.indentLevel--; + EditorGUILayout.Separator(); + + EditorGUIUtility.labelWidth = 325.0f; + EditorGUILayout.LabelField(localization.ForKey("ANDROID_SETTINGS_LABEL"), + EditorStyles.boldLabel); + EditorGUI.indentLevel++; + + EditorGUI.BeginChangeCheck(); + +#if ANDROID_GRADLE_BUILD_PRE_PROCESSOR_ENABLED + EditorGUILayout.PropertyField( + _enableGradleBuildPreProcessor, + new GUIContent( + localization.ForKey("ENABLE_GRADLE_BUILD_PRE_PROCESSOR_SETTING"))); + + if (settings.EnableGradleBuildPreProcessor) + { + EditorGUILayout.HelpBox( + localization.ForKey("ENABLE_GRADLE_BUILD_PRE_PROCESSOR_HELPBOX"), + MessageType.Info); + } +#endif + + EditorGUILayout.PropertyField( + _enableKotlinXCoroutinesPackagingOption, + new GUIContent( + localization.ForKey("ENABLE_KOTLINX_COROUTINES_PACKAGING_OPTION_SETTING"))); + + if (settings.EnableKotlinXCoroutinesPackagingOption) + { + EditorGUILayout.HelpBox( + localization.ForKey("ENABLE_KOTLINX_COROUTINES_PACKAGING_OPTION_HELPBOX"), + MessageType.Info); + } + + + EditorGUILayout.PropertyField( + _disableOptimizeInitialization, + new GUIContent(localization.ForKey("DISABLE_OPTIMIZE_INITIALIZATION_SETTING"))); + if (settings.DisableOptimizeInitialization) + { + EditorGUILayout.HelpBox(localization.ForKey("DISABLE_OPTIMIZE_INITIALIZATION_HELPBOX"), + MessageType.Info); + } + + EditorGUILayout.PropertyField( + _disableOptimizeAdLoading, + new GUIContent(localization.ForKey("DISABLE_OPTIMIZE_AD_LOADING_SETTING"))); + + if (settings.DisableOptimizeAdLoading) + { + EditorGUILayout.HelpBox(localization.ForKey("DISABLE_OPTIMIZE_AD_LOADING_HELPBOX"), + MessageType.Info); + } + + EditorGUI.indentLevel--; + EditorGUILayout.Separator(); + + EditorGUIUtility.labelWidth = 300.0f; + EditorGUILayout.LabelField(localization.ForKey("UMP_SPECIFIC_SETTINGS_LABEL"), + EditorStyles.boldLabel); + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField( + _userTrackingUsageDescription, + new GUIContent(localization.ForKey("USER_TRACKING_USAGE_DESCRIPTION_SETTING"))); + + EditorGUILayout.HelpBox(localization.ForKey("USER_TRACKING_USAGE_DESCRIPTION_HELPBOX"), + MessageType.Info); + + EditorGUI.indentLevel--; + EditorGUILayout.Separator(); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs.meta b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs.meta new file mode 100644 index 0000000..62c0507 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: 8afb1338afbd34c4fac628cd6175c032 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml b/Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml new file mode 100644 index 0000000..272f4f9 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml @@ -0,0 +1,16 @@ + + + + + https://maven.aliyun.com/repository/google + + + + + + + https://github.com/CocoaPods/Specs + + + + diff --git a/Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml.meta b/Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml.meta new file mode 100644 index 0000000..5694d38 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f7225ce7103aa4556994e2c2be08cd37 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GoogleUmpDependencies.xml +timeCreated: 1480838400 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/GradleProcessor.cs b/Assets/GoogleMobileAds/Editor/GradleProcessor.cs new file mode 100644 index 0000000..84f0901 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GradleProcessor.cs @@ -0,0 +1,99 @@ +using System; +using System.IO; +using UnityEditor.Android; + +using GoogleMobileAds.Editor; + +public class GradleProcessor : IPostGenerateGradleAndroidProject +{ + public int callbackOrder { get { return 0; } } + + private const string GMA_PACKAGING_OPTIONS_LAUNCHER = + "apply from: '../unityLibrary/GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'"; + + private const string GMA_PACKAGING_OPTIONS = + "apply from: 'GoogleMobileAdsPlugin.androidlib/packaging_options.gradle'"; + + private const string GMA_VALIDATE_GRADLE_DEPENDENCIES = + "gradle.projectsEvaluated { apply from: 'GoogleMobileAdsPlugin.androidlib/validate_dependencies.gradle' }"; + + public void OnPostGenerateGradleAndroidProject(string path) + { + var rootDirinfo = new DirectoryInfo(path); + var rootPath = rootDirinfo.Parent.FullName; + var gradleList = Directory.GetFiles(rootPath, "build.gradle", SearchOption.AllDirectories); + + var packagingOptionsLauncher = GMA_PACKAGING_OPTIONS_LAUNCHER; + var packagingOptionsUnityLibrary = GMA_PACKAGING_OPTIONS; + var validateGradleDependencies = GMA_VALIDATE_GRADLE_DEPENDENCIES; + + // Windows path requires '\\' +#if UNITY_EDITOR_WIN + packagingOptionsLauncher = packagingOptionsLauncher.Replace("/","\\\\"); + packagingOptionsUnityLibrary = packagingOptionsUnityLibrary.Replace("/","\\\\"); + validateGradleDependencies = validateGradleDependencies.Replace("/","\\\\"); +#endif + + foreach (var gradlepath in gradleList) + { + if (!gradlepath.Contains("unityLibrary/build.gradle") && + !gradlepath.Contains("launcher/build.gradle") && + !gradlepath.Contains("unityLibrary\\build.gradle") && + !gradlepath.Contains("launcher\\build.gradle")) + { + continue; + } + + var contents = File.ReadAllText(gradlepath); + // Delete existing packaging_options and then set it if enabled. + if (contents.Contains("packaging_options.gradle")) + { + contents = DeleteLineContainingSubstring(contents, "packaging_options.gradle"); + } + + if (!GoogleMobileAdsSettings.LoadInstance().EnableKotlinXCoroutinesPackagingOption) + { + File.WriteAllText(gradlepath, contents); + continue; + } + + if (gradlepath.Contains("unityLibrary/build.gradle") || gradlepath.Contains("unityLibrary\\build.gradle")) + { + contents += Environment.NewLine + packagingOptionsUnityLibrary; + } + else if (gradlepath.Contains("launcher/build.gradle") || gradlepath.Contains("launcher\\build.gradle")) + { + contents += Environment.NewLine + packagingOptionsLauncher; + } + File.WriteAllText(gradlepath, contents); + } + + // TODO (b/311555203) Use delete then write approach above to update this Gradle script too. + var unityLibraryGradle = Directory.GetFiles(rootPath, "unityLibrary/build.gradle", + SearchOption.TopDirectoryOnly); + + foreach (var gradlePath in unityLibraryGradle) + { + var contents = File.ReadAllText(gradlePath); + if (contents.Contains(validateGradleDependencies)) + { + contents = DeleteLineContainingSubstring(contents, validateGradleDependencies); + File.WriteAllText(gradlePath, contents); + } + } + } + + private string DeleteLineContainingSubstring(string file, string substring) + { + string newFile = ""; + var lines = file.Split(new[] { Environment.NewLine }, StringSplitOptions.None); + foreach (var line in lines) + { + if (!line.Contains(substring)) + { + newFile += line + Environment.NewLine; + } + } + return newFile; + } +} diff --git a/Assets/GoogleMobileAds/Editor/GradleProcessor.cs.meta b/Assets/GoogleMobileAds/Editor/GradleProcessor.cs.meta new file mode 100644 index 0000000..b3a3b5c --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/GradleProcessor.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: ee0016d28899644a9bbcb67f438d41bd +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/GradleProcessor.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/ManifestProcessor.cs b/Assets/GoogleMobileAds/Editor/ManifestProcessor.cs new file mode 100644 index 0000000..be3d174 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/ManifestProcessor.cs @@ -0,0 +1,249 @@ +// Copyright (C) 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#if UNITY_ANDROID +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Xml.Linq; + +using UnityEditor; +using UnityEditor.Build; +#if UNITY_2018_1_OR_NEWER +using UnityEditor.Build.Reporting; +#endif +using UnityEngine; +using GoogleMobileAds.Editor; + +#if UNITY_2018_1_OR_NEWER +public class ManifestProcessor : IPreprocessBuildWithReport +#else +public class ManifestProcessor : IPreprocessBuild +#endif +{ + private const string MANIFEST_RELATIVE_PATH = + "Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml"; + + private const string PROPERTIES_RELATIVE_PATH = + "Plugins/Android/GoogleMobileAdsPlugin.androidlib/project.properties"; + + private const string METADATA_APPLICATION_ID = + "com.google.android.gms.ads.APPLICATION_ID"; + + private const string METADATA_DELAY_APP_MEASUREMENT_INIT = + "com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"; + + private const string METADATA_OPTIMIZE_INITIALIZATION = + "com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"; + + private const string METADATA_OPTIMIZE_AD_LOADING = + "com.google.android.gms.ads.flag.OPTIMIZE_AD_LOADING"; + + // LINT.IfChange + private const string METADATA_UNITY_VERSION = "com.google.unity.ads.UNITY_VERSION"; + // LINT.ThenChange(//depot/google3/javatests/com/google/android/gmscore/integ/modules/admob/tests/robolectric/src/com/google/android/gms/ads/nonagon/signals/StaticDeviceSignalSourceTest.java) + + private XNamespace ns = "http://schemas.android.com/apk/res/android"; + + public int callbackOrder { get { return 0; } } + +#if UNITY_2018_1_OR_NEWER + public void OnPreprocessBuild(BuildReport report) +#else + public void OnPreprocessBuild(BuildTarget target, string path) +#endif + { + string manifestPath = Path.Combine(Application.dataPath, MANIFEST_RELATIVE_PATH); + string propertiesPath = Path.Combine(Application.dataPath, PROPERTIES_RELATIVE_PATH); + + /* + * Handle importing GMA via Unity Package Manager. + */ + EditorPathUtils pathUtils = + ScriptableObject.CreateInstance(); + if (pathUtils.IsPackageRootPath()) + { + // pathUtils.GetParentDirectoryAssetPath() returns "Packages/.../GoogleMobileAds" but + // Plugins is at the same level of GoogleMobileAds so we go up one directory before + // appending MANIFEST_RELATIVE_PATH. + string packagesPathPrefix = + Path.GetDirectoryName(pathUtils.GetParentDirectoryAssetPath()); + manifestPath = Path.Combine(packagesPathPrefix, MANIFEST_RELATIVE_PATH); + propertiesPath = Path.Combine(packagesPathPrefix, PROPERTIES_RELATIVE_PATH); + } + + if (AssetDatabase.IsValidFolder("Packages/com.google.ads.mobile")) + { + manifestPath = Path.Combine("Packages/com.google.ads.mobile", MANIFEST_RELATIVE_PATH); + } + + if (!File.Exists(manifestPath)) + { + manifestPath = Path.Combine(Path.GetDirectoryName(manifestPath), "src", "main", + "AndroidManifest.xml"); + } + + XDocument manifest = null; + try + { + manifest = XDocument.Load(manifestPath); + } + #pragma warning disable 0168 + catch (IOException e) + #pragma warning restore 0168 + { + StopBuildWithMessage("AndroidManifest.xml is missing. Try re-importing the plugin."); + } + + XElement elemManifest = manifest.Element("manifest"); + if (elemManifest == null) + { + StopBuildWithMessage("AndroidManifest.xml is not valid. Try re-importing the plugin."); + } + + XElement elemApplication = elemManifest.Element("application"); + if (elemApplication == null) + { + StopBuildWithMessage("AndroidManifest.xml is not valid. Try re-importing the plugin."); + } + + GoogleMobileAdsSettings instance = GoogleMobileAdsSettings.LoadInstance(); + string appId = instance.GoogleMobileAdsAndroidAppId.Trim(); + + if (appId.Length == 0) + { + StopBuildWithMessage( + "Android Google Mobile Ads app ID is empty. Please enter a valid app ID to run ads properly."); + } + + IEnumerable metas = elemApplication.Descendants() + .Where( elem => elem.Name.LocalName.Equals("meta-data")); + + SetMetadataElement(elemApplication, + metas, + METADATA_APPLICATION_ID, + appId); + + SetMetadataElement(elemApplication, + metas, + METADATA_OPTIMIZE_INITIALIZATION, + !instance.DisableOptimizeInitialization, + true); + + SetMetadataElement(elemApplication, + metas, + METADATA_OPTIMIZE_AD_LOADING, + !instance.DisableOptimizeAdLoading, + true); + + SetMetadataElement(elemApplication, + metas, + METADATA_UNITY_VERSION, + Application.unityVersion); + + elemManifest.Save(manifestPath); + } + + private XElement CreateMetaElement(string name, object value) + { + return new XElement("meta-data", + new XAttribute(ns + "name", name), new XAttribute(ns + "value", value)); + } + + private XElement GetMetaElement(IEnumerable metas, string metaName) + { + foreach (XElement elem in metas) + { + IEnumerable attrs = elem.Attributes(); + foreach (XAttribute attr in attrs) + { + if (attr.Name.Namespace.Equals(ns) + && attr.Name.LocalName.Equals("name") && attr.Value.Equals(metaName)) + { + return elem; + } + } + } + return null; + } + + /// + /// Utility for setting a metadata element + /// + /// application element + /// all metadata elements + /// name of the element to set + /// value to set + private void SetMetadataElement(XElement elemApplication, + IEnumerable metas, + string metadataName, + string metadataValue) + { + XElement element = GetMetaElement(metas, metadataName); + if (element == null) + { + elemApplication.Add(CreateMetaElement(metadataName, metadataValue)); + } + else + { + element.SetAttributeValue(ns + "value", metadataValue); + } + } + + /// + /// Utility for setting a metadata element + /// + /// application element + /// all metadata elements + /// name of the element to set + /// value to set + /// If metadataValue is default, node will be removed. + private void SetMetadataElement(XElement elemApplication, + IEnumerable metas, + string metadataName, + bool metadataValue, + bool defaultValue = false) + { + XElement element = GetMetaElement(metas, metadataName); + if (metadataValue != defaultValue) + { + if (element == null) + { + elemApplication.Add(CreateMetaElement(metadataName, metadataValue)); + } + else + { + element.SetAttributeValue(ns + "value", metadataValue); + } + } + else + { + if (element != null) + { + element.Remove(); + } + } + } + + private void StopBuildWithMessage(string message) + { + string prefix = "[GoogleMobileAds] "; + #if UNITY_2017_1_OR_NEWER + throw new BuildPlayerWindow.BuildMethodException(prefix + message); + #else + throw new OperationCanceledException(prefix + message); + #endif + } +} +#endif diff --git a/Assets/GoogleMobileAds/Editor/ManifestProcessor.cs.meta b/Assets/GoogleMobileAds/Editor/ManifestProcessor.cs.meta new file mode 100644 index 0000000..192e277 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/ManifestProcessor.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: c9ee5d47594eb43a19e795c834fdc044 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/ManifestProcessor.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/PListProcessor.cs b/Assets/GoogleMobileAds/Editor/PListProcessor.cs new file mode 100644 index 0000000..3f71e8a --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/PListProcessor.cs @@ -0,0 +1,232 @@ +// Copyright (C) 2020 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#if UNITY_IPHONE || UNITY_IOS +using System; +using System.Collections.Generic; +using System.IO; +using System.Xml; + +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEditor.iOS.Xcode; +using UnityEngine; + +using GoogleMobileAds.Editor; + +public static class PListProcessor +{ + private const string KEY_SK_ADNETWORK_ITEMS = "SKAdNetworkItems"; + + private const string KEY_SK_ADNETWORK_ID = "SKAdNetworkIdentifier"; + + private const string SKADNETWORKS_RELATIVE_PATH = "GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml"; + + private const string SKADNETWORKS_FILE_NAME = "GoogleMobileAdsSKAdNetworkItems.xml"; + + [PostProcessBuild] + public static void OnPostProcessBuild(BuildTarget buildTarget, string path) + { + string plistPath = Path.Combine(path, "Info.plist"); + PlistDocument plist = new PlistDocument(); + plist.ReadFromFile(plistPath); + + GoogleMobileAdsSettings instance = GoogleMobileAdsSettings.LoadInstance(); + string appId = instance.GoogleMobileAdsIOSAppId.Trim(); + if (appId.Length == 0) + { + NotifyBuildFailure( + "iOS Google Mobile Ads app ID is empty. Please enter a valid app ID to run ads properly."); + } + else + { + plist.root.SetString("GADApplicationIdentifier", appId); + } + + string userTrackingDescription = instance.UserTrackingUsageDescription; + if (!string.IsNullOrEmpty(userTrackingDescription)) + { + plist.root.SetString("NSUserTrackingUsageDescription", userTrackingDescription); + } + + List skNetworkIds = ReadSKAdNetworkIdentifiersFromXML(); + if (skNetworkIds.Count > 0) + { + AddSKAdNetworkIdentifier(plist, skNetworkIds); + } + + string unityVersion = Application.unityVersion; + if (!string.IsNullOrEmpty(unityVersion)) + { + plist.root.SetString("GADUUnityVersion", unityVersion); + } + + File.WriteAllText(plistPath, plist.WriteToString()); + } + + private static PlistElementArray GetSKAdNetworkItemsArray(PlistDocument document) + { + PlistElementArray array; + if (document.root.values.ContainsKey(KEY_SK_ADNETWORK_ITEMS)) + { + try + { + PlistElement element; + document.root.values.TryGetValue(KEY_SK_ADNETWORK_ITEMS, out element); + array = element.AsArray(); + } +#pragma warning disable 0168 + catch (Exception e) +#pragma warning restore 0168 + { + // The element is not an array type. + array = null; + } + } + else + { + array = document.root.CreateArray(KEY_SK_ADNETWORK_ITEMS); + } + return array; + } + + private static List ReadSKAdNetworkIdentifiersFromXML() + { + List skAdNetworkItems = new List(); + + string path = Path.Combine(Application.dataPath, SKADNETWORKS_RELATIVE_PATH); + + /* + * Handle importing GMA via Unity Package Manager. + */ + EditorPathUtils pathUtils = ScriptableObject.CreateInstance(); + if (pathUtils.IsPackageRootPath()) + { + string parentDirectoryPath = pathUtils.GetDirectoryAssetPath(); + path = Path.Combine(parentDirectoryPath, SKADNETWORKS_FILE_NAME); + } + + try + { + if (!File.Exists(path)) + { + throw new FileNotFoundException(); + } + using (FileStream fs = File.OpenRead(path)) + { + XmlDocument document = new XmlDocument(); + document.Load(fs); + + XmlNode root = document.FirstChild; + + XmlNodeList nodes = root.SelectNodes(KEY_SK_ADNETWORK_ID); + foreach (XmlNode node in nodes) + { + skAdNetworkItems.Add(node.InnerText); + } + } + } + #pragma warning disable 0168 + catch (FileNotFoundException e) + #pragma warning restore 0168 + { + NotifyBuildFailure("GoogleMobileAdsSKAdNetworkItems.xml not found", false); + } + catch (IOException e) + { + NotifyBuildFailure("Failed to read GoogleMobileAdsSKAdNetworkIds.xml: " + e.Message, false); + } + + return skAdNetworkItems; + } + + private static void AddSKAdNetworkIdentifier(PlistDocument document, List skAdNetworkIds) + { + PlistElementArray array = GetSKAdNetworkItemsArray(document); + if (array != null) + { + foreach (string id in skAdNetworkIds) + { + if (!ContainsSKAdNetworkIdentifier(array, id)) + { + PlistElementDict added = array.AddDict(); + added.SetString(KEY_SK_ADNETWORK_ID, id); + } + } + } + else + { + NotifyBuildFailure("SKAdNetworkItems element already exists in Info.plist, but is not an array.", false); + } + } + + private static bool ContainsSKAdNetworkIdentifier(PlistElementArray skAdNetworkItemsArray, string id) + { + foreach (PlistElement elem in skAdNetworkItemsArray.values) + { + try + { + PlistElementDict elemInDict = elem.AsDict(); + PlistElement value; + bool identifierExists = elemInDict.values.TryGetValue(KEY_SK_ADNETWORK_ID, out value); + + if (identifierExists && value.AsString().Equals(id)) + { + return true; + } + } +#pragma warning disable 0168 + catch (Exception e) +#pragma warning restore 0168 + { + // Do nothing + } + } + + return false; + } + + private static void NotifyBuildFailure(string message, bool showOpenSettingsButton = true) + { + string dialogTitle = "Google Mobile Ads"; + string dialogMessage = "Error: " + message; + + if (showOpenSettingsButton) + { + bool openSettings = EditorUtility.DisplayDialog( + dialogTitle, dialogMessage, "Open Settings", "Close"); + if (openSettings) + { + GoogleMobileAdsSettingsEditor.OpenInspector(); + } + } + else + { + EditorUtility.DisplayDialog(dialogTitle, dialogMessage, "Close"); + } + + ThrowBuildException("[GoogleMobileAds] " + message); + } + + private static void ThrowBuildException(string message) + { +#if UNITY_2017_1_OR_NEWER + throw new BuildPlayerWindow.BuildMethodException(message); +#else + throw new OperationCanceledException(message); +#endif + } +} + +#endif diff --git a/Assets/GoogleMobileAds/Editor/PListProcessor.cs.meta b/Assets/GoogleMobileAds/Editor/PListProcessor.cs.meta new file mode 100644 index 0000000..9e28012 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/PListProcessor.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: d1d26b084dc244c8c818f67662e51f6c +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/PListProcessor.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources.meta b/Assets/GoogleMobileAds/Editor/Resources.meta new file mode 100644 index 0000000..2b14cb5 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ed0572a2674df6a419597cb8b46979a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds.meta new file mode 100644 index 0000000..6784ece --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17f4ec0b1e0da9e47b7cd6e902fa6143 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages.meta new file mode 100644 index 0000000..def3f23 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 329d381b12b44f544b4ed3d6f613da8e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png new file mode 100644 index 0000000..2c1095b Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png.meta new file mode 100644 index 0000000..2cb626c --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 4c69db43dbd474a2987be5807129b4cc +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png new file mode 100644 index 0000000..7ae8fb9 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png.meta new file mode 100644 index 0000000..48b92f8 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 898f886a39d714db5b90d2c36676c894 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png new file mode 100644 index 0000000..3e82893 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png.meta new file mode 100644 index 0000000..fbcfbe4 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 1a2723ddf964e4565a408007ab387283 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png new file mode 100644 index 0000000..4db4410 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png.meta new file mode 100644 index 0000000..291e030 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 77d9c04b43d404f44ab60d7159b279bb +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png new file mode 100644 index 0000000..f01e80f Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png.meta new file mode 100644 index 0000000..0aad671 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 5a6531d4c9c484d679a2d6f9e6fefed5 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png new file mode 100644 index 0000000..26ec5e0 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png.meta new file mode 100644 index 0000000..ffa7235 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 74358f5fb13a549aabac4a5a7ac76739 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png new file mode 100644 index 0000000..e07d350 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png.meta new file mode 100644 index 0000000..d99c40f --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: d30303c99ba3f4b9b9924da34e6d742d +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png new file mode 100644 index 0000000..8d5a3d7 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png.meta new file mode 100644 index 0000000..3322a5a --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: cfead63ff9d9d48e2b4ba3c2dee7cea9 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png new file mode 100644 index 0000000..d28e55c Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png.meta new file mode 100644 index 0000000..5f64fbe --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png.meta @@ -0,0 +1,103 @@ +fileFormatVersion: 2 +guid: 8a53f9c63a5e94b14a98698a7b07365b +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png new file mode 100644 index 0000000..9c97b5e Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png.meta new file mode 100644 index 0000000..958db49 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: d271d6a1aed6848559ecad6252e333b1 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png +timeCreated: 1480838400 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: + x: 0.5 + y: 0.5 + spritePixelsToUnits: 100 + spriteBorder: + x: 0 + y: 0 + z: 0 + w: 0 + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector.meta new file mode 100644 index 0000000..29fd2b4 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 20f10f9bcaaef3f4d85b9f5e4db46f90 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab new file mode 100644 index 0000000..7ad712a --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab @@ -0,0 +1,504 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1026234277025590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224770140206732756} + - component: {fileID: 222623742081011482} + - component: {fileID: 114466248550890148} + - component: {fileID: 114214230567826922} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224770140206732756 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224688741740444772} + m_Father: {fileID: 224247655386807502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 1350, y: -100} + m_SizeDelta: {x: 150, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222623742081011482 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + m_CullTransparentMesh: 1 +--- !u!114 &114466248550890148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &114214230567826922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: 114466248550890148} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1168051963893118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224349703481187764} + - component: {fileID: 223920107105332924} + - component: {fileID: 114572656286436090} + - component: {fileID: 114715352366433274} + m_Layer: 5 + m_Name: 768x1024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224349703481187764 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224188954884660388} + - {fileID: 224247655386807502} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &223920107105332924 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &114572656286436090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1440, y: 2960} + m_ScreenMatchMode: 2 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &114715352366433274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &1455544211993956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224188954884660388} + - component: {fileID: 222991998422378294} + - component: {fileID: 114288914574884706} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224188954884660388 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455544211993956} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224349703481187764} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222991998422378294 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455544211993956} + m_CullTransparentMesh: 1 +--- !u!114 &114288914574884706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455544211993956} + 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: 0, g: 0, b: 0, a: 0.80784315} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + 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!1 &1519554490061234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224688741740444772} + - component: {fileID: 222698607200636900} + - component: {fileID: 114090591266759776} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224688741740444772 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519554490061234} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224770140206732756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222698607200636900 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519554490061234} + m_CullTransparentMesh: 1 +--- !u!114 &114090591266759776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519554490061234} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: X +--- !u!1 &1919592978971710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224247655386807502} + - component: {fileID: 222996861862976686} + - component: {fileID: 114508546300043044} + - component: {fileID: 114645982259750808} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224247655386807502 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224770140206732756} + m_Father: {fileID: 224349703481187764} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222996861862976686 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + m_CullTransparentMesh: 1 +--- !u!114 &114508546300043044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: d271d6a1aed6848559ecad6252e333b1, type: 3} + m_Type: 0 + 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!114 &114645982259750808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: 114508546300043044} + m_OnClick: + m_PersistentCalls: + m_Calls: [] \ No newline at end of file diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab.meta new file mode 100644 index 0000000..c29f350 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d09dfea4c722a4e239e771200d3639cc +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab +timeCreated: 1480838400 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen.meta new file mode 100644 index 0000000..5bddca4 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c16201fd149155478130c95955794d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab new file mode 100644 index 0000000..84a5e43 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab @@ -0,0 +1,472 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1506555509391478} + m_IsPrefabParent: 1 +--- !u!1 &1048958803402864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224396785236523192} + - component: {fileID: 222833382448378890} + - component: {fileID: 114429971286294426} + - component: {fileID: 114825474698679592} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1086316119044956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224412111100384724} + - component: {fileID: 222123731056135654} + - component: {fileID: 114947809371510874} + - component: {fileID: 114962388913432892} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1506555509391478 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224049503732257422} + - component: {fileID: 223443791425986802} + - component: {fileID: 114420769206196330} + - component: {fileID: 114535206133587424} + m_Layer: 5 + m_Name: 1024x768 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1701400232489060 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224410274476360834} + - component: {fileID: 222763382731799498} + - component: {fileID: 114000294713222290} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1761048403840336 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224408585172404824} + - component: {fileID: 222519335633903876} + - component: {fileID: 114502356579168518} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114000294713222290 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1701400232489060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 45 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close Ad +--- !u!114 &114420769206196330 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114429971286294426 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114502356579168518 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1761048403840336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.809} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114535206133587424 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114825474698679592 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114429971286294426} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114947809371510874 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 4c69db43dbd474a2987be5807129b4cc, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114962388913432892 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114947809371510874} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222123731056135654 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} +--- !u!222 &222519335633903876 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1761048403840336} +--- !u!222 &222763382731799498 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1701400232489060} +--- !u!222 &222833382448378890 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} +--- !u!223 &223443791425986802 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224049503732257422 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224408585172404824} + - {fileID: 224412111100384724} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224396785236523192 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} + 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: 224410274476360834} + m_Father: {fileID: 224412111100384724} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 169.8, y: -35.9} + m_SizeDelta: {x: 339.8, y: 71.8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224408585172404824 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1761048403840336} + 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: 224049503732257422} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224410274476360834 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1701400232489060} + 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: 224396785236523192} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224412111100384724 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} + 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: 224396785236523192} + m_Father: {fileID: 224049503732257422} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2000, y: 1436} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab.meta new file mode 100644 index 0000000..4cb0aff --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 30454d768d0994255b52eafa89dad8e2 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab +timeCreated: 1480838400 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab new file mode 100644 index 0000000..57e57d4 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab @@ -0,0 +1,472 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1168051963893118} + m_IsPrefabParent: 1 +--- !u!1 &1026234277025590 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224770140206732756} + - component: {fileID: 222623742081011482} + - component: {fileID: 114466248550890148} + - component: {fileID: 114214230567826922} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1168051963893118 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224349703481187764} + - component: {fileID: 223920107105332924} + - component: {fileID: 114572656286436090} + - component: {fileID: 114715352366433274} + m_Layer: 5 + m_Name: 768x1024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1455544211993956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224188954884660388} + - component: {fileID: 222991998422378294} + - component: {fileID: 114288914574884706} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1519554490061234 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224688741740444772} + - component: {fileID: 222698607200636900} + - component: {fileID: 114090591266759776} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1919592978971710 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224247655386807502} + - component: {fileID: 222996861862976686} + - component: {fileID: 114508546300043044} + - component: {fileID: 114645982259750808} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114090591266759776 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1519554490061234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close Ad +--- !u!114 &114214230567826922 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114466248550890148} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114288914574884706 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1455544211993956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.80784315} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114466248550890148 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114508546300043044 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 8a53f9c63a5e94b14a98698a7b07365b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114572656286436090 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1440, y: 2960} + m_ScreenMatchMode: 2 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114645982259750808 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114508546300043044} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114715352366433274 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222623742081011482 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} +--- !u!222 &222698607200636900 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1519554490061234} +--- !u!222 &222991998422378294 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1455544211993956} +--- !u!222 &222996861862976686 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} +--- !u!223 &223920107105332924 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224188954884660388 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1455544211993956} + 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: 224349703481187764} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224247655386807502 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} + 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: 224770140206732756} + m_Father: {fileID: 224349703481187764} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1436, y: 2000} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224349703481187764 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224188954884660388} + - {fileID: 224247655386807502} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224688741740444772 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1519554490061234} + 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: 224770140206732756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9.1, y: -5.6} + m_SizeDelta: {x: 18.2, y: 11.2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224770140206732756 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} + 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: 224688741740444772} + m_Father: {fileID: 224247655386807502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 172.1, y: -37.5} + m_SizeDelta: {x: 344.1, y: 75.2} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab.meta new file mode 100644 index 0000000..a4e2eb9 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7d86e5c9e525f4fadbbea7ee54246b94 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab +timeCreated: 1480838400 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners.meta new file mode 100644 index 0000000..7f196da --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83c273847e911bc42ae46dee711c7f91 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab new file mode 100644 index 0000000..92974d7 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab @@ -0,0 +1,292 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1269133880751524} + m_IsPrefabParent: 1 +--- !u!1 &1269133880751524 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224903529129881488} + - component: {fileID: 223611447948025624} + - component: {fileID: 114814154768417776} + - component: {fileID: 114782070117714080} + m_Layer: 5 + m_Name: ADAPTIVE + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1399486727572022 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224568288566307878} + - component: {fileID: 222163316230224026} + - component: {fileID: 114350348470438990} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1542249946006888 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224920579879238496} + - component: {fileID: 222908399171909076} + - component: {fileID: 114302043590274744} + - component: {fileID: 114573167377799528} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114302043590274744 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542249946006888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114350348470438990 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1399486727572022} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 1 + m_BestFit: 1 + m_MinSize: 20 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: This is a Test Adaptive Banner +--- !u!114 &114573167377799528 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542249946006888} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114302043590274744} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114782070117714080 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1269133880751524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114814154768417776 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1269133880751524} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222163316230224026 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1399486727572022} +--- !u!222 &222908399171909076 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542249946006888} +--- !u!223 &223611447948025624 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1269133880751524} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224568288566307878 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1399486727572022} + 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: 224920579879238496} + 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: 2.4, y: 0.000043869} + m_SizeDelta: {x: 362.7, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224903529129881488 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1269133880751524} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224920579879238496} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224920579879238496 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1542249946006888} + 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: 224568288566307878} + m_Father: {fileID: 224903529129881488} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -800} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab.meta new file mode 100644 index 0000000..02fe835 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b2a3ea2f1837847d9981501e0eeca085 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab new file mode 100644 index 0000000..598e792 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1922916089534430} + m_IsPrefabParent: 1 +--- !u!1 &1746883794458476 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224102598220924924} + - component: {fileID: 222746751799034550} + - component: {fileID: 114085332113477484} + - component: {fileID: 114158516453251810} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1922916089534430 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224975965904302652} + - component: {fileID: 223151453590684250} + - component: {fileID: 114308861063183428} + - component: {fileID: 114122664426735340} + m_Layer: 5 + m_Name: BANNER + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114085332113477484 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1746883794458476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 5a6531d4c9c484d679a2d6f9e6fefed5, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114122664426735340 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1922916089534430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 800} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114158516453251810 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1746883794458476} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114085332113477484} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114308861063183428 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1922916089534430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222746751799034550 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1746883794458476} +--- !u!223 &223151453590684250 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1922916089534430} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224102598220924924 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1746883794458476} + 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: 224975965904302652} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -20} + m_SizeDelta: {x: 260, y: 40} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224975965904302652 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1922916089534430} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224102598220924924} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab.meta new file mode 100644 index 0000000..c9a7ca7 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: b2a8ac187bcca47a286cb00c8094da36 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab new file mode 100644 index 0000000..97586f9 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab @@ -0,0 +1,292 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1416738728138556} + m_IsPrefabParent: 1 +--- !u!1 &1136984565866652 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224716041920118618} + - component: {fileID: 222921256881353822} + - component: {fileID: 114680691601076658} + - component: {fileID: 114238919180307928} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1367349203345002 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224396676929103998} + - component: {fileID: 222812030589784238} + - component: {fileID: 114064202109378262} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1416738728138556 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224556414654429204} + - component: {fileID: 223868036777227868} + - component: {fileID: 114335156126952382} + - component: {fileID: 114348016595591796} + m_Layer: 5 + m_Name: CENTER + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114064202109378262 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1367349203345002} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 1 + m_BestFit: 1 + m_MinSize: 20 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: This is a Test Smart Banner +--- !u!114 &114238919180307928 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1136984565866652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114680691601076658} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114335156126952382 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1416738728138556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114348016595591796 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1416738728138556} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114680691601076658 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1136984565866652} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &222812030589784238 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1367349203345002} +--- !u!222 &222921256881353822 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1136984565866652} +--- !u!223 &223868036777227868 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1416738728138556} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224396676929103998 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1367349203345002} + 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: 224716041920118618} + 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: 2.4, y: 0.000043869} + m_SizeDelta: {x: 362.7, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224556414654429204 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1416738728138556} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224716041920118618} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224716041920118618 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1136984565866652} + 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: 224396676929103998} + m_Father: {fileID: 224556414654429204} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab.meta new file mode 100644 index 0000000..767d184 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 452d0eeb28d68420d95c05a6712689be +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab new file mode 100644 index 0000000..e22051e --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1693671887655770} + m_IsPrefabParent: 1 +--- !u!1 &1289376599481394 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224722748174579388} + - component: {fileID: 222144676729818894} + - component: {fileID: 114315551303721412} + - component: {fileID: 114421075155369980} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1693671887655770 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224276549256597394} + - component: {fileID: 223952169128518932} + - component: {fileID: 114696334858063158} + - component: {fileID: 114239890049580038} + m_Layer: 5 + m_Name: FULL_BANNER + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114239890049580038 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1693671887655770} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2690, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114315551303721412 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1289376599481394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 74358f5fb13a549aabac4a5a7ac76739, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114421075155369980 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1289376599481394} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114315551303721412} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114696334858063158 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1693671887655770} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222144676729818894 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1289376599481394} +--- !u!223 &223952169128518932 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1693671887655770} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224276549256597394 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1693671887655770} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224722748174579388} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224722748174579388 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1289376599481394} + 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: 224276549256597394} + 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: 675, y: 85} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab.meta new file mode 100644 index 0000000..b98e143 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: a01bd5a6d0f504aecb61dad504950abd +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab new file mode 100644 index 0000000..baa2cbd --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1689999242186388} + m_IsPrefabParent: 1 +--- !u!1 &1260121452411016 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224967535306520620} + - component: {fileID: 222213910864577190} + - component: {fileID: 114252159333637556} + - component: {fileID: 114791891126826622} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1689999242186388 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224970415831850420} + - component: {fileID: 223744438911749882} + - component: {fileID: 114831681655494918} + - component: {fileID: 114428819205255628} + m_Layer: 5 + m_Name: LARGE_BANNER + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114252159333637556 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260121452411016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 1a2723ddf964e4565a408007ab387283, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114428819205255628 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1689999242186388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1440, y: 2960} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114791891126826622 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260121452411016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114252159333637556} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114831681655494918 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1689999242186388} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222213910864577190 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260121452411016} +--- !u!223 &223744438911749882 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1689999242186388} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224967535306520620 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1260121452411016} + 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: 224970415831850420} + 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: 950, y: 295} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224970415831850420 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1689999242186388} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224967535306520620} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab.meta new file mode 100644 index 0000000..48f2297 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 2758392ec5c0c413886eaf50350c125e +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab new file mode 100644 index 0000000..5a586ac --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1972469136070810} + m_IsPrefabParent: 1 +--- !u!1 &1183579264172830 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224697483211628194} + - component: {fileID: 222129017442517786} + - component: {fileID: 114721459383001118} + - component: {fileID: 114677129427402038} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1972469136070810 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224006990116994490} + - component: {fileID: 223012850224642572} + - component: {fileID: 114471196217915594} + - component: {fileID: 114399773188946396} + m_Layer: 5 + m_Name: LEADERBOARD + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114399773188946396 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972469136070810} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114471196217915594 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972469136070810} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114677129427402038 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1183579264172830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114721459383001118} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114721459383001118 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1183579264172830} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: cfead63ff9d9d48e2b4ba3c2dee7cea9, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &222129017442517786 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1183579264172830} +--- !u!223 &223012850224642572 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972469136070810} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224006990116994490 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1972469136070810} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224697483211628194} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224697483211628194 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1183579264172830} + 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: 224006990116994490} + 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: 1050, y: 130} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab.meta new file mode 100644 index 0000000..cf36ed9 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 60a76727b740d485fa446352e56931c5 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab new file mode 100644 index 0000000..a6edd0f --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab @@ -0,0 +1,217 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1512588571484440} + m_IsPrefabParent: 1 +--- !u!1 &1512588571484440 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224538654718470302} + - component: {fileID: 223629559242470952} + - component: {fileID: 114983991128439442} + - component: {fileID: 114372880593303924} + m_Layer: 5 + m_Name: MEDIUM_RECTANGLE + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1995456870296158 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224894678874208494} + - component: {fileID: 222075172098901274} + - component: {fileID: 114038968471933872} + - component: {fileID: 114975822294336148} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114038968471933872 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1995456870296158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 898f886a39d714db5b90d2c36676c894, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114372880593303924 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1512588571484440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2160, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114975822294336148 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1995456870296158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114038968471933872} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114983991128439442 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1512588571484440} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222075172098901274 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1995456870296158} +--- !u!223 &223629559242470952 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1512588571484440} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224538654718470302 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1512588571484440} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224894678874208494} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224894678874208494 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1995456870296158} + 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: 224538654718470302} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 135} + m_SizeDelta: {x: 322, y: 270} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab.meta new file mode 100644 index 0000000..0e00443 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: da3156337d5ca4d529cf72f8b467823b +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab new file mode 100644 index 0000000..8221f02 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab @@ -0,0 +1,292 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1853606194061450} + m_IsPrefabParent: 1 +--- !u!1 &1343426381164082 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224490741999108352} + - component: {fileID: 222779771472130718} + - component: {fileID: 114916822656868938} + - component: {fileID: 114959255499348754} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1369006202624816 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224233332446998570} + - component: {fileID: 222910655472497136} + - component: {fileID: 114193057462813808} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1853606194061450 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224156852809508418} + - component: {fileID: 223985404539061306} + - component: {fileID: 114034781880355044} + - component: {fileID: 114616652852970184} + m_Layer: 5 + m_Name: SMART_BANNER + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114034781880355044 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853606194061450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114193057462813808 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1369006202624816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 25 + m_FontStyle: 1 + m_BestFit: 1 + m_MinSize: 20 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: This is a Test Smart Banner +--- !u!114 &114616652852970184 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853606194061450} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114916822656868938 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343426381164082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114959255499348754 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343426381164082} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114916822656868938} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222779771472130718 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343426381164082} +--- !u!222 &222910655472497136 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1369006202624816} +--- !u!223 &223985404539061306 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853606194061450} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224156852809508418 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1853606194061450} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224490741999108352} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224233332446998570 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1369006202624816} + 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: 224490741999108352} + 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: 2.4, y: 0.000043869} + m_SizeDelta: {x: 362.7, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224490741999108352 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1343426381164082} + 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: 224233332446998570} + m_Father: {fileID: 224156852809508418} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 50} + m_SizeDelta: {x: 0, y: 100} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab.meta new file mode 100644 index 0000000..7049afa --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 15069cdc38e2b41f7836116419a9187c +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials.meta new file mode 100644 index 0000000..ecf5838 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d78ddcb3b0cbd14418fb7c84e547256f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab new file mode 100644 index 0000000..84a5e43 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab @@ -0,0 +1,472 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1506555509391478} + m_IsPrefabParent: 1 +--- !u!1 &1048958803402864 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224396785236523192} + - component: {fileID: 222833382448378890} + - component: {fileID: 114429971286294426} + - component: {fileID: 114825474698679592} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1086316119044956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224412111100384724} + - component: {fileID: 222123731056135654} + - component: {fileID: 114947809371510874} + - component: {fileID: 114962388913432892} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1506555509391478 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224049503732257422} + - component: {fileID: 223443791425986802} + - component: {fileID: 114420769206196330} + - component: {fileID: 114535206133587424} + m_Layer: 5 + m_Name: 1024x768 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1701400232489060 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224410274476360834} + - component: {fileID: 222763382731799498} + - component: {fileID: 114000294713222290} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1761048403840336 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224408585172404824} + - component: {fileID: 222519335633903876} + - component: {fileID: 114502356579168518} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114000294713222290 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1701400232489060} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 45 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close Ad +--- !u!114 &114420769206196330 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114429971286294426 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114502356579168518 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1761048403840336} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.809} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114535206133587424 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114825474698679592 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114429971286294426} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114947809371510874 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 4c69db43dbd474a2987be5807129b4cc, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114962388913432892 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114947809371510874} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222123731056135654 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} +--- !u!222 &222519335633903876 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1761048403840336} +--- !u!222 &222763382731799498 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1701400232489060} +--- !u!222 &222833382448378890 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} +--- !u!223 &223443791425986802 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224049503732257422 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1506555509391478} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224408585172404824} + - {fileID: 224412111100384724} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224396785236523192 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1048958803402864} + 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: 224410274476360834} + m_Father: {fileID: 224412111100384724} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 169.8, y: -35.9} + m_SizeDelta: {x: 339.8, y: 71.8} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224408585172404824 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1761048403840336} + 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: 224049503732257422} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224410274476360834 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1701400232489060} + 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: 224396785236523192} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224412111100384724 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1086316119044956} + 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: 224396785236523192} + m_Father: {fileID: 224049503732257422} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2000, y: 1436} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab.meta new file mode 100644 index 0000000..328ebdd --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 53084846ca7a14a878485a5db71fda00 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab new file mode 100644 index 0000000..57e57d4 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab @@ -0,0 +1,472 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1168051963893118} + m_IsPrefabParent: 1 +--- !u!1 &1026234277025590 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224770140206732756} + - component: {fileID: 222623742081011482} + - component: {fileID: 114466248550890148} + - component: {fileID: 114214230567826922} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1168051963893118 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224349703481187764} + - component: {fileID: 223920107105332924} + - component: {fileID: 114572656286436090} + - component: {fileID: 114715352366433274} + m_Layer: 5 + m_Name: 768x1024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1455544211993956 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224188954884660388} + - component: {fileID: 222991998422378294} + - component: {fileID: 114288914574884706} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1519554490061234 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224688741740444772} + - component: {fileID: 222698607200636900} + - component: {fileID: 114090591266759776} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1919592978971710 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224247655386807502} + - component: {fileID: 222996861862976686} + - component: {fileID: 114508546300043044} + - component: {fileID: 114645982259750808} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114090591266759776 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1519554490061234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 50 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close Ad +--- !u!114 &114214230567826922 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114466248550890148} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114288914574884706 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1455544211993956} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.80784315} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114466248550890148 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114508546300043044 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 8a53f9c63a5e94b14a98698a7b07365b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114572656286436090 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1440, y: 2960} + m_ScreenMatchMode: 2 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114645982259750808 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114508546300043044} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114715352366433274 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!222 &222623742081011482 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} +--- !u!222 &222698607200636900 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1519554490061234} +--- !u!222 &222991998422378294 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1455544211993956} +--- !u!222 &222996861862976686 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} +--- !u!223 &223920107105332924 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224188954884660388 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1455544211993956} + 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: 224349703481187764} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224247655386807502 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1919592978971710} + 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: 224770140206732756} + m_Father: {fileID: 224349703481187764} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1436, y: 2000} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224349703481187764 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1168051963893118} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224188954884660388} + - {fileID: 224247655386807502} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224688741740444772 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1519554490061234} + 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: 224770140206732756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9.1, y: -5.6} + m_SizeDelta: {x: 18.2, y: 11.2} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224770140206732756 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1026234277025590} + 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: 224688741740444772} + m_Father: {fileID: 224247655386807502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 172.1, y: -37.5} + m_SizeDelta: {x: 344.1, y: 75.2} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab.meta new file mode 100644 index 0000000..c51b40d --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 9e579ef4793d34e79be6a216c0b67d78 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded.meta new file mode 100644 index 0000000..f51a94e --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1301929017fd57f42a619189cfdf92a1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab new file mode 100644 index 0000000..90748af --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab @@ -0,0 +1,547 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1372156606540976} + m_IsPrefabParent: 1 +--- !u!1 &1128573709916514 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224613362496813788} + - component: {fileID: 222982220858172370} + - component: {fileID: 114531233940747562} + - component: {fileID: 114252552421956380} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1266630977519298 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224230749014027406} + - component: {fileID: 222796572593907422} + - component: {fileID: 114058432909893366} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1372156606540976 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224692589100518744} + - component: {fileID: 223553207263892384} + - component: {fileID: 114758204355010086} + - component: {fileID: 114768781952071512} + m_Layer: 5 + m_Name: 1024x768 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1776151137375062 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224516481964458542} + - component: {fileID: 222969686989629696} + - component: {fileID: 114818721744753168} + - component: {fileID: 114637091538056986} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1839101188223610 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224920559942719848} + - component: {fileID: 222848794251129344} + - component: {fileID: 114380357142010322} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1940818438327928 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224061913340101242} + - component: {fileID: 222966908609815736} + - component: {fileID: 114332259168256334} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114058432909893366 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1266630977519298} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.80784315} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114252552421956380 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1128573709916514} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114531233940747562} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114332259168256334 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1940818438327928} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 45 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 45 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 5 second(s) remaining +--- !u!114 &114380357142010322 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1839101188223610} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 45 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 50 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close Ad +--- !u!114 &114531233940747562 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1128573709916514} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114637091538056986 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1776151137375062} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114818721744753168} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114758204355010086 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372156606540976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 2960, y: 1440} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114768781952071512 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372156606540976} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114818721744753168 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1776151137375062} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 4c69db43dbd474a2987be5807129b4cc, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &222796572593907422 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1266630977519298} +--- !u!222 &222848794251129344 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1839101188223610} +--- !u!222 &222966908609815736 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1940818438327928} +--- !u!222 &222969686989629696 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1776151137375062} +--- !u!222 &222982220858172370 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1128573709916514} +--- !u!223 &223553207263892384 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372156606540976} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224061913340101242 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1940818438327928} + 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: 224516481964458542} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 290, y: -42.7} + m_SizeDelta: {x: 493, y: 51.4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224230749014027406 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1266630977519298} + 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: 224692589100518744} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224516481964458542 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1776151137375062} + 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: 224613362496813788} + - {fileID: 224061913340101242} + m_Father: {fileID: 224692589100518744} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 2000, y: 1436} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224613362496813788 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1128573709916514} + 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: 224920559942719848} + m_Father: {fileID: 224516481964458542} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 161.38, y: -34.2} + m_SizeDelta: {x: 323, y: 68.4} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224692589100518744 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1372156606540976} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224230749014027406} + - {fileID: 224516481964458542} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224920559942719848 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1839101188223610} + 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: 224613362496813788} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab.meta new file mode 100644 index 0000000..156ebc1 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: ac0a546bb4fb349229fc5824b288ec00 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab new file mode 100644 index 0000000..3435626 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab @@ -0,0 +1,547 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 1632466019560500} + m_IsPrefabParent: 1 +--- !u!1 &1145201493799244 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224859375040150520} + - component: {fileID: 222539723179981582} + - component: {fileID: 114644123904461240} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1440340526681520 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224646837243202000} + - component: {fileID: 222062092593612000} + - component: {fileID: 114435428706387640} + - component: {fileID: 114820238492461956} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1632466019560500 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224858207565310680} + - component: {fileID: 223253263155428692} + - component: {fileID: 114432944070235470} + - component: {fileID: 114257052656689914} + m_Layer: 5 + m_Name: 768x1024 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1641665161670648 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224559117849289246} + - component: {fileID: 222246365610716666} + - component: {fileID: 114514696656541846} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1652198827308984 +GameObject: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224172518945175052} + - component: {fileID: 222229915290430514} + - component: {fileID: 114777983548721902} + - component: {fileID: 114638760954846786} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &1728821091649996 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 5 + m_Component: + - component: {fileID: 224102788109289026} + - component: {fileID: 222431000284531562} + - component: {fileID: 114197769342207226} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &114197769342207226 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1728821091649996} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.80784315} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114257052656689914 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1632466019560500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &114432944070235470 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1632466019560500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1440, y: 2960} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.495 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &114435428706387640 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1440340526681520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 8a53f9c63a5e94b14a98698a7b07365b, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!114 &114514696656541846 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1641665161670648} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Close Ad +--- !u!114 &114638760954846786 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1652198827308984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114777983548721902} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!114 &114644123904461240 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1145201493799244} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, 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_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 5 second(s) remaining +--- !u!114 &114777983548721902 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1652198827308984} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + 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 +--- !u!114 &114820238492461956 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1440340526681520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, 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_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_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 114435428706387640} + m_OnClick: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!222 &222062092593612000 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1440340526681520} +--- !u!222 &222229915290430514 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1652198827308984} +--- !u!222 &222246365610716666 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1641665161670648} +--- !u!222 &222431000284531562 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1728821091649996} +--- !u!222 &222539723179981582 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1145201493799244} +--- !u!223 &223253263155428692 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1632466019560500} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &224102788109289026 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1728821091649996} + 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: 224858207565310680} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224172518945175052 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1652198827308984} + 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: 224559117849289246} + m_Father: {fileID: 224646837243202000} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 149.4, y: -35.1} + m_SizeDelta: {x: 298.7, y: 70.3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224559117849289246 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1641665161670648} + 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: 224172518945175052} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224646837243202000 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1440340526681520} + 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: 224172518945175052} + - {fileID: 224859375040150520} + m_Father: {fileID: 224858207565310680} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1436, y: 2000} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!224 &224858207565310680 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1632466019560500} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 224102788109289026} + - {fileID: 224646837243202000} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!224 &224859375040150520 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 1145201493799244} + 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: 224646837243202000} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 237.9, y: -43.363} + m_SizeDelta: {x: 432.3, y: 53.775} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab.meta new file mode 100644 index 0000000..10319f0 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 4e3dd9a9607da46da8125b4b59a18db2 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab +timeCreated: 1480838400 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 100100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/Ump.meta b/Assets/GoogleMobileAds/Editor/Resources/Ump.meta new file mode 100644 index 0000000..9622c5f --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/Ump.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3b150aa0031b3f64da1e82b31dd2b8b1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png new file mode 100644 index 0000000..d819851 Binary files /dev/null and b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png differ diff --git a/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png.meta b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png.meta new file mode 100644 index 0000000..e3789c1 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png.meta @@ -0,0 +1,145 @@ +fileFormatVersion: 2 +guid: cb0d255b8cd434556a80e3ae50b24b9c +labels: +- gvh +- gvh_version-7.2.1 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/DummyAds/AdImages/AdInspectorHome.png +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab new file mode 100644 index 0000000..3da58b4 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab @@ -0,0 +1,525 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1026234277025590 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224770140206732756} + - component: {fileID: 222623742081011482} + - component: {fileID: 114466248550890148} + - component: {fileID: 114214230567826922} + - component: {fileID: 5577847591443948799} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224770140206732756 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224688741740444772} + m_Father: {fileID: 224247655386807502} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: 280} + m_SizeDelta: {x: 800, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222623742081011482 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + m_CullTransparentMesh: 1 +--- !u!114 &114466248550890148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + 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: 0.23921569, g: 0.40784314, b: 0.76862746, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f795a5541737a4c09a571dc953a23ba5, type: 3} + m_Type: 0 + 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!114 &114214230567826922 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: 114466248550890148} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &5577847591443948799 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026234277025590} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 150 + m_MinHeight: 150 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &1168051963893118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224349703481187764} + - component: {fileID: 223920107105332924} + - component: {fileID: 114572656286436090} + - component: {fileID: 114715352366433274} + m_Layer: 5 + m_Name: ConsentForm + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224349703481187764 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224188954884660388} + - {fileID: 224247655386807502} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &223920107105332924 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &114572656286436090 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1440, y: 2960} + m_ScreenMatchMode: 2 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &114715352366433274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1168051963893118} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &1455544211993956 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224188954884660388} + - component: {fileID: 222991998422378294} + - component: {fileID: 114288914574884706} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224188954884660388 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455544211993956} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224349703481187764} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222991998422378294 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455544211993956} + m_CullTransparentMesh: 1 +--- !u!114 &114288914574884706 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1455544211993956} + 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: 0, g: 0, b: 0, a: 0.80784315} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + 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!1 &1519554490061234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224688741740444772} + - component: {fileID: 222698607200636900} + - component: {fileID: 114090591266759776} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224688741740444772 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519554490061234} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 224770140206732756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222698607200636900 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519554490061234} + m_CullTransparentMesh: 1 +--- !u!114 &114090591266759776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1519554490061234} + 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: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 40 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 56 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Consent +--- !u!1 &1919592978971710 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224247655386807502} + - component: {fileID: 222996861862976686} + - component: {fileID: 114508546300043044} + - component: {fileID: 114645982259750808} + m_Layer: 5 + m_Name: Ad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224247655386807502 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 224770140206732756} + m_Father: {fileID: 224349703481187764} + 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} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1000, y: 1650} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222996861862976686 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + m_CullTransparentMesh: 1 +--- !u!114 &114508546300043044 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: cb0d255b8cd434556a80e3ae50b24b9c, type: 3} + m_Type: 0 + 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!114 &114645982259750808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1919592978971710} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: 114508546300043044} + m_OnClick: + m_PersistentCalls: + m_Calls: [] diff --git a/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab.meta b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab.meta new file mode 100644 index 0000000..558f2ec --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 32087445d9e7f4577ae9170a6b11f114 +labels: +- gvh +- gvh_version-7.2.1 +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/DummyAds/AdInspector/768x1024.prefab +- gvhp_exportpath-GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/Utils.cs b/Assets/GoogleMobileAds/Editor/Utils.cs new file mode 100644 index 0000000..3b463f3 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Utils.cs @@ -0,0 +1,91 @@ +// Copyright (C) 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; + +namespace GoogleMobileAds.Editor +{ + /* + * Utils class that contains helper methods. + */ + public static class Utils + { + internal static string GradleTemplatePath = + Path.Combine(AndroidPluginsDir, "baseProjectTemplate.gradle"); + + // Android library plugins directory that contains custom gradle templates. + internal const string AndroidPluginsDir = "Assets/Plugins/Android"; + + // Extracts an Android Gradle Plugin version number from the contents of a *.gradle file. + // This should work for Unity 2022.1 and below. + // Ex. + // classpath 'com.android.tools.build:gradle:4.0.1' + private static Regex androidGradlePluginVersionExtract_legacy = + new Regex(@"^\s*classpath\s+['""]com\.android\.tools\.build:gradle:([^'""]+)['""]$"); + + // Extracts an Android Gradle Plugin version number from the contents of a *.gradle file for + // Unity 2022.2+ or 2023.1+. + // Ex. + // id 'com.android.application' version '7.1.2' apply false + private static Regex androidGradlePluginVersionExtract = + new Regex(@"^\s*id\s+['""]com\.android\.application['""] version ['""]([^'""]+)['""]"); + + /// + /// Get the Android Gradle Plugin version used by the Unity project. + /// + public static string AndroidGradlePluginVersion + { + private set {} + get + { + if (!Directory.Exists(AndroidPluginsDir) || !File.Exists(GradleTemplatePath)) + { + return DefaultAndroidGradlePlugin(); + } + var gradleTemplates = Directory.GetFiles(AndroidPluginsDir, "*.gradle", + SearchOption.TopDirectoryOnly); + foreach (var path in gradleTemplates) + { + foreach (var line in File.ReadAllLines(path)) + { + var match = androidGradlePluginVersionExtract_legacy.Match(line); + if (match != null && match.Success) + { + return match.Result("$1"); + } + match = androidGradlePluginVersionExtract.Match(line); + if (match != null && match.Success) + { + return match.Result("$1"); + } + } + } + return DefaultAndroidGradlePlugin(); + } + } + + // TODO(@vkini): read from default Unity baseProjectTemplate.gradle file + private static string DefaultAndroidGradlePlugin() + { +#if UNITY_2022_3_OR_NEWER + return "7.1.2"; +#else + return "4.0.1"; +#endif + } + } +} \ No newline at end of file diff --git a/Assets/GoogleMobileAds/Editor/Utils.cs.meta b/Assets/GoogleMobileAds/Editor/Utils.cs.meta new file mode 100644 index 0000000..e37200a --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/Utils.cs.meta @@ -0,0 +1,17 @@ +fileFormatVersion: 2 +guid: 7d7678b2375fe4456b0ab2b506c2240c +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/Utils.cs +timeCreated: 1480838400 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: + instanceID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json b/Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json new file mode 100644 index 0000000..762bff3 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json @@ -0,0 +1,72 @@ +{ + "LocalizationsByKey": { + "KEY_ANALYTICS_ENABLED_HELPBOX": { + "en": "Sends the usage statistics to Google to gather reports on the failures and to inform future improvements of the Google Mobile Ads Unity plugin.", + "fr": "Envoie les données d'utilisation à Google pour collecter des rapports d'erreurs et participer aux futures améliorations du plugin Google Mobile Ads Unity." + }, + "KEY_ANALYTICS_ENABLED_SETTING": { + "en": "Send plugin usage statistics", + "fr": "Envoyer les données d'utilisation et de diagnostic du plugin" + }, + "KEY_ANDROID_SETTINGS_LABEL": { + "en": "Android settings", + "fr": "Paramètres Android" + }, + "KEY_ENABLE_GRADLE_BUILD_PRE_PROCESSOR_HELPBOX": { + "en": "Modifies the /Plugin/Android/ Gradle files to fix common build errors seen on older Unity versions, see https://developers.google.com/admob/unity/android", + "fr": "Modifie les fichiers Gradle de /Plugin/Android/ pour corriger les erreurs de compilation les plus courantes sur des versions antérieures d'Unity, voir https://developers.google.com/admob/unity/android?hl=fr" + }, + "KEY_ENABLE_GRADLE_BUILD_PRE_PROCESSOR_SETTING": { + "en": "Enable Gradle build pre-processor", + "fr": "Activer le pre-processeur de compilation Gradle" + }, + "KEY_ENABLE_KOTLINX_COROUTINES_PACKAGING_OPTION_HELPBOX": { + "en": "Adds an instruction to fix the build.gradle build error with message '2 files found with path 'META-INF/kotlinx_coroutines_core.version''. For more details, see https://developers.google.com/admob/unity/gradle", + "fr": "Ajoute une instruction pour corriger l'erreur de compilation de build.gradle '2 files found with path 'META-INF/kotlinx_coroutines_core.version''. Pour plus d'informations, visitez https://developers.google.com/admob/unity/gradle?hl=fr" + }, + "KEY_ENABLE_KOTLINX_COROUTINES_PACKAGING_OPTION_SETTING": { + "en": "Enable kotlinx.coroutines packaging option", + "fr": "Activer l'option de packaging kotlinx.coroutines" + }, + "KEY_GMA_APP_ID_HELPBOX": { + "en": "Google Mobile Ads App ID will look similar to this sample ID: ca-app-pub-3940256099942544~3347511713", + "fr": "L'ID de votre application Google Mobile Ads sera similaire à cet exemple: ca-app-pub-3940256099942544~3347511713" + }, + "KEY_GMA_APP_ID_LABEL": { + "en": "Google Mobile Ads App ID", + "fr": "ID d'application Google Mobile Ads" + }, + "KEY_MISC_LABEL": { + "en": "Misc", + "fr": "Divers" + }, + "KEY_DISABLE_OPTIMIZE_AD_LOADING_HELPBOX": { + "en": "This disables using a background thread to offload Ad loading tasks", + "fr": "Cela désactive l'utilisation d'un thread d'arrière-plan pour décharger les tâches de chargement des publicités." + }, + "KEY_DISABLE_OPTIMIZE_AD_LOADING_SETTING": { + "en": "Disable ad loading optimization", + "fr": "Désactiver l'optimisation du chargement des annonces" + }, + "KEY_DISABLE_OPTIMIZE_INITIALIZATION_HELPBOX": { + "en": "Disable offloading initialization to a background thread.", + "fr": "L'initialisation ne sera pas transférée vers un thread d'arrière-plan." + }, + "KEY_DISABLE_OPTIMIZE_INITIALIZATION_SETTING": { + "en": "Disable initialization optimization", + "fr": "Désactiver l'optimisation de l'initialisation" + }, + "KEY_UMP_SPECIFIC_SETTINGS_LABEL": { + "en": "UMP-specific settings", + "fr": "Paramètres spécifiques UMP" + }, + "KEY_USER_TRACKING_USAGE_DESCRIPTION_HELPBOX": { + "en": "A message that informs the user why an iOS app is requesting permission to use data for tracking the user or the device.", + "fr": "Un message qui informe l'utilisateur pourquoi une application iOS demande l'autorisation d'utiliser des données pour suivre l'utilisateur ou l'appareil." + }, + "KEY_USER_TRACKING_USAGE_DESCRIPTION_SETTING": { + "en": "User Tracking Usage Description", + "fr": "Description de l'utilisation du suivi des utilisateurs" + } + } +} diff --git a/Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json.meta b/Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json.meta new file mode 100644 index 0000000..16f0818 --- /dev/null +++ b/Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 83a3846a658ae46219b050c8451aabfe +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/Editor/gma_settings_editor_localization_data.json +timeCreated: 1480838400 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Android.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Android.dll new file mode 100644 index 0000000..403627e Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Android.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Android.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Android.dll.meta new file mode 100644 index 0000000..8b8f67f --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Android.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 9daf61812a464faa90dec7f977094a88 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Android.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Common.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Common.dll new file mode 100644 index 0000000..f9c62d2 Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Common.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Common.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Common.dll.meta new file mode 100644 index 0000000..1627342 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Common.dll.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91a5b07cc3384f86a88d7c29698e058b +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Common.dll +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Core.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Core.dll new file mode 100644 index 0000000..bdebf3a Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Core.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Core.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Core.dll.meta new file mode 100644 index 0000000..19be895 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Core.dll.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 36487fa6a5984d3a80bc98eca8a2b9e6 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Core.dll +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll new file mode 100644 index 0000000..e4dd5e3 Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll.meta new file mode 100644 index 0000000..4bc1392 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: bf90317f8c2e41979b0be47e1b17c528 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Ump.Android.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 1 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll new file mode 100644 index 0000000..4222724 Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll.meta new file mode 100644 index 0000000..74c0c4e --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: a86d988d5f444cd9a999bd434cef8a51 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll new file mode 100644 index 0000000..ce50f7f Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll.meta new file mode 100644 index 0000000..28bfcc9 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f84de9af142947eeb3522e42d9487838 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Ump.dll +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll new file mode 100644 index 0000000..4a4fb0b Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll.meta new file mode 100644 index 0000000..247d88f --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: d18ea87e83804d1eadf467931aabe099 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll b/Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll new file mode 100644 index 0000000..d61a0ca Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll.meta new file mode 100644 index 0000000..7041b7c --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 3bce71ee5c7c4e0fbbb4d836c01a35a2 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.Unity.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.dll b/Assets/GoogleMobileAds/GoogleMobileAds.dll new file mode 100644 index 0000000..bd2ef8f Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.dll.meta new file mode 100644 index 0000000..ecf9533 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.dll.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b251d35e618a42e085fb4a5a888d05cd +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.dll +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll b/Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll new file mode 100644 index 0000000..53c3945 Binary files /dev/null and b/Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll differ diff --git a/Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll.meta b/Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll.meta new file mode 100644 index 0000000..1b97e49 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 735ca9cf259f453abac02f4573d8a420 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds.iOS.dll +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt b/Assets/GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt new file mode 100644 index 0000000..bcd4b7f --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt @@ -0,0 +1,78 @@ +Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.IOSResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.JarResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.PackageManagerResolver.pdb +Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.dll +Assets/ExternalDependencyManager/Editor/1.2.186/Google.VersionHandlerImpl.pdb +Assets/ExternalDependencyManager/Editor/CHANGELOG.md +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll +Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb +Assets/ExternalDependencyManager/Editor/LICENSE +Assets/ExternalDependencyManager/Editor/README.md +Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.186_manifest.txt +Assets/GoogleMobileAds/CHANGELOG.md +Assets/GoogleMobileAds/Editor/AndroidBuildPreProcessor.cs +Assets/GoogleMobileAds/Editor/BuildPreProcessor.cs +Assets/GoogleMobileAds/Editor/EditorLocalization.cs +Assets/GoogleMobileAds/Editor/EditorLocalizationData.cs +Assets/GoogleMobileAds/Editor/EditorPathUtils.cs +Assets/GoogleMobileAds/Editor/GoogleMobileAds.Editor.asmdef +Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml +Assets/GoogleMobileAds/Editor/GoogleMobileAdsSKAdNetworkItems.xml +Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettings.cs +Assets/GoogleMobileAds/Editor/GoogleMobileAdsSettingsEditor.cs +Assets/GoogleMobileAds/Editor/GoogleUmpDependencies.xml +Assets/GoogleMobileAds/Editor/GradleProcessor.cs +Assets/GoogleMobileAds/Editor/ManifestProcessor.cs +Assets/GoogleMobileAds/Editor/PListProcessor.cs +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/1024x768.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/300x250.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x100.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x480.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/320x50.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/468x60.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/480x320.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/728x90.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/768x1024.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdImages/AdInspectorHome.png +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AdInspector/768x1024.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/1024x768.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/AppOpen/768x1024.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/ADAPTIVE.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/BANNER.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/CENTER.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/FULL_BANNER.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LARGE_BANNER.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/LEADERBOARD.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/MEDIUM_RECTANGLE.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Banners/SMART_BANNER.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/1024x768.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Interstitials/768x1024.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/1024x768.prefab +Assets/GoogleMobileAds/Editor/Resources/PlaceholderAds/Rewarded/768x1024.prefab +Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.png +Assets/GoogleMobileAds/Editor/Resources/Ump/ConsentForm.prefab +Assets/GoogleMobileAds/Editor/Utils.cs +Assets/GoogleMobileAds/Editor/gma_settings_editor_localization_data.json +Assets/GoogleMobileAds/GoogleMobileAds.Android.dll +Assets/GoogleMobileAds/GoogleMobileAds.Common.dll +Assets/GoogleMobileAds/GoogleMobileAds.Core.dll +Assets/GoogleMobileAds/GoogleMobileAds.Ump.Android.dll +Assets/GoogleMobileAds/GoogleMobileAds.Ump.Unity.dll +Assets/GoogleMobileAds/GoogleMobileAds.Ump.dll +Assets/GoogleMobileAds/GoogleMobileAds.Ump.iOS.dll +Assets/GoogleMobileAds/GoogleMobileAds.Unity.dll +Assets/GoogleMobileAds/GoogleMobileAds.dll +Assets/GoogleMobileAds/GoogleMobileAds.iOS.dll +Assets/GoogleMobileAds/LICENSE +Assets/GoogleMobileAds/link.xml +Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/AndroidManifest.xml +Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/packaging_options.gradle +Assets/Plugins/Android/GoogleMobileAdsPlugin.androidlib/project.properties +Assets/Plugins/Android/googlemobileads-unity.aar +Assets/Plugins/iOS/GADUAdNetworkExtras.h +Assets/Plugins/iOS/NativeTemplates/GADTMediumTemplateView.xib +Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib +Assets/Plugins/iOS/unity-plugin-library.a diff --git a/Assets/GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt.meta b/Assets/GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt.meta new file mode 100644 index 0000000..ce59d02 --- /dev/null +++ b/Assets/GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f3f62747da9144319f7849f3fc6997be +labels: +- gvh +- gvh_manifest +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/GoogleMobileAds_version-10.6.0_manifest.txt +- gvhp_manifestname-0Google Mobile Ads for Unity +- gvhp_manifestname-1GoogleMobileAds +timeCreated: 0 diff --git a/Assets/GoogleMobileAds/LICENSE b/Assets/GoogleMobileAds/LICENSE new file mode 100644 index 0000000..b7c9ed1 --- /dev/null +++ b/Assets/GoogleMobileAds/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2013 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Assets/GoogleMobileAds/LICENSE.meta b/Assets/GoogleMobileAds/LICENSE.meta new file mode 100644 index 0000000..4e34d55 --- /dev/null +++ b/Assets/GoogleMobileAds/LICENSE.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: DCED4676809D4FD080DC99CC6B32B2AB +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/LICENSE +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Resources.meta b/Assets/GoogleMobileAds/Resources.meta new file mode 100644 index 0000000..3f07e72 --- /dev/null +++ b/Assets/GoogleMobileAds/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f77409e5fc90b6b4493cf25873774524 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset new file mode 100644 index 0000000..9d33e3c --- /dev/null +++ b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a187246822bbb47529482707f3e0eff8, type: 3} + m_Name: GoogleMobileAdsSettings + m_EditorClassIdentifier: + adMobAndroidAppId: ca-app-pub-3940256099942544~3347511713 + adMobIOSAppId: ca-app-pub-3940256099942544~1458002511 + enableKotlinXCoroutinesPackagingOption: 1 + enableGradleBuildPreProcessor: 1 + disableOptimizeInitialization: 0 + disableOptimizeAdLoading: 0 + userTrackingUsageDescription: + userLanguage: en diff --git a/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta new file mode 100644 index 0000000..8ac51d5 --- /dev/null +++ b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5cf16432cb301347875a0b6fd27ab93 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/link.xml b/Assets/GoogleMobileAds/link.xml new file mode 100644 index 0000000..1302803 --- /dev/null +++ b/Assets/GoogleMobileAds/link.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/Assets/GoogleMobileAds/link.xml.meta b/Assets/GoogleMobileAds/link.xml.meta new file mode 100644 index 0000000..fdeac0e --- /dev/null +++ b/Assets/GoogleMobileAds/link.xml.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6461f9591d240498f49453b73a48552 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-GoogleMobileAds/link.xml +timeCreated: 1480838400 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/AppLovin/Editor/Dependencies.xml b/Assets/MaxSdk/AppLovin/Editor/Dependencies.xml index 80f3b4c..6ab3f24 100644 --- a/Assets/MaxSdk/AppLovin/Editor/Dependencies.xml +++ b/Assets/MaxSdk/AppLovin/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Assets/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar b/Assets/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar index 9600e02..7f15507 100644 Binary files a/Assets/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar and b/Assets/MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar differ diff --git a/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m b/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m index a7bd666..27ab694 100644 --- a/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m +++ b/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityAdManager.m @@ -1987,6 +1987,8 @@ static ALUnityBackgroundCallback backgroundCallback; - (NSString *)requestLatencyMillisFromRequestLatency:(NSTimeInterval)requestLatency { + if ( requestLatency == -1 ) return @"-1"; + // Convert latency from seconds to milliseconds to match Android. long requestLatencyMillis = requestLatency * 1000; return @(requestLatencyMillis).stringValue; diff --git a/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm b/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm index b717fae..6fd28ab 100644 --- a/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm +++ b/Assets/MaxSdk/AppLovin/Plugins/iOS/MAUnityPlugin.mm @@ -8,7 +8,7 @@ #import "MAUnityAdManager.h" -#define VERSION @"8.6.2" +#define VERSION @"8.6.4" #define NSSTRING(_X) ( (_X != NULL) ? [NSString stringWithCString: _X encoding: NSStringEncodingConversionAllowLossy].al_stringByTrimmingWhitespace : nil) @interface NSString (ALUtils) diff --git a/Assets/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml index 312247e..4f9929f 100644 --- a/Assets/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/BidMachine/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://artifactory.bidmachine.io/bidmachine - + diff --git a/Assets/MaxSdk/Mediation/BigoAds/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/BigoAds/Editor/Dependencies.xml index 90c1f1f..aa9ebb1 100644 --- a/Assets/MaxSdk/Mediation/BigoAds/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/BigoAds/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Assets/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml index 5efb952..fd0549a 100644 --- a/Assets/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/ByteDance/Editor/Dependencies.xml @@ -1,13 +1,13 @@ - + https://artifact.bytedance.com/repository/pangle - + diff --git a/Assets/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml index d3c7e14..1fbd150 100644 --- a/Assets/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/Chartboost/Editor/Dependencies.xml @@ -1,7 +1,7 @@ - + https://cboost.jfrog.io/artifactory/chartboost-ads/ @@ -9,6 +9,6 @@ - + diff --git a/Assets/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml index 9c2d361..c874ffb 100644 --- a/Assets/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/Facebook/Editor/Dependencies.xml @@ -5,7 +5,7 @@ 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/Assets/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml index bba2782..7ecf0ba 100644 --- a/Assets/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/Fyber/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Assets/MaxSdk/Mediation/Google.meta b/Assets/MaxSdk/Mediation/Google.meta new file mode 100644 index 0000000..469c65c --- /dev/null +++ b/Assets/MaxSdk/Mediation/Google.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 64176641aa4214f18881c7888b2f4187 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/Mediation/Google/Editor.meta b/Assets/MaxSdk/Mediation/Google/Editor.meta new file mode 100644 index 0000000..ea8dd55 --- /dev/null +++ b/Assets/MaxSdk/Mediation/Google/Editor.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8015bd045cea462c8f39c8a05867d08 +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation/Google/Editor +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/Mediation/Google/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Google/Editor/Dependencies.xml new file mode 100644 index 0000000..6d3339d --- /dev/null +++ b/Assets/MaxSdk/Mediation/Google/Editor/Dependencies.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Assets/MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta b/Assets/MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta new file mode 100644 index 0000000..36bef72 --- /dev/null +++ b/Assets/MaxSdk/Mediation/Google/Editor/Dependencies.xml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 053b810d3594744e38b6fd0fa378fb57 +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation/Google/Editor/Dependencies.xml +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/Mediation/GoogleAdManager.meta b/Assets/MaxSdk/Mediation/GoogleAdManager.meta new file mode 100644 index 0000000..adc1779 --- /dev/null +++ b/Assets/MaxSdk/Mediation/GoogleAdManager.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f75dec80f49c44ee68edd909bd32747a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/Mediation/GoogleAdManager/Editor.meta b/Assets/MaxSdk/Mediation/GoogleAdManager/Editor.meta new file mode 100644 index 0000000..7b0912c --- /dev/null +++ b/Assets/MaxSdk/Mediation/GoogleAdManager/Editor.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3e1635bfb5b164c389d38eb1e5e6e909 +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml new file mode 100644 index 0000000..aeed80a --- /dev/null +++ b/Assets/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Assets/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta b/Assets/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta new file mode 100644 index 0000000..71b0087 --- /dev/null +++ b/Assets/MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: aebbf5e9af66e431fa6078021b2f762f +labels: +- al_max +- al_max_export_path-MaxSdk/Mediation/GoogleAdManager/Editor/Dependencies.xml +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml index 38e22d7..9e439ea 100644 --- a/Assets/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/InMobi/Editor/Dependencies.xml @@ -1,12 +1,12 @@ - + - + diff --git a/Assets/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml index 6aa657b..79a0043 100644 --- a/Assets/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/IronSource/Editor/Dependencies.xml @@ -1,10 +1,10 @@ - + - + diff --git a/Assets/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml index 7cb4e96..221016d 100644 --- a/Assets/MaxSdk/Mediation/Mintegral/Editor/Dependencies.xml +++ b/Assets/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/Assets/MaxSdk/Mediation/Moloco/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Moloco/Editor/Dependencies.xml index 94d78d0..825598c 100644 --- a/Assets/MaxSdk/Mediation/Moloco/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/Moloco/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Assets/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml index 560779d..72ddf97 100644 --- a/Assets/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/UnityAds/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Assets/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml b/Assets/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml index 8262be7..cca5147 100644 --- a/Assets/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml +++ b/Assets/MaxSdk/Mediation/Vungle/Editor/Dependencies.xml @@ -1,9 +1,9 @@ - + - + diff --git a/Assets/MaxSdk/Resources/AppLovinSettings.asset b/Assets/MaxSdk/Resources/AppLovinSettings.asset index 1002222..cd10b7d 100644 --- a/Assets/MaxSdk/Resources/AppLovinSettings.asset +++ b/Assets/MaxSdk/Resources/AppLovinSettings.asset @@ -16,5 +16,5 @@ MonoBehaviour: sdkKey: mmVXU9O_ESeur52h0VwzCGfbI4wB8LxeBfydReplRMm2JmN8eNMVgSuiKy2bmTJ00m4DHSKFxhaH1pnpEME5bB customGradleVersionUrl: customGradleToolsVersion: - adMobAndroidAppId: - adMobIosAppId: ca-app-pub-6060482967044764~9684940018 + adMobAndroidAppId: ca-app-pub-3940256099942544~3347511713 + adMobIosAppId: ca-app-pub-3940256099942544~1458002511 diff --git a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs index 7c1cdc8..13d6309 100644 --- a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs +++ b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinInitialize.cs @@ -19,6 +19,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor { "AdColony", "Criteo", + "LinkedIn", "Nend", "Snap", "Tapjoy", diff --git a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs index 236b952..b0cdbbc 100644 --- a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs +++ b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinIntegrationManager.cs @@ -373,7 +373,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor { if (!webResponse.IsSuccess) { - MaxSdkLogger.E("Failed to load plugin data. Please check your internet connection."); + MaxSdkLogger.UserError("Failed to load plugin data. Please check your internet connection."); return null; } diff --git a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs index ae86796..f2d2e6f 100644 --- a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs +++ b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessAndroid.cs @@ -27,8 +27,6 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor private const string PropertyAndroidX = "android.useAndroidX"; private const string PropertyJetifier = "android.enableJetifier"; private const string EnableProperty = "=true"; - private const string PropertyDexingArtifactTransform = "android.enableDexingArtifactTransform"; - private const string DisableProperty = "=false"; private const string KeyMetaDataAppLovinVerboseLoggingOn = "applovin.sdk.verbose_logging"; private const string KeyMetaDataGoogleApplicationId = "com.google.android.gms.ads.APPLICATION_ID"; @@ -82,19 +80,13 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor var lines = File.ReadAllLines(gradlePropertiesPath); // Add all properties except AndroidX, Jetifier, and DexingArtifactTransform since they may already exist. We will re-add them below. - gradlePropertiesUpdated.AddRange(lines.Where(line => !line.Contains(PropertyAndroidX) && !line.Contains(PropertyJetifier) && !line.Contains(PropertyDexingArtifactTransform))); + gradlePropertiesUpdated.AddRange(lines.Where(line => !line.Contains(PropertyAndroidX) && !line.Contains(PropertyJetifier))); } // Enable AndroidX and Jetifier properties gradlePropertiesUpdated.Add(PropertyAndroidX + EnableProperty); gradlePropertiesUpdated.Add(PropertyJetifier + EnableProperty); - // `DexingArtifactTransform` has been removed in Gradle 8+ which is the default Gradle version for Unity 6. -#if !UNITY_6000_0_OR_NEWER - // Disable dexing using artifact transform (it causes issues for ExoPlayer with Gradle plugin 3.5.0+) - gradlePropertiesUpdated.Add(PropertyDexingArtifactTransform + DisableProperty); -#endif - try { File.WriteAllText(gradlePropertiesPath, string.Join("\n", gradlePropertiesUpdated.ToArray()) + "\n"); @@ -282,7 +274,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor } else { - MaxSdkLogger.E("Failed to set distribution URL"); + MaxSdkLogger.UserError("Failed to set distribution URL"); } } @@ -292,7 +284,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor // 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+"); + MaxSdkLogger.UserError("Failed to set gradle plugin version. Unity 2022.3+ requires gradle plugin version 7.1.2+"); return; } @@ -303,7 +295,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor } else { - MaxSdkLogger.E("Failed to set gradle library version"); + MaxSdkLogger.UserError("Failed to set gradle library version"); } var newGradleVersionLine = AppLovinProcessGradleBuildFile.GetFormattedBuildScriptLine(string.Format("id 'com.android.application' version '{0}' apply false", customGradleToolsVersion)); @@ -316,7 +308,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor } else { - MaxSdkLogger.E("Failed to set gradle plugin version"); + MaxSdkLogger.UserError("Failed to set gradle plugin version"); } } } diff --git a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs index 475481d..090abc1 100644 --- a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs +++ b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPostProcessiOS.cs @@ -224,7 +224,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor var pluginData = AppLovinIntegrationManager.LoadPluginDataSync(); if (pluginData == null) { - MaxSdkLogger.E("Failed to load plugin data. Dynamic libraries will not be embedded."); + MaxSdkLogger.UserError("Failed to load plugin data. Dynamic libraries will not be embedded."); return null; } diff --git a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcess.cs b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcess.cs index 3ed102a..a1de1c1 100644 --- a/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcess.cs +++ b/Assets/MaxSdk/Scripts/IntegrationManager/Editor/AppLovinPreProcess.cs @@ -57,7 +57,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor } catch (Exception exception) { - MaxSdkLogger.E("Unable to load Dependencies file due to exception: " + exception.Message); + MaxSdkLogger.UserError("Unable to load Dependencies file due to exception: " + exception.Message); } return null; @@ -173,7 +173,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor } catch (Exception exception) { - MaxSdkLogger.E("Unable to save Dependencies file due to exception: " + exception.Message); + MaxSdkLogger.UserError("Unable to save Dependencies file due to exception: " + exception.Message); } return false; diff --git a/Assets/MaxSdk/Scripts/MaxSdk.cs b/Assets/MaxSdk/Scripts/MaxSdk.cs index 8e69d9b..21e3d4d 100644 --- a/Assets/MaxSdk/Scripts/MaxSdk.cs +++ b/Assets/MaxSdk/Scripts/MaxSdk.cs @@ -14,7 +14,7 @@ public class MaxSdk : MaxSdkUnityEditor #endif { - private const string _version = "8.6.2"; + private const string _version = "8.6.4"; /// /// Returns the current plugin version. diff --git a/Assets/NCWWA6A0SDK.meta b/Assets/NCWWA6A0SDK.meta new file mode 100644 index 0000000..eba91e9 --- /dev/null +++ b/Assets/NCWWA6A0SDK.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fcc8b5b70333334d9a36b4cada6c845 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Demo.meta b/Assets/NCWWA6A0SDK/Demo.meta new file mode 100644 index 0000000..30f672c --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42b11239795a857438cebb0b42577408 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Demo/Canvas.prefab b/Assets/NCWWA6A0SDK/Demo/Canvas.prefab new file mode 100644 index 0000000..31917c1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo/Canvas.prefab @@ -0,0 +1,1621 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &247289662654341969 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2186578608974745122} + - component: {fileID: 1915380833576099152} + m_Layer: 5 + m_Name: Btns_1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2186578608974745122 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247289662654341969} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2114339503071180276} + - {fileID: 6386247163610881328} + - {fileID: 7421123915051953226} + m_Father: {fileID: 3814336198664204231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 300} + m_SizeDelta: {x: 0, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1915380833576099152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 247289662654341969} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &374282632372128772 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5263133496851294189} + - component: {fileID: 4413009211153563760} + - component: {fileID: 1082509387802029583} + - component: {fileID: 5280069374268115974} + m_Layer: 5 + m_Name: Button_splash + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5263133496851294189 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 374282632372128772} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1320549599529069869} + m_Father: {fileID: 2309657635319882206} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4413009211153563760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 374282632372128772} + m_CullTransparentMesh: 1 +--- !u!114 &1082509387802029583 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 374282632372128772} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &5280069374268115974 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 374282632372128772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1082509387802029583} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6147603117923645731} + m_TargetAssemblyTypeName: TXXSDKDemo, Assembly-CSharp + m_MethodName: CheckSplash + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 1082509387802029583} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Image, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &871561312035611753 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8078846575455493895} + - component: {fileID: 7778772907728132549} + - component: {fileID: 8048899328929339997} + - component: {fileID: 51037568750415047} + m_Layer: 5 + m_Name: Button_video + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8078846575455493895 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871561312035611753} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7207412852729209054} + m_Father: {fileID: 2309657635319882206} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7778772907728132549 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871561312035611753} + m_CullTransparentMesh: 1 +--- !u!114 &8048899328929339997 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871561312035611753} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &51037568750415047 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 871561312035611753} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 8048899328929339997} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6147603117923645731} + m_TargetAssemblyTypeName: TXXSDKDemo, Assembly-CSharp + m_MethodName: CheckReward + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 8048899328929339997} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Image, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1057232852885327108 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2114339503071180276} + - component: {fileID: 701906088969942400} + - component: {fileID: 6516697084468721236} + - component: {fileID: 5229623939237214052} + m_Layer: 5 + m_Name: Button_video + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2114339503071180276 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057232852885327108} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3155729959236665959} + m_Father: {fileID: 2186578608974745122} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &701906088969942400 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057232852885327108} + m_CullTransparentMesh: 1 +--- !u!114 &6516697084468721236 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057232852885327108} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &5229623939237214052 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057232852885327108} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6516697084468721236} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6147603117923645731} + m_TargetAssemblyTypeName: TXXSDKDemo, Assembly-CSharp + m_MethodName: ShowReward + 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!1 &1129433504447830547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7207412852729209054} + - component: {fileID: 9163546795248234934} + - component: {fileID: 3981730049102639300} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7207412852729209054 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129433504447830547} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8078846575455493895} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9163546795248234934 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129433504447830547} + m_CullTransparentMesh: 1 +--- !u!114 &3981730049102639300 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129433504447830547} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u89C6\u9891ready?" +--- !u!1 &1274082055292461939 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5433208044156239605} + - component: {fileID: 7233200712829872637} + - component: {fileID: 6576387300318430563} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5433208044156239605 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274082055292461939} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7421123915051953226} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7233200712829872637 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274082055292461939} + m_CullTransparentMesh: 1 +--- !u!114 &6576387300318430563 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1274082055292461939} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u5F00\u5C4F" +--- !u!1 &1470164605704797392 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6055302853728915273} + - component: {fileID: 6897099642644240591} + - component: {fileID: 3953240985225444270} + - component: {fileID: 9218745861528478038} + m_Layer: 5 + m_Name: Button_inter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6055302853728915273 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470164605704797392} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5879659302016511695} + m_Father: {fileID: 2309657635319882206} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6897099642644240591 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470164605704797392} + m_CullTransparentMesh: 1 +--- !u!114 &3953240985225444270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470164605704797392} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &9218745861528478038 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1470164605704797392} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3953240985225444270} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6147603117923645731} + m_TargetAssemblyTypeName: TXXSDKDemo, Assembly-CSharp + m_MethodName: CheckInter + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 3953240985225444270} + m_ObjectArgumentAssemblyTypeName: UnityEngine.UI.Image, UnityEngine.UI + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!1 &1773880965652319719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3047827094130688118} + - component: {fileID: 8805665133166091484} + - component: {fileID: 836177114871363730} + m_Layer: 5 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3047827094130688118 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773880965652319719} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3814336198664204231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8805665133166091484 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773880965652319719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!114 &836177114871363730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1773880965652319719} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!1 &1851783444536761142 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5870506162399608540} + - component: {fileID: 5977857075755120021} + - component: {fileID: 1065934884972764730} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5870506162399608540 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851783444536761142} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6386247163610881328} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5977857075755120021 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851783444536761142} + m_CullTransparentMesh: 1 +--- !u!114 &1065934884972764730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1851783444536761142} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u63D2\u5C4F" +--- !u!1 &2258479920111071275 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6386247163610881328} + - component: {fileID: 33303646435982000} + - component: {fileID: 3709050320292666399} + - component: {fileID: 6474089087819971336} + m_Layer: 5 + m_Name: Button_inter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6386247163610881328 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2258479920111071275} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5870506162399608540} + m_Father: {fileID: 2186578608974745122} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &33303646435982000 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2258479920111071275} + m_CullTransparentMesh: 1 +--- !u!114 &3709050320292666399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2258479920111071275} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &6474089087819971336 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2258479920111071275} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 3709050320292666399} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6147603117923645731} + m_TargetAssemblyTypeName: TXXSDKDemo, Assembly-CSharp + m_MethodName: ShowInter + 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!1 &2494615750025654997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7421123915051953226} + - component: {fileID: 1235256825791595106} + - component: {fileID: 6690812882586864819} + - component: {fileID: 3512666246441764720} + m_Layer: 5 + m_Name: Button_splash + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7421123915051953226 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2494615750025654997} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5433208044156239605} + m_Father: {fileID: 2186578608974745122} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1235256825791595106 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2494615750025654997} + m_CullTransparentMesh: 1 +--- !u!114 &6690812882586864819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2494615750025654997} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + 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!114 &3512666246441764720 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2494615750025654997} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6690812882586864819} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 6147603117923645731} + m_TargetAssemblyTypeName: TXXSDKDemo, Assembly-CSharp + m_MethodName: ShowSplash + 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!1 &3993425241739893078 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6165632457974456317} + - component: {fileID: 6147603117923645731} + m_Layer: 0 + m_Name: Demo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6165632457974456317 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3993425241739893078} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -360, y: -640, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3814336198664204231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6147603117923645731 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3993425241739893078} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d8774234e57432246b6a0759b8ef695a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &5276044070817228816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3814336198664204231} + - component: {fileID: 3767656123001148601} + - component: {fileID: 7104908342640413437} + - component: {fileID: 8919042661587609366} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3814336198664204231 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276044070817228816} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2186578608974745122} + - {fileID: 2309657635319882206} + - {fileID: 3047827094130688118} + - {fileID: 6165632457974456317} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &3767656123001148601 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276044070817228816} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &7104908342640413437 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276044070817228816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &8919042661587609366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5276044070817228816} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &5499898375600897921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5879659302016511695} + - component: {fileID: 1262070443735396263} + - component: {fileID: 6099349652833753084} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5879659302016511695 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5499898375600897921} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6055302853728915273} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1262070443735396263 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5499898375600897921} + m_CullTransparentMesh: 1 +--- !u!114 &6099349652833753084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5499898375600897921} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u63D2\u5C4Fready?" +--- !u!1 &6002140994012719198 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1320549599529069869} + - component: {fileID: 3524675111442863565} + - component: {fileID: 5777339551399410459} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1320549599529069869 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002140994012719198} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5263133496851294189} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3524675111442863565 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002140994012719198} + m_CullTransparentMesh: 1 +--- !u!114 &5777339551399410459 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6002140994012719198} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u5F00\u5C4Fready?" +--- !u!1 &7187179808451312703 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2309657635319882206} + - component: {fileID: 6223048036171551623} + m_Layer: 5 + m_Name: Btns_2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2309657635319882206 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7187179808451312703} + 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_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8078846575455493895} + - {fileID: 6055302853728915273} + - {fileID: 5263133496851294189} + m_Father: {fileID: 3814336198664204231} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 200} + m_SizeDelta: {x: 0, y: 60} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &6223048036171551623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7187179808451312703} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &8249781748356899463 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3155729959236665959} + - component: {fileID: 98453067105818748} + - component: {fileID: 857160171482335875} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3155729959236665959 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8249781748356899463} + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2114339503071180276} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &98453067105818748 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8249781748356899463} + m_CullTransparentMesh: 1 +--- !u!114 &857160171482335875 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8249781748356899463} + 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_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 26 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: "\u6FC0\u52B1\u89C6\u9891" diff --git a/Assets/NCWWA6A0SDK/Demo/Canvas.prefab.meta b/Assets/NCWWA6A0SDK/Demo/Canvas.prefab.meta new file mode 100644 index 0000000..e7ddba9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo/Canvas.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 51f8b691978644845a59d4da09bb72e3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Demo/Demo.prefab b/Assets/NCWWA6A0SDK/Demo/Demo.prefab new file mode 100644 index 0000000..5a1e7f8 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo/Demo.prefab @@ -0,0 +1,33 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7999829969770386720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 520568642914021788} + m_Layer: 0 + m_Name: Demo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &520568642914021788 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7999829969770386720} + serializedVersion: 2 + 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_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/NCWWA6A0SDK/Demo/Demo.prefab.meta b/Assets/NCWWA6A0SDK/Demo/Demo.prefab.meta new file mode 100644 index 0000000..951ac22 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo/Demo.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5597cf0c8207a4448a9e84a8800d5cad +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Demo/NCWWA6A0SDKDemo.cs b/Assets/NCWWA6A0SDK/Demo/NCWWA6A0SDKDemo.cs new file mode 100644 index 0000000..ad8a24a --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo/NCWWA6A0SDKDemo.cs @@ -0,0 +1,240 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using Newtonsoft.Json; +using NCWWA6A0SDK; +using UnityEngine; +using UnityEngine.UI; +using Random = UnityEngine.Random; + +public class NCWWA6A0SDKDemo : MonoBehaviour +{ + public void ShowReward() + { + NCWWA6A0SDK_Manager.Instance.ShowRewardVideo("TAG", b => + { + Debug.LogError($"reward result = {b}"); + },(() => + { + Debug.LogError($"reward close!!!"); + })); + } + + public void ShowInter() + { + NCWWA6A0SDK_Manager.Instance.ShowInter("TAG", () => + { + Debug.LogError("inter hide"); + }); + } + + public void ShowAdmobInter() + { + NCWWA6A0SDK_Manager.Instance.ShowAdmobInter("TAG", () => + { + Debug.LogError("inter hide"); + }); + } + + public void ShowSplash() + { + NCWWA6A0SDK_Manager.Instance.ShowSplash(); + } + + public void CheckReward(Image btnImg) + { + var isReady = NCWWA6A0SDK_Manager.Instance.IsVideoReady(); + btnImg.color = isReady ? Color.green : Color.white; + Debug.Log($"Reward : {isReady}"); + } + + public void CheckInter(Image btnImg) + { + var isReady = NCWWA6A0SDK_Manager.Instance.IsInterReady(); + btnImg.color = isReady ? Color.green : Color.white; + Debug.Log($"Inter : {isReady}"); + } + + public void CheckSplash(Image btnImg) + { + var isReady = NCWWA6A0SDK_Manager.Instance.IsSplashReady(); + btnImg.color = isReady ? Color.green : Color.white; + Debug.Log($"Splash : {isReady}"); + } + + public void Track() + { + NCWWA6A0SDK_Manager.Instance.Track("test", new Dictionary() + { + {"evt1", "1"}, + {"evt2", "2"}, + {"evt3", "3"}, + {"evt4", "4"}, + {"evt5", "5"}, + {"evt6", "6"}, + {"evt7", "7"}, + {"evt8", "8"}, + {"evt9", "9"}, + }); + + + } + + public void GetCountryCode() + { + + var code = NCWWA6A0SDK_Manager.Instance.GetCountryCode(); + Debug.Log($"country : {code}"); + } + + public void ShowH5() + { + NCWWA6A0SDK_Manager.Instance.H5.ShowH5((() => + { + Debug.Log("H5 close"); + }), () => + { + Debug.Log($"H5 show failed!"); + }); + } + + public void ShowH5WebView() + { + NCWWA6A0SDK_Manager.Instance.H5.ShowWebView((() => + { + Debug.Log("H5 close"); + })); + } + + public void ShowH5(RectTransform rectTransform) + { + NCWWA6A0SDK_Manager.Instance.H5.ShowH5(rectTransform); + } + + public void HideH5() + { + NCWWA6A0SDK_Manager.Instance.H5.HideH5(); + } + + public void CheckShowH5(Image btnImg) + { + var show = NCWWA6A0SDK_Manager.Instance.H5.IsShowH5(); + btnImg.color = show ? Color.green : Color.red; + Debug.Log($"CheckShowH5 : {show}"); + } + + private int _level = 1; + public void TrackLevel() + { + NCWWA6A0SDK_Manager.Instance.TrackLevelUp(_level); + if (Random.Range(0, 100) < 50) + { + _level++; + } + } + + private string withDrawSceneId = ""; + public void GetWithDrawConfigs() + { + NCWWA6A0SDK_Manager.Instance.GetWithDrawConfigs(((b, s) => + { + Debug.Log($"GetWithDrawConfigs result : {b}, data : {s}"); + if (b) + { + var cfgs = JsonConvert.DeserializeObject>(s); + int idx = 0; + foreach (WithDrawConfig config in cfgs) + { + Debug.Log($"index = {idx}, {config.ToString()}"); + if (idx == 0) + withDrawSceneId = config.SecneId; + idx++; + } + } + + })); + } + + private int payIndex = 0; + public void CreateWithDrawOrder() + { + string taxNo = "99999999999"; + string payAccount = "tom@gmail.com"; + string accountType = "E"; + string payeeName = "testName"; + PaymentTypeCode payCode = PaymentTypeCode.PAYPAL; + ////GOPAY DANA 收款账号需要为电话号码 + //if (payIndex == 1 || payIndex == 0) + //{ + // payCode = payIndex == 1 ? PaymentTypeCode.DANA : payCode; + // payAccount = "0881234567890"; + // accountType = "P"; + //} + //if (payIndex == 2) + //{ + // // PIX 需要填写税号 + // payCode = PaymentTypeCode.PIX; + // taxNo = "99999999999"; + //} + //if (payIndex == 3) payCode = PaymentTypeCode.MERCADOPAGO; + NCWWA6A0SDK_Manager.Instance.CreateWithDrawOrder(withDrawSceneId, payCode, payAccount, accountType, payeeName, taxNo, b => + { + Debug.Log($"CreateWithDrawOrder result : {b}"); + }); + + payIndex++; + payIndex = payIndex > 3 ? 0 : payIndex; + } + + public void GetWithDrawOrders() + { + NCWWA6A0SDK_Manager.Instance.GetWithDrawOrders(((b, s) => + { + Debug.Log($"GetWithDrawOrders result : {b}, data : {s}"); + if (b) + { + var cfgs = JsonConvert.DeserializeObject>(s); + int idx = 0; + foreach (WithDrawOrder config in cfgs) + { + Debug.Log($"index = {idx}, {config.ToString()}"); + idx++; + } + } + })); + } + + // Start is called before the first frame update + void Start() + { + Init(); + + Invoke("ShowSplash", 5); + } + + // Update is called once per frame + void Update() + { + + } + + private void Init() + { + NCWWA6A0SDK_Manager.Instance.RegistIosParam((i => + { + Debug.Log($"ios ab param : {i}"); + })); + + void GameConfig(bool result, string config) + { + Debug.Log($"************* game config result : {result}, config : {config}"); + } + + NCWWA6A0SDK_Manager.Instance.Init(null, "app_config", GameConfig); + } + + public static string GetSdkVersion() + { + return NCWWA6A0SDK_Manager.SdkVersion; + } +} diff --git a/Assets/NCWWA6A0SDK/Demo/NCWWA6A0SDKDemo.cs.meta b/Assets/NCWWA6A0SDK/Demo/NCWWA6A0SDKDemo.cs.meta new file mode 100644 index 0000000..dcfc259 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Demo/NCWWA6A0SDKDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 959ec24a7131c9d488e5007fa82612be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Editor.meta b/Assets/NCWWA6A0SDK/Editor.meta new file mode 100644 index 0000000..0a8ee57 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 730a988606a036b4b92d1abb57c9d112 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Editor/NCWWA6A0SDKConfigEditor.cs b/Assets/NCWWA6A0SDK/Editor/NCWWA6A0SDKConfigEditor.cs new file mode 100644 index 0000000..e3a3012 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Editor/NCWWA6A0SDKConfigEditor.cs @@ -0,0 +1,653 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text.RegularExpressions; +using NCWWA6A0SDK; +using UnityEditor; +using UnityEngine; + +public class NCWWA6A0SDKConfigEditor : EditorWindow +{ + private static NCWWA6A0SDKConfigEditor _view; + +private int _emptyKwInterIdCount = 1; +private int _emptyKwVideoIdCount = 1; + +private int _emptyBigoInterIdCount = 1; +private int _emptyBigoVideoIdCount = 1; + +[MenuItem("Tools/设置 &G")] +public static void ShowWin() +{ + if (_view != null) + { + CloseView(); + return; + } + + var win = GetWindow(); + win.minSize = new Vector2(790, 872); + _view = win; + RemoveExtraEmptyStrings(SDKConfig.KwaiInterUnitId, _view._emptyKwInterIdCount); + RemoveExtraEmptyStrings(SDKConfig.KwaiVideoUnitId, _view._emptyKwVideoIdCount); + RemoveExtraEmptyStrings(SDKConfig.BigoInterUnitId, _view._emptyBigoInterIdCount); + RemoveExtraEmptyStrings(SDKConfig.BigoVideoUnitId, _view._emptyBigoVideoIdCount); + win.Show(); + + #region topon + + // _view.loadPluginData(); + + #endregion + + } + + static void CloseView() +{ + _view.Close(); + _view = null; +} + +private void OnGUI() +{ + DrawWindow(); + EditorUtility.SetDirty(SDKConfig.Instance); +} + +#region Topon +// private AnyThink.Scripts.IntegrationManager.Editor.ATEditorCoroutine loadDataCoroutine; +// private AnyThink.Scripts.IntegrationManager.Editor.PluginData pluginData; +// private bool pluginDataLoadFailed; +// private void loadPluginData() +// { + // if (loadDataCoroutine != null) + // { + // loadDataCoroutine.Stop(); + // } + // loadDataCoroutine = AnyThink.Scripts.IntegrationManager.Editor.ATEditorCoroutine.startCoroutine(AnyThink.Scripts.IntegrationManager.Editor.ATIntegrationManager.Instance.loadPluginData(data => + // { + // if (data == null) + // { + // pluginDataLoadFailed = true; + // } + // else + // { + // ATLog.log("loadNetworksData() >>> pluginData: " + data); + // pluginData = data; + // pluginDataLoadFailed = false; + // } + // })); +// } + +#endregion + + private void DrawWindow() +{ + TextLabel("基础配置"); + EditorGUILayout.BeginVertical("frameBox"); +#if UNITY_IOS + SDKConfig.Instance.appsFlyerDevKey = DrawTextField("appsFlyerDevKey", SDKConfig.Instance.appsFlyerDevKey); + SDKConfig.Instance.appsFlyerIosAppleAppId = DrawTextField("appsFlyerIosAppleAppId", SDKConfig.Instance.appsFlyerIosAppleAppId); +#elif UNITY_ANDROID + SDKConfig.Instance.appsFlyerDevKey = DrawTextField("appsFlyerDevKey", SDKConfig.Instance.appsFlyerDevKey); +#endif + SDKConfig.Instance.logReportUrl = DrawTextField("配置域名", SDKConfig.Instance.logReportUrl); + SDKConfig.Instance.appKey = DrawTextField("appKey", SDKConfig.Instance.appKey); + SDKConfig.Instance.appSecret = DrawTextField("appSecret", SDKConfig.Instance.appSecret); + + EditorGUILayout.EndVertical(); + + TextLabel("广告配置"); + + + #region MAX + + EditorGUILayout.BeginVertical("frameBox"); + TextLabel("MAX", Color.cyan); + SDKConfig.Instance.maxAppKey = DrawTextField("MaxSdkKey", SDKConfig.Instance.maxAppKey); + SDKConfig.Instance.videoUnitId = DrawTextField("激励视频 ID", SDKConfig.Instance.videoUnitId); + SDKConfig.Instance.interUnitId = DrawTextField("插屏 ID", SDKConfig.Instance.interUnitId); + SDKConfig.Instance.bannerUnitId = DrawTextField("Banner ID", SDKConfig.Instance.bannerUnitId); + SDKConfig.Instance.splashUnitId = DrawTextField("开屏 ID", SDKConfig.Instance.splashUnitId); + EditorGUILayout.EndVertical(); + + AppLovinSettings.Instance.SdkKey = SDKConfig.Instance.maxAppKey; + + #endregion + + + #region Topon + + // EditorGUILayout.BeginVertical("frameBox"); + // TextLabel("Topon", Color.cyan); + // SDKConfig.Instance.toponAppId = DrawTextField("AppId", SDKConfig.Instance.toponAppId); + // SDKConfig.Instance.toponAppkey = DrawTextField("Appkey", SDKConfig.Instance.toponAppkey); + // SDKConfig.Instance.toponVideoUnitId = DrawTextField("激励视频 ID", SDKConfig.Instance.toponVideoUnitId); + // SDKConfig.Instance.toponInterUnitId = DrawTextField("插屏 ID", SDKConfig.Instance.toponInterUnitId); + // EditorGUILayout.EndVertical(); + + // var integrationManager = AnyThink.Scripts.IntegrationManager.Editor.ATIntegrationManager.Instance; + // bool isAdmobInstalledForAndroid = integrationManager.isAdmobInstalled(AnyThink.Scripts.IntegrationManager.Editor.ATConfig.OS_ANDROID); + // bool isAdmobInstalledForIos = integrationManager.isAdmobInstalled(AnyThink.Scripts.IntegrationManager.Editor.ATConfig.OS_IOS); + + // if (isAdmobInstalledForAndroid || isAdmobInstalledForIos) + // { + // if (isAdmobInstalledForAndroid) + // { + // var androidAdmobAppId = "ca-app-pub-3940256099942544~3347511713"; + // integrationManager.setAdmobAppidByOs(pluginData, AnyThink.Scripts.IntegrationManager.Editor.ATConfig.OS_ANDROID, androidAdmobAppId); + // } + // if (isAdmobInstalledForIos) + // { + // var iosAdmobAppId = "ca-app-pub-3940256099942544~1458002511"; + // integrationManager.setAdmobAppidByOs(pluginData, AnyThink.Scripts.IntegrationManager.Editor.ATConfig.OS_IOS, iosAdmobAppId); + // } + // } + + #endregion + +#if UNITY_ANDROID + + EditorGUILayout.BeginVertical("frameBox"); + EditorGUILayout.BeginHorizontal("frameBox"); + TextLabel("KWai", Color.cyan); + DrawButton("插屏ID +", AddInterId); + //DrawButton("插屏ID -", DelInterId); + DrawButton("激励视频ID +", AddRewardId); + //DrawButton("激励视频ID -", DelRewardId); + EditorGUILayout.EndHorizontal(); + SDKConfig.Instance.kwaiAppId = DrawTextField("AppId", SDKConfig.Instance.kwaiAppId); + + for (int i = 0; i < SDKConfig.Instance.kwaiInterUnitId.Count; i++) + { + var index = i; + GUILayout.BeginHorizontal(); + SDKConfig.Instance.kwaiInterUnitId[i] = + DrawTextField("插屏ID - " + (i + 1), SDKConfig.Instance.kwaiInterUnitId[i]); + DrawButtonX("X", () => DelInterId(index)); + GUILayout.EndHorizontal(); + + } + + for (int i = 0; i < SDKConfig.Instance.kwaiVideoUnitId.Count; i++) + { + var index = i; + GUILayout.BeginHorizontal(); + SDKConfig.Instance.kwaiVideoUnitId[i] = + DrawTextField("激励视频ID - " + (i + 1), SDKConfig.Instance.kwaiVideoUnitId[i]); + DrawButtonX("X", () => DelRewardId(index)); + GUILayout.EndHorizontal(); + + } + + EditorGUILayout.EndVertical(); + + EditorGUILayout.BeginVertical("frameBox"); + EditorGUILayout.BeginHorizontal("frameBox"); + TextLabel("Bigo", Color.cyan); + DrawButton("插屏ID +", AddBigoInterId); + DrawButton("激励视频ID +", AddBigoRewardId); + EditorGUILayout.EndHorizontal(); + SDKConfig.Instance.bigoAppId = DrawTextField("AppId", SDKConfig.Instance.bigoAppId); + SDKConfig.Instance.bigoSplashUnitId = DrawTextField("开屏 ID", SDKConfig.Instance.bigoSplashUnitId); + + for (int i = 0; i < SDKConfig.Instance.bigoInterUnitId.Count; i++) + { + //SDKConfig.Instance.bigoInterUnitId = DrawTextField("插屏 ID", SDKConfig.Instance.bigoInterUnitId); + var index = i; + GUILayout.BeginHorizontal(); + SDKConfig.Instance.bigoInterUnitId[i] = + DrawTextField("插屏ID - " + (i + 1), SDKConfig.Instance.bigoInterUnitId[i]); + DrawButtonX("X", () => DelBigoInterId(index)); + GUILayout.EndHorizontal(); + } + + for (int i = 0; i < SDKConfig.Instance.bigoVideoUnitId.Count; i++) + { + //SDKConfig.Instance.bigoVideoUnitId = DrawTextField("激励视频 ID", SDKConfig.Instance.bigoVideoUnitId); + var index = i; + GUILayout.BeginHorizontal(); + SDKConfig.Instance.bigoVideoUnitId[i] = + DrawTextField("激励视频ID - " + (i + 1), SDKConfig.Instance.bigoVideoUnitId[i]); + DrawButtonX("X", () => DelBigoRewardId(index)); + GUILayout.EndHorizontal(); + } + + EditorGUILayout.EndVertical(); +#endif + + + EditorGUILayout.BeginVertical("frameBox"); + SDKConfig.Instance.isUseAdmobSplash = DrawBoolField("启用开屏优化", SDKConfig.Instance.isUseAdmobSplash, ""); + if (SDKConfig.Instance.isUseAdmobSplash) + { + EditorGUILayout.BeginVertical("frameBox"); + TextLabel("Admob", Color.cyan); + SDKConfig.Instance.admobAppId = DrawTextField("AppId", SDKConfig.Instance.admobAppId); + SDKConfig.Instance.admobSplashUnitId = DrawTextField("开屏 ID", SDKConfig.Instance.admobSplashUnitId); + //SDKConfig.Instance.admobInterUnitId = DrawTextField("插屏 ID", SDKConfig.Instance.admobInterUnitId); + //SDKConfig.Instance.admobVideoUnitId = DrawTextField("激励视频 ID", SDKConfig.Instance.admobVideoUnitId); + + EditorGUILayout.EndVertical(); + } + else + { + SDKConfig.Instance.admobSplashUnitId = string.Empty; + } + EditorGUILayout.EndVertical(); + + TextLabel("Debug"); + EditorGUILayout.BeginVertical("frameBox"); + SDKConfig.Instance.isDebug = DrawBoolField("测试模式", SDKConfig.Instance.isDebug, "正式发布时请勿勾选"); + SDKConfig.Instance.isPrintLog = DrawBoolField("日志打印", SDKConfig.Instance.isPrintLog, "正式发布时请勿勾选"); + EditorGUILayout.EndVertical(); + + // 水平布局实现按钮靠右 + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); // 左侧填充弹性空间 + if (GUILayout.Button(new GUIContent("从剪贴板获取参数", _tooltipText), + GUILayout.Width(120), + GUILayout.Height(30) + )) + { + ParseClipboard(); + } + GUILayout.EndHorizontal(); + + + var sdkVersion = NCWWA6A0SDK_Manager.SdkVersion; + GUI.Label(new Rect(10, position.height - 40, 400, 40), "@version: " + sdkVersion); + + EditorPrefs.SetString("sdk_version", sdkVersion); +} + +private string DrawTextField(string title, string content) +{ + EditorGUILayout.BeginHorizontal(); + GUILayout.Label(title, GUILayout.MinWidth(90), GUILayout.ExpandWidth(false)); + content = GUILayout.TextField(content); + EditorGUILayout.EndHorizontal(); + return content; +} + +private bool DrawBoolField(string title, bool content, string warn = "") +{ + EditorGUILayout.BeginHorizontal(); + GUILayout.Label(title, GUILayout.MinWidth(80), GUILayout.ExpandWidth(false)); + content = EditorGUILayout.Toggle(content); + if (content) + { + TextLabelWarn(warn); + } + EditorGUILayout.EndHorizontal(); + return content; +} + +private void TextLabel(string content, Color color = new Color()) +{ + if (color.Equals(Color.clear)) + { + color = Color.gray; + } + GUIStyle style = new GUIStyle(); + style.contentOffset = new Vector2(8, 0); + style.normal.textColor = color; + style.fontSize = 14; + style.padding = new RectOffset(0, 0, 3, 0); + GUILayout.Label(content, style); +} + +private void TextLabelWarn(string content) +{ + GUIStyle style = new GUIStyle(); + style.contentOffset = new Vector2(8, 0); + style.normal.textColor = Color.red; + style.fontSize = 14; + style.padding = new RectOffset(0, 0, 3, 0); + GUILayout.Label(content, style); +} + +private void DrawButton(string btnName, Action clickAction) +{ + if (GUILayout.Button(btnName, GUILayout.Width(100), GUILayout.Height(30))) + { + clickAction?.Invoke(); + } +} + +private void DrawButtonX(string btnName, Action clickAction) +{ + var originalBackgroundColor = GUI.backgroundColor; + + // 设置按钮的背景颜色 + GUI.backgroundColor = Color.red; + if (GUILayout.Button(btnName, GUILayout.Width(40), GUILayout.Height(18))) + { + clickAction?.Invoke(); + } + + GUI.backgroundColor = originalBackgroundColor; +} + +private void AddInterId() +{ + _emptyKwInterIdCount++; + SDKConfig.KwaiInterUnitId.Add(""); +} + +private void DelInterId(int index) +{ + _emptyKwInterIdCount--; + SDKConfig.KwaiInterUnitId.RemoveAt(index); +} + +private void AddRewardId() +{ + _emptyKwVideoIdCount++; + SDKConfig.KwaiVideoUnitId.Add(""); +} + +private void DelRewardId(int index) +{ + _emptyKwVideoIdCount--; + SDKConfig.KwaiVideoUnitId.RemoveAt(index); +} + +private void AddBigoInterId() +{ + _emptyBigoInterIdCount++; + SDKConfig.BigoInterUnitId.Add(""); +} + +private void DelBigoInterId(int index) +{ + _emptyBigoInterIdCount--; + SDKConfig.BigoInterUnitId.RemoveAt(index); +} + +private void AddBigoRewardId() +{ + _emptyBigoVideoIdCount++; + SDKConfig.BigoVideoUnitId.Add(""); +} + +private void DelBigoRewardId(int index) +{ + _emptyBigoVideoIdCount--; + SDKConfig.BigoVideoUnitId.RemoveAt(index); +} + +static void RemoveExtraEmptyStrings(List list, int count) +{ + int emptyCount = count; + if (list == null) return; + // 先统计空字符串的数量 + for (int i = list.Count - 1; i >= 0; i--) + { + if (string.IsNullOrEmpty(list[i])) + { + emptyCount++; + if (emptyCount > 1) + { + // 若空字符串数量超过 1,移除该元素 + list.RemoveAt(i); + } + } + } +} + +// ---------------------------- 参数解析 ------------------------------ +private string clipboardText = ""; +private Dictionary parsedParameters = new Dictionary(); +private readonly string _tooltipText = "需提前在参数列表界面 Ctrl + A 全选,然后再 Ctrl + C 复制"; + + +// 正则表达式模式字典,用于匹配不同类型的广告参数 +private static readonly Dictionary parameterPatterns = new Dictionary + { + // App基本信息 + { "App名称", @"App name\s*([^\n]+)" }, + { "AF Dev key", @"AF Dev key(?:[\s-]*iOS)?\s*([^\n]+)"}, + { "APP KEY", @"a\s*p\s*p\s*k\s*e\s*y\s*([^\n]+)"}, + { "APP Secret", @"a\s*p\s*p\s*s\s*e\s*c\s*r\s*e\s*t\s*([^\n]+)" }, + { "包名", @"(?:正式包名|测试包名|包名)\*?\s+([^\n]+)"}, + { "广告源", @"广告源\s*([^\n]+)" }, + { "开发者邮箱", @"开发者邮箱\s*([^\n]+)" }, + { "谷歌商店链接", @"谷歌商店链接\s*([^\n]+)" }, + { "官网链接", @"官网链接\s*([^\n]+)" }, + { "隐私协议", @"隐私协议\s*([^\n]+)" }, + { "业务上报域名", @"(?:业务上报域名|业务域名)\s*([^\n]+)" }, + { "appkey", @"appkey\s*([^\n]+)" }, + { "appsecret", @"appsecret\s*([^\n]+)" }, + {"AF Apple Appid", @"(?i)app\s*id(?:\s+id)*\s*[=:]*\s*([^\n]*)"}, + + // MAX (兼容多种格式) + { "MAX 激励视频", @"MAX参数(?:-[^\s]+)?[\s\S]*?(?:激励视频|激励1|激励2|客户端激励|bidding激励广告位ID|激励)\s*[""\r\n]*([^""\s\r\n]+)"}, + { "MAX 插屏", @"MAX参数(?:-[^\s]+)?[\s\S]*?(?:插屏|插屏1|插屏2|客户端插屏|bidding插屏广告位ID)\s*[""\r\n]*([^""\s\r\n]+)" }, + { "MAX SDK Key", @"MAX参数[\s\S]*?SDK key\*?\s*([^\n]+)" }, + { "MAX ad review key", @"MAX参数[\s\S]*?ad review key\*?\s*([^\n]+)" }, + + // BIGO (兼容多种格式) + { "BIGO 应用ID", @"BIGO参数[\s\S]*?(?:应用ID|appid)\s*([^\n]+)" }, + { "BIGO 激励", @"BIGO参数[\s\S]*?(?:激励|激励1|激励2|客户端激励|bidding激励广告位ID)\s*([^\n]+)" }, + { "BIGO 插屏", @"BIGO参数[\s\S]*?(?:插屏|插屏1|插屏2|客户端插屏|bidding插屏广告位ID)\s*([^\n]+)" }, + + // Kwai (兼容多种格式) + { "Kwai 应用ID", @"kwai参数[\s\S]*?(?:应用ID|appid)\s*([^\n]+)" }, + { "Kwai 激励", @"kwai参数[\s\S]*?(?:激励|激励1|激励2|客户端激励|bidding激励广告位ID)\s*([^\n]+)" }, + { "Kwai 插屏", @"kwai参数[\s\S]*?(?:插屏|插屏1|插屏2|客户端插屏|bidding插屏广告位ID)\s*([^\n]+)" }, + + // Admob (兼容多种格式) + { "Admob 应用ID", @"admob参数[\s\S]*?(?:应用ID|App ID)\s*([^\n]+)" }, + { "Admob 激励", @"admob参数[\s\S]*?(?:激励1|激励)\s*([^\n]+)" }, + { "Admob 插屏", @"admob参数[\s\S]*?(?:插屏1|插屏)\s*([^\n]+)" }, + { "Admob txt", @"admob参数[\s\S]*?txt\s*([^\n]+)" }, + + // Facebook (兼容多种格式) + { "FB appid", @"fb参数[\s\S]*?appid\s*([^\n]+)" }, + { "FB property_id", @"fb参数[\s\S]*?property_id\s*([^\n]+)" }, + { "FB 激励", @"fb参数[\s\S]*?激励\s*([^\n]+)" }, + { "FB 插屏", @"fb参数[\s\S]*?插屏\s*([^\n]+)" }, + { "FB txt", @"fb参数[\s\S]*?txt\s*([^\n]+)" }, + + // Topon (兼容多种格式) + // Topon (兼容多种格式) + { "Topon ID", @"(?i)topon[\s\S]*?ID[\t\s]+([^\r\n]+)" }, + { "Topon KEY", @"(?i)topon[\s\S]*?(?:App Key|KEY)[\t\s]+([^\r\n]+)" }, + { "Topon 激励", @"(?i)topon[\s\S]*?激励[\t\s]+([^\r\n]+)" }, + { "Topon 插屏", @"(?i)topon[\s\S]*?插屏[\t\s]+([^\r\n]+)" } + }; + +private void ParseClipboard() +{ + if (string.IsNullOrEmpty(clipboardText.Trim())) + { + clipboardText = EditorGUIUtility.systemCopyBuffer; + } + + parsedParameters.Clear(); + + foreach (var pattern in parameterPatterns) + { + Match match = Regex.Match(clipboardText, pattern.Value, RegexOptions.IgnoreCase); + if (match.Success) + { + // 处理可能有多个捕获组的情况(如BIGO和Kwai的两种格式) + for (int i = 1; i < match.Groups.Count; i++) + { + if (!string.IsNullOrEmpty(match.Groups[i].Value)) + { + parsedParameters[pattern.Key] = match.Groups[i].Value.Trim(); + break; + } + } + } + } + + UpdateConfig(); + EditorUtility.DisplayDialog("解析完成", + $"成功解析 {parsedParameters.Count} 个参数", "确定"); +} + +private void UpdateConfig() +{ + SDKConfig.Instance.bigoVideoUnitId ??= new List(); + SDKConfig.Instance.bigoVideoUnitId.Clear(); + SDKConfig.Instance.bigoInterUnitId ??= new List(); + SDKConfig.Instance.bigoInterUnitId.Clear(); + + SDKConfig.Instance.kwaiVideoUnitId ??= new List(); + SDKConfig.Instance.kwaiVideoUnitId.Clear(); + SDKConfig.Instance.kwaiInterUnitId ??= new List(); + SDKConfig.Instance.kwaiInterUnitId.Clear(); + + foreach (KeyValuePair pair in parsedParameters) + { + //Debug.Log($"KEY : {pair.Key}, VALUE : {pair.Value}"); + if (pair.Key.Contains("包名")) + { +#if UNITY_IOS + PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.iOS, pair.Value); +#elif UNITY_ANDROID + PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, pair.Value); +#endif + + Debug.Log($"包名设置 : {pair.Value}"); + } + + if (pair.Key.Contains("AF Dev key")) + { + Debug.Log($"AF Dev key: {pair.Value}"); + SDKConfig.Instance.appsFlyerDevKey = pair.Value; + } + +#if UNITY_IOS + + if (pair.Key.Contains("AF Apple Appid")) + { + Debug.Log($"AF Apple Appid: {pair.Value}"); + SDKConfig.Instance.appsFlyerIosAppleAppId = pair.Value; + } +#endif + + if (pair.Key.Contains("APP KEY")) + { + Debug.Log($"BI APP KEY: {pair.Value}"); + SDKConfig.Instance.appKey = pair.Value; + } + + if (pair.Key.Contains("APP Secret")) + { + Debug.Log($"BI APP Secret: {pair.Value}"); + SDKConfig.Instance.appSecret = pair.Value; + } + + if (pair.Key.Contains("域名")) + { + Debug.Log($"业务域名: {pair.Value}"); + SDKConfig.Instance.logReportUrl = pair.Value; + } + + if (pair.Key.Contains("Topon ID")) + { + Debug.Log($"Topon APP ID: {pair.Value}"); + SDKConfig.Instance.toponAppId = pair.Value; + } + + if (pair.Key.Contains("Topon KEY")) + { + Debug.Log($"Topon APP KEY: {pair.Value}"); + SDKConfig.Instance.toponAppkey = pair.Value; + } + + if (pair.Key.Contains("Topon 激励")) + { + Debug.Log($"Topon 激励: {pair.Value}"); + SDKConfig.Instance.toponVideoUnitId = pair.Value; + } + + if (pair.Key.Contains("Topon 插屏")) + { + Debug.Log($"Topon 插屏: {pair.Value}"); + SDKConfig.Instance.toponInterUnitId = pair.Value; + } + + if (pair.Key.Contains("MAX SDK Key")) + { + Debug.Log($"MAX SDK Key: {pair.Value}"); + SDKConfig.Instance.maxAppKey = pair.Value; + } + + if (pair.Key.Contains("MAX 激励视频")) + { + Debug.Log($"MAX 激励视频: {pair.Value}"); + SDKConfig.Instance.videoUnitId = pair.Value; + } + + if (pair.Key.Contains("MAX 插屏")) + { + Debug.Log($"MAX 插屏: {pair.Value}"); + SDKConfig.Instance.interUnitId = pair.Value; + } + + if (pair.Key.Contains("BIGO 应用ID")) + { + Debug.Log($"BIGO 应用ID: {pair.Value}"); + SDKConfig.Instance.bigoAppId = pair.Value; + } + + if (pair.Key.Contains("BIGO 激励")) + { + Debug.Log($"BIGO 激励: {pair.Value}"); + //SDKConfig.Instance.bigoVideoUnitId = pair.Value; + SDKConfig.Instance.bigoVideoUnitId ??= new List(); + SDKConfig.Instance.bigoVideoUnitId.Add(pair.Value); + } + + if (pair.Key.Contains("BIGO 插屏")) + { + Debug.Log($"BIGO 插屏: {pair.Value}"); + //SDKConfig.Instance.bigoInterUnitId = pair.Value; + SDKConfig.Instance.bigoInterUnitId ??= new List(); + SDKConfig.Instance.bigoInterUnitId.Add(pair.Value); + } + + if (pair.Key.Contains("Admob 应用ID")) + { + Debug.Log($"Admob 应用ID: {pair.Value}"); + //SDKConfig.Instance.admobAppId = pair.Value; + } + + if (pair.Key.Contains("Admob 激励")) + { + Debug.Log($"Admob 激励: {pair.Value}"); + } + + if (pair.Key.Contains("Admob 插屏")) + { + Debug.Log($"Admob 插屏: {pair.Value}"); + } + + if (pair.Key.Contains("Kwai 应用ID")) + { + Debug.Log($"Kwai 应用ID: {pair.Value}"); + SDKConfig.Instance.kwaiAppId = pair.Value; + } + + if (pair.Key.Contains("Kwai 激励")) + { + Debug.Log($"Kwai 激励: {pair.Value}"); + SDKConfig.Instance.kwaiVideoUnitId ??= new List(); + SDKConfig.Instance.kwaiVideoUnitId.Add(pair.Value); + } + + if (pair.Key.Contains("Kwai 插屏")) + { + Debug.Log($"Kwai 插屏: {pair.Value}"); + SDKConfig.Instance.kwaiInterUnitId ??= new List(); + SDKConfig.Instance.kwaiInterUnitId.Add(pair.Value); + } + } +} + +} diff --git a/Assets/NCWWA6A0SDK/Editor/NCWWA6A0SDKConfigEditor.cs.meta b/Assets/NCWWA6A0SDK/Editor/NCWWA6A0SDKConfigEditor.cs.meta new file mode 100644 index 0000000..60476c6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Editor/NCWWA6A0SDKConfigEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09854df6d5257654dbdadb50fa25ebf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins.meta b/Assets/NCWWA6A0SDK/Plugins.meta new file mode 100644 index 0000000..f684ca1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4df08fba7905adf48876bcfff4f5704f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/AcquireCountryCode.java b/Assets/NCWWA6A0SDK/Plugins/AcquireCountryCode.java new file mode 100644 index 0000000..c4a8d5b --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/AcquireCountryCode.java @@ -0,0 +1,17 @@ +package com.tool.countrycode; +import android.app.Activity; +import java.util.Locale; +public class AcquireCountryCode { + // 获取国家码 + public static String getCountryCode() + { + Locale locale = Locale.getDefault(); + return locale.getCountry(); + } + + public static String getCountryCode3() { + Locale currentLocale = Locale.getDefault(); + return currentLocale.getISO3Country(); + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/Plugins/AcquireCountryCode.java.meta b/Assets/NCWWA6A0SDK/Plugins/AcquireCountryCode.java.meta new file mode 100644 index 0000000..00bb387 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/AcquireCountryCode.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 439c7d376883ccb4da22414c75510b24 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/BouncyCastle.Cryptography.dll b/Assets/NCWWA6A0SDK/Plugins/BouncyCastle.Cryptography.dll new file mode 100644 index 0000000..24a1dee Binary files /dev/null and b/Assets/NCWWA6A0SDK/Plugins/BouncyCastle.Cryptography.dll differ diff --git a/Assets/NCWWA6A0SDK/Plugins/BouncyCastle.Cryptography.dll.meta b/Assets/NCWWA6A0SDK/Plugins/BouncyCastle.Cryptography.dll.meta new file mode 100644 index 0000000..f60d3ff --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/BouncyCastle.Cryptography.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 6e3da5c7fe21c1347a563e64e8f305d4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/JsonNet.meta b/Assets/NCWWA6A0SDK/Plugins/JsonNet.meta new file mode 100644 index 0000000..e9cb01a --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/JsonNet.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d95a0f1f59b85b14d95ac7fa16356627 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/JsonNet/Newtonsoft.Json.dll b/Assets/NCWWA6A0SDK/Plugins/JsonNet/Newtonsoft.Json.dll new file mode 100644 index 0000000..82b10c4 Binary files /dev/null and b/Assets/NCWWA6A0SDK/Plugins/JsonNet/Newtonsoft.Json.dll differ diff --git a/Assets/NCWWA6A0SDK/Plugins/JsonNet/Newtonsoft.Json.dll.meta b/Assets/NCWWA6A0SDK/Plugins/JsonNet/Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..015b124 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/JsonNet/Newtonsoft.Json.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 7bc122d7ecc60a94581cd8d1fa8a00d1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/NCWWA6A0SDK.dll b/Assets/NCWWA6A0SDK/Plugins/NCWWA6A0SDK.dll new file mode 100644 index 0000000..ac035ff Binary files /dev/null and b/Assets/NCWWA6A0SDK/Plugins/NCWWA6A0SDK.dll differ diff --git a/Assets/NCWWA6A0SDK/Plugins/NCWWA6A0SDK.dll.meta b/Assets/NCWWA6A0SDK/Plugins/NCWWA6A0SDK.dll.meta new file mode 100644 index 0000000..8b075eb --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/NCWWA6A0SDK.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2125361f2f5d3f1498401cdb2e3f9bac +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/iOS.meta b/Assets/NCWWA6A0SDK/Plugins/iOS.meta new file mode 100644 index 0000000..0386cb3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62cd95d3cdb46984ab747afbce81d5a0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Plugins/iOS/CountryInfo.mm b/Assets/NCWWA6A0SDK/Plugins/iOS/CountryInfo.mm new file mode 100644 index 0000000..09d2bec --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/iOS/CountryInfo.mm @@ -0,0 +1,12 @@ +#import + +extern "C" { + __attribute__((visibility("default"))) + const char* _GetDeviceCountryCode() { + @autoreleasepool { + NSLocale *currentLocale = [NSLocale currentLocale]; + NSString *countryCode = [currentLocale objectForKey:NSLocaleCountryCode]; + return strdup([countryCode UTF8String]); // 使用strdup确保内存安全 + } + } +} diff --git a/Assets/NCWWA6A0SDK/Plugins/iOS/CountryInfo.mm.meta b/Assets/NCWWA6A0SDK/Plugins/iOS/CountryInfo.mm.meta new file mode 100644 index 0000000..338072e --- /dev/null +++ b/Assets/NCWWA6A0SDK/Plugins/iOS/CountryInfo.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 63f1a672ae2b65f478662e01b0b67d7b +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Scripts.meta b/Assets/NCWWA6A0SDK/Scripts.meta new file mode 100644 index 0000000..d45cc55 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96d3bb1be45827f47a83034c9908c005 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Scripts/Config.meta b/Assets/NCWWA6A0SDK/Scripts/Config.meta new file mode 100644 index 0000000..63c505c --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ea7ef46cf2ade545b68fd32b9c4b8b6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.asmdef b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.asmdef new file mode 100644 index 0000000..bd836f1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.asmdef @@ -0,0 +1,14 @@ +{ + "name": "SDKConfig", + "rootNamespace": "", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.asmdef.meta b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.asmdef.meta new file mode 100644 index 0000000..7e1dac2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8b6da46957b38914aa097a61bd86a16d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.cs b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.cs new file mode 100644 index 0000000..dc71bfd --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.cs @@ -0,0 +1,234 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace NCWWA6A0SDK +{ + [System.Serializable] + public class SDKConfig : ScriptableObject + { + + public string appsFlyerDevKey; + + public string appsFlyerIosAppleAppId; + + public string appKey; + + public string appSecret; + + public string logReportUrl; + + public string maxAppKey; + + public string splashUnitId; + + public string bannerUnitId; + + public string interUnitId; + + public string videoUnitId; + + public string kwaiAppId; + + public List kwaiVideoUnitId = new(); + + public List kwaiInterUnitId = new(); + + public string bigoAppId; + + public List bigoVideoUnitId = new(); + + public List bigoInterUnitId = new(); + + public string bigoSplashUnitId; + + public string toponAppId; + + public string toponAppkey; + + public string toponVideoUnitId; + + public string toponInterUnitId; + + public string admobAppId; + + public string admobVideoUnitId; + + public string admobInterUnitId; + + public string admobSplashUnitId; + + public bool isDebug = false; + + public bool isPrintLog = false; + + public bool isUseAdmobSplash = false; + + private static SDKConfig _instance; + + public static SDKConfig Instance + { + get + { + if (_instance != null) return _instance; + _instance = AssetUtils.GetScriptableObject(typeof(SDKConfig).Name, "Assets/Resources", false, false); + return _instance; + } + set + { + _instance = value; + } + } + + public static string AppsFlyerDevKey + { + get { return Instance.appsFlyerDevKey; } + } + + public static string AppsFlyerIosAppleAppId + { + get { return Instance.appsFlyerIosAppleAppId; } + } + + public static string AppKey + { + get { return Instance.appKey; } + } + + public static string AppSecret + { + get { return Instance.appSecret; } + } + + public static string LogReportUrl + { + get + { + if (!Instance.logReportUrl.StartsWith("http")) + { + return "https://" + Instance.logReportUrl.Replace(" ", ""); ; + } + return Instance.logReportUrl.Replace(" ", ""); ; + } + } + + public static string MaxAppKey + { + get { return Instance.maxAppKey; } + } + + public static string SplashUnitID + { + get { return Instance.splashUnitId; } + } + + public static string BannerUnitId + { + get { return Instance.bannerUnitId; } + } + + public static string InterUnitId + { + get { return Instance.interUnitId; } + } + + public static string VideoUnitId + { + get { return Instance.videoUnitId; } + } + + public static string KwaiAppId + { + get => Instance.kwaiAppId; + set => Instance.kwaiAppId = value; + } + + public static List KwaiVideoUnitId + { + get => Instance.kwaiVideoUnitId; + set => Instance.kwaiVideoUnitId = value; + } + + public static List KwaiInterUnitId + { + get => Instance.kwaiInterUnitId; + set => Instance.kwaiInterUnitId = value; + } + + public static string BigoAppId + { + get => Instance.bigoAppId; + set => Instance.bigoAppId = value; + } + + public static List BigoVideoUnitId + { + get => Instance.bigoVideoUnitId; + set => Instance.bigoVideoUnitId = value; + } + + public static List BigoInterUnitId + { + get => Instance.bigoInterUnitId; + set => Instance.bigoInterUnitId = value; + } + + public static string BigoSplashUnitId + { + get => Instance.bigoSplashUnitId; + set => Instance.bigoSplashUnitId = value; + } + + public static string ToponAppId + { + get { return Instance.toponAppId; } + } + + public static string ToponAppkey + { + get { return Instance.toponAppkey; } + } + + public static string ToponVideoUnitId + { + get { return Instance.toponVideoUnitId; } + } + + public static string ToponInterUnitId + { + get { return Instance.toponInterUnitId; } + } + + public static string AdmobAppId + { + get => Instance.admobAppId; + set => Instance.admobAppId = value; + } + + public static string AdmobVideoUnitId + { + get => Instance.admobVideoUnitId; + set => Instance.admobVideoUnitId = value; + } + + public static string AdmobSplashUnitId + { + get => Instance.admobSplashUnitId; + set => Instance.admobSplashUnitId = value; + } + + public static string AdmobInterUnitId + { + get => Instance.admobInterUnitId; + set => Instance.admobInterUnitId = value; + } + + public static bool IsDebug => Instance.isDebug; + + public static bool IsPrintLog => Instance.isPrintLog; + + public static bool IsUseAdmobSplash => Instance.isUseAdmobSplash; + + } +} + diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.cs.meta b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.cs.meta new file mode 100644 index 0000000..5e714f7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/SDKConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e4857e9d117e764490d38ceb6820095 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/Utils.meta b/Assets/NCWWA6A0SDK/Scripts/Config/Utils.meta new file mode 100644 index 0000000..7eae1d6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0d9293c0ca40cd41ba02042aeb78b89 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/Utils/AssetUtils.cs b/Assets/NCWWA6A0SDK/Scripts/Config/Utils/AssetUtils.cs new file mode 100644 index 0000000..1b12b48 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/Utils/AssetUtils.cs @@ -0,0 +1,152 @@ + +using System; +using System.IO; +using UnityEngine; + +#if UNITY_EDITOR +using System.Collections.Generic; +using UnityEditor; +#endif + +namespace NCWWA6A0SDK +{ + public static class AssetUtils + { + /// + /// Returns a reference to a scriptable object of type T with the given fileName at the relative resourcesPath. + /// If the asset is not found, one will get created automatically (in the Editor only) + /// + /// + /// + /// + /// + /// + /// + public static T GetScriptableObject(string fileName, + string resourcesPath, + bool saveAssetDatabase, + bool refreshAssetDatabase) + where T : ScriptableObject + { + if (string.IsNullOrEmpty(resourcesPath)) return null; + if (string.IsNullOrEmpty(fileName)) return null; + // ReSharper disable once SuspiciousTypeConversion.Global + // if (!resourcesPath[resourcesPath.Length - 1].Equals(@"\")) resourcesPath += @"\"; + // resourcesPath = resourcesPath.Replace(@"\", "/"); + resourcesPath = CleanPath(resourcesPath); + + var obj = (T)Resources.Load(fileName, typeof(T)); + + if (obj == null) + { + string simpleResourcesPath = resourcesPath.Replace(resourcesPath.Substring(0, resourcesPath.LastIndexOf("Resources", StringComparison.Ordinal)), ""); + simpleResourcesPath = simpleResourcesPath.Replace("Resources", "").Remove(0, 1); + obj = (T)Resources.Load(Path.Combine(simpleResourcesPath, fileName), typeof(T)); + } + +#if UNITY_EDITOR + if (obj != null) return obj; + if (!Directory.Exists("Assets/Resources")) + { + Directory.CreateDirectory("Assets/Resources"); + } + obj = CreateAsset(resourcesPath, fileName, ".asset", saveAssetDatabase, refreshAssetDatabase); +#endif + return obj; + } + + public static T GetResource(string resourcesPath, string fileName) where T : ScriptableObject + { + if (string.IsNullOrEmpty(resourcesPath)) return null; + if (string.IsNullOrEmpty(fileName)) return null; + resourcesPath = CleanPath(resourcesPath); + // ReSharper disable once SuspiciousTypeConversion.Global + // if (!resourcesPath[resourcesPath.Length - 1].Equals(@"\")) resourcesPath += @"\"; + // resourcesPath = resourcesPath.Replace(@"\", "/"); + + return (T)Resources.Load(resourcesPath + fileName, typeof(T)); + } + + public static string CleanPath(string path) + { + // ReSharper disable once SuspiciousTypeConversion.Global + if (!path[path.Length - 1].Equals(@"\")) path += @"\"; + path = path.Replace(@"\\", @"\"); + path = path.Replace(@"\", "/"); + return path; + } + +#if UNITY_EDITOR + public static T CreateAsset(string relativePath, + string fileName, + string extension = ".asset", + bool saveAssetDatabase = true, + bool refreshAssetDatabase = true) + where T : ScriptableObject + { + if (string.IsNullOrEmpty(relativePath)) return null; + if (string.IsNullOrEmpty(fileName)) return null; + relativePath = CleanPath(relativePath); + // ReSharper disable once SuspiciousTypeConversion.Global + // if (!relativePath[relativePath.Length - 1].Equals(@"\")) relativePath += @"\"; + // relativePath = relativePath.Replace(@"\\", @"\"); + var asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, relativePath + fileName + extension); + EditorUtility.SetDirty(asset); + if (saveAssetDatabase) AssetDatabase.SaveAssets(); + if (refreshAssetDatabase) AssetDatabase.Refresh(); + return asset; + } + + public static List GetAssets() where T : ScriptableObject + { + var list = new List(); + string[] guids = AssetDatabase.FindAssets("t:" + typeof(T).Name); + foreach (string guid in guids) + { + var asset = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid)); + if (asset == null) continue; + list.Add(asset); + } + + return list; + } + + public static void MoveAssetToTrash(string relativePath, string fileName, bool saveAssetDatabase = true, + bool refreshAssetDatabase = true, bool printDebugMessage = true) + { + if (string.IsNullOrEmpty(relativePath)) return; + if (string.IsNullOrEmpty(fileName)) return; + // ReSharper disable once SuspiciousTypeConversion.Global + // if (!relativePath[relativePath.Length - 1].Equals(@"\")) relativePath += @"\"; + relativePath = CleanPath(relativePath); + if (!AssetDatabase.MoveAssetToTrash(relativePath + fileName + ".asset")) return; + if (printDebugMessage) Debug.Log("The " + fileName + ".asset file has been moved to trash."); + if (saveAssetDatabase) AssetDatabase.SaveAssets(); + if (refreshAssetDatabase) AssetDatabase.Refresh(); + } + + public static Texture GetTexture(string filePath, string fileName, string fileExtension = ".png") + { + if (string.IsNullOrEmpty(filePath)) return null; + if (string.IsNullOrEmpty(fileName)) return null; + // ReSharper disable once SuspiciousTypeConversion.Global + // if (!filePath[filePath.Length - 1].Equals(@"\")) filePath += @"\"; + filePath = CleanPath(filePath); + return AssetDatabase.LoadAssetAtPath(filePath + fileName + fileExtension); + } + + public static Texture2D GetTexture2D(string filePath, string fileName, string fileExtension = ".png") + { + if (string.IsNullOrEmpty(filePath)) return null; + if (string.IsNullOrEmpty(fileName)) return null; + // ReSharper disable once SuspiciousTypeConversion.Global + // if (!filePath[filePath.Length - 1].Equals(@"\")) filePath += @"\"; + filePath = CleanPath(filePath); + return AssetDatabase.LoadAssetAtPath(filePath + fileName + fileExtension); + } +#endif + } + +} + diff --git a/Assets/NCWWA6A0SDK/Scripts/Config/Utils/AssetUtils.cs.meta b/Assets/NCWWA6A0SDK/Scripts/Config/Utils/AssetUtils.cs.meta new file mode 100644 index 0000000..be73023 --- /dev/null +++ b/Assets/NCWWA6A0SDK/Scripts/Config/Utils/AssetUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6cff4f16b2f10d499cfd019dc05cf9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty.meta b/Assets/NCWWA6A0SDK/ThirdParty.meta new file mode 100644 index 0000000..2fe6f73 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d0a2dd547ed87a64a8c6e3d3a12a3d91 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer.meta new file mode 100644 index 0000000..2a71bd2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7863556d88b814e09ba9cfc75a91d655 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFAdRevenueData.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFAdRevenueData.cs new file mode 100644 index 0000000..64d53de --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFAdRevenueData.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + public enum MediationNetwork : ulong + { + GoogleAdMob = 1, + IronSource = 2, + ApplovinMax = 3, + Fyber = 4, + Appodeal = 5, + Admost = 6, + Topon = 7, + Tradplus = 8, + Yandex = 9, + ChartBoost = 10, + Unity = 11, + ToponPte = 12, + Custom = 13, + DirectMonetization = 14 + } + + public static class AdRevenueScheme + { + /** + * code ISO 3166-1 format + */ + public const string COUNTRY = "country"; + + /** + * ID of the ad unit for the impression + */ + public const string AD_UNIT = "ad_unit"; + + /** + * Format of the ad + */ + public const string AD_TYPE = "ad_type"; + + /** + * ID of the ad placement for the impression + */ + public const string PLACEMENT = "placement"; + } + + /// + // Data class representing ad revenue information. + // + // @property monetizationNetwork The name of the network that monetized the ad. + // @property mediationNetwork An instance of MediationNetwork representing the mediation service used. + // @property currencyIso4217Code The ISO 4217 currency code describing the currency of the revenue. + // @property eventRevenue The amount of revenue generated by the ad. + /// + public class AFAdRevenueData + { + public string monetizationNetwork { get; private set; } + public MediationNetwork mediationNetwork { get; private set; } + public string currencyIso4217Code { get; private set; } + public double eventRevenue { get; private set; } + + public AFAdRevenueData(string monetization, MediationNetwork mediation, string currency, double revenue) + { + monetizationNetwork = monetization; + mediationNetwork = mediation; + currencyIso4217Code = currency; + eventRevenue = revenue; + } + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFAdRevenueData.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFAdRevenueData.cs.meta new file mode 100644 index 0000000..3106aae --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFAdRevenueData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 49e1906ae949e4bfea400bd1da9f7e39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFInAppEvents.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFInAppEvents.cs new file mode 100644 index 0000000..1f6d1fe --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFInAppEvents.cs @@ -0,0 +1,72 @@ +using UnityEngine; +using System.Collections; + +public class AFInAppEvents { + /** + * Event Type + * */ + public const string LEVEL_ACHIEVED = "af_level_achieved"; + public const string ADD_PAYMENT_INFO = "af_add_payment_info"; + public const string ADD_TO_CART = "af_add_to_cart"; + public const string ADD_TO_WISH_LIST = "af_add_to_wishlist"; + public const string COMPLETE_REGISTRATION = "af_complete_registration"; + public const string TUTORIAL_COMPLETION = "af_tutorial_completion"; + public const string INITIATED_CHECKOUT = "af_initiated_checkout"; + public const string PURCHASE = "af_purchase"; + public const string RATE = "af_rate"; + public const string SEARCH = "af_search"; + public const string SPENT_CREDIT = "af_spent_credits"; + public const string ACHIEVEMENT_UNLOCKED = "af_achievement_unlocked"; + public const string CONTENT_VIEW = "af_content_view"; + public const string TRAVEL_BOOKING = "af_travel_booking"; + public const string SHARE = "af_share"; + public const string INVITE = "af_invite"; + public const string LOGIN = "af_login"; + public const string RE_ENGAGE = "af_re_engage"; + public const string UPDATE = "af_update"; + public const string OPENED_FROM_PUSH_NOTIFICATION = "af_opened_from_push_notification"; + public const string LOCATION_CHANGED = "af_location_changed"; + public const string LOCATION_COORDINATES = "af_location_coordinates"; + public const string ORDER_ID = "af_order_id"; + /** + * Event Parameter Name + * **/ + public const string LEVEL = "af_level"; + public const string SCORE = "af_score"; + public const string SUCCESS = "af_success"; + public const string PRICE = "af_price"; + public const string CONTENT_TYPE = "af_content_type"; + public const string CONTENT_ID = "af_content_id"; + public const string CONTENT_LIST = "af_content_list"; + public const string CURRENCY = "af_currency"; + public const string QUANTITY = "af_quantity"; + public const string REGSITRATION_METHOD = "af_registration_method"; + public const string PAYMENT_INFO_AVAILIBLE = "af_payment_info_available"; + public const string MAX_RATING_VALUE = "af_max_rating_value"; + public const string RATING_VALUE = "af_rating_value"; + public const string SEARCH_STRING = "af_search_string"; + public const string DATE_A = "af_date_a"; + public const string DATE_B = "af_date_b"; + public const string DESTINATION_A = "af_destination_a"; + public const string DESTINATION_B = "af_destination_b"; + public const string DESCRIPTION = "af_description"; + public const string CLASS = "af_class"; + public const string EVENT_START = "af_event_start"; + public const string EVENT_END = "af_event_end"; + public const string LATITUDE = "af_lat"; + public const string LONGTITUDE = "af_long"; + public const string CUSTOMER_USER_ID = "af_customer_user_id"; + public const string VALIDATED = "af_validated"; + public const string REVENUE = "af_revenue"; + public const string RECEIPT_ID = "af_receipt_id"; + public const string PARAM_1 = "af_param_1"; + public const string PARAM_2 = "af_param_2"; + public const string PARAM_3 = "af_param_3"; + public const string PARAM_4 = "af_param_4"; + public const string PARAM_5 = "af_param_5"; + public const string PARAM_6 = "af_param_6"; + public const string PARAM_7 = "af_param_7"; + public const string PARAM_8 = "af_param_8"; + public const string PARAM_9 = "af_param_9"; + public const string PARAM_10 = "af_param_10"; +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFInAppEvents.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFInAppEvents.cs.meta new file mode 100644 index 0000000..b31364e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFInAppEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4075c6cf6f3d94b9a9f37f826e6a0e6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFMiniJSON.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFMiniJSON.cs new file mode 100644 index 0000000..d02bf2f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFMiniJSON.cs @@ -0,0 +1,547 @@ +/* + * Copyright (c) 2013 Calvin Rien + * + * Based on the JSON parser by Patrick van Bergen + * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html + * + * Simplified it so that it doesn't throw exceptions + * and can be used in Unity iPhone with maximum code stripping. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace AFMiniJSON { + // Example usage: + // + // using UnityEngine; + // using System.Collections; + // using System.Collections.Generic; + // using MiniJSON; + // + // public class MiniJSONTest : MonoBehaviour { + // void Start () { + // var jsonString = "{ \"array\": [1.44,2,3], " + + // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + + // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + + // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + + // "\"int\": 65536, " + + // "\"float\": 3.1415926, " + + // "\"bool\": true, " + + // "\"null\": null }"; + // + // var dict = Json.Deserialize(jsonString) as Dictionary; + // + // Debug.Log("deserialized: " + dict.GetType()); + // Debug.Log("dict['array'][0]: " + ((List) dict["array"])[0]); + // Debug.Log("dict['string']: " + (string) dict["string"]); + // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles + // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs + // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); + // + // var str = Json.Serialize(dict); + // + // Debug.Log("serialized: " + str); + // } + // } + + /// + /// This class encodes and decodes JSON strings. + /// Spec. details, see http://www.json.org/ + /// + /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. + /// All numbers are parsed to doubles. + /// + public static class Json { + /// + /// Parses the string json into a value + /// + /// A JSON string. + /// An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false + public static object Deserialize(string json) { + // save the string for debug information + if (json == null) { + return null; + } + + return Parser.Parse(json); + } + + sealed class Parser : IDisposable { + const string WORD_BREAK = "{}[],:\""; + + public static bool IsWordBreak(char c) { + return Char.IsWhiteSpace(c) || WORD_BREAK.IndexOf(c) != -1; + } + + enum TOKEN { + NONE, + CURLY_OPEN, + CURLY_CLOSE, + SQUARED_OPEN, + SQUARED_CLOSE, + COLON, + COMMA, + STRING, + NUMBER, + TRUE, + FALSE, + NULL + }; + + StringReader json; + + Parser(string jsonString) { + json = new StringReader(jsonString); + } + + public static object Parse(string jsonString) { + using (var instance = new Parser(jsonString)) { + return instance.ParseValue(); + } + } + + public void Dispose() { + json.Dispose(); + json = null; + } + + Dictionary ParseObject() { + Dictionary table = new Dictionary(); + + // ditch opening brace + json.Read(); + + // { + while (true) { + switch (NextToken) { + case TOKEN.NONE: + return null; + case TOKEN.COMMA: + continue; + case TOKEN.CURLY_CLOSE: + return table; + default: + // name + string name = ParseString(); + if (name == null) { + return null; + } + + // : + if (NextToken != TOKEN.COLON) { + return null; + } + // ditch the colon + json.Read(); + + // value + table[name] = ParseValue(); + break; + } + } + } + + List ParseArray() { + List array = new List(); + + // ditch opening bracket + json.Read(); + + // [ + var parsing = true; + while (parsing) { + TOKEN nextToken = NextToken; + + switch (nextToken) { + case TOKEN.NONE: + return null; + case TOKEN.COMMA: + continue; + case TOKEN.SQUARED_CLOSE: + parsing = false; + break; + default: + object value = ParseByToken(nextToken); + + array.Add(value); + break; + } + } + + return array; + } + + object ParseValue() { + TOKEN nextToken = NextToken; + return ParseByToken(nextToken); + } + + object ParseByToken(TOKEN token) { + switch (token) { + case TOKEN.STRING: + return ParseString(); + case TOKEN.NUMBER: + return ParseNumber(); + case TOKEN.CURLY_OPEN: + return ParseObject(); + case TOKEN.SQUARED_OPEN: + return ParseArray(); + case TOKEN.TRUE: + return true; + case TOKEN.FALSE: + return false; + case TOKEN.NULL: + return null; + default: + return null; + } + } + + string ParseString() { + StringBuilder s = new StringBuilder(); + char c; + + // ditch opening quote + json.Read(); + + bool parsing = true; + while (parsing) { + + if (json.Peek() == -1) { + parsing = false; + break; + } + + c = NextChar; + switch (c) { + case '"': + parsing = false; + break; + case '\\': + if (json.Peek() == -1) { + parsing = false; + break; + } + + c = NextChar; + switch (c) { + case '"': + case '\\': + case '/': + s.Append(c); + break; + case 'b': + s.Append('\b'); + break; + case 'f': + s.Append('\f'); + break; + case 'n': + s.Append('\n'); + break; + case 'r': + s.Append('\r'); + break; + case 't': + s.Append('\t'); + break; + case 'u': + var hex = new char[4]; + + for (int i=0; i< 4; i++) { + hex[i] = NextChar; + } + + s.Append((char) Convert.ToInt32(new string(hex), 16)); + break; + } + break; + default: + s.Append(c); + break; + } + } + + return s.ToString(); + } + + object ParseNumber() { + string number = NextWord; + + if (number.IndexOf('.') == -1) { + long parsedInt; + Int64.TryParse(number, out parsedInt); + return parsedInt; + } + + double parsedDouble; + Double.TryParse(number, out parsedDouble); + return parsedDouble; + } + + void EatWhitespace() { + while (Char.IsWhiteSpace(PeekChar)) { + json.Read(); + + if (json.Peek() == -1) { + break; + } + } + } + + char PeekChar { + get { + return Convert.ToChar(json.Peek()); + } + } + + char NextChar { + get { + return Convert.ToChar(json.Read()); + } + } + + string NextWord { + get { + StringBuilder word = new StringBuilder(); + + while (!IsWordBreak(PeekChar)) { + word.Append(NextChar); + + if (json.Peek() == -1) { + break; + } + } + + return word.ToString(); + } + } + + TOKEN NextToken { + get { + EatWhitespace(); + + if (json.Peek() == -1) { + return TOKEN.NONE; + } + + switch (PeekChar) { + case '{': + return TOKEN.CURLY_OPEN; + case '}': + json.Read(); + return TOKEN.CURLY_CLOSE; + case '[': + return TOKEN.SQUARED_OPEN; + case ']': + json.Read(); + return TOKEN.SQUARED_CLOSE; + case ',': + json.Read(); + return TOKEN.COMMA; + case '"': + return TOKEN.STRING; + case ':': + return TOKEN.COLON; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + return TOKEN.NUMBER; + } + + switch (NextWord) { + case "false": + return TOKEN.FALSE; + case "true": + return TOKEN.TRUE; + case "null": + return TOKEN.NULL; + } + + return TOKEN.NONE; + } + } + } + + /// + /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string + /// + /// A Dictionary<string, object> / List<object> + /// A JSON encoded string, or null if object 'json' is not serializable + public static string Serialize(object obj) { + return Serializer.Serialize(obj); + } + + sealed class Serializer { + StringBuilder builder; + + Serializer() { + builder = new StringBuilder(); + } + + public static string Serialize(object obj) { + var instance = new Serializer(); + + instance.SerializeValue(obj); + + return instance.builder.ToString(); + } + + void SerializeValue(object value) { + IList asList; + IDictionary asDict; + string asStr; + + if (value == null) { + builder.Append("null"); + } else if ((asStr = value as string) != null) { + SerializeString(asStr); + } else if (value is bool) { + builder.Append((bool) value ? "true" : "false"); + } else if ((asList = value as IList) != null) { + SerializeArray(asList); + } else if ((asDict = value as IDictionary) != null) { + SerializeObject(asDict); + } else if (value is char) { + SerializeString(new string((char) value, 1)); + } else { + SerializeOther(value); + } + } + + void SerializeObject(IDictionary obj) { + bool first = true; + + builder.Append('{'); + + foreach (object e in obj.Keys) { + if (!first) { + builder.Append(','); + } + + SerializeString(e.ToString()); + builder.Append(':'); + + SerializeValue(obj[e]); + + first = false; + } + + builder.Append('}'); + } + + void SerializeArray(IList anArray) { + builder.Append('['); + + bool first = true; + + foreach (object obj in anArray) { + if (!first) { + builder.Append(','); + } + + SerializeValue(obj); + + first = false; + } + + builder.Append(']'); + } + + void SerializeString(string str) { + builder.Append('\"'); + + char[] charArray = str.ToCharArray(); + foreach (var c in charArray) { + switch (c) { + case '"': + builder.Append("\\\""); + break; + case '\\': + builder.Append("\\\\"); + break; + case '\b': + builder.Append("\\b"); + break; + case '\f': + builder.Append("\\f"); + break; + case '\n': + builder.Append("\\n"); + break; + case '\r': + builder.Append("\\r"); + break; + case '\t': + builder.Append("\\t"); + break; + default: + int codepoint = Convert.ToInt32(c); + if ((codepoint >= 32) && (codepoint <= 126)) { + builder.Append(c); + } else { + builder.Append("\\u"); + builder.Append(codepoint.ToString("x4")); + } + break; + } + } + + builder.Append('\"'); + } + + void SerializeOther(object value) { + // NOTE: decimals lose precision during serialization. + // They always have, I'm just letting you know. + // Previously floats and doubles lost precision too. + if (value is float) { + builder.Append(((float) value).ToString("R")); + } else if (value is int + || value is uint + || value is long + || value is sbyte + || value is byte + || value is short + || value is ushort + || value is ulong) { + builder.Append(value); + } else if (value is double + || value is decimal) { + builder.Append(Convert.ToDouble(value).ToString("R")); + } else { + SerializeString(value.ToString()); + } + } + } + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFMiniJSON.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFMiniJSON.cs.meta new file mode 100644 index 0000000..11ec5c9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFMiniJSON.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc3d1c806d507463e9b560eb09d8eb0e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFPurchaseDetailsAndroid.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFPurchaseDetailsAndroid.cs new file mode 100644 index 0000000..d149885 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFPurchaseDetailsAndroid.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + public enum AFPurchaseType + { + Subscription = 0, + OneTimePurchase = 1 + } + + /// + /// Purchase details class matching Android SDK AFPurchaseDetails + /// + public class AFPurchaseDetailsAndroid + { + public AFPurchaseType purchaseType { get; private set; } + public string purchaseToken { get; private set; } + public string productId { get; private set; } + + public AFPurchaseDetailsAndroid(AFPurchaseType type, String purchaseToken, String productId) + { + this.purchaseType = type; + this.purchaseToken = purchaseToken; + this.productId = productId; + } + + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFPurchaseDetailsAndroid.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFPurchaseDetailsAndroid.cs.meta new file mode 100644 index 0000000..6d0024d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFPurchaseDetailsAndroid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d71b3864006f94ac08938b2ebdc940bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKPurchaseDetailsIOS.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKPurchaseDetailsIOS.cs new file mode 100644 index 0000000..0dcde3a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKPurchaseDetailsIOS.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + /// + /// Purchase type enum matching iOS SDK AFSDKPurchaseType + /// + public enum AFSDKPurchaseType + { + Subscription, + OneTimePurchase + } + + /// + /// Purchase details class matching iOS SDK AFSDKPurchaseDetails + /// + public class AFSDKPurchaseDetailsIOS + { + public string productId { get; private set; } + public string transactionId { get; private set; } + public AFSDKPurchaseType purchaseType { get; private set; } + + private AFSDKPurchaseDetailsIOS(string productId, string transactionId, AFSDKPurchaseType purchaseType) + { + this.productId = productId; + this.transactionId = transactionId; + this.purchaseType = purchaseType; + } + + public static AFSDKPurchaseDetailsIOS Init(string productId, string transactionId, AFSDKPurchaseType purchaseType) + { + return new AFSDKPurchaseDetailsIOS(productId, transactionId, purchaseType); + } + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKPurchaseDetailsIOS.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKPurchaseDetailsIOS.cs.meta new file mode 100644 index 0000000..f33ebcc --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKPurchaseDetailsIOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44bb6c4472701416080eb050732075ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKValidateAndLogResult.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKValidateAndLogResult.cs new file mode 100644 index 0000000..e877fbd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKValidateAndLogResult.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + public enum AFSDKValidateAndLogStatus + { + AFSDKValidateAndLogStatusSuccess, + AFSDKValidateAndLogStatusFailure, + AFSDKValidateAndLogStatusError + } + + + /// + // + /// + public class AFSDKValidateAndLogResult + { + public AFSDKValidateAndLogStatus status { get; private set; } + public Dictionary result { get; private set; } + public Dictionary errorData { get; private set; } + public string error { get; private set; } + + private AFSDKValidateAndLogResult(AFSDKValidateAndLogStatus status, Dictionary result, Dictionary errorData, string error) + { + this.status = status; + this.result = result; + this.errorData = errorData; + this.error = error; + } + + public static AFSDKValidateAndLogResult Init(AFSDKValidateAndLogStatus status, Dictionary result, Dictionary errorData, string error) + { + return new AFSDKValidateAndLogResult(status, result, errorData, error); + } + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKValidateAndLogResult.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKValidateAndLogResult.cs.meta new file mode 100644 index 0000000..63d4835 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AFSDKValidateAndLogResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2df1c6f1eab2e4849bf2762a8d78933f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.asmdef b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.asmdef new file mode 100644 index 0000000..381ee00 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.asmdef @@ -0,0 +1,13 @@ +{ + "name": "AppsFlyer", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.asmdef.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.asmdef.meta new file mode 100644 index 0000000..380f36a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2a37df438292d4903b4e5159c5de3bf9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.cs new file mode 100644 index 0000000..149d3e7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.cs @@ -0,0 +1,1113 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + public class AppsFlyer : MonoBehaviour + { + public static readonly string kAppsFlyerPluginVersion = "6.17.91"; + public static string CallBackObjectName = null; + private static EventHandler onRequestResponse; + private static EventHandler onInAppResponse; + private static EventHandler onDeepLinkReceived; + public static IAppsFlyerNativeBridge instance = null; + public delegate void unityCallBack(string message); + + + /// + /// Initialize the AppsFlyer SDK with your devKey and appID. + /// The dev key is required on all platforms, and the appID is required for iOS. + /// If you app is for Android only pass null for the appID. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + /// Your app's Apple ID. + /// + /// + /// AppsFlyer.initSDK("K2***********99", "41*****44""); + /// + /// + public static void initSDK(string devKey, string appID) + { + initSDK(devKey, appID, null); + } + + /// + /// Initialize the AppsFlyer SDK with your devKey and appID. + /// The dev key is required on all platforms, and the appID is required for iOS. + /// If you app is for Android only pass null for the appID. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + /// Your app's Apple ID. + /// pass the script of the game object being used. + /// + /// + /// AppsFlyer.initSDK("K2***********99", 41*****44, this); + /// + /// + public static void initSDK(string devKey, string appID, MonoBehaviour gameObject) + { + + if (gameObject != null) + { +#if UNITY_STANDALONE_OSX + CallBackObjectName = gameObject.GetType().ToString(); +#else + CallBackObjectName = gameObject.name; +#endif + } + +#if UNITY_IOS || UNITY_STANDALONE_OSX + if (instance == null || !instance.isInit) + { + instance = new AppsFlyeriOS(devKey, appID, gameObject); + instance.isInit = true; + } +#elif UNITY_ANDROID + if (instance == null || !instance.isInit) + { + AppsFlyerAndroid appsFlyerAndroid = new AppsFlyerAndroid(); + appsFlyerAndroid.initSDK(devKey, gameObject); + instance = appsFlyerAndroid; + instance.isInit = true; + + } +#elif UNITY_WSA_10_0 + AppsFlyerWindows.InitSDK(devKey, appID, gameObject); + if (gameObject != null) + { + AppsFlyerWindows.GetConversionData(gameObject.name); + } +#else + +#endif + } + + + /// + /// Once this API is invoked, our SDK will start. + /// Once the API is called a sessions will be immediately sent, and all background forground transitions will send a session. + /// + public static void startSDK() + { +#if UNITY_WSA_10_0 + AppsFlyerWindows.Start(); + +#else + if (instance != null) + { + instance.startSDK(onRequestResponse != null, CallBackObjectName); + } +#endif + } + + + + + + + /// + /// Send an In-App Event. + /// In-App Events provide insight on what is happening in your app. + /// + /// Event Name as String. + /// Event Values as Dictionary. + public static void sendEvent(string eventName, Dictionary eventValues) + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyerWindows.LogEvent(eventName, eventValues); +#else + if (instance != null) + { + instance.sendEvent(eventName, eventValues, onInAppResponse != null, CallBackObjectName); + } +#endif + } + /// + /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. + /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. + /// This can be achieved with the stopSDK API. + /// + /// should sdk be stopped. + public static void stopSDK(bool isSDKStopped) + { + if (instance != null) + { + instance.stopSDK(isSDKStopped); + } + } + + // + /// Was the stopSDK(boolean) API set to true. + /// + /// boolean isSDKStopped. + public static bool isSDKStopped() + { + if (instance != null) + { + return instance.isSDKStopped(); + } + + return false; + } + + /// + /// Get the AppsFlyer SDK version used in app. + /// + /// The current SDK version. + public static string getSdkVersion() + { + if (instance != null) + { + return instance.getSdkVersion(); + } + + return ""; + + } + + /// + /// Enables Debug logs for the AppsFlyer SDK. + /// Should only be set to true in development / debug. + /// + /// shouldEnable boolean. + public static void setIsDebug(bool shouldEnable) + { + if (instance != null) + { + instance.setIsDebug(shouldEnable); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + instance.setIsDebug(shouldEnable); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); + instance.setIsDebug(shouldEnable); +#else + +#endif + } + + } + + /// + /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. + /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. + /// + /// Customer ID for client. + public static void setCustomerUserId(string id) + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyerWindows.SetCustomerUserId(id); +#else + if (instance != null) + { + instance.setCustomerUserId(id); + } +#endif + } + + /// + /// Set the OneLink ID that should be used for User-Invite-API. + /// The link that is generated for the user invite will use this OneLink as the base link. + /// + /// OneLink ID obtained from the AppsFlyer Dashboard. + public static void setAppInviteOneLinkID(string oneLinkId) + { + + if (instance != null) + { + instance.setAppInviteOneLinkID(oneLinkId); + } + + + } + + /// + /// Set the deepLink timeout value that should be used for DDL. + /// + /// deepLink timeout in milliseconds. + public static void setDeepLinkTimeout(long deepLinkTimeout) + { + + if (instance != null) + { + instance.setDeepLinkTimeout(deepLinkTimeout); + } + + + } + + /// + /// Set additional data to be sent to AppsFlyer. + /// + /// additional data Dictionary. + public static void setAdditionalData(Dictionary customData) + { + + if (instance != null) + { + instance.setAdditionalData(customData); + } + + + } + + /// + /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. + /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. + /// + /// Array of urls. + public static void setResolveDeepLinkURLs(params string[] urls) + { + + if (instance != null) + { + instance.setResolveDeepLinkURLs(urls); + } + + + } + + + /// + /// Advertisers can use this method to set vanity onelink domains. + /// + /// Array of domains. + public static void setOneLinkCustomDomain(params string[] domains) + { + + if (instance != null) + { + instance.setOneLinkCustomDomain(domains); + } + else + { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); +#else + +#endif + + + + } + } + + /// + /// Setting user local currency code for in-app purchases. + /// The currency code should be a 3 character ISO 4217 code. (default is USD). + /// You can set the currency code for all events by calling the following method. + /// + /// 3 character ISO 4217 code. + public static void setCurrencyCode(string currencyCode) + { + + if (instance != null) + { + instance.setCurrencyCode(currencyCode); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + instance.setCurrencyCode(currencyCode); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); + instance.setCurrencyCode(currencyCode); +#else +#endif + } + } + + /// + /// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application. + /// + /// instance of AppsFlyerConsent. + public static void setConsentData(AppsFlyerConsent appsFlyerConsent) + { + if (instance != null) + { + instance.setConsentData(appsFlyerConsent); + } + } + + /// + /// Logs ad revenue data along with additional parameters if provided. + /// + /// instance of AFAdRevenueData containing ad revenue information. + /// An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters. + public static void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters) + { + if (instance != null) + { + instance.logAdRevenue(adRevenueData, additionalParameters); + } + } + + /// + /// Manually record the location of the user. + /// + /// latitude as double. + /// longitude as double. + public static void recordLocation(double latitude, double longitude) + { + + if (instance != null) + { + instance.recordLocation(latitude, longitude); + } + + + } + + /// + /// Anonymize user Data. + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. + /// Default is false. + /// + /// shouldAnonymizeUser boolean. + public static void anonymizeUser(bool shouldAnonymizeUser) + { + + if (instance != null) + { + instance.anonymizeUser(shouldAnonymizeUser); + } + + + } + + /// + /// Calling enableTCFDataCollection(true) will enable collecting and sending any TCF related data. + /// Calling enableTCFDataCollection(false) will disable the collection of TCF related data and from sending it. + /// + /// should start TCF Data collection boolean. + public static void enableTCFDataCollection(bool shouldCollectTcfData) + { + if (instance != null) + { + instance.enableTCFDataCollection(shouldCollectTcfData); + } + } + + /// + /// Get AppsFlyer's unique device ID which is created for every new install of an app. + /// + /// AppsFlyer's unique device ID. + public static string getAppsFlyerId() + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + return AppsFlyerWindows.GetAppsFlyerId(); +#else + if (instance != null) + { + return instance.getAppsFlyerId(); + } +#endif + return string.Empty; + + } + + /// + /// Set a custom value for the minimum required time between sessions. + /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. + /// + /// minimum time between 2 separate sessions in seconds. + public static void setMinTimeBetweenSessions(int seconds) + { + + if (instance != null) + { + instance.setMinTimeBetweenSessions(seconds); + } + + + } + + /// + /// Set a custom host. + /// + /// Host prefix. + /// Host name. + public static void setHost(string hostPrefixName, string hostName) + { + + if (instance != null) + { + instance.setHost(hostPrefixName, hostName); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + instance.setHost(hostPrefixName, hostName); +#elif UNITY_ANDROID + instance = new AppsFlyerAndroid(); + instance.setHost(hostPrefixName, hostName); +#else +#endif + } + } + + /// + /// Set the user emails and encrypt them. + /// cryptMethod Encryption method: + /// EmailCryptType.EmailCryptTypeMD5 + /// EmailCryptType.EmailCryptTypeSHA1 + /// EmailCryptType.EmailCryptTypeSHA256 + /// EmailCryptType.EmailCryptTypeNone + /// + /// Encryption method. + /// User emails. + public static void setUserEmails(EmailCryptType cryptType, params string[] userEmails) + { + + if (instance != null) + { + instance.setUserEmails(cryptType, userEmails); + } + + } + + public static void updateServerUninstallToken(string token) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.updateServerUninstallToken(token); + } + } + + /// + /// Set the user phone number. + /// + /// phoneNumber string + public static void setPhoneNumber(string phoneNumber) + { + + if (instance != null) + { + instance.setPhoneNumber(phoneNumber); + } + + } + + public static void setImeiData(string aImei) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setImeiData(aImei); + } + } + + /// + /// Used by advertisers to exclude all networks/integrated partners from getting data. + /// + [Obsolete("Please use setSharingFilterForPartners api")] + public static void setSharingFilterForAllPartners() + { + + if (instance != null) + { + instance.setSharingFilterForAllPartners(); + } + + + } + + public static void setAndroidIdData(string aAndroidId) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setAndroidIdData(aAndroidId); + } + } + + public static void waitForCustomerUserId(bool wait) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.waitForCustomerUserId(wait); + } + } + + /// + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. + /// + /// partners to exclude from getting data + [Obsolete("Please use setSharingFilterForPartners api")] + public static void setSharingFilter(params string[] partners) + { + + if (instance != null) + { + instance.setSharingFilter(partners); + } + + + } + + public static void setCustomerIdAndStartSDK(string id) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCustomerIdAndStartSDK(id); + } + } + + /// + /// Lets you configure how which partners should the SDK exclude from data-sharing. + /// + /// partners to exclude from getting data + public static void setSharingFilterForPartners(params string[] partners) + { +#if UNITY_IOS || UNITY_STANDALONE_OSX + AppsFlyeriOS.setSharingFilterForPartners(partners); +#elif UNITY_ANDROID + AppsFlyerAndroid.setSharingFilterForPartners(partners); +#else + +#endif + } + + public static string getOutOfStore() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + return appsFlyerAndroidInstance.getOutOfStore(); + } + return string.Empty; + } + + public static void setOutOfStore(string sourceName) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setOutOfStore(sourceName); + } + } + + /// + /// Register a Conversion Data Listener. + /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. + /// By doing this you can serve users with personalized content or send them to specific activities within the app, + /// which can greatly enhance their engagement with your app. + /// + /// + /// + /// AppsFlyer.getConversionData(this.name); + /// + /// + public static void getConversionData(string objectName) + { +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyerWindows.GetConversionData(""); +#else + if (instance != null) + { + instance.getConversionData(objectName); + } +#endif + + } + + public static void setCollectAndroidID(bool isCollect) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCollectAndroidID(isCollect); + } + } + + public static void setIsUpdate(bool isUpdate) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setIsUpdate(isUpdate); + } + } + + public static void setCollectIMEI(bool isCollect) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCollectIMEI(isCollect); + } + } + + public static void setDisableCollectAppleAdSupport(bool disable) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setDisableCollectAppleAdSupport(disable); + } + } + + public static void setShouldCollectDeviceName(bool shouldCollectDeviceName) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setShouldCollectDeviceName(shouldCollectDeviceName); + } + } + + + /// + /// Use the following API to attribute the click and launch the app store's app page. + /// + /// promoted App ID + /// cross promotion campaign + /// additional user params + /// + /// + /// Dictionary parameters = new Dictionary(); + /// parameters.Add("af_sub1", "val"); + /// parameters.Add("custom_param", "val2"); + /// AppsFlyer.attributeAndOpenStore("123456789", "test campaign", parameters, this); + /// + /// + public static void attributeAndOpenStore(string appID, string campaign, Dictionary userParams, MonoBehaviour gameObject) + { + + if (instance != null) + { + instance.attributeAndOpenStore(appID, campaign, userParams, gameObject); + } + + } + + public static void setPreinstallAttribution(string mediaSource, string campaign, string siteId) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setPreinstallAttribution(mediaSource, campaign, siteId); + } + } + + public static void setDisableCollectIAd(bool disableCollectIAd) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setDisableCollectIAd(disableCollectIAd); + } + } + + public static bool isPreInstalledApp() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + return appsFlyerAndroidInstance.isPreInstalledApp(); + } + return false; + } + + public static void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setUseReceiptValidationSandbox(useReceiptValidationSandbox); + } + } + + /// + /// To attribute an impression use the following API call. + /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. + /// + /// promoted App ID. + /// cross promotion campaign. + /// parameters Dictionary. + public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters) + { + + if (instance != null) + { + instance.recordCrossPromoteImpression(appID, campaign, parameters); + } + + } + + public static void setUseUninstallSandbox(bool useUninstallSandbox) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setUseUninstallSandbox(useUninstallSandbox); + } + } + + public static string getAttributionId() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + return appsFlyerAndroidInstance.getAttributionId(); + } + return string.Empty; + } + + public static void handlePushNotifications() + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.handlePushNotifications(); + } + } + + /// + /// [Deprecated] Validates an in-app purchase on iOS. + /// Use the V2 overload with AFSDKPurchaseDetailsIOS instead. + /// + [System.Obsolete("This method is deprecated. Use validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) instead.")] + public static void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, Dictionary additionalParameters, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.validateAndSendInAppPurchase(productIdentifier, price, currency, transactionId, additionalParameters, gameObject); + } + } + + /// + /// Validates an in-app purchase on iOS using the V2 API. + /// + public static void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.validateAndSendInAppPurchase(details, purchaseAdditionalDetails, gameObject); + } + } + + /// + /// [Deprecated] Validates an in-app purchase on Android. + /// Use the V2 overload with AFPurchaseDetailsAndroid instead. + /// + [System.Obsolete("This method is deprecated. Use validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) instead.")] + public static void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary additionalParameters, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.validateAndSendInAppPurchase(publicKey, signature,purchaseData, price, currency, additionalParameters, gameObject); + } + } + + /// + /// Validates an in-app purchase on Android using the V2 API. + /// + public static void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.validateAndSendInAppPurchase(details, purchaseAdditionalDetails, gameObject); + } + } + + public static void handleOpenUrl(string url, string sourceApplication, string annotation) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.handleOpenUrl(url, sourceApplication, annotation); + } + } + + public static void registerUninstall(byte[] deviceToken) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.registerUninstall(deviceToken); + } + } + + public static void waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.waitForATTUserAuthorizationWithTimeoutInterval(timeoutInterval); + } + } + + public static void setCurrentDeviceLanguage(string language) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.setCurrentDeviceLanguage(language); + } + } + + /// + /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. + /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- + /// + /// parameters Dictionary. + public static void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject) + { + + if (instance != null) + { + instance.generateUserInviteLink(parameters, gameObject); + } + + } + + public static void disableSKAdNetwork(bool isDisabled) + { + if (instance != null && instance is IAppsFlyerIOSBridge) + { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.disableSKAdNetwork(isDisabled); + } else { +#if UNITY_IOS || UNITY_STANDALONE_OSX + instance = new AppsFlyeriOS(); + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.disableSKAdNetwork(isDisabled); +#else +#endif + } + } + + public static void setCollectOaid(bool isCollect) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setCollectOaid(isCollect); + } + } + + + /// + /// Use this method if you’re integrating your app with push providers + /// that don’t use the default push notification JSON schema the SDK expects. + /// See docs for more info. + /// + /// array of nested json path + public static void addPushNotificationDeepLinkPath(params string[] paths) + { + + if (instance != null) + { + instance.addPushNotificationDeepLinkPath(paths); + } + + } + + public static void setDisableAdvertisingIdentifiers(bool disable) + { + if (instance != null && instance is IAppsFlyerAndroidBridge) + { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setDisableAdvertisingIdentifiers(disable); + } + } + + /// + /// Subscribe for unified deeplink API. + /// This is called automatically from OnDeepLinkReceived. + /// CallBackObjectName is set in the init method. + /// + public static void subscribeForDeepLink() + { + + if (instance != null) + { + instance.subscribeForDeepLink(CallBackObjectName); + } + + } + + /// + /// Allows sending custom data for partner integration purposes. + /// partnerId : id of the partner + /// partnerInfo: customer data + /// + public static void setPartnerData(string partnerId, Dictionary partnerInfo) + { + if (instance != null) + { + instance.setPartnerData(partnerId, partnerInfo); + } + + } + + /// + /// Use to opt-out of collecting the network operator name (carrier) and sim operator name from the device. + /// + public static void setDisableNetworkData(bool disable) { + if (instance != null && instance is IAppsFlyerAndroidBridge) { + IAppsFlyerAndroidBridge appsFlyerAndroidInstance = (IAppsFlyerAndroidBridge)instance; + appsFlyerAndroidInstance.setDisableNetworkData(disable); + } + } + + + /// + /// Use to disable app vendor identifier (IDFV) collection, 'true' to disable. + /// + public static void disableIDFVCollection(bool isDisabled) + { +#if UNITY_IOS || UNITY_STANDALONE_OSX + if (instance == null) { + instance = new AppsFlyeriOS(); + } + if (instance != null && instance is IAppsFlyerIOSBridge) { + IAppsFlyerIOSBridge appsFlyeriOSInstance = (IAppsFlyerIOSBridge)instance; + appsFlyeriOSInstance.disableIDFVCollection(isDisabled); + } +#else +#endif + } + + /// + /// Start callback event. + /// + public static event EventHandler OnRequestResponse + { + add + { + onRequestResponse += value; + } + remove + { + onRequestResponse -= value; + } + } + + /// + /// In-App callback event. + /// + public static event EventHandler OnInAppResponse + { + add + { + onInAppResponse += value; + } + remove + { + onInAppResponse -= value; + } + } + + /// + /// Unified DeepLink Event + /// + public static event EventHandler OnDeepLinkReceived + { + add + { + onDeepLinkReceived += value; + subscribeForDeepLink(); + } + remove + { + onDeepLinkReceived -= value; + } + } + + /// + /// Used to accept start callback from UnitySendMessage on native side. + /// + public void inAppResponseReceived(string response) + { + if (onInAppResponse != null) + { + onInAppResponse.Invoke(null, parseRequestCallback(response)); + } + } + + /// + /// Used to accept in-app callback from UnitySendMessage on native side. + /// + public void requestResponseReceived(string response) + { + if (onRequestResponse != null) + { + onRequestResponse.Invoke(null, parseRequestCallback(response)); + } + } + + /// + /// Used to accept deeplink callback from UnitySendMessage on native side. + /// + public void onDeepLinking(string response) + { + + DeepLinkEventsArgs args = new DeepLinkEventsArgs(response); + + if (onDeepLinkReceived != null) + { + onDeepLinkReceived.Invoke(null, args); + } + } + + private static AppsFlyerRequestEventArgs parseRequestCallback(string response) + { + int responseCode = 0; + string errorDescription = ""; + + try + { + Dictionary dictionary = CallbackStringToDictionary(response); + var errorResponse = dictionary.ContainsKey("errorDescription") ? dictionary["errorDescription"] : ""; + errorDescription = (string)errorResponse; + responseCode = (int)(long) dictionary["statusCode"]; + } + catch (Exception e) + { + AFLog("parseRequestCallback", String.Format("{0} Exception caught.", e)); + } + + return new AppsFlyerRequestEventArgs(responseCode, errorDescription); + } + + /// + /// Helper method to convert json strings to dictionary. + /// + /// json string + /// dictionary representing the input json string. + public static Dictionary CallbackStringToDictionary(string str) + { + return AFMiniJSON.Json.Deserialize(str) as Dictionary; + } + + /// + /// Helper method to log AppsFlyer events and callbacks. + /// + /// method name + /// message to log + public static void AFLog(string methodName, string str) + { + Debug.Log(string.Format("AppsFlyer_Unity_v{0} {1} called with {2}", kAppsFlyerPluginVersion, methodName, str)); + } + } + + public enum EmailCryptType + { + // None + EmailCryptTypeNone = 0, + // SHA256 + EmailCryptTypeSHA256 = 1, + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.cs.meta new file mode 100644 index 0000000..48d98d5 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45161025a517d427381d3d06153a5ad3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerAndroid.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerAndroid.cs new file mode 100644 index 0000000..6fc4e9c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerAndroid.cs @@ -0,0 +1,852 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + +#if UNITY_ANDROID + public class AppsFlyerAndroid : IAppsFlyerAndroidBridge + { + public bool isInit { get; set; } + + private static AndroidJavaClass appsFlyerAndroid = new AndroidJavaClass("com.appsflyer.unity.AppsFlyerAndroidWrapper"); + + public AppsFlyerAndroid() { } + + /// + /// Use this method to init the sdk for the application. + /// Call this method before startSDK. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + /// The current game object. This is used to get the conversion data callbacks. Pass null if you do not need the callbacks. + public void initSDK(string devkey, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("initSDK", devkey, gameObject ? gameObject.name : null); +#endif + } + + /// + /// Use this method to start the sdk for the application. + /// The AppsFlyer's Dev-Key must be provided. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + public void startSDK(bool onRequestResponse, string CallBackObjectName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("startTracking", onRequestResponse, CallBackObjectName); +#endif + } + + /// + /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. + /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. + /// This can be achieved with the stopSDK API. + /// + /// boolean should SDK be stopped. + public void stopSDK(bool isSDKStopped) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("stopTracking", isSDKStopped); +#endif + } + + /// + /// Get the AppsFlyer SDK version used in app. + /// + /// AppsFlyer SDK version. + public string getSdkVersion() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getSdkVersion"); +#else + return ""; +#endif + } + + /// + /// Manually pass the Firebase / GCM Device Token for Uninstall measurement. + /// + /// Firebase Device Token. + public void updateServerUninstallToken(string token) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("updateServerUninstallToken", token); +#endif + } + + /// + /// Enables Debug logs for the AppsFlyer SDK. + /// Should only be set to true in development / debug. + /// + /// shouldEnable boolean. + public void setIsDebug(bool shouldEnable) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setIsDebug", shouldEnable); +#endif + } + + /// + /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat (4.4) + /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). + /// Use this API to explicitly send IMEI to AppsFlyer. + /// + /// device's IMEI. + public void setImeiData(string aImei) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setImeiData", aImei); +#endif + } + + /// + /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat(4.4) + /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). + /// Use this API to explicitly send Android ID to AppsFlyer. + /// + /// device's Android ID. + public void setAndroidIdData(string aAndroidId) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setAndroidIdData", aAndroidId); +#endif + } + + /// + /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. + /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. + /// + /// Customer ID for client. + public void setCustomerUserId(string id) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCustomerUserId", id); +#endif + } + + /// + /// It is possible to delay the SDK Initialization until the customerUserID is set. + /// This feature makes sure that the SDK doesn't begin functioning until the customerUserID is provided. + /// If this API is used, all in-app events and any other SDK API calls are discarded, until the customerUserID is provided. + /// + /// wait boolean. + public void waitForCustomerUserId(bool wait) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("waitForCustomerUserId", wait); +#endif + } + + /// + /// Use this API to provide the SDK with the relevant customer user id and trigger the SDK to begin its normal activity. + /// + /// Customer ID for client. + public void setCustomerIdAndStartSDK(string id) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCustomerIdAndTrack", id); +#endif + } + + /// + /// Get the current AF_STORE value. + /// + /// AF_Store value. + public string getOutOfStore() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getOutOfStore"); +#else + return ""; +#endif + } + + /// + /// Manually set the AF_STORE value. + /// + /// value to be set. + public void setOutOfStore(string sourceName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setOutOfStore", sourceName); +#endif + } + + /// + /// Set the OneLink ID that should be used for User-Invites. + /// The link that is generated for the user invite will use this OneLink as the base link. + /// + /// OneLink ID obtained from the AppsFlyer Dashboard. + public void setAppInviteOneLinkID(string oneLinkId) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setAppInviteOneLinkID", oneLinkId); +#endif + } + + /// + /// Set additional data to be sent to AppsFlyer. + /// + /// additional data Dictionary. + public void setAdditionalData(Dictionary customData) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setAdditionalData", convertDictionaryToJavaMap(customData)); +#endif + } + + //// + /// Set the deepLink timeout value that should be used for DDL. + /// + /// deepLink timeout in milliseconds. + public void setDeepLinkTimeout(long deepLinkTimeout) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDeepLinkTimeout", deepLinkTimeout); +#endif + } + + /// + /// Set the user emails. + /// + /// User emails. + public void setUserEmails(params string[] userEmails) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setUserEmails", (object)userEmails); +#endif + } + + + /// + /// Set the user phone number. + /// + /// User phoneNumber. + public void setPhoneNumber(string phoneNumber){ +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setPhoneNumber", phoneNumber); +#endif + } + + /// + /// Set the user emails and encrypt them. + /// cryptMethod Encryption method: + /// EmailCryptType.EmailCryptTypeMD5 + /// EmailCryptType.EmailCryptTypeSHA1 + /// EmailCryptType.EmailCryptTypeSHA256 + /// EmailCryptType.EmailCryptTypeNone + /// + /// Encryption method. + /// User emails. + public void setUserEmails(EmailCryptType cryptMethod, params string[] emails) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setUserEmails", getEmailType(cryptMethod), (object)emails); +#endif + } + + /// + /// Opt-out of collection of Android ID. + /// If the app does NOT contain Google Play Services, Android ID is collected by the SDK. + /// However, apps with Google play services should avoid Android ID collection as this is in violation of the Google Play policy. + /// + /// boolean, false to opt-out. + public void setCollectAndroidID(bool isCollect) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCollectAndroidID", isCollect); +#endif + } + + /// + /// Opt-out of collection of IMEI. + /// If the app does NOT contain Google Play Services, device IMEI is collected by the SDK. + /// However, apps with Google play services should avoid IMEI collection as this is in violation of the Google Play policy. + /// + /// boolean, false to opt-out. + public void setCollectIMEI(bool isCollect) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCollectIMEI", isCollect); +#endif + } + + /// + /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. + /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. + /// + /// Array of urls. + public void setResolveDeepLinkURLs(params string[] urls) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setResolveDeepLinkURLs", (object)urls); +#endif + } + + + /// + /// Advertisers can use this method to set vanity onelink domains. + /// + /// Array of domains. + public void setOneLinkCustomDomain(params string[] domains) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setOneLinkCustomDomain", (object)domains); +#endif + } + + /// + /// Manually set that the application was updated. + /// + /// isUpdate boolean value. + public void setIsUpdate(bool isUpdate) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setIsUpdate", isUpdate); +#endif + } + + /// + /// Setting user local currency code for in-app purchases. + /// The currency code should be a 3 character ISO 4217 code. (default is USD). + /// You can set the currency code for all events by calling the following method. + /// + /// 3 character ISO 4217 code. + public void setCurrencyCode(string currencyCode) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCurrencyCode", currencyCode); +#endif + } + + /// + /// Manually record the location of the user. + /// + /// latitude as double. + /// longitude as double. + public void recordLocation(double latitude, double longitude) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("trackLocation", latitude, longitude); +#endif + } + + /// + /// Send an In-App Event. + /// In-App Events provide insight on what is happening in your app. + /// + /// Event Name as String. + /// Event Values as Dictionary. + public void sendEvent(string eventName, Dictionary eventValues) + { + sendEvent(eventName, eventValues, false, AppsFlyer.CallBackObjectName); + } + + public void sendEvent(string eventName, Dictionary eventValues, bool shouldCallback, string callBackObjectName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("trackEvent", eventName, convertDictionaryToJavaMap(eventValues), shouldCallback, callBackObjectName); +#endif + } + + /// + /// Anonymize user Data. + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. + /// Default is false. + /// + /// isDisabled boolean. + public void anonymizeUser(bool isDisabled) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDeviceTrackingDisabled", isDisabled); +#endif + } + + /// + /// Calling enableTCFDataCollection(true) will enable collecting and sending any TCF related data. + /// Calling enableTCFDataCollection(false) will disable the collection of TCF related data and from sending it. + /// + /// should start TCF Data collection boolean. + public void enableTCFDataCollection(bool shouldCollectTcfData) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("enableTCFDataCollection", shouldCollectTcfData); +#endif + } + + /// + /// Enable the collection of Facebook Deferred AppLinks. + /// Requires Facebook SDK and Facebook app on target/client device. + /// This API must be invoked prior to initializing the AppsFlyer SDK in order to function properly. + /// + /// should Facebook's deferred app links be processed by the AppsFlyer SDK. + public void enableFacebookDeferredApplinks(bool isEnabled) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("enableFacebookDeferredApplinks", isEnabled); +#endif + } + + /// + /// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application. + /// call this method when GDPR user is true + /// + /// hasConsentForDataUsage boolean. + /// hasConsentForAdsPersonalization boolean. + public void setConsentData(AppsFlyerConsent appsFlyerConsent) + { +#if !UNITY_EDITOR + string isUserSubjectToGDPR = appsFlyerConsent.isUserSubjectToGDPR?.ToString().ToLower() ?? "null"; + string hasConsentForDataUsage = appsFlyerConsent.hasConsentForDataUsage?.ToString().ToLower() ?? "null"; + string hasConsentForAdsPersonalization = appsFlyerConsent.hasConsentForAdsPersonalization?.ToString().ToLower() ?? "null"; + string hasConsentForAdStorage = appsFlyerConsent.hasConsentForAdStorage?.ToString().ToLower() ?? "null"; + + appsFlyerAndroid.CallStatic("setConsentData", isUserSubjectToGDPR, hasConsentForDataUsage, hasConsentForAdsPersonalization, hasConsentForAdStorage); +#endif + } + + /// + /// Logs ad revenue data along with additional parameters if provided. + /// instance of AFAdRevenueData containing ad revenue information. + /// An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters. + public void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("logAdRevenue", adRevenueData.monetizationNetwork, getMediationNetwork(adRevenueData.mediationNetwork), adRevenueData.currencyIso4217Code, adRevenueData.eventRevenue, convertDictionaryToJavaMap(additionalParameters)); +#endif + } + + /// + /// Restrict reengagement via deep-link to once per each unique deep-link. + /// Otherwise deep re-occurring deep-links will be permitted for non-singleTask Activities and deep-linking via AppsFlyer deep-links. + /// The default value is false. + /// + /// doConsume boolean. + public void setConsumeAFDeepLinks(bool doConsume) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setConsumeAFDeepLinks", doConsume); +#endif + } + + /// + /// Specify the manufacturer or media source name to which the preinstall is attributed. + /// + /// Manufacturer or media source name for preinstall attribution. + /// Campaign name for preinstall attribution. + /// Site ID for preinstall attribution. + public void setPreinstallAttribution(string mediaSource, string campaign, string siteId) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setPreinstallAttribution", mediaSource, campaign, siteId); +#endif + } + + /// + /// Boolean indicator for preinstall by Manufacturer. + /// + /// boolean isPreInstalledApp. + public bool isPreInstalledApp() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("isPreInstalledApp"); +#else + return false; +#endif + } + + /// + /// Get the Facebook attribution ID, if one exists. + /// + /// string Facebook attribution ID. + public string getAttributionId() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getAttributionId"); +#else + return ""; +#endif + } + + /// + /// Get AppsFlyer's unique device ID is created for every new install of an app. + /// + /// AppsFlyer's unique device ID. + public string getAppsFlyerId() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getAppsFlyerId"); +#else + return ""; +#endif + } + + /// + /// [Deprecated] API for server verification of in-app purchases - please use V2 with AFPurchaseDetailsAndroid instead. + /// An af_purchase event with the relevant values will be automatically sent if the validation is successful. + /// + /// License Key obtained from the Google Play Console. + /// data.INAPP_DATA_SIGNATURE from onActivityResult(int requestCode, int resultCode, Intent data) + /// data.INAPP_PURCHASE_DATA from onActivityResult(int requestCode, int resultCode, Intent data) + /// Purchase price, should be derived from skuDetails.getStringArrayList("DETAILS_LIST") + /// Purchase currency, should be derived from skuDetails.getStringArrayList("DETAILS_LIST") + /// additionalParameters Freehand parameters to be sent with the purchase (if validated). + [System.Obsolete("This method is deprecated. Use validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) instead.")] + public void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary additionalParameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("validateAndTrackInAppPurchase", publicKey, signature, purchaseData, price, currency, convertDictionaryToJavaMap(additionalParameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// V2 - API for server verification of in-app purchases. + /// An af_purchase event with the relevant values will be automatically sent if the validation is successful. + /// + /// AFPurchaseDetailsAndroid instance. + /// purchaseAdditionalDetails Freehand parameters to be sent with the purchase (if validated). + public void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("validateAndTrackInAppPurchaseV2", (int)details.purchaseType, details.purchaseToken, details.productId, convertDictionaryToJavaMap(purchaseAdditionalDetails), gameObject ? gameObject.name : null); +#endif + } + + /// + /// Was the stopSDK(boolean) API set to true. + /// + /// boolean isSDKStopped. + public bool isSDKStopped() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("isTrackingStopped"); +#else + return false; +#endif + } + + /// + /// Set a custom value for the minimum required time between sessions. + /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. + /// + /// minimum time between 2 separate sessions in seconds. + public void setMinTimeBetweenSessions(int seconds) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setMinTimeBetweenSessions", seconds); +#endif + } + + /// + /// Set a custom host. + /// + /// Host prefix. + /// Host name. + public void setHost(string hostPrefixName, string hostName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setHost", hostPrefixName, hostName); +#endif + } + + /// + /// Get the host name. + /// Default value is "appsflyer.com". + /// + /// Host name. + public string getHostName() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getHostName"); +#else + return ""; +#endif + } + + /// + /// Get the custom host prefix. + /// + /// Host prefix. + public string getHostPrefix() + { +#if !UNITY_EDITOR + return appsFlyerAndroid.CallStatic("getHostPrefix"); +#else + return ""; +#endif + } + + /// + /// Used by advertisers to exclude all networks/integrated partners from getting data. + /// + public void setSharingFilterForAllPartners() + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setSharingFilterForAllPartners"); +#endif + } + + /// + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. + /// + /// partners to exclude from getting data + public void setSharingFilter(params string[] partners) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setSharingFilter", (object)partners); +#endif + } + + /// + /// Lets you configure how which partners should the SDK exclude from data-sharing. + /// + /// partners to exclude from getting data + public static void setSharingFilterForPartners(params string[] partners) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setSharingFilterForPartners", (object)partners); +#endif + } + + /// + /// Register a Conversion Data Listener. + /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. + /// By doing this you can serve users with personalized content or send them to specific activities within the app, + /// which can greatly enhance their engagement with your app. + /// + public void getConversionData(string objectName) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("getConversionData", objectName); +#endif + } + + /// + /// Register a validation listener for the validateAndSendInAppPurchase API. + /// + public void initInAppPurchaseValidatorListener(MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("initInAppPurchaseValidatorListener", gameObject ? gameObject.name : null); +#endif + } + + /// + /// setCollectOaid + /// You must include the appsflyer oaid library for this api to work. + /// + /// isCollect oaid - set fasle to opt out + public void setCollectOaid(bool isCollect) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setCollectOaid", isCollect); +#endif + } + + /// + /// Use the following API to attribute the click and launch the app store's app page. + /// + /// promoted App ID + /// cross promotion campaign + /// additional user params + public void attributeAndOpenStore(string promoted_app_id, string campaign, Dictionary userParams, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("attributeAndOpenStore", promoted_app_id, campaign, convertDictionaryToJavaMap(userParams)); +#endif + } + + /// + /// To attribute an impression use the following API call. + /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. + /// + /// promoted App ID. + /// cross promotion campaign. + /// parameters Dictionary. + public void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("recordCrossPromoteImpression", appID, campaign, convertDictionaryToJavaMap(parameters)); +#endif + } + + /// + /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. + /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- + /// + /// parameters Dictionary. + public void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("createOneLinkInviteListener", convertDictionaryToJavaMap(parameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// To measure push notifications as part of a retargeting campaign. + /// + public void handlePushNotifications(){ +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("handlePushNotifications"); +#endif + } + + /// + /// Use this method if you’re integrating your app with push providers + /// that don’t use the default push notification JSON schema the SDK expects. + /// See docs for more info. + /// + /// array of nested json path + public void addPushNotificationDeepLinkPath(params string[] paths) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("addPushNotificationDeepLinkPath", (object)paths); +#endif + } + + /// + /// subscribe to unified deep link callbacks + /// + public void subscribeForDeepLink(string objectName){ +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("subscribeForDeepLink", objectName); +#endif + } + + /// + /// Disables collection of various Advertising IDs by the SDK. This includes Google Advertising ID (GAID), OAID and Amazon Advertising ID (AAID) + /// + /// disable boolean. + public void setDisableAdvertisingIdentifiers(bool disable) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDisableAdvertisingIdentifiers", disable); +#endif + } + + /// + /// Allows sending custom data for partner integration purposes. + /// + public void setPartnerData(string partnerId, Dictionary partnerInfo) + { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setPartnerData", partnerId, convertDictionaryToJavaMap(partnerInfo)); +#endif + } + + /// + /// Use to opt-out of collecting the network operator name (carrier) and sim operator name from the device. + /// + public void setDisableNetworkData(bool disable) { +#if !UNITY_EDITOR + appsFlyerAndroid.CallStatic("setDisableNetworkData", disable); +#endif + } + + /// + /// Internal Helper Method. + /// + private static AndroidJavaObject getEmailType(EmailCryptType cryptType) + { + AndroidJavaClass emailsCryptTypeEnum = new AndroidJavaClass("com.appsflyer.AppsFlyerProperties$EmailsCryptType"); + AndroidJavaObject emailsCryptType; + + switch (cryptType) + { + case EmailCryptType.EmailCryptTypeSHA256: + emailsCryptType = emailsCryptTypeEnum.GetStatic("SHA256"); + break; + default: + emailsCryptType = emailsCryptTypeEnum.GetStatic("NONE"); + break; + } + + return emailsCryptType; + } + + /// + /// Internal Helper Method. + /// + private static AndroidJavaObject getMediationNetwork(MediationNetwork mediationNetwork) + { + AndroidJavaClass mediationNetworkEnumClass = new AndroidJavaClass("com.appsflyer.MediationNetwork"); + AndroidJavaObject mediationNetworkObject; + + switch (mediationNetwork) + { + case MediationNetwork.IronSource: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("IRONSOURCE"); + break; + case MediationNetwork.ApplovinMax: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("APPLOVIN_MAX"); + break; + case MediationNetwork.GoogleAdMob: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("GOOGLE_ADMOB"); + break; + case MediationNetwork.Fyber: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("FYBER"); + break; + case MediationNetwork.Appodeal: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("APPODEAL"); + break; + case MediationNetwork.Admost: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("ADMOST"); + break; + case MediationNetwork.Topon: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("TOPON"); + break; + case MediationNetwork.Tradplus: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("TRADPLUS"); + break; + case MediationNetwork.Yandex: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("YANDEX"); + break; + case MediationNetwork.ChartBoost: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("CHARTBOOST"); + break; + case MediationNetwork.Unity: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("UNITY"); + break; + case MediationNetwork.ToponPte: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("TOPON_PTE"); + break; + case MediationNetwork.Custom: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("CUSTOM_MEDIATION"); + break; + case MediationNetwork.DirectMonetization: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("DIRECT_MONETIZATION_NETWORK"); + break; + default: + mediationNetworkObject = mediationNetworkEnumClass.GetStatic("NONE"); + break; + } + return mediationNetworkObject; + } + + /// + /// Internal Helper Method. + /// + private static AndroidJavaObject convertDictionaryToJavaMap(Dictionary dictionary) + { + AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap"); + IntPtr putMethod = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jvalue[] val; + if (dictionary != null) + { + foreach (var entry in dictionary) + { + val = AndroidJNIHelper.CreateJNIArgArray(new object[] { entry.Key, entry.Value }); + AndroidJNI.CallObjectMethod(map.GetRawObject(), putMethod,val); + AndroidJNI.DeleteLocalRef(val[0].l); + AndroidJNI.DeleteLocalRef(val[1].l); + } + } + + return map; + } + } +#endif + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerAndroid.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerAndroid.cs.meta new file mode 100644 index 0000000..d7ce722 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerAndroid.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 172d18dd98e7e4ed3b30110568b0fae4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerConsent.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerConsent.cs new file mode 100644 index 0000000..feb448d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerConsent.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + /// + // Data class representing a user's consent for data processing in accordance with GDPR and DMA + // (Digital Markets Act) compliance, specifically regarding advertising preferences. + + // This class should be used to notify and record the user's applicability + // under GDPR, their general consent to data usage, and their consent to personalized + // advertisements based on user data. + + /// ## Properties: + /// - `isUserSubjectToGDPR` (optional) - Indicates whether GDPR regulations apply to the user. + /// This may also serve as a general compliance flag for other regional regulations. + /// - `hasConsentForDataUsage` (optional) - Indicates whether the user consents to the processing + /// of their data for advertising purposes. + /// - `hasConsentForAdsPersonalization` (optional) - Indicates whether the user consents to the + /// use of their data for personalized advertising. + /// - `hasConsentForAdStorage` (optional) - Indicates whether the user consents to ad-related storage access. + /// + /// **Usage Example:** + /// ```csharp + /// var consent = new AppsFlyerConsent( + /// isUserSubjectToGDPR: true, + /// hasConsentForDataUsage: true, + /// hasConsentForAdsPersonalization: false, + /// hasConsentForAdStorage: true + /// ); + /// **Deprecated APIs:** + /// - `ForGDPRUser(...)` and `ForNonGDPRUser(...)` should no longer be used. + /// - Use `new AppsFlyerConsent(...)` instead with relevant consent fields. + /// + /// + public class AppsFlyerConsent + { + public bool? isUserSubjectToGDPR { get; private set; } + public bool? hasConsentForDataUsage { get; private set; } + public bool? hasConsentForAdsPersonalization { get; private set; } + public bool? hasConsentForAdStorage { get; private set; } + + public AppsFlyerConsent( bool? isUserSubjectToGDPR = null, bool? hasConsentForDataUsage = null, bool? hasConsentForAdsPersonalization = null, bool? hasConsentForAdStorage = null) + { + this.isUserSubjectToGDPR = isUserSubjectToGDPR; + this.hasConsentForDataUsage = hasConsentForDataUsage; + this.hasConsentForAdsPersonalization = hasConsentForAdsPersonalization; + this.hasConsentForAdStorage = hasConsentForAdStorage; + } + + [Obsolete("Use the new constructor with optional booleans instead.")] + private AppsFlyerConsent(bool isGDPR, bool hasForDataUsage, bool hasForAdsPersonalization) + { + isUserSubjectToGDPR = isGDPR; + hasConsentForDataUsage = hasForDataUsage; + hasConsentForAdsPersonalization = hasForAdsPersonalization; + } + + [Obsolete("Use new AppsFlyerConsent(...) instead.")] + public static AppsFlyerConsent ForGDPRUser(bool hasConsentForDataUsage, bool hasConsentForAdsPersonalization) + { + return new AppsFlyerConsent(true, hasConsentForDataUsage, hasConsentForAdsPersonalization); + } + + [Obsolete("Use new AppsFlyerConsent(...) instead.")] + public static AppsFlyerConsent ForNonGDPRUser() + { + return new AppsFlyerConsent(false); + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerConsent.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerConsent.cs.meta new file mode 100644 index 0000000..5a881de --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerConsent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a97c986fe4ee0461badf7042e08db3f3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerEventArgs.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerEventArgs.cs new file mode 100644 index 0000000..511db67 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerEventArgs.cs @@ -0,0 +1,218 @@ +using System; +using System.Collections.Generic; + +namespace AppsFlyerSDK +{ + + /// + /// Event args for AppsFlyer requests. + /// Used for sessions and in-app events. + /// Used to handle post request logic. + /// + /// Examples: + /// statusCode / errorDescription + /// + /// 200 - null + /// + /// 10 - "Event timeout. Check 'minTimeBetweenSessions' param" + /// 11 - "Skipping event because 'isStopTracking' enabled" + /// 40 - Network error: Error description comes from Android + /// 41 - "No dev key" + /// 50 - "Status code failure" + actual response code from the server + /// + /// + public class AppsFlyerRequestEventArgs : EventArgs + { + public AppsFlyerRequestEventArgs(int code, string description) + { + statusCode = code; + errorDescription = description; + } + + public int statusCode { get; } + public string errorDescription { get; } + } + + /// + /// Event args for OnDeepLinkReceived. + /// Used to handle deep linking results. + /// + public class DeepLinkEventsArgs : EventArgs + { + + /// + /// DeepLink dictionary to get additional parameters + /// + public Dictionary deepLink; + + /// + /// DeepLink status: FOUND, NOT_FOUND, ERROR + /// + public DeepLinkStatus status { get; } + + /// + /// DeepLink error: TIMEOUT, NETWORK, HTTP_STATUS_CODE, UNEXPECTED + /// + public DeepLinkError error { get; } + + public string getMatchType() + { + return getDeepLinkParameter("match_type"); + } + + public string getDeepLinkValue() + { + return getDeepLinkParameter("deep_link_value"); + } + + public string getClickHttpReferrer() + { + return getDeepLinkParameter("click_http_referrer"); + } + + public string getMediaSource() + { + return getDeepLinkParameter("media_source"); + } + + public string getCampaign() + { + return getDeepLinkParameter("campaign"); + } + + public string getCampaignId() + { + return getDeepLinkParameter("campaign_id"); + } + + public string getAfSub1() + { + return getDeepLinkParameter("af_sub1"); + } + + public string getAfSub2() + { + return getDeepLinkParameter("af_sub2"); + } + + public string getAfSub3() + { + return getDeepLinkParameter("af_sub3"); + } + + public string getAfSub4() + { + return getDeepLinkParameter("af_sub4"); + } + + public string getAfSub5() + { + return getDeepLinkParameter("af_sub5"); + } + + public bool isDeferred() + { + if (deepLink != null && deepLink.ContainsKey("is_deferred")) + { + try + { + return (bool)deepLink["is_deferred"]; + } + catch (Exception e) + { + AppsFlyer.AFLog("DeepLinkEventsArgs.isDeferred", String.Format("{0} Exception caught.", e)); + } + } + return false; + } + + public Dictionary getDeepLinkDictionary() + { + return deepLink; + } + + public DeepLinkEventsArgs(string str) + { + try + { + Dictionary dictionary = AppsFlyer.CallbackStringToDictionary(str); + + string status = ""; + string error = ""; + + + if (dictionary.ContainsKey("status") && dictionary["status"] != null) + { + status = dictionary["status"].ToString(); + } + + if (dictionary.ContainsKey("error") && dictionary["error"] != null) + { + error = dictionary["error"].ToString(); + } + + if (dictionary.ContainsKey("deepLink") && dictionary["deepLink"] != null) + { + this.deepLink = AppsFlyer.CallbackStringToDictionary(dictionary["deepLink"].ToString()); + } + if (dictionary.ContainsKey("is_deferred")) + { + this.deepLink["is_deferred"] = dictionary["is_deferred"]; + } + + switch (status) + { + case "FOUND": + this.status = DeepLinkStatus.FOUND; + break; + case "NOT_FOUND": + this.status = DeepLinkStatus.NOT_FOUND; + break; + default: + this.status = DeepLinkStatus.ERROR; + break; + } + + switch (error) + { + case "TIMEOUT": + this.error = DeepLinkError.TIMEOUT; + break; + case "NETWORK": + this.error = DeepLinkError.NETWORK; + break; + case "HTTP_STATUS_CODE": + this.error = DeepLinkError.HTTP_STATUS_CODE; + break; + default: + this.error = DeepLinkError.UNEXPECTED; + break; + } + + } + catch (Exception e) + { + AppsFlyer.AFLog("DeepLinkEventsArgs.parseDeepLink", String.Format("{0} Exception caught.", e)); + } + } + + private string getDeepLinkParameter(string name) + { + if (deepLink != null && deepLink.ContainsKey(name) && deepLink[name] != null) + { + return deepLink[name].ToString(); + } + + return null; + } + + } + + public enum DeepLinkStatus { + FOUND, NOT_FOUND, ERROR + } + + public enum DeepLinkError { + TIMEOUT, NETWORK, HTTP_STATUS_CODE, UNEXPECTED + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerEventArgs.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerEventArgs.cs.meta new file mode 100644 index 0000000..056bce2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerEventArgs.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0fc241ad5a9b43a7b461a6147dbc74c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObject.prefab b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObject.prefab new file mode 100644 index 0000000..f3bbb45 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObject.prefab @@ -0,0 +1,49 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7315102894599890749 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6207133488976360133} + - component: {fileID: 4405976200006927252} + m_Layer: 0 + m_Name: AppsFlyerObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6207133488976360133 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7315102894599890749} + 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: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4405976200006927252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7315102894599890749} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a2ec6ba1ee8b48749524f015ed572a6, type: 3} + m_Name: + m_EditorClassIdentifier: + devKey: + appID: + isDebug: 0 + getConversionData: 0 diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObject.prefab.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObject.prefab.meta new file mode 100644 index 0000000..1acd1cf --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObject.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0bfe3b149145747cc92dc53bb4df4e9b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObjectScript.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObjectScript.cs new file mode 100644 index 0000000..266a848 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObjectScript.cs @@ -0,0 +1,70 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using AppsFlyerSDK; + +// This class is intended to be used the the AppsFlyerObject.prefab + +public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData +{ + + // These fields are set from the editor so do not modify! + //******************************// + public string devKey; + public string appID; + public string UWPAppID; + public string macOSAppID; + public bool isDebug; + public bool getConversionData; + //******************************// + + + void Start() + { + // These fields are set from the editor so do not modify! + //******************************// + AppsFlyer.setIsDebug(isDebug); +#if UNITY_WSA_10_0 && !UNITY_EDITOR + AppsFlyer.initSDK(devKey, UWPAppID, getConversionData ? this : null); +#elif UNITY_STANDALONE_OSX && !UNITY_EDITOR + AppsFlyer.initSDK(devKey, macOSAppID, getConversionData ? this : null); +#else + AppsFlyer.initSDK(devKey, appID, getConversionData ? this : null); +#endif + //******************************/ + + AppsFlyer.startSDK(); + } + + + void Update() + { + + } + + // Mark AppsFlyer CallBacks + public void onConversionDataSuccess(string conversionData) + { + AppsFlyer.AFLog("didReceiveConversionData", conversionData); + Dictionary conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData); + // add deferred deeplink logic here + } + + public void onConversionDataFail(string error) + { + AppsFlyer.AFLog("didReceiveConversionDataWithError", error); + } + + public void onAppOpenAttribution(string attributionData) + { + AppsFlyer.AFLog("onAppOpenAttribution", attributionData); + Dictionary attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData); + // add direct deeplink logic here + } + + public void onAppOpenAttributionFailure(string error) + { + AppsFlyer.AFLog("onAppOpenAttributionFailure", error); + } + +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObjectScript.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObjectScript.cs.meta new file mode 100644 index 0000000..65ccedc --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerObjectScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a2ec6ba1ee8b48749524f015ed572a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerPurchaseConnector.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerPurchaseConnector.cs new file mode 100644 index 0000000..ee43009 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerPurchaseConnector.cs @@ -0,0 +1,426 @@ +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; +using System; + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerPurchaseRevenueDataSource + { + Dictionary PurchaseRevenueAdditionalParametersForProducts(HashSet products, HashSet transactions); + } + + public interface IAppsFlyerPurchaseRevenueDataSourceStoreKit2 + { + Dictionary PurchaseRevenueAdditionalParametersStoreKit2ForProducts(HashSet products, HashSet transactions); + } + + public class AppsFlyerPurchaseRevenueBridge : MonoBehaviour + { + #if UNITY_IOS && !UNITY_EDITOR +[DllImport("__Internal")] +private static extern void RegisterUnityPurchaseRevenueParamsCallback(Func callback); + +[DllImport("__Internal")] +private static extern void RegisterUnityPurchaseRevenueParamsCallbackSK2(Func callback); +#endif + + private static IAppsFlyerPurchaseRevenueDataSource _dataSource; + private static IAppsFlyerPurchaseRevenueDataSourceStoreKit2 _dataSourceSK2; + + public static void RegisterDataSource(IAppsFlyerPurchaseRevenueDataSource dataSource) + { + _dataSource = dataSource; + #if UNITY_IOS && !UNITY_EDITOR + RegisterUnityPurchaseRevenueParamsCallback(GetAdditionalParameters); + #elif UNITY_ANDROID && !UNITY_EDITOR + using (AndroidJavaClass jc = new AndroidJavaClass("com.appsflyer.unity.PurchaseRevenueBridge")) + { + jc.CallStatic("setUnityBridge", new UnityPurchaseRevenueBridgeProxy()); + } + #endif + } + + public static void RegisterDataSourceStoreKit2(IAppsFlyerPurchaseRevenueDataSourceStoreKit2 dataSource) + { + #if UNITY_IOS && !UNITY_EDITOR + _dataSourceSK2 = dataSource; + RegisterUnityPurchaseRevenueParamsCallbackSK2(GetAdditionalParametersSK2); + #endif + } + + public static Dictionary GetAdditionalParametersForAndroid(HashSet products, HashSet transactions) + { + return _dataSource?.PurchaseRevenueAdditionalParametersForProducts(products, transactions) + ?? new Dictionary(); + } + + #if UNITY_IOS && !UNITY_EDITOR + [AOT.MonoPInvokeCallback(typeof(Func))] + public static string GetAdditionalParameters(string productsJson, string transactionsJson) + { + try + { + HashSet products = new HashSet(); + HashSet transactions = new HashSet(); + + if (!string.IsNullOrEmpty(productsJson)) + { + var dict = AFMiniJSON.Json.Deserialize(productsJson) as Dictionary; + if (dict != null) + { + if (dict.TryGetValue("products", out var productsObj) && productsObj is List productList) + products = new HashSet(productList); + + if (dict.TryGetValue("transactions", out var transactionsObj) && transactionsObj is List transactionList) + transactions = new HashSet(transactionList); + } + } + + var parameters = _dataSource?.PurchaseRevenueAdditionalParametersForProducts(products, transactions) + ?? new Dictionary(); + return AFMiniJSON.Json.Serialize(parameters); + } + catch (Exception e) + { + Debug.LogError($"[AppsFlyer] Exception in GetAdditionalParameters: {e}"); + return "{}"; + } + } + #endif + + #if UNITY_IOS && !UNITY_EDITOR + [AOT.MonoPInvokeCallback(typeof(Func))] + public static string GetAdditionalParametersSK2(string productsJson, string transactionsJson) + { + try + { + HashSet products = new HashSet(); + HashSet transactions = new HashSet(); + + if (!string.IsNullOrEmpty(productsJson)) + { + var dict = AFMiniJSON.Json.Deserialize(productsJson) as Dictionary; + if (dict != null && dict.TryGetValue("products", out var productsObj) && productsObj is List productList) + products = new HashSet(productList); + } + if (!string.IsNullOrEmpty(transactionsJson)) + { + var dict = AFMiniJSON.Json.Deserialize(transactionsJson) as Dictionary; + if (dict != null && dict.TryGetValue("transactions", out var transactionsObj) && transactionsObj is List transactionList) + transactions = new HashSet(transactionList); + } + + var parameters = _dataSourceSK2?.PurchaseRevenueAdditionalParametersStoreKit2ForProducts(products, transactions) + ?? new Dictionary(); + return AFMiniJSON.Json.Serialize(parameters); + } + catch (Exception e) + { + Debug.LogError($"[AppsFlyer] Exception in GetAdditionalParametersSK2: {e}"); + return "{}"; + } + } + #endif + } + + public class UnityPurchaseRevenueBridgeProxy : AndroidJavaProxy + { + public UnityPurchaseRevenueBridgeProxy() : base("com.appsflyer.unity.PurchaseRevenueBridge$UnityPurchaseRevenueBridge") { } + + public string getAdditionalParameters(string productsJson, string transactionsJson) + { + try + { + // Create empty sets if JSON is null or empty + HashSet products = new HashSet(); + HashSet transactions = new HashSet(); + + // Only try to parse if we have valid JSON + if (!string.IsNullOrEmpty(productsJson)) + { + try + { + // First try to parse as a simple array + var parsedProducts = AFMiniJSON.Json.Deserialize(productsJson); + if (parsedProducts is List productList) + { + products = new HashSet(productList); + } + else if (parsedProducts is Dictionary dict) + { + if (dict.ContainsKey("events") && dict["events"] is List eventsList) + { + products = new HashSet(eventsList); + } + else + { + // If it's a dictionary but doesn't have events, add the whole dict + products.Add(dict); + } + } + } + catch (Exception e) + { + Debug.LogError($"Error parsing products JSON: {e.Message}\nJSON: {productsJson}"); + } + } + + if (!string.IsNullOrEmpty(transactionsJson)) + { + try + { + // First try to parse as a simple array + var parsedTransactions = AFMiniJSON.Json.Deserialize(transactionsJson); + if (parsedTransactions is List transactionList) + { + transactions = new HashSet(transactionList); + } + else if (parsedTransactions is Dictionary dict) + { + if (dict.ContainsKey("events") && dict["events"] is List eventsList) + { + transactions = new HashSet(eventsList); + } + else + { + // If it's a dictionary but doesn't have events, add the whole dict + transactions.Add(dict); + } + } + } + catch (Exception e) + { + Debug.LogError($"Error parsing transactions JSON: {e.Message}\nJSON: {transactionsJson}"); + } + } + + var parameters = AppsFlyerPurchaseRevenueBridge.GetAdditionalParametersForAndroid(products, transactions); + return AFMiniJSON.Json.Serialize(parameters); + } + catch (Exception e) + { + Debug.LogError($"Error in getAdditionalParameters: {e.Message}\nProducts JSON: {productsJson}\nTransactions JSON: {transactionsJson}"); + return "{}"; + } + } + } + + + public class AppsFlyerPurchaseConnector : MonoBehaviour { + + private static AppsFlyerPurchaseConnector instance; + private Dictionary pendingParameters; + private Action> pendingCallback; + + public static AppsFlyerPurchaseConnector Instance + { + get + { + if (instance == null) + { + GameObject go = new GameObject("AppsFlyerPurchaseConnector"); + instance = go.AddComponent(); + DontDestroyOnLoad(go); + } + return instance; + } + } + + private void Awake() + { + if (instance == null) + { + instance = this; + DontDestroyOnLoad(gameObject); + } + else + { + Destroy(gameObject); + } + } + +#if UNITY_ANDROID && !UNITY_EDITOR + private static AndroidJavaClass appsFlyerAndroidConnector = new AndroidJavaClass("com.appsflyer.unity.AppsFlyerAndroidWrapper"); +#endif + + public static void init(MonoBehaviour unityObject, Store s) { +#if UNITY_IOS && !UNITY_EDITOR + _initPurchaseConnector(unityObject.name); +#elif UNITY_ANDROID && !UNITY_EDITOR + int store = mapStoreToInt(s); + appsFlyerAndroidConnector.CallStatic("initPurchaseConnector", unityObject ? unityObject.name : null, store); +#endif + } + + public static void build() { +#if UNITY_IOS && !UNITY_EDITOR + //not for iOS +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("build"); + +#else +#endif + } + + public static void startObservingTransactions() { +#if UNITY_IOS && !UNITY_EDITOR + _startObservingTransactions(); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("startObservingTransactions"); +#else +#endif + } + + public static void stopObservingTransactions() { +#if UNITY_IOS && !UNITY_EDITOR + _stopObservingTransactions(); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("stopObservingTransactions"); +#else +#endif + } + + public static void setIsSandbox(bool isSandbox) { +#if UNITY_IOS && !UNITY_EDITOR + _setIsSandbox(isSandbox); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("setIsSandbox", isSandbox); +#else +#endif + } + + public static void setPurchaseRevenueValidationListeners(bool enableCallbacks) { +#if UNITY_IOS && !UNITY_EDITOR + _setPurchaseRevenueDelegate(); +#elif UNITY_ANDROID && !UNITY_EDITOR + appsFlyerAndroidConnector.CallStatic("setPurchaseRevenueValidationListeners", enableCallbacks); +#else +#endif + } + + public static void setAutoLogPurchaseRevenue(params AppsFlyerAutoLogPurchaseRevenueOptions[] autoLogPurchaseRevenueOptions) { +#if UNITY_IOS && !UNITY_EDITOR + int option = 0; + foreach (AppsFlyerAutoLogPurchaseRevenueOptions op in autoLogPurchaseRevenueOptions) { + option = option | (int)op; + } + _setAutoLogPurchaseRevenue(option); +#elif UNITY_ANDROID && !UNITY_EDITOR + if (autoLogPurchaseRevenueOptions.Length == 0) { + return; + } + foreach (AppsFlyerAutoLogPurchaseRevenueOptions op in autoLogPurchaseRevenueOptions) { + switch(op) { + case AppsFlyerAutoLogPurchaseRevenueOptions.AppsFlyerAutoLogPurchaseRevenueOptionsDisabled: + break; + case AppsFlyerAutoLogPurchaseRevenueOptions.AppsFlyerAutoLogPurchaseRevenueOptionsAutoRenewableSubscriptions: + appsFlyerAndroidConnector.CallStatic("setAutoLogSubscriptions", true); + break; + case AppsFlyerAutoLogPurchaseRevenueOptions.AppsFlyerAutoLogPurchaseRevenueOptionsInAppPurchases: + appsFlyerAndroidConnector.CallStatic("setAutoLogInApps", true); + break; + default: + break; + } + } +#else +#endif + } + + public static void setPurchaseRevenueDataSource(IAppsFlyerPurchaseRevenueDataSource dataSource) + { +#if UNITY_IOS && !UNITY_EDITOR + + if (dataSource != null) + { + _setPurchaseRevenueDataSource(dataSource.GetType().Name); + AppsFlyerPurchaseRevenueBridge.RegisterDataSource(dataSource); + } +#elif UNITY_ANDROID && !UNITY_EDITOR + if (dataSource != null) + { + AppsFlyerPurchaseRevenueBridge.RegisterDataSource(dataSource); + } +#endif + } + + + public static void setPurchaseRevenueDataSourceStoreKit2(IAppsFlyerPurchaseRevenueDataSourceStoreKit2 dataSourceSK2) + { +#if UNITY_IOS && !UNITY_EDITOR + if (dataSourceSK2 != null) + { + AppsFlyerPurchaseRevenueBridge.RegisterDataSourceStoreKit2(dataSourceSK2); + _setPurchaseRevenueDataSource("AppsFlyerObjectScript_StoreKit2"); + } +#endif + } + + + private static int mapStoreToInt(Store s) { + switch(s) { + case(Store.GOOGLE): + return 0; + default: + return -1; + } + } + + public static void setStoreKitVersion(StoreKitVersion storeKitVersion) { +#if UNITY_IOS && !UNITY_EDITOR + _setStoreKitVersion((int)storeKitVersion); +#elif UNITY_ANDROID && !UNITY_EDITOR + // Android doesn't use StoreKit +#else +#endif + } + + public static void logConsumableTransaction(string transactionJson) { +#if UNITY_IOS && !UNITY_EDITOR + _logConsumableTransaction(transactionJson); +#elif UNITY_ANDROID && !UNITY_EDITOR + // Android doesn't use StoreKit +#else +#endif + } + +#if UNITY_IOS && !UNITY_EDITOR + + [DllImport("__Internal")] + private static extern void _startObservingTransactions(); + [DllImport("__Internal")] + private static extern void _stopObservingTransactions(); + [DllImport("__Internal")] + private static extern void _setIsSandbox(bool isSandbox); + [DllImport("__Internal")] + private static extern void _setPurchaseRevenueDelegate(); + [DllImport("__Internal")] + private static extern void _setPurchaseRevenueDataSource(string dataSourceName); + [DllImport("__Internal")] + private static extern void _setAutoLogPurchaseRevenue(int option); + [DllImport("__Internal")] + private static extern void _initPurchaseConnector(string objectName); + [DllImport("__Internal")] + private static extern void _setStoreKitVersion(int storeKitVersion); + [DllImport("__Internal")] + private static extern void _logConsumableTransaction(string transactionJson); + +#endif + } + public enum Store { + GOOGLE = 0 + } + public enum AppsFlyerAutoLogPurchaseRevenueOptions + { + AppsFlyerAutoLogPurchaseRevenueOptionsDisabled = 0, + AppsFlyerAutoLogPurchaseRevenueOptionsAutoRenewableSubscriptions = 1 << 0, + AppsFlyerAutoLogPurchaseRevenueOptionsInAppPurchases = 1 << 1 + } + + public enum StoreKitVersion { + SK1 = 0, + SK2 = 1 + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerPurchaseConnector.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerPurchaseConnector.cs.meta new file mode 100644 index 0000000..dd85a75 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyerPurchaseConnector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0636ea07d370d437183f3762280c08ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyeriOS.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyeriOS.cs new file mode 100644 index 0000000..29c8819 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyeriOS.cs @@ -0,0 +1,1021 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using UnityEngine; +using System.Reflection; + + + +namespace AppsFlyerSDK +{ + +#if UNITY_IOS || UNITY_STANDALONE_OSX + + public class AppsFlyeriOS: IAppsFlyerIOSBridge + { + public bool isInit { get; set; } + + public AppsFlyeriOS() { } + + public AppsFlyeriOS(string devKey, string appID, MonoBehaviour gameObject) + { + setAppsFlyerDevKey(devKey); + setAppleAppID(appID); + if (gameObject != null) + { +#if UNITY_IOS + getConversionData(gameObject.name); +#elif UNITY_STANDALONE_OSX + getConversionData(gameObject.GetType().ToString()); +#endif + } + } + + + + /// + /// Start Session. + /// This will record a session and then record all background forground sessions during the lifecycle of the app. + /// +public void startSDK(bool shouldCallback, string CallBackObjectName) + { +#if UNITY_STANDALONE_OSX && !UNITY_EDITOR + _startSDK(shouldCallback, CallBackObjectName, getCallback); +#elif UNITY_IOS && !UNITY_EDITOR + _startSDK(shouldCallback, CallBackObjectName); +#endif + } + + /// + /// Send an In-App Event. + /// In-App Events provide insight on what is happening in your app. + /// + /// Name of event. + /// Contains dictionary of values for handling by backend. + public void sendEvent(string eventName, Dictionary eventValues) + { + sendEvent(eventName, eventValues, false, AppsFlyer.CallBackObjectName); + } + + public void sendEvent(string eventName, Dictionary eventValues, bool shouldCallback, string callBackObjectName) + { +#if !UNITY_EDITOR + _afSendEvent(eventName, AFMiniJSON.Json.Serialize(eventValues), shouldCallback, callBackObjectName); +#endif + } + + /// + /// Get the conversion data. + /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. + /// By doing this you can serve users with personalized content or send them to specific activities within the app, + /// which can greatly enhance their engagement with your app. + /// + public void getConversionData(string objectName) + { +#if !UNITY_EDITOR + _getConversionData(objectName); +#endif + } + + /// + /// In case you use your own user ID in your app, you can set this property to that ID. + /// Enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. + /// + /// Customer ID for client. + public void setCustomerUserId(string customerUserID) + { +#if !UNITY_EDITOR + _setCustomerUserID(customerUserID); +#endif + } + + /// + /// In case you use custom data and you want to receive it in the raw reports. + /// see [Setting additional custom data] (https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS#setting-additional-custom-data) for more information. + /// + /// additional data Dictionary. + public void setAdditionalData(Dictionary customData) + { +#if !UNITY_EDITOR + _setAdditionalData(AFMiniJSON.Json.Serialize(customData)); +#endif + } + + /// + /// Use this method to set your AppsFlyer's dev key. + /// + /// AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard. + public void setAppsFlyerDevKey(string appsFlyerDevKey) + { +#if !UNITY_EDITOR + _setAppsFlyerDevKey(appsFlyerDevKey); +#endif + } + + /// + /// Use this method to set your app's Apple ID(taken from the app's page on iTunes Connect). + /// + /// your app's Apple ID. + public void setAppleAppID(string appleAppID) + { +#if !UNITY_EDITOR + _setAppleAppID(appleAppID); +#endif + } + + /// + /// Setting user local currency code for in-app purchases. + /// The currency code should be a 3 character ISO 4217 code. (default is USD). + /// You can set the currency code for all events by calling the following method. + /// + /// 3 character ISO 4217 code. + public void setCurrencyCode(string currencyCode) + { +#if !UNITY_EDITOR + _setCurrencyCode(currencyCode); +#endif + } + + /// + /// AppsFlyer SDK collect Apple's `advertisingIdentifier` if the `AdSupport.framework` included in the SDK. + /// You can disable this behavior by setting the following property to true. + /// + /// boolean to disableCollectAppleAdSupport + public void setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport) + { +#if !UNITY_EDITOR + _setDisableCollectAppleAdSupport(disableCollectAppleAdSupport); +#endif + } + + /// + /// Enables Debug logs for the AppsFlyer SDK. + /// Should only be set to true in development / debug. + /// The default value is false. + /// + /// shouldEnable boolean.. + public void setIsDebug(bool isDebug) + { +#if !UNITY_EDITOR + _setIsDebug(isDebug); +#endif + } + + /// + /// Set this flag to true, to collect the current device name(e.g. "My iPhone"). Default value is false. + /// + /// boolean shouldCollectDeviceName. + [System.Obsolete("This is deprecated")] + public void setShouldCollectDeviceName(bool shouldCollectDeviceName) + { +#if !UNITY_EDITOR + _setShouldCollectDeviceName(shouldCollectDeviceName); +#endif + } + + /// + /// Set the OneLink ID that should be used for User-Invites. + /// The link that is generated for the user invite will use this OneLink as the base link. + /// + /// OneLink ID obtained from the AppsFlyer Dashboard. + public void setAppInviteOneLinkID(string appInviteOneLinkID) + { +#if !UNITY_EDITOR + _setAppInviteOneLinkID(appInviteOneLinkID); +#endif + } + + /// + /// Set the deepLink timeout value that should be used for DDL. + /// + /// deepLink timeout in milliseconds. + public void setDeepLinkTimeout(long deepLinkTimeout) + { +#if !UNITY_EDITOR + _setDeepLinkTimeout(deepLinkTimeout); +#endif + } + + /// + /// Calling enableTCFDataCollection(true) will enable collecting and sending any TCF related data. + /// Calling enableTCFDataCollection(false) will disable the collection of TCF related data and from sending it. + /// + /// should start TCF Data collection boolean. + public void enableTCFDataCollection(bool shouldCollectTcfData) + { +#if !UNITY_EDITOR + _enableTCFDataCollection(shouldCollectTcfData); +#endif + } + + /// + /// Sets or updates the user consent data related to GDPR and DMA regulations for advertising and data usage purposes within the application. + /// + /// instance of AppsFlyerConsent. + public void setConsentData(AppsFlyerConsent appsFlyerConsent) + { +#if !UNITY_EDITOR + string isUserSubjectToGDPR = appsFlyerConsent.isUserSubjectToGDPR?.ToString().ToLower() ?? "null"; + string hasConsentForDataUsage = appsFlyerConsent.hasConsentForDataUsage?.ToString().ToLower() ?? "null"; + string hasConsentForAdsPersonalization = appsFlyerConsent.hasConsentForAdsPersonalization?.ToString().ToLower() ?? "null"; + string hasConsentForAdStorage = appsFlyerConsent.hasConsentForAdStorage?.ToString().ToLower() ?? "null"; + + _setConsentData(isUserSubjectToGDPR, hasConsentForDataUsage, hasConsentForAdsPersonalization, hasConsentForAdStorage); +#endif + } + + /// + /// Logs ad revenue data along with additional parameters if provided. + /// + /// instance of AFAdRevenueData containing ad revenue information. + /// An optional map of additional parameters to be logged with ad revenue data. This can be null if there are no additional parameters. + public void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters) + { +#if !UNITY_EDITOR + _logAdRevenue(adRevenueData.monetizationNetwork, adRevenueData.mediationNetwork, adRevenueData.currencyIso4217Code, adRevenueData.eventRevenue, AFMiniJSON.Json.Serialize(additionalParameters)); +#endif + } + + /// + /// Anonymize user Data. + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. + /// Default is false + /// + /// boolean shouldAnonymizeUser. + public void anonymizeUser(bool shouldAnonymizeUser) + { +#if !UNITY_EDITOR + _anonymizeUser(shouldAnonymizeUser); +#endif + } + + /// + /// Opt-out for Apple Search Ads attributions. + /// + /// boolean disableCollectIAd. + public void setDisableCollectIAd(bool disableCollectIAd) + { +#if !UNITY_EDITOR + _setDisableCollectIAd(disableCollectIAd); +#endif + } + + /// + /// In app purchase receipt validation Apple environment(production or sandbox). The default value is false. + /// + /// boolean useReceiptValidationSandbox. + public void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox) + { +#if !UNITY_EDITOR + _setUseReceiptValidationSandbox(useReceiptValidationSandbox); +#endif + } + + /// + /// Set this flag to test uninstall on Apple environment(production or sandbox). The default value is false. + /// + /// boolean useUninstallSandbox. + public void setUseUninstallSandbox(bool useUninstallSandbox) + { +#if !UNITY_EDITOR + _setUseUninstallSandbox(useUninstallSandbox); +#endif + } + + /// + /// For advertisers who wrap OneLink within another Universal Link. + /// An advertiser will be able to deeplink from a OneLink wrapped within another Universal Link and also record this retargeting conversion. + /// + /// Array of urls. + public void setResolveDeepLinkURLs(params string[] resolveDeepLinkURLs) + { +#if !UNITY_EDITOR + _setResolveDeepLinkURLs(resolveDeepLinkURLs.Length,resolveDeepLinkURLs); +#endif + } + + /// + /// For advertisers who use vanity OneLinks. + /// + /// Array of domains. + public void setOneLinkCustomDomain(params string[] oneLinkCustomDomains) + { +#if !UNITY_EDITOR + _setOneLinkCustomDomains(oneLinkCustomDomains.Length, oneLinkCustomDomains); +#endif + } + + /// + /// Set the user emails and encrypt them. + /// cryptMethod Encryption method: + /// EmailCryptType.EmailCryptTypeMD5 + /// EmailCryptType.EmailCryptTypeSHA1 + /// EmailCryptType.EmailCryptTypeSHA256 + /// EmailCryptType.EmailCryptTypeNone + /// + /// type Hash algoritm. + /// length of userEmails array. + /// userEmails The list of strings that hold mails.} + + public void setUserEmails(EmailCryptType cryptType, params string[] userEmails) + { +#if !UNITY_EDITOR + _setUserEmails(cryptType, userEmails.Length, userEmails); +#endif + } + + /// + /// Set the user phone number. + /// + /// User phoneNumber. + public void setPhoneNumber(string phoneNumber){ +#if !UNITY_EDITOR + _setPhoneNumber(phoneNumber); +#endif + } + + /// + /// [Deprecated] To send and validate in app purchases - please use V2 with AFSDKPurchaseDetailsIOS instead. + /// + /// The product identifier. + /// The product price. + /// The product currency. + /// The purchase transaction Id. + /// The additional param, which you want to receive it in the raw reports. + [System.Obsolete("This method is deprecated. Use validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) instead.")] + public void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, Dictionary additionalParameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + _validateAndSendInAppPurchase(productIdentifier, price, currency, transactionId, AFMiniJSON.Json.Serialize(additionalParameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// V2 - To send and validate in app purchases you can call this method from the processPurchase method. + /// + /// The AFSDKPurchaseDetailsIOS instance. + /// The additional params, which you want to receive it in the raw reports. + public void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + _validateAndSendInAppPurchaseV2(details.productId, details.transactionId, (int)details.purchaseType, AFMiniJSON.Json.Serialize(purchaseAdditionalDetails), gameObject ? gameObject.name : null); +#endif + } + + /// + /// To record location for geo-fencing. Does the same as code below. + /// + /// The location longitude. + /// The location latitude. + public void recordLocation(double longitude, double latitude) + { +#if !UNITY_EDITOR + _recordLocation(longitude, latitude); +#endif + } + + /// + /// Get AppsFlyer's unique device ID, which is created for every new install of an app. + /// + public string getAppsFlyerId() + { +#if !UNITY_EDITOR + return _getAppsFlyerId(); +#else + return ""; +#endif + } + + /// + /// Register uninstall - you should register for remote notification and provide AppsFlyer the push device token. + /// + /// deviceToken The `deviceToken` from `-application:didRegisterForRemoteNotificationsWithDeviceToken:`. + public void registerUninstall(byte[] deviceToken) + { +#if !UNITY_EDITOR + _registerUninstall(deviceToken); +#endif + } + + /// + /// Enable AppsFlyer to handle a push notification. + /// + /// pushPayload The `userInfo` from received remote notification. One of root keys should be @"af".. + public void handlePushNotification(Dictionary pushPayload) + { +#if !UNITY_EDITOR + _handlePushNotification(AFMiniJSON.Json.Serialize(pushPayload)); +#endif + } + + /// + /// Get SDK version. + /// + public string getSdkVersion() + { +#if !UNITY_EDITOR + return _getSDKVersion(); +#else + return ""; +#endif + } + + /// + /// This property accepts a string value representing the host name for all endpoints. + /// Can be used to Zero rate your application’s data usage.Contact your CSM for more information. + /// + /// Host Name. + /// Host prefix. + public void setHost(string hostPrefix, string host) + { +#if !UNITY_EDITOR + _setHost(host, hostPrefix); +#endif + } + + /// + /// This property is responsible for timeout between sessions in seconds. + /// Default value is 5 seconds. + /// + /// minimum time between 2 separate sessions in seconds. + public void setMinTimeBetweenSessions(int minTimeBetweenSessions) + { +#if !UNITY_EDITOR + _setMinTimeBetweenSessions(minTimeBetweenSessions); +#endif + } + + /// + /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. + /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. + /// This can be achieved with the stopSDK API. + /// + /// boolean isSDKStopped. + public void stopSDK(bool isSDKStopped) + { +#if !UNITY_EDITOR + _stopSDK(isSDKStopped); +#endif + } + + // + /// Was the stopSDK(boolean) API set to true. + /// + /// boolean isSDKStopped. + public bool isSDKStopped() + { +#if !UNITY_EDITOR + return _isSDKStopped(); +#else + return false; +#endif + } + + /// + /// In case you want to track deep linking manually call handleOpenUrl. + /// The continueUserActivity and onOpenURL are implemented in the AppsFlyerAppController.mm class, so + /// only use this method if the other methods do not cover your apps deeplinking needs. + /// + /// The URL to be passed to your AppDelegate. + /// The sourceApplication to be passed to your AppDelegate. + /// The annotation to be passed to your app delegate. + public void handleOpenUrl(string url, string sourceApplication, string annotation) + { +#if !UNITY_EDITOR + _handleOpenUrl(url, sourceApplication, annotation); +#endif + } + + /// + /// Used by advertisers to exclude all networks/integrated partners from getting data. + /// + public void setSharingFilterForAllPartners() + { +#if !UNITY_EDITOR + _setSharingFilterForAllPartners(); +#endif + } + + /// + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. + /// + /// partners to exclude from getting data + public void setSharingFilter(params string[] partners) + { +#if !UNITY_EDITOR + _setSharingFilter(partners.Length, partners); +#endif + } + + + /// + /// Lets you configure how which partners should the SDK exclude from data-sharing. + /// partners to exclude from getting data + public static void setSharingFilterForPartners(params string[] partners) + { +#if !UNITY_EDITOR + _setSharingFilterForPartners(partners.Length, partners); +#endif + } + + /// + /// To record an impression use the following API call. + /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. + /// + /// promoted App ID. + /// cross promotion campaign. + /// parameters Dictionary. + public void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters) + { +#if !UNITY_EDITOR + _recordCrossPromoteImpression(appID, campaign, AFMiniJSON.Json.Serialize(parameters)); +#endif + } + + /// + /// Use the following API to attribute the click and launch the app store's app page. + /// + /// promoted App ID + /// cross promotion campaign + /// additional user params + public void attributeAndOpenStore(string appID, string campaign, Dictionary parameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + _attributeAndOpenStore(appID, campaign, AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. + /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- + /// + /// parameters Dictionary. + public void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject) + { +#if !UNITY_EDITOR + _generateUserInviteLink(AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); +#endif + } + + /// + /// It is recommended to generate an in-app event after the invite is sent to record the invites from the senders' perspective. + /// This enables you to find the users that tend most to invite friends, and the media sources that get you these users. + /// + /// channel string. + /// parameters Dictionary.. + public void recordInvite(string channel, Dictionary parameters) + { +#if !UNITY_EDITOR + _recordInvite(channel, AFMiniJSON.Json.Serialize(parameters)); +#endif + } + + /// + /// Waits for request user authorization to access app-related data + /// + /// time to wait until session starts + public void waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval) + { +#if !UNITY_EDITOR + _waitForATTUserAuthorizationWithTimeoutInterval(timeoutInterval); +#endif + } + + /// + /// + /// bool should diable + public void disableSKAdNetwork(bool isDisabled) + { +#if !UNITY_EDITOR + _disableSKAdNetwork(isDisabled); +#endif + } + + /// + /// Use this method if you’re integrating your app with push providers + /// that don’t use the default push notification JSON schema the SDK expects. + /// See docs for more info. + /// + /// array of nested json path + public void addPushNotificationDeepLinkPath(params string[] paths) + { +#if !UNITY_EDITOR + _addPushNotificationDeepLinkPath(paths.Length, paths); +#endif + } + + /// + /// subscribe to unified deep link callbacks + /// + public void subscribeForDeepLink(string objectName){ +#if !UNITY_EDITOR + _subscribeForDeepLink(objectName); +#endif + } + + /// + /// Set the language of the device. + /// + public void setCurrentDeviceLanguage(string language){ +#if !UNITY_EDITOR + _setCurrentDeviceLanguage(language); +#endif + } + + /// + /// Allows sending custom data for partner integration purposes. + /// + public void setPartnerData(string partnerId, Dictionary partnerInfo){ +#if !UNITY_EDITOR + _setPartnerData(partnerId, AFMiniJSON.Json.Serialize(partnerInfo)); +#endif + } + + /// + /// Use to disable app vendor identifier (IDFV) collection, 'true' to disable. + /// + public void disableIDFVCollection(bool isDisabled){ +#if !UNITY_EDITOR + _disableIDFVCollection(isDisabled); +#endif + } + + delegate void unityCallBack(string message); + + [AOT.MonoPInvokeCallback(typeof(unityCallBack))] + public static void getCallback(string gameObjectName, string callbackName, string message) + { + GameObject go = GameObject.Find("AppsFlyerObject"); + var afscript = go.GetComponent("AppsFlyerObjectScript") as AppsFlyerObjectScript; + Type type = typeof(AppsFlyerObjectScript); + MethodInfo info = type.GetMethod(callbackName); + info.Invoke(afscript, new[] { message }); + + } + + + /* + * AppsFlyer ios method mapping + */ + + +#if UNITY_IOS + [DllImport("__Internal")] + private static extern void _startSDK(bool shouldCallback, string objectName); +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] + private static extern void _startSDK(bool shouldCallback, string objectName, Action getCallback); + +#endif + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _getConversionData(string objectName); + + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setCustomerUserID(string customerUserID); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setAdditionalData(string customData); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setAppsFlyerDevKey(string appsFlyerDevKey); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setAppleAppID(string appleAppID); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setCurrencyCode(string currencyCode); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setIsDebug(bool isDebug); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setShouldCollectDeviceName(bool shouldCollectDeviceName); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setAppInviteOneLinkID(string appInviteOneLinkID); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setDeepLinkTimeout(long deepLinkTimeout); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _anonymizeUser(bool shouldAnonymizeUser); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _enableTCFDataCollection(bool shouldCollectTcfData); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setConsentData(string isUserSubjectToGDPR, string hasConsentForDataUsage, string hasConsentForAdsPersonalization, string hasConsentForAdStorage); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _logAdRevenue(string monetizationNetwork, MediationNetwork mediationNetwork, string currencyIso4217Code, double eventRevenue, string additionalParameters); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setDisableCollectIAd(bool disableCollectIAd); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setUseReceiptValidationSandbox(bool useReceiptValidationSandbox); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setUseUninstallSandbox(bool useUninstallSandbox); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setResolveDeepLinkURLs(int length, params string[] resolveDeepLinkURLs); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setOneLinkCustomDomains(int length, params string[] oneLinkCustomDomains); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setPhoneNumber(string phoneNumber); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _afSendEvent(string eventName, string eventValues, bool shouldCallback, string objectName); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, string additionalParameters, string objectName); + + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _validateAndSendInAppPurchaseV2(string product, string transactionId, int purchaseType, string purchaseAdditionalDetails, string objectName); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _recordLocation(double longitude, double latitude); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern string _getAppsFlyerId(); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _registerUninstall(byte[] deviceToken); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _handlePushNotification(string pushPayload); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern string _getSDKVersion(); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setHost(string host, string hostPrefix); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setMinTimeBetweenSessions(int minTimeBetweenSessions); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _stopSDK(bool isStopSDK); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern bool _isSDKStopped(); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _handleOpenUrl(string url, string sourceApplication, string annotation); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setSharingFilterForAllPartners(); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setSharingFilter(int length, params string[] partners); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setSharingFilterForPartners(int length, params string[] partners); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _recordCrossPromoteImpression(string appID, string campaign, string parameters); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _attributeAndOpenStore(string appID, string campaign, string parameters, string gameObject); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _generateUserInviteLink(string parameters, string gameObject); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _recordInvite(string channel, string parameters); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _disableSKAdNetwork(bool isDisabled); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _addPushNotificationDeepLinkPath(int length, params string[] paths); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _subscribeForDeepLink(string objectName); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setCurrentDeviceLanguage(string language); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _setPartnerData(string partnerId, string partnerInfo); + +#if UNITY_IOS + [DllImport("__Internal")] +#elif UNITY_STANDALONE_OSX + [DllImport("AppsFlyerBundle")] +#endif + private static extern void _disableIDFVCollection(bool isDisabled); + + } + +#endif + + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyeriOS.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyeriOS.cs.meta new file mode 100644 index 0000000..36b719f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/AppsFlyeriOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b34371b3cc09641ebb007ffc4e9500f0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor.meta new file mode 100644 index 0000000..a768212 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9f84c02aa78da4ac9b444d98d97f7cc4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyer.Editor.asmdef b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyer.Editor.asmdef new file mode 100644 index 0000000..a63b527 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyer.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "AppsFlyer.Editor", + "references": [ + "AppsFlyer" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyer.Editor.asmdef.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyer.Editor.asmdef.meta new file mode 100644 index 0000000..f61dfd3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyer.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d008146f00dea44d38752b4289e5f65b +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml new file mode 100644 index 0000000..1d6bffe --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml.meta new file mode 100644 index 0000000..1e4d57e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerDependencies.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a03558dbbfeac45db9afe9e9c2df5a85 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerObjectEditor.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerObjectEditor.cs new file mode 100644 index 0000000..a576ad1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerObjectEditor.cs @@ -0,0 +1,104 @@ +using UnityEditor; +using UnityEngine; + + +[CustomEditor(typeof(AppsFlyerObjectScript))] +[CanEditMultipleObjects] +public class AppsFlyerObjectEditor : Editor +{ + + SerializedProperty devKey; + SerializedProperty appID; + SerializedProperty UWPAppID; + SerializedProperty macOSAppID; + SerializedProperty isDebug; + SerializedProperty getConversionData; + + + void OnEnable() + { + devKey = serializedObject.FindProperty("devKey"); + appID = serializedObject.FindProperty("appID"); + UWPAppID = serializedObject.FindProperty("UWPAppID"); + macOSAppID = serializedObject.FindProperty("macOSAppID"); + isDebug = serializedObject.FindProperty("isDebug"); + getConversionData = serializedObject.FindProperty("getConversionData"); + } + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + DrawLogo(); + + EditorGUILayout.Separator(); + EditorGUILayout.HelpBox("Set your devKey and appID to init the AppsFlyer SDK and start tracking. You must modify these fields and provide:\ndevKey - Your application devKey provided by AppsFlyer.\nappId - For iOS only. Your iTunes Application ID.\nUWP app id - For UWP only. Your application app id \nMac OS app id - For MacOS app only.", MessageType.Info); + + EditorGUILayout.PropertyField(devKey); + EditorGUILayout.PropertyField(appID); + EditorGUILayout.PropertyField(UWPAppID); + EditorGUILayout.PropertyField(macOSAppID); + EditorGUILayout.Separator(); + EditorGUILayout.HelpBox("Enable get conversion data to allow your app to recive deeplinking callbacks", MessageType.None); + EditorGUILayout.PropertyField(getConversionData); + EditorGUILayout.Separator(); + EditorGUILayout.HelpBox("Debugging should be restricted to development phase only.\n Do not distribute the app to app stores with debugging enabled", MessageType.Warning); + EditorGUILayout.PropertyField(isDebug); + EditorGUILayout.Separator(); + + EditorGUILayout.HelpBox("For more information on setting up AppsFlyer check out our relevant docs.", MessageType.None); + + + if (GUILayout.Button("AppsFlyer Unity Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/213766183-Unity-SDK-integration-for-developers"); + } + + if (GUILayout.Button("AppsFlyer Android Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/207032126-Android-SDK-integration-for-developers"); + } + + if (GUILayout.Button("AppsFlyer iOS Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS"); + } + + if (GUILayout.Button("AppsFlyer Deeplinking Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-deep-linking-guide#Setups"); + } + + if (GUILayout.Button("AppsFlyer Windows Docs", new GUILayoutOption[] { GUILayout.Width(200) })) + { + Application.OpenURL("https://support.appsflyer.com/hc/en-us/articles/207032026-Windows-and-Xbox-SDK-integration-for-developers"); + } + + + serializedObject.ApplyModifiedProperties(); + } + + private void DrawLogo() + { + var guids = AssetDatabase.FindAssets("appsflyer_logo"); + if (guids.Length == 0) return; + + Texture logo = (Texture)AssetDatabase.LoadAssetAtPath( + AssetDatabase.GUIDToAssetPath(guids[0]), + typeof(Texture)); + + if (logo == null) return; + + float maxWidth = Mathf.Min(200, EditorGUIUtility.currentViewWidth - 40); + float aspect = (float)logo.height / logo.width; + float height = maxWidth * aspect; + + Rect rect = GUILayoutUtility.GetRect(maxWidth, height, GUILayout.ExpandWidth(false)); + rect.x = (EditorGUIUtility.currentViewWidth - maxWidth) * 0.5f; + rect.width = maxWidth; + GUI.DrawTexture(rect, logo, ScaleMode.ScaleToFit); + } + +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerObjectEditor.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerObjectEditor.cs.meta new file mode 100644 index 0000000..53d8abb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/AppsFlyerObjectEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d248a134cf494486fb1d6a2e95a05d87 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/appsflyer_logo.png b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/appsflyer_logo.png new file mode 100644 index 0000000..4cc3095 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/appsflyer_logo.png differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/appsflyer_logo.png.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/appsflyer_logo.png.meta new file mode 100644 index 0000000..90005e8 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Editor/appsflyer_logo.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: bc7fa5a6b64b944a4b2900fd877acb8b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerAndroidBridge.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerAndroidBridge.cs new file mode 100644 index 0000000..3a83bc3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerAndroidBridge.cs @@ -0,0 +1,31 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerAndroidBridge : IAppsFlyerNativeBridge + { + void updateServerUninstallToken(string token); + void setImeiData(string imei); + void setAndroidIdData(string androidId); + void waitForCustomerUserId(bool wait); + void setCustomerIdAndStartSDK(string id); + string getOutOfStore(); + void setOutOfStore(string sourceName); + void setCollectAndroidID(bool isCollect); + void setCollectIMEI(bool isCollect); + void setIsUpdate(bool isUpdate); + void setPreinstallAttribution(string mediaSource, string campaign, string siteId); + bool isPreInstalledApp(); + string getAttributionId(); + void handlePushNotifications(); + void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary additionalParameters, MonoBehaviour gameObject); + void validateAndSendInAppPurchase(AFPurchaseDetailsAndroid details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject); + void setCollectOaid(bool isCollect); + void setDisableAdvertisingIdentifiers(bool disable); + void setDisableNetworkData(bool disable); + + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerAndroidBridge.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerAndroidBridge.cs.meta new file mode 100644 index 0000000..8157bc6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerAndroidBridge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdf9d1bc41a8244b3bc2d249fb6cd7aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerConversionData.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerConversionData.cs new file mode 100644 index 0000000..454eaa6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerConversionData.cs @@ -0,0 +1,31 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerConversionData + { + /// + /// `conversionData` contains information about install. Organic/non-organic, etc. + /// https://support.appsflyer.com/hc/en-us/articles/360000726098-Conversion-Data-Scenarios#Introduction + /// + /// JSON string of the returned conversion data. + void onConversionDataSuccess(string conversionData); + + /// + /// Any errors that occurred during the conversion request. + /// + /// A string describing the error. + void onConversionDataFail(string error); + + /// + /// `attributionData` contains information about OneLink, deeplink. + /// https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-Deep-Linking-Guide#Intro + /// + /// JSON string of the returned deeplink data. + void onAppOpenAttribution(string attributionData); + + /// + /// Any errors that occurred during the attribution request. + /// + /// A string describing the error. + void onAppOpenAttributionFailure(string error); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerConversionData.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerConversionData.cs.meta new file mode 100644 index 0000000..3133eaa --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerConversionData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2f1d4dadb7cb44628f25f1ffd8fc104 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerIOSBridge.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerIOSBridge.cs new file mode 100644 index 0000000..4de6fd4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerIOSBridge.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerIOSBridge : IAppsFlyerNativeBridge + { + void setDisableCollectAppleAdSupport(bool disable); + void setShouldCollectDeviceName(bool shouldCollectDeviceName); + void setDisableCollectIAd(bool disableCollectIAd); + void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox); + void setUseUninstallSandbox(bool useUninstallSandbox); + void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string transactionId, Dictionary additionalParameters, MonoBehaviour gameObject); + void validateAndSendInAppPurchase(AFSDKPurchaseDetailsIOS details, Dictionary purchaseAdditionalDetails, MonoBehaviour gameObject); + void registerUninstall(byte[] deviceToken); + void handleOpenUrl(string url, string sourceApplication, string annotation); + void waitForATTUserAuthorizationWithTimeoutInterval(int timeoutInterval); + void setCurrentDeviceLanguage(string language); + void disableSKAdNetwork(bool isDisabled); + void disableIDFVCollection(bool isDisabled); + + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerIOSBridge.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerIOSBridge.cs.meta new file mode 100644 index 0000000..8e200ea --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerIOSBridge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6847fb337898040288c165e3667101a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerNativeBridge.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerNativeBridge.cs new file mode 100644 index 0000000..23a107c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerNativeBridge.cs @@ -0,0 +1,76 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace AppsFlyerSDK +{ + + public interface IAppsFlyerNativeBridge + { + bool isInit { get; set; } + + void startSDK(bool onRequestResponse, string CallBackObjectName); + + void sendEvent(string eventName, Dictionary eventValues, bool onInAppResponse, string CallBackObjectName); + + void stopSDK(bool isSDKStopped); + + bool isSDKStopped(); + + string getSdkVersion(); + + void setCustomerUserId(string id); + + void setAppInviteOneLinkID(string oneLinkId); + + void setAdditionalData(Dictionary customData); + + void setDeepLinkTimeout(long deepLinkTimeout); + + void setResolveDeepLinkURLs(params string[] urls); + + void setOneLinkCustomDomain(params string[] domains); + + void setCurrencyCode(string currencyCode); + + void recordLocation(double latitude, double longitude); + + void anonymizeUser(bool shouldAnonymizeUser); + + string getAppsFlyerId(); + + void enableTCFDataCollection(bool shouldCollectTcfData); + + void setConsentData(AppsFlyerConsent appsFlyerConsent); + + void logAdRevenue(AFAdRevenueData adRevenueData, Dictionary additionalParameters); + + void setMinTimeBetweenSessions(int seconds); + + void setHost(string hostPrefixName, string hostName); + + void setPhoneNumber(string phoneNumber); + + void setSharingFilterForAllPartners(); + + void setSharingFilter(params string[] partners); + + void getConversionData(string objectName); + + void attributeAndOpenStore(string appID, string campaign, Dictionary userParams, MonoBehaviour gameObject); + + void recordCrossPromoteImpression(string appID, string campaign, Dictionary parameters); + + void generateUserInviteLink(Dictionary parameters, MonoBehaviour gameObject); + + void addPushNotificationDeepLinkPath(params string[] paths); + + void setUserEmails(EmailCryptType cryptType, params string[] userEmails); + + void subscribeForDeepLink(string objectName); + + void setIsDebug(bool shouldEnable); + + void setPartnerData(string partnerId, Dictionary partnerInfo); + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerNativeBridge.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerNativeBridge.cs.meta new file mode 100644 index 0000000..dd43257 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerNativeBridge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 409b8302434664a3785ce55d075e7f58 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerPurchaseValidation.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerPurchaseValidation.cs new file mode 100644 index 0000000..73591a3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerPurchaseValidation.cs @@ -0,0 +1,8 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerPurchaseValidation + { + void didReceivePurchaseRevenueValidationInfo(string validationInfo); + void didReceivePurchaseRevenueError(string error); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerPurchaseValidation.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerPurchaseValidation.cs.meta new file mode 100644 index 0000000..3e453b7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerPurchaseValidation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7c60f499ae0d048b1be8ffd6878a184c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerUserInvite.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerUserInvite.cs new file mode 100644 index 0000000..aac109e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerUserInvite.cs @@ -0,0 +1,26 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerUserInvite + { + /// + /// The success callback for generating OneLink URLs. + /// + /// A string of the newly created url. + void onInviteLinkGenerated(string link); + + /// + /// The error callback for generating OneLink URLs + /// + /// A string describing the error. + void onInviteLinkGeneratedFailure(string error); + + /// + /// (ios only) iOS allows you to utilize the StoreKit component to open + /// the App Store while remaining in the context of your app. + /// More details at https://support.appsflyer.com/hc/en-us/articles/115004481946-Cross-Promotion-Tracking#tracking-cross-promotion-impressions + /// + /// openStore callback Contains promoted `clickURL` + void onOpenStoreLinkGenerated(string link); + + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerUserInvite.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerUserInvite.cs.meta new file mode 100644 index 0000000..8530528 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerUserInvite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a4cdfa023cb8497b94bb39720052fef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateAndLog.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateAndLog.cs new file mode 100644 index 0000000..a5c02cf --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateAndLog.cs @@ -0,0 +1,19 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerValidateAndLog + { + /// + /// The success callback for validateAndSendInAppPurchase API. + /// For Android : the callback will return JSON string. + /// For iOS : the callback will return a JSON string from apples verifyReceipt API. + /// + /// + void onValidateAndLogComplete(string result); + + /// + /// The error callback for validateAndSendInAppPurchase API. + /// + /// A string describing the error. + void onValidateAndLogFailure(string error); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateAndLog.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateAndLog.cs.meta new file mode 100644 index 0000000..459cc85 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateAndLog.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a5adb7eab3284dd39a76ec56c06457c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateReceipt.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateReceipt.cs new file mode 100644 index 0000000..90490e2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateReceipt.cs @@ -0,0 +1,19 @@ +namespace AppsFlyerSDK +{ + public interface IAppsFlyerValidateReceipt + { + /// + /// The success callback for validateAndSendInAppPurchase API. + /// For Android : the callback will return "Validate success". + /// For iOS : the callback will return a JSON string from apples verifyReceipt API. + /// + /// + void didFinishValidateReceipt(string result); + + /// + /// The error callback for validateAndSendInAppPurchase API. + /// + /// A string describing the error. + void didFinishValidateReceiptWithError(string error); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateReceipt.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateReceipt.cs.meta new file mode 100644 index 0000000..38efa67 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/IAppsFlyerValidateReceipt.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6385b1d184efa400a98515735e1f17bc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac.meta new file mode 100644 index 0000000..fd182bd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96a328019e42349aabc478b546b8605e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle.meta new file mode 100644 index 0000000..a7aa6da --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 682114f7790724ab3b9410e89bbc076c +folderAsset: yes +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 + - first: + Standalone: OSXUniversal + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/Info.plist b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/Info.plist new file mode 100644 index 0000000..3303ccd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/Info.plist @@ -0,0 +1,48 @@ + + + + + BuildMachineOSBuild + 20G417 + CFBundleDevelopmentRegion + en + CFBundleExecutable + AppsFlyerBundle + CFBundleIdentifier + com.appsflyer.support.two.AppsFlyerBundle + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + AppsFlyerBundle + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 13A1030d + DTPlatformName + macosx + DTPlatformVersion + 12.0 + DTSDKBuild + 21A344 + DTSDKName + macosx12.0 + DTXcode + 1310 + DTXcodeBuild + 13A1030d + LSMinimumSystemVersion + 11.6 + NSHumanReadableCopyright + + + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/MacOS/AppsFlyerBundle b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/MacOS/AppsFlyerBundle new file mode 100644 index 0000000..3376a47 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/MacOS/AppsFlyerBundle differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/_CodeSignature/CodeResources b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..d5d0fd7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Mac/AppsFlyerBundle.bundle/Contents/_CodeSignature/CodeResources @@ -0,0 +1,115 @@ + + + + + files + + files2 + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins.meta new file mode 100644 index 0000000..5394930 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 66297743248ab4e47abdc371a59f1111 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS.meta new file mode 100644 index 0000000..286d70c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8325c12a80ff4323b82e2833a8fc287 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityStoreKit2Bridge.swift b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityStoreKit2Bridge.swift new file mode 100644 index 0000000..e44f781 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityStoreKit2Bridge.swift @@ -0,0 +1,79 @@ +import Foundation +import StoreKit + +#if canImport(PurchaseConnector) +import PurchaseConnector + +@available(iOS 15.0, *) +@objc +public class AFUnityStoreKit2Bridge: NSObject { + @objc + public static func fetchAFSDKTransactionSK2(withTransactionId transactionId: String, completion: @escaping (AFSDKTransactionSK2?) -> Void) { + guard let transactionIdUInt64 = UInt64(transactionId) else { + print("Invalid transaction ID format.") + completion(nil) + return + } + Task { + for await result in StoreKit.Transaction.all { + if case .verified(let transaction) = result, transaction.id == transactionIdUInt64 { + let afTransaction = AFSDKTransactionSK2(transaction: transaction) + DispatchQueue.main.async { + completion(afTransaction) + } + return + } + } + DispatchQueue.main.async { + completion(nil) + } + } + } + + @objc + public static func extractSK2ProductInfo(_ products: [AFSDKProductSK2]) -> NSArray { + var result: [[String: Any]] = [] + + for product in products { + if let swiftProduct = Mirror(reflecting: product).children.first(where: { $0.label == "product" })?.value { + let productId = (swiftProduct as? NSObject)?.value(forKey: "id") as? String ?? "" + let title = (swiftProduct as? NSObject)?.value(forKey: "displayName") as? String ?? "" + let desc = (swiftProduct as? NSObject)?.value(forKey: "description") as? String ?? "" + let price = (swiftProduct as? NSObject)?.value(forKey: "price") as? NSDecimalNumber ?? 0 + + result.append([ + "productIdentifier": productId, + "localizedTitle": title, + "localizedDescription": desc, + "price": price + ]) + } + } + + return result as NSArray + } + + @objc + public static func extractSK2TransactionInfo(_ transactions: [AFSDKTransactionSK2]) -> NSArray { + var result: [[String: Any]] = [] + + for txn in transactions { + guard let mirrorChild = Mirror(reflecting: txn).children.first(where: { $0.label == "transaction" }), + let swiftTxn = mirrorChild.value as? StoreKit.Transaction else { + continue + } + + let transactionId = "\(swiftTxn.id)" + let date = NSNumber(value: swiftTxn.purchaseDate.timeIntervalSince1970) + + result.append([ + "transactionIdentifier": transactionId, + "transactionState": "verified", // or skip this line + "transactionDate": date + ]) + } + + return result as NSArray + } +} +#endif diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta new file mode 100644 index 0000000..f269096 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityStoreKit2Bridge.swift.meta @@ -0,0 +1,42 @@ +fileFormatVersion: 2 +guid: 5652805602a6b4273a6e527b00aea272 +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: 0 + settings: + DefaultValueInitialized: true + - first: + VisionOS: VisionOS + second: + enabled: 1 + settings: {} + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.h b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.h new file mode 100644 index 0000000..d3fec43 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.h @@ -0,0 +1,24 @@ +// +// AFUnityUtils.h +// +// Created by Andrii H. and Dmitry O. on 16 Oct 2023 +// + +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif + +static NSString* stringFromChar(const char *str); +static NSDictionary* dictionaryFromJson(const char *jsonString); +static const char* stringFromdictionary(NSDictionary* dictionary); +static NSArray *NSArrayFromCArray(int length, const char **arr); +static char* getCString(const char* string); +static AppsFlyerLinkGenerator* generatorFromDictionary(NSDictionary* dictionary, AppsFlyerLinkGenerator* generator); +static EmailCryptType emailCryptTypeFromInt(int emailCryptTypeInt); +static AppsFlyerAdRevenueMediationNetworkType mediationNetworkTypeFromInt(int mediationNetwork); +static NSNumber *intFromNullableBool(const char *cStr); +static NSString* stringFromDeepLinkResultStatus(AFSDKDeepLinkResultStatus deepLinkResult); +static NSString* stringFromDeepLinkResultError(AppsFlyerDeepLinkResult *result); + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.h.meta new file mode 100644 index 0000000..f6811a6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 4b0609ff467554f2088aee1c52bf54a2 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.mm b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.mm new file mode 100644 index 0000000..e2c0cf3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.mm @@ -0,0 +1,219 @@ +// +// AFUnityUtils.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import "AFUnityUtils.h" + +static NSString* stringFromChar(const char *str) { + return str ? [NSString stringWithUTF8String:str] : nil; +} + +static NSDictionary* dictionaryFromJson(const char *jsonString) { + if(jsonString){ + NSData *jsonData = [[NSData alloc] initWithBytes:jsonString length:strlen(jsonString)]; + NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:nil]; + return dictionary; + } + + return nil; +} + +static const char* stringFromdictionary(NSDictionary* dictionary) { + if(dictionary){ + NSError * err; + NSData * jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&err]; + NSString * myString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + return [myString UTF8String]; + } + + return nil; +} + +static NSDictionary* dictionaryFromNSError(NSError* error) { + if(error){ + NSMutableDictionary *errorDictionary = [NSMutableDictionary dictionary]; + errorDictionary[@"code"] = @(error.code); + errorDictionary[@"localizedDescription"] = error.localizedDescription ?: @""; + + // Include userInfo fields for enhanced error reporting (iOS SDK 6.17.8+) + if (error.userInfo[@"error_code"]) { + errorDictionary[@"error_code"] = error.userInfo[@"error_code"]; + } + if (error.userInfo[@"error_message"]) { + errorDictionary[@"error_message"] = error.userInfo[@"error_message"]; + } + if (error.userInfo[@"invalid_fields"]) { + errorDictionary[@"invalid_fields"] = error.userInfo[@"invalid_fields"]; + } + + return errorDictionary; + } + + return nil; +} + + +static NSArray *NSArrayFromCArray(int length, const char **arr) { + NSMutableArray *res = [[NSMutableArray alloc] init]; + for(int i = 0; i < length; i++) { + if (arr[i]) { + [res addObject:[NSString stringWithUTF8String:arr[i]]]; + } + } + + return res; +} + +static char* getCString(const char* string){ + if (string == NULL){ + return NULL; + } + + char* res = (char*)malloc(strlen(string) + 1); + strcpy(res, string); + + return res; +} + +static AppsFlyerLinkGenerator* generatorFromDictionary(NSDictionary* dictionary, AppsFlyerLinkGenerator* generator) { + + NSArray* generatorKeys = @[@"channel", @"customerID", @"campaign", @"referrerName", @"referrerImageUrl", @"deeplinkPath", @"baseDeeplink", @"brandDomain"]; + + NSMutableDictionary* mutableDictionary = [dictionary mutableCopy]; + + [generator setChannel:[dictionary objectForKey: @"channel"]]; + [generator setReferrerCustomerId:[dictionary objectForKey: @"customerID"]]; + [generator setCampaign:[dictionary objectForKey: @"campaign"]]; + [generator setReferrerName:[dictionary objectForKey: @"referrerName"]]; + [generator setReferrerImageURL:[dictionary objectForKey: @"referrerImageUrl"]]; + [generator setDeeplinkPath:[dictionary objectForKey: @"deeplinkPath"]]; + [generator setBaseDeeplink:[dictionary objectForKey: @"baseDeeplink"]]; + [generator setBrandDomain:[dictionary objectForKey: @"brandDomain"]]; + + + [mutableDictionary removeObjectsForKeys:generatorKeys]; + + [generator addParameters:mutableDictionary]; + + return generator; +} + +static EmailCryptType emailCryptTypeFromInt(int emailCryptTypeInt){ + + EmailCryptType emailCryptType; + switch (emailCryptTypeInt){ + case 1: + emailCryptType = EmailCryptTypeSHA256; + break; + default: + emailCryptType = EmailCryptTypeNone; + break; + } + + return emailCryptType; +} + +static NSNumber *intFromNullableBool(const char *cStr) { + if (!cStr) return nil; + NSString *str = [NSString stringWithUTF8String:cStr]; + + if ([str caseInsensitiveCompare:@"true"] == NSOrderedSame) { + return @YES; + } else if ([str caseInsensitiveCompare:@"false"] == NSOrderedSame) { + return @NO; + } + return nil; +} + +static AppsFlyerAdRevenueMediationNetworkType mediationNetworkTypeFromInt(int mediationNetworkInt){ + + AppsFlyerAdRevenueMediationNetworkType mediationNetworkType; + switch (mediationNetworkInt){ + case 1: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeGoogleAdMob; + break; + case 2: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeIronSource; + break; + case 3: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeApplovinMax; + break; + case 4: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeFyber; + break; + case 5: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeAppodeal; + break; + case 6: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeAdmost; + break; + case 7: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeTopon; + break; + case 8: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeTradplus; + break; + case 9: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeYandex; + break; + case 10: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeChartBoost; + break; + case 11: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeUnity; + break; + case 12: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeToponPte; + break; + case 13: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeCustom; + break; + case 14: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeDirectMonetization; + break; + default: + mediationNetworkType = AppsFlyerAdRevenueMediationNetworkTypeCustom; + break; + } + + return mediationNetworkType; +} + +static NSString* stringFromDeepLinkResultStatus(AFSDKDeepLinkResultStatus deepLinkResult){ + NSString* result; + switch (deepLinkResult){ + case AFSDKDeepLinkResultStatusFound: + result = @"FOUND"; + break; + case AFSDKDeepLinkResultStatusFailure: + result = @"ERROR"; + break; + case AFSDKDeepLinkResultStatusNotFound: + result = @"NOT_FOUND"; + break; + default: + result = @"ERROR"; + break; + } + + return result; +} + +static NSString* stringFromDeepLinkResultError(AppsFlyerDeepLinkResult *result){ + NSString* res; + + if (result && result.error){ + if ([[result.error userInfo][NSUnderlyingErrorKey] code] == -1001) { + res = @"TIMEOUT"; + } else if ([[result.error userInfo][NSUnderlyingErrorKey] code] == -1009) { + res = @"NETWORK"; + } + } + + res = @"UNKNOWN"; + + return res; +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.mm.meta new file mode 100644 index 0000000..b411375 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AFUnityUtils.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 18a03931864e84d86bedcc99c440e060 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyer+AppController.m b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyer+AppController.m new file mode 100644 index 0000000..f877576 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyer+AppController.m @@ -0,0 +1,164 @@ +// +// AppsFlyer+AppController.m +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import +#import "UnityAppController.h" +#import "AppsFlyeriOSWrapper.h" +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif + + +@implementation UnityAppController (AppsFlyerSwizzledAppController) + +static BOOL didEnteredBackGround __unused; +static IMP __original_applicationDidBecomeActive_Imp __unused; +static IMP __original_applicationDidEnterBackground_Imp __unused; +static IMP __original_didReceiveRemoteNotification_Imp __unused; +static IMP __original_continueUserActivity_Imp __unused; +static IMP __original_openUrl_Imp __unused; + + ++ (void)load { + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + +#if !AFSDK_SHOULD_SWIZZLE + + id swizzleFlag = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppsFlyerShouldSwizzle"]; + BOOL shouldSwizzle = swizzleFlag ? [swizzleFlag boolValue] : NO; + + if(shouldSwizzle){ + + Method method1 = class_getInstanceMethod([self class], @selector(applicationDidBecomeActive:)); + __original_applicationDidBecomeActive_Imp = method_setImplementation(method1, (IMP)__swizzled_applicationDidBecomeActive); + + Method method2 = class_getInstanceMethod([self class], @selector(applicationDidEnterBackground:)); + __original_applicationDidEnterBackground_Imp = method_setImplementation(method2, (IMP)__swizzled_applicationDidEnterBackground); + + + Method method3 = class_getInstanceMethod([self class], @selector(didReceiveRemoteNotification:)); + __original_didReceiveRemoteNotification_Imp = method_setImplementation(method3, (IMP)__swizzled_didReceiveRemoteNotification); + + + Method method4 = class_getInstanceMethod([self class], @selector(application:openURL:options:)); + __original_openUrl_Imp = method_setImplementation(method4, (IMP)__swizzled_openURL); + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + + [self swizzleContinueUserActivity:[self class]]; + } +#elif AFSDK_SHOULD_SWIZZLE + Method method1 = class_getInstanceMethod([self class], @selector(applicationDidBecomeActive:)); + __original_applicationDidBecomeActive_Imp = method_setImplementation(method1, (IMP)__swizzled_applicationDidBecomeActive); + + Method method2 = class_getInstanceMethod([self class], @selector(applicationDidEnterBackground:)); + __original_applicationDidEnterBackground_Imp = method_setImplementation(method2, (IMP)__swizzled_applicationDidEnterBackground); + + + Method method3 = class_getInstanceMethod([self class], @selector(didReceiveRemoteNotification:)); + __original_didReceiveRemoteNotification_Imp = method_setImplementation(method3, (IMP)__swizzled_didReceiveRemoteNotification); + + + Method method4 = class_getInstanceMethod([self class], @selector(application:openURL:options:)); + __original_openUrl_Imp = method_setImplementation(method4, (IMP)__swizzled_openURL); + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + + [self swizzleContinueUserActivity:[self class]]; + +#endif + + + }); +} + ++(void)swizzleContinueUserActivity:(Class)class { + + SEL originalSelector = @selector(application:continueUserActivity:restorationHandler:); + + Method defaultMethod = class_getInstanceMethod(class, originalSelector); + Method swizzledMethod = class_getInstanceMethod(class, @selector(__swizzled_continueUserActivity)); + + BOOL isMethodExists = !class_addMethod(class, originalSelector, method_getImplementation(swizzledMethod), method_getTypeEncoding(swizzledMethod)); + + if (isMethodExists) { + __original_continueUserActivity_Imp = method_setImplementation(defaultMethod, (IMP)__swizzled_continueUserActivity); + } else { + class_replaceMethod(class, originalSelector, (IMP)__swizzled_continueUserActivity, method_getTypeEncoding(swizzledMethod)); + } +} + +BOOL __swizzled_continueUserActivity(id self, SEL _cmd, UIApplication* application, NSUserActivity* userActivity, void (^restorationHandler)(NSArray*)) { + NSLog(@"swizzled continueUserActivity"); + [[AppsFlyerAttribution shared] continueUserActivity:userActivity restorationHandler:restorationHandler]; + + if(__original_continueUserActivity_Imp){ + return ((BOOL(*)(id, SEL, UIApplication*, NSUserActivity*, void (^)(NSArray*)))__original_continueUserActivity_Imp)(self, _cmd, application, userActivity, NULL); + } + + return YES; +} + + + +void __swizzled_applicationDidBecomeActive(id self, SEL _cmd, UIApplication* launchOptions) { + NSLog(@"swizzled applicationDidBecomeActive"); + [[AppsFlyerLib shared] setDelegate:_AppsFlyerdelegate]; + + if(didEnteredBackGround && AppsFlyeriOSWarpper.didCallStart == YES){ + [[AppsFlyerLib shared] start]; + } + + if(__original_applicationDidBecomeActive_Imp){ + ((void(*)(id,SEL, UIApplication*))__original_applicationDidBecomeActive_Imp)(self, _cmd, launchOptions); + } +} + + +void __swizzled_applicationDidEnterBackground(id self, SEL _cmd, UIApplication* application) { + NSLog(@"swizzled applicationDidEnterBackground"); + didEnteredBackGround = YES; + if(__original_applicationDidEnterBackground_Imp){ + ((void(*)(id,SEL, UIApplication*))__original_applicationDidEnterBackground_Imp)(self, _cmd, application); + } +} + + +BOOL __swizzled_didReceiveRemoteNotification(id self, SEL _cmd, UIApplication* application, NSDictionary* userInfo,void (^UIBackgroundFetchResult)(void) ) { + NSLog(@"swizzled didReceiveRemoteNotification"); + + [[AppsFlyerLib shared] handlePushNotification:userInfo]; + + if(__original_didReceiveRemoteNotification_Imp){ + return ((BOOL(*)(id, SEL, UIApplication*, NSDictionary*, int(UIBackgroundFetchResult)))__original_didReceiveRemoteNotification_Imp)(self, _cmd, application, userInfo, nil); + } + return YES; +} + + + +BOOL __swizzled_openURL(id self, SEL _cmd, UIApplication* application, NSURL* url, NSDictionary * options) { + NSLog(@"swizzled openURL"); + [[AppsFlyerAttribution shared] handleOpenUrl:url options:options]; + if(__original_openUrl_Imp){ + return ((BOOL(*)(id, SEL, UIApplication*, NSURL*, NSDictionary*))__original_openUrl_Imp)(self, _cmd, application, url, options); + } + return NO; +} + + +@end + + + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyer+AppController.m.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyer+AppController.m.meta new file mode 100644 index 0000000..24856fa --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyer+AppController.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 6ae9e1f7daef2427588fab2fbf8d35d5 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAppController.mm b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAppController.mm new file mode 100644 index 0000000..3e492c0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAppController.mm @@ -0,0 +1,131 @@ +// +// AppsFlyerAppController.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 30/07/2019. +// + +#import +#import "UnityAppController.h" +#import "AppDelegateListener.h" +#import "AppsFlyeriOSWrapper.h" +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif +#import + +/** + Note if you would like to use method swizzeling see AppsFlyer+AppController.m + If you are using swizzeling then comment out the method that is being swizzeled in AppsFlyerAppController.mm + Only use swizzeling if there are conflicts with other plugins that needs to be resolved. +*/ + + +@interface AppsFlyerAppController : UnityAppController +{ + BOOL didEnteredBackGround; +} +@end + +@implementation AppsFlyerAppController + +- (instancetype)init +{ + self = [super init]; + if (self) { + + id swizzleFlag = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"AppsFlyerShouldSwizzle"]; + BOOL shouldSwizzle = swizzleFlag ? [swizzleFlag boolValue] : NO; + + if(!shouldSwizzle){ + UnityRegisterAppDelegateListener(self); + } + } + return self; +} + +- (void)didFinishLaunching:(NSNotification*)notification { + NSLog(@"got didFinishLaunching = %@",notification.userInfo); + + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + [[AppsFlyerLib shared] setDelegate:_AppsFlyerdelegate]; + + if (notification.userInfo[@"url"]) { + [self onOpenURL:notification]; + } +} + +-(void)didBecomeActive:(NSNotification*)notification { + NSLog(@"got didBecomeActive(out) = %@", notification.userInfo); + if (didEnteredBackGround == YES && AppsFlyeriOSWarpper.didCallStart == YES) { + [[AppsFlyerLib shared] start]; + didEnteredBackGround = NO; + } +} + +- (void)didEnterBackground:(NSNotification*)notification { + NSLog(@"got didEnterBackground = %@", notification.userInfo); + didEnteredBackGround = YES; +} + +- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler { + [[AppsFlyerAttribution shared] continueUserActivity:userActivity restorationHandler:restorationHandler]; + return YES; +} + + +- (void)onOpenURL:(NSNotification*)notification { + NSLog(@"got onOpenURL = %@", notification.userInfo); + NSURL *url = notification.userInfo[@"url"]; + NSString *sourceApplication = notification.userInfo[@"sourceApplication"]; + + if (sourceApplication == nil) { + sourceApplication = @""; + } + + if (url != nil) { + [[AppsFlyerAttribution shared] handleOpenUrl:url sourceApplication:sourceApplication annotation:nil]; + } + +} + +- (void)didReceiveRemoteNotification:(NSNotification*)notification { + NSLog(@"got didReceiveRemoteNotification = %@", notification.userInfo); + [[AppsFlyerLib shared] handlePushNotification:notification.userInfo]; +} + +@end + +#if !(AFSDK_SHOULD_SWIZZLE) + +IMPL_APP_CONTROLLER_SUBCLASS(AppsFlyerAppController) + +#endif +/** +Note if you would not like to use IMPL_APP_CONTROLLER_SUBCLASS you can replace it with the code below. + + +(void)load + { + [AppsFlyerAppController plugin]; + } + + // Singleton accessor. + + (AppsFlyerAppController *)plugin + { + static AppsFlyerAppController *sharedInstance = nil; + static dispatch_once_t onceToken; + + dispatch_once(&onceToken, ^{ + + sharedInstance = [[AppsFlyerAppController alloc] init]; + }); + + return sharedInstance; + } + + **/ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAppController.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAppController.mm.meta new file mode 100644 index 0000000..2e8e52c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAppController.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 2d1497a1493b24fecaa58bd3a7b707f9 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.h b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.h new file mode 100644 index 0000000..c79fec4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.h @@ -0,0 +1,34 @@ +// +// AppsFlyerAttribution.h +// UnityFramework +// +// Created by Margot Guetta on 11/04/2021. +// + +#ifndef AppsFlyerAttribution_h +#define AppsFlyerAttribution_h +#endif /* AppsFlyerAttribution_h */ +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif + + +@interface AppsFlyerAttribution : NSObject +@property NSUserActivity*_Nullable userActivity; +@property (nonatomic, copy) void (^ _Nullable restorationHandler)(NSArray *_Nullable ); +@property NSURL * _Nullable url; +@property NSDictionary * _Nullable options; +@property NSString* _Nullable sourceApplication; +@property id _Nullable annotation; +@property BOOL isBridgeReady; + ++ (AppsFlyerAttribution *_Nullable)shared; +- (void) continueUserActivity: (NSUserActivity*_Nullable) userActivity restorationHandler: (void (^_Nullable)(NSArray * _Nullable))restorationHandler; +- (void) handleOpenUrl:(NSURL*_Nullable)url options:(NSDictionary*_Nullable) options; +- (void) handleOpenUrl: (NSURL *_Nonnull)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation; + +@end + +static NSString * _Nullable const AF_BRIDGE_SET = @"bridge is set"; diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.h.meta new file mode 100644 index 0000000..5b77c9b --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 8544dc3b3c7bb40d397b2de568df1058 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.m b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.m new file mode 100644 index 0000000..c4e7278 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.m @@ -0,0 +1,86 @@ +// +// NSObject+AppsFlyerAttribution.m +// UnityFramework +// +// Created by Margot Guetta on 11/04/2021. +// + +#import +#import "AppsFlyerAttribution.h" + +@implementation AppsFlyerAttribution + ++ (id)shared { + static AppsFlyerAttribution *shared = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + shared = [[self alloc] init]; + }); + return shared; +} + +- (id)init { + if (self = [super init]) { + self.options = nil; + self.restorationHandler = nil; + self.url = nil; + self.userActivity = nil; + self.annotation = nil; + self.sourceApplication = nil; + self.isBridgeReady = NO; + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(receiveBridgeReadyNotification:) + name:AF_BRIDGE_SET + object:nil]; + } + return self; +} + +- (void) continueUserActivity: (NSUserActivity*_Nullable) userActivity restorationHandler: (void (^_Nullable)(NSArray * _Nullable))restorationHandler{ + if(self.isBridgeReady == YES){ + [[AppsFlyerLib shared] continueUserActivity:userActivity restorationHandler:restorationHandler]; + }else{ + [AppsFlyerAttribution shared].userActivity = userActivity; + [AppsFlyerAttribution shared].restorationHandler = restorationHandler; + } +} + +- (void) handleOpenUrl:(NSURL *)url options:(NSDictionary *)options{ + if(self.isBridgeReady == YES){ + [[AppsFlyerLib shared] handleOpenUrl:url options:options]; + }else{ + [AppsFlyerAttribution shared].url = url; + [AppsFlyerAttribution shared].options = options; + } +} + +- (void) handleOpenUrl:(NSURL *)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation{ + if(self.isBridgeReady == YES){ + [[AppsFlyerLib shared] handleOpenURL:url sourceApplication:sourceApplication withAnnotation:annotation]; + }else{ + [AppsFlyerAttribution shared].url = url; + [AppsFlyerAttribution shared].sourceApplication = sourceApplication; + [AppsFlyerAttribution shared].annotation = annotation; + } + +} + +- (void) receiveBridgeReadyNotification:(NSNotification *) notification +{ + NSLog (@"AppsFlyer Debug: handle deep link"); + if(self.url && self.sourceApplication){ + [[AppsFlyerLib shared] handleOpenURL:self.url sourceApplication:self.sourceApplication withAnnotation:self.annotation]; + self.url = nil; + self.sourceApplication = nil; + self.annotation = nil; + }else if(self.options && self.url){ + [[AppsFlyerLib shared] handleOpenUrl:self.url options:self.options]; + self.options = nil; + self.url = nil; + }else if(self.userActivity){ + [[AppsFlyerLib shared] continueUserActivity:self.userActivity restorationHandler:nil]; + self.userActivity = nil; + self.restorationHandler = nil; + } +} +@end diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.m.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.m.meta new file mode 100644 index 0000000..9f071e6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyerAttribution.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 1060e47d7b9e2453ba575f0b455b2bf8 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.h b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.h new file mode 100644 index 0000000..cf73afe --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.h @@ -0,0 +1,71 @@ +// +// AppsFlyeriOSWarpper.h +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import "AFUnityUtils.mm" +#import "UnityAppController.h" +#import "AppsFlyerAttribution.h" +#if __has_include() +#import +#else +#import "AppsFlyerLib.h" +#endif +#if __has_include() +#import +#else +#import "PurchaseConnector.h" +#endif +#import + +// Add StoreKit 2 support +#if __has_include() +#import +#endif + +@interface AppsFlyeriOSWarpper : NSObject + ++ (BOOL) didCallStart; ++ (void) setDidCallStart:(BOOL)val; + +// Add StoreKit 2 methods +- (void)setStoreKitVersion:(int)storeKitVersion; +- (void)logConsumableTransaction:(id)transaction; + +@end + + +static AppsFlyeriOSWarpper *_AppsFlyerdelegate; +static const int kPushNotificationSize = 32; + +static NSString* ConversionDataCallbackObject = @"AppsFlyerObject"; + +static const char* VALIDATE_CALLBACK = "didFinishValidateReceipt"; +static const char* VALIDATE_ERROR_CALLBACK = "didFinishValidateReceiptWithError"; +static const char* GCD_CALLBACK = "onConversionDataSuccess"; +static const char* GCD_ERROR_CALLBACK = "onConversionDataFail"; +static const char* OAOA_CALLBACK = "onAppOpenAttribution"; +static const char* OAOA_ERROR_CALLBACK = "onAppOpenAttributionFailure"; +static const char* GENERATE_LINK_CALLBACK = "onInviteLinkGenerated"; +static const char* OPEN_STORE_LINK_CALLBACK = "onOpenStoreLinkGenerated"; +static const char* START_REQUEST_CALLBACK = "requestResponseReceived"; +static const char* IN_APP_RESPONSE_CALLBACK = "inAppResponseReceived"; +static const char* ON_DEEPLINKING = "onDeepLinking"; +static const char* VALIDATE_AND_LOG_V2_CALLBACK = "onValidateAndLogComplete"; +static const char* VALIDATE_AND_LOG_V2_ERROR_CALLBACK = "onValidateAndLogFailure"; + + +static NSString* validateObjectName = @""; +static NSString* openStoreObjectName = @""; +static NSString* generateInviteObjectName = @""; +static NSString* validateAndLogObjectName = @""; +static NSString* startRequestObjectName = @""; +static NSString* inAppRequestObjectName = @""; +static NSString* onDeeplinkingObjectName = @""; + +static const char* PURCHASE_REVENUE_VALIDATION_CALLBACK = "didReceivePurchaseRevenueValidationInfo"; +static const char* PURCHASE_REVENUE_ERROR_CALLBACK = "didReceivePurchaseRevenueError"; + +static NSString* onPurchaseValidationObjectName = @""; diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.h.meta new file mode 100644 index 0000000..5284989 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 147104b04b5794eaa92b4195cc328e13 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.mm b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.mm new file mode 100644 index 0000000..34153d2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.mm @@ -0,0 +1,601 @@ +// +// AppsFlyeriOSWarpper.mm +// Unity-iPhone +// +// Created by Jonathan Wesfield on 24/07/2019. +// + +#import "AppsFlyeriOSWrapper.h" +#import + +#import +#import "UnityFramework/UnityFramework-Swift.h" + +#if __has_include() +#import +#elif __has_include("PurchaseConnector-Swift.h") +#import "PurchaseConnector-Swift.h" +#endif + +#if __has_include() +#import +#elif __has_include("UnityFramework-Swift.h") +#import "UnityFramework-Swift.h" +#endif + +static void unityCallBack(NSString* objectName, const char* method, const char* msg) { + if(objectName){ + UnitySendMessage([objectName UTF8String], method, msg); + } +} + +extern "C" { + + const void _startSDK(bool shouldCallback, const char* objectName) { + [[AppsFlyerLib shared] setPluginInfoWith: AFSDKPluginUnity + pluginVersion:@"6.17.91" + additionalParams:nil]; + startRequestObjectName = stringFromChar(objectName); + AppsFlyeriOSWarpper.didCallStart = YES; + [AppsFlyerAttribution shared].isBridgeReady = YES; + [[NSNotificationCenter defaultCenter] postNotificationName:AF_BRIDGE_SET object: [AppsFlyerAttribution shared]]; + [[AppsFlyerLib shared] startWithCompletionHandler:^(NSDictionary *dictionary, NSError *error) { + if(shouldCallback){ + if (error) { + NSDictionary *callbackDictionary = @{@"statusCode":[NSNumber numberWithLong:[error code]]}; + unityCallBack(startRequestObjectName, START_REQUEST_CALLBACK, stringFromdictionary(callbackDictionary)); + return; + } + if (dictionary) { + unityCallBack(startRequestObjectName, START_REQUEST_CALLBACK, stringFromdictionary(dictionary)); + return; + } + } + }]; + } + + const void _setCustomerUserID (const char* customerUserID) { + [[AppsFlyerLib shared] setCustomerUserID:stringFromChar(customerUserID)]; + } + + const void _setAdditionalData (const char* customData) { + [[AppsFlyerLib shared] setAdditionalData:dictionaryFromJson(customData)]; + } + + const void _setAppsFlyerDevKey (const char* appsFlyerDevKey) { + [AppsFlyerLib shared].appsFlyerDevKey = stringFromChar(appsFlyerDevKey); + } + + const void _setAppleAppID (const char* appleAppID) { + [AppsFlyerLib shared].appleAppID = stringFromChar(appleAppID); + } + + const void _setCurrencyCode (const char* currencyCode) { + [[AppsFlyerLib shared] setCurrencyCode:stringFromChar(currencyCode)]; + } + + const void _setDisableCollectAppleAdSupport (bool disableAdvertisingIdentifier) { + [AppsFlyerLib shared].disableAdvertisingIdentifier = disableAdvertisingIdentifier; + } + + const void _setIsDebug (bool isDebug) { + [AppsFlyerLib shared].isDebug = isDebug; + } + + const void _setShouldCollectDeviceName (bool shouldCollectDeviceName) { + [AppsFlyerLib shared].shouldCollectDeviceName = shouldCollectDeviceName; + } + + const void _setAppInviteOneLinkID (const char* appInviteOneLinkID) { + [[AppsFlyerLib shared] setAppInviteOneLink:stringFromChar(appInviteOneLinkID)]; + } + + const void _setDeepLinkTimeout (long deepLinkTimeout) { + [AppsFlyerLib shared].deepLinkTimeout = deepLinkTimeout; + } + + const void _anonymizeUser (bool anonymizeUser) { + [AppsFlyerLib shared].anonymizeUser = anonymizeUser; + } + + const void _enableTCFDataCollection (bool shouldCollectTcfData) { + [[AppsFlyerLib shared] enableTCFDataCollection:shouldCollectTcfData]; + } + + const void _setConsentData(const char* isUserSubjectToGDPR, const char* hasConsentForDataUsage, const char* hasConsentForAdsPersonalization, const char* hasConsentForAdStorage) { + + NSNumber *gdpr = intFromNullableBool(isUserSubjectToGDPR); + NSNumber *dataUsage = intFromNullableBool(hasConsentForDataUsage); + NSNumber *adsPersonalization = intFromNullableBool(hasConsentForAdsPersonalization); + NSNumber *adStorage = intFromNullableBool(hasConsentForAdStorage); + + AppsFlyerConsent *consentData = [[AppsFlyerConsent alloc] initWithIsUserSubjectToGDPR:gdpr + hasConsentForDataUsage:dataUsage + hasConsentForAdsPersonalization:adsPersonalization + hasConsentForAdStorage:adStorage]; + + [[AppsFlyerLib shared] setConsentData:consentData]; + } + + const void _logAdRevenue(const char* monetizationNetwork, int mediationNetworkInt, const char* currencyIso4217Code, double eventRevenue, const char* additionalParameters) { + AppsFlyerAdRevenueMediationNetworkType mediationNetwork = mediationNetworkTypeFromInt(mediationNetworkInt); + NSNumber *number = [NSNumber numberWithDouble:eventRevenue]; + AFAdRevenueData *adRevenue = [[AFAdRevenueData alloc] initWithMonetizationNetwork:stringFromChar(monetizationNetwork) mediationNetwork:mediationNetwork currencyIso4217Code:stringFromChar(currencyIso4217Code) eventRevenue:number]; + [[AppsFlyerLib shared] logAdRevenue: adRevenue additionalParameters:dictionaryFromJson(additionalParameters)]; + } + + const void _setDisableCollectIAd (bool disableCollectASA) { + [AppsFlyerLib shared].disableCollectASA = disableCollectASA; + } + + const void _setUseReceiptValidationSandbox (bool useReceiptValidationSandbox) { + [AppsFlyerLib shared].useReceiptValidationSandbox = useReceiptValidationSandbox; + } + + const void _setUseUninstallSandbox (bool useUninstallSandbox) { + [AppsFlyerLib shared].useUninstallSandbox = useUninstallSandbox; + } + + const void _setResolveDeepLinkURLs (int length, const char **resolveDeepLinkURLs) { + if(length > 0 && resolveDeepLinkURLs) { + [[AppsFlyerLib shared] setResolveDeepLinkURLs:NSArrayFromCArray(length, resolveDeepLinkURLs)]; + } + } + + const void _setOneLinkCustomDomains (int length, const char **oneLinkCustomDomains) { + if(length > 0 && oneLinkCustomDomains) { + [[AppsFlyerLib shared] setOneLinkCustomDomains:NSArrayFromCArray(length, oneLinkCustomDomains)]; + } + } + + const void _afSendEvent (const char* eventName, const char* eventValues, bool shouldCallback, const char* objectName) { + inAppRequestObjectName = stringFromChar(objectName); + [[AppsFlyerLib shared] logEventWithEventName:stringFromChar(eventName) eventValues:dictionaryFromJson(eventValues) completionHandler:^(NSDictionary *dictionary, NSError *error) { + if(shouldCallback){ + if (error) { + NSDictionary *callbackDictionary = @{@"statusCode":[NSNumber numberWithLong:[error code]]}; + unityCallBack(inAppRequestObjectName, IN_APP_RESPONSE_CALLBACK, stringFromdictionary(callbackDictionary)); + return; + } + if (dictionary) { + unityCallBack(inAppRequestObjectName, IN_APP_RESPONSE_CALLBACK, stringFromdictionary(dictionary)); + return; + } + } + }]; + } + + const void _recordLocation (double longitude, double latitude) { + [[AppsFlyerLib shared] logLocation:longitude latitude:latitude]; + } + + const char* _getAppsFlyerId () { + return getCString([[[AppsFlyerLib shared] getAppsFlyerUID] UTF8String]); + } + + const void _registerUninstall (unsigned char* deviceToken) { + if(deviceToken){ + NSData* tokenData = [NSData dataWithBytes:(const void *)deviceToken length:sizeof(unsigned char)*kPushNotificationSize]; + [[AppsFlyerLib shared] registerUninstall:tokenData]; + } + } + + const void _handlePushNotification (const char* pushPayload) { + [[AppsFlyerLib shared] handlePushNotification:dictionaryFromJson(pushPayload)]; + } + + const char* _getSDKVersion () { + return getCString([[[AppsFlyerLib shared] getSDKVersion] UTF8String]); + } + + const void _setHost (const char* host, const char* hostPrefix) { + [[AppsFlyerLib shared] setHost:stringFromChar(host) withHostPrefix:stringFromChar(hostPrefix)]; + } + + const void _setMinTimeBetweenSessions (int minTimeBetweenSessions) { + [AppsFlyerLib shared].minTimeBetweenSessions = minTimeBetweenSessions; + } + + const void _stopSDK (bool isStopped) { + [AppsFlyerLib shared].isStopped = isStopped; + } + + const BOOL _isSDKStopped () { + return [AppsFlyerLib shared].isStopped; + } + + const void _handleOpenUrl(const char *url, const char *sourceApplication, const char *annotation) { + [[AppsFlyerLib shared] handleOpenURL:[NSURL URLWithString:stringFromChar(url)] sourceApplication:stringFromChar(sourceApplication) withAnnotation:stringFromChar(annotation)]; } + + const void _recordCrossPromoteImpression (const char* appID, const char* campaign, const char* parameters) { + [AppsFlyerCrossPromotionHelper logCrossPromoteImpression:stringFromChar(appID) campaign:stringFromChar(campaign) parameters:dictionaryFromJson(parameters)]; } + + const void _attributeAndOpenStore (const char* appID, const char* campaign, const char* parameters, const char* objectName) { + + openStoreObjectName = stringFromChar(objectName); + + [AppsFlyerCrossPromotionHelper + logAndOpenStore:stringFromChar(appID) + campaign:stringFromChar(campaign) + parameters:dictionaryFromJson(parameters) + openStore:^(NSURLSession * _Nonnull urlSession, NSURL * _Nonnull clickURL) { + unityCallBack(openStoreObjectName, OPEN_STORE_LINK_CALLBACK, [clickURL.absoluteString UTF8String]); + }]; + } + + const void _generateUserInviteLink (const char* parameters, const char* objectName) { + + generateInviteObjectName = stringFromChar(objectName); + + [AppsFlyerShareInviteHelper generateInviteUrlWithLinkGenerator:^AppsFlyerLinkGenerator * _Nonnull(AppsFlyerLinkGenerator * _Nonnull generator) { + return generatorFromDictionary(dictionaryFromJson(parameters), generator); + } completionHandler:^(NSURL * _Nullable url) { + unityCallBack(generateInviteObjectName, GENERATE_LINK_CALLBACK, [url.absoluteString UTF8String]); + }]; + } + + const void _recordInvite (const char* channel, const char* parameters) { + [AppsFlyerShareInviteHelper logInvite:stringFromChar(channel) parameters:dictionaryFromJson(parameters)]; + } + + const void _setUserEmails (int emailCryptTypeInt , int length, const char **userEmails) { + if(length > 0 && userEmails) { + [[AppsFlyerLib shared] setUserEmails:NSArrayFromCArray(length, userEmails) withCryptType:emailCryptTypeFromInt(emailCryptTypeInt)]; + } + } + + const void _setPhoneNumber (const char* phoneNumber) { + [[AppsFlyerLib shared] setPhoneNumber:stringFromChar(phoneNumber)]; + } + + const void _setSharingFilterForAllPartners () { + [[AppsFlyerLib shared] setSharingFilterForAllPartners]; + } + + const void _setSharingFilter (int length, const char **partners) { + if(length > 0 && partners) { + [[AppsFlyerLib shared] setSharingFilter:NSArrayFromCArray(length, partners)]; + } + } + + const void _setSharingFilterForPartners (int length, const char **partners) { + if(length > 0 && partners) { + [[AppsFlyerLib shared] setSharingFilterForPartners:NSArrayFromCArray(length, partners)]; + } else { + [[AppsFlyerLib shared] setSharingFilterForPartners:nil]; + } + } + + const void _validateAndSendInAppPurchase (const char* productIdentifier, const char* price, const char* currency, const char* transactionId, const char* additionalParameters, const char* objectName) { + + validateObjectName = stringFromChar(objectName); + + [[AppsFlyerLib shared] + validateAndLogInAppPurchase:stringFromChar(productIdentifier) + price:stringFromChar(price) + currency:stringFromChar(currency) + transactionId:stringFromChar(transactionId) + additionalParameters:dictionaryFromJson(additionalParameters) + success:^(NSDictionary *result){ + unityCallBack(validateObjectName, VALIDATE_CALLBACK, stringFromdictionary(result)); + } failure:^(NSError *error, id response) { + if(response && [response isKindOfClass:[NSDictionary class]]) { + NSDictionary* value = (NSDictionary*)response; + unityCallBack(validateObjectName, VALIDATE_ERROR_CALLBACK, stringFromdictionary(value)); + } else { + unityCallBack(validateObjectName, VALIDATE_ERROR_CALLBACK, error ? [[error localizedDescription] UTF8String] : "error"); + } + }]; + } + + const void _validateAndSendInAppPurchaseV2 (const char* product, const char* transactionId, int purchaseType, const char* purchaseAdditionalDetails, const char* objectName) { + + validateAndLogObjectName = stringFromChar(objectName); + AFSDKPurchaseDetails *details = [[AFSDKPurchaseDetails alloc] initWithProductId:stringFromChar(product) transactionId:stringFromChar(transactionId) purchaseType:(AFSDKPurchaseType)purchaseType]; + + [[AppsFlyerLib shared] + validateAndLogInAppPurchase:details + purchaseAdditionalDetails:dictionaryFromJson(purchaseAdditionalDetails) + completion:^(NSDictionary * _Nullable response, NSError * _Nullable error) { + if (error) { + unityCallBack(validateAndLogObjectName, VALIDATE_AND_LOG_V2_ERROR_CALLBACK, stringFromdictionary(dictionaryFromNSError(error))); + } else { + unityCallBack(validateAndLogObjectName, VALIDATE_AND_LOG_V2_CALLBACK, stringFromdictionary(response)); + } + }]; + + } + + const void _getConversionData(const char* objectName) { + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + ConversionDataCallbackObject = stringFromChar(objectName); + [[AppsFlyerLib shared] setDelegate:_AppsFlyerdelegate]; + } + + const void _waitForATTUserAuthorizationWithTimeoutInterval (int timeoutInterval) { + [[AppsFlyerLib shared] waitForATTUserAuthorizationWithTimeoutInterval:timeoutInterval]; + } + + const void _disableSKAdNetwork (bool isDisabled) { + [AppsFlyerLib shared].disableSKAdNetwork = isDisabled; + } + + const void _addPushNotificationDeepLinkPath (int length, const char **paths) { + if(length > 0 && paths) { + [[AppsFlyerLib shared] addPushNotificationDeepLinkPath:NSArrayFromCArray(length, paths)]; + } + } + + const void _subscribeForDeepLink (const char* objectName) { + + onDeeplinkingObjectName = stringFromChar(objectName); + + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + [[AppsFlyerLib shared] setDeepLinkDelegate:_AppsFlyerdelegate]; + } + + const void _setCurrentDeviceLanguage(const char* language) { + [[AppsFlyerLib shared] setCurrentDeviceLanguage:stringFromChar(language)]; + } + + const void _setPartnerData(const char* partnerId, const char* partnerInfo) { + [[AppsFlyerLib shared] setPartnerDataWithPartnerId: stringFromChar(partnerId) partnerInfo:dictionaryFromJson(partnerInfo)]; + } + + const void _disableIDFVCollection(bool isDisabled) { + [AppsFlyerLib shared].disableIDFVCollection = isDisabled; + } + + // Purchase connector + const void _startObservingTransactions() { + [[PurchaseConnector shared] startObservingTransactions]; + } + + const void _stopObservingTransactions() { + [[PurchaseConnector shared] stopObservingTransactions]; + } + + const void _setIsSandbox(bool isSandBox) { + [[PurchaseConnector shared] setIsSandbox:isSandBox]; + } + + const void _setPurchaseRevenueDelegate() { + if (_AppsFlyerdelegate== nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + [[PurchaseConnector shared] setPurchaseRevenueDelegate:_AppsFlyerdelegate]; + } + + const void _setAutoLogPurchaseRevenue(int option) { + [[PurchaseConnector shared] setAutoLogPurchaseRevenue:option]; + + } + + const void _initPurchaseConnector(const char* objectName) { + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + onPurchaseValidationObjectName = stringFromChar(objectName); + } + + const void _setPurchaseRevenueDataSource(const char* objectName) { + if (_AppsFlyerdelegate == nil) { + _AppsFlyerdelegate = [[AppsFlyeriOSWarpper alloc] init]; + } + + if (strstr(objectName, "StoreKit2") != NULL) { + + // Force protocol conformance + Protocol *sk2Protocol = @protocol(AppsFlyerPurchaseRevenueDataSourceStoreKit2); + class_addProtocol([_AppsFlyerdelegate class], sk2Protocol); + + if (![_AppsFlyerdelegate conformsToProtocol:@protocol(AppsFlyerPurchaseRevenueDataSourceStoreKit2)]) { + NSLog(@"[AppsFlyer] Warning: SK2 protocol not conformed!"); + } + } + + [PurchaseConnector shared].purchaseRevenueDataSource = _AppsFlyerdelegate; + } + + const void _setStoreKitVersion(int storeKitVersion) { + [[PurchaseConnector shared] setStoreKitVersion:(AFSDKStoreKitVersion)storeKitVersion]; + } + + const void _logConsumableTransaction(const char* transactionId) { + if (@available(iOS 15.0, *)) { + NSString *transactionIdStr = [NSString stringWithUTF8String:transactionId]; + [AFUnityStoreKit2Bridge fetchAFSDKTransactionSK2WithTransactionId:transactionIdStr completion:^(AFSDKTransactionSK2 *afTransaction) { + if (afTransaction) { + [[PurchaseConnector shared] logConsumableTransaction:afTransaction]; + } else { + NSLog(@"No AFSDKTransactionSK2 found for id %@", transactionIdStr); + } + }]; + } + } + + #ifdef __cplusplus + extern "C" { + #endif + + typedef const char *(*UnityPurchaseCallback)(const char *, const char *); + + UnityPurchaseCallback UnityPurchasesGetAdditionalParamsCallback = NULL; + UnityPurchaseCallback UnityPurchasesGetAdditionalParamsCallbackSK2 = NULL; + + __attribute__((visibility("default"))) + void RegisterUnityPurchaseRevenueParamsCallback(UnityPurchaseCallback callback) { + UnityPurchasesGetAdditionalParamsCallback = callback; + } + + __attribute__((visibility("default"))) + void RegisterUnityPurchaseRevenueParamsCallbackSK2(UnityPurchaseCallback callback) { + UnityPurchasesGetAdditionalParamsCallbackSK2 = callback; + } + + + #ifdef __cplusplus + } + #endif +} + +@implementation AppsFlyeriOSWarpper + +static BOOL didCallStart; ++ (BOOL) didCallStart +{ @synchronized(self) { return didCallStart; } } ++ (void) setDidCallStart:(BOOL)val +{ @synchronized(self) { didCallStart = val; } } + +- (void)onConversionDataSuccess:(NSDictionary *)installData { + unityCallBack(ConversionDataCallbackObject, GCD_CALLBACK, stringFromdictionary(installData)); +} + +- (void)onConversionDataFail:(NSError *)error { + unityCallBack(ConversionDataCallbackObject, GCD_ERROR_CALLBACK, [[error localizedDescription] UTF8String]); +} + +- (void)onAppOpenAttribution:(NSDictionary *)attributionData { + unityCallBack(ConversionDataCallbackObject, OAOA_CALLBACK, stringFromdictionary(attributionData)); +} + +- (void)onAppOpenAttributionFailure:(NSError *)error { + unityCallBack(ConversionDataCallbackObject, OAOA_ERROR_CALLBACK, [[error localizedDescription] UTF8String]); +} + +- (void)didResolveDeepLink:(AppsFlyerDeepLinkResult *)result{ + + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + + [dict setValue:stringFromDeepLinkResultError(result) forKey:@"error"]; + [dict setValue:stringFromDeepLinkResultStatus(result.status) forKey:@"status"]; + + if(result && result.deepLink){ + [dict setValue:result.deepLink.description forKey:@"deepLink"]; + [dict setValue:@(result.deepLink.isDeferred) forKey:@"is_deferred"]; + } + + unityCallBack(onDeeplinkingObjectName, ON_DEEPLINKING, stringFromdictionary(dict)); +} + +// Purchase Connector +- (void)didReceivePurchaseRevenueValidationInfo:(NSDictionary *)validationInfo error:(NSError *)error { + if (error != nil) { + unityCallBack(onPurchaseValidationObjectName, PURCHASE_REVENUE_ERROR_CALLBACK, [[error localizedDescription] UTF8String]); + } else { + unityCallBack(onPurchaseValidationObjectName, PURCHASE_REVENUE_VALIDATION_CALLBACK, stringFromdictionary(validationInfo)); + } +} + +- (NSDictionary *)purchaseRevenueAdditionalParametersForProducts:(NSSet *)products + transactions:(NSSet *)transactions { + + NSMutableArray *productsArray = [NSMutableArray array]; + for (SKProduct *product in products) { + [productsArray addObject:@{ + @"productIdentifier": product.productIdentifier ?: @"", + @"localizedTitle": product.localizedTitle ?: @"", + @"localizedDescription": product.localizedDescription ?: @"", + @"price": [product.price stringValue] ?: @"" + }]; + } + + NSMutableArray *transactionsArray = [NSMutableArray array]; + for (SKPaymentTransaction *txn in transactions) { + [transactionsArray addObject:@{ + @"transactionIdentifier": txn.transactionIdentifier ?: @"", + @"transactionState": @(txn.transactionState), + @"transactionDate": txn.transactionDate ? [@(txn.transactionDate.timeIntervalSince1970) stringValue] : @"" + }]; + } + + NSDictionary *input = @{ + @"products": productsArray, + @"transactions": transactionsArray + }; + + NSError *error = nil; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:input options:0 error:&error]; + if (error || !jsonData) { + NSLog(@"[AppsFlyer] Failed to serialize Unity purchase data: %@", error); + return @{}; + } + + NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + if (!jsonString || !UnityPurchasesGetAdditionalParamsCallback) { + NSLog(@"[AppsFlyer] Unity callback not registered"); + return @{}; + } + + const char *resultCStr = UnityPurchasesGetAdditionalParamsCallback([jsonString UTF8String], ""); + if (!resultCStr) { + NSLog(@"[AppsFlyer] Unity callback returned null"); + return @{}; + } + + NSString *resultJson = [NSString stringWithUTF8String:resultCStr]; + NSData *resultData = [resultJson dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *parsedResult = [NSJSONSerialization JSONObjectWithData:resultData options:0 error:&error]; + + if (error || ![parsedResult isKindOfClass:[NSDictionary class]]) { + NSLog(@"[AppsFlyer] Failed to parse Unity response: %@", error); + return @{}; + } + + return parsedResult; +} + +#pragma mark - AppsFlyerPurchaseRevenueDataSourceStoreKit2 +- (NSDictionary *)purchaseRevenueAdditionalParametersStoreKit2ForProducts:(NSSet *)products transactions:(NSSet *)transactions { + if (@available(iOS 15.0, *)) { + NSArray *productInfoArray = [AFUnityStoreKit2Bridge extractSK2ProductInfo:[products allObjects]]; + NSArray *transactionInfoArray = [AFUnityStoreKit2Bridge extractSK2TransactionInfo:[transactions allObjects]]; + + NSDictionary *input = @{ + @"products": productInfoArray, + @"transactions": transactionInfoArray + }; + + if (UnityPurchasesGetAdditionalParamsCallbackSK2) { + NSError *error = nil; + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:input options:0 error:&error]; + if (error || !jsonData) { + NSLog(@"[AppsFlyer] Failed to serialize Unity purchase data: %@", error); + return @{}; + } + + NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; + + const char *resultCStr = UnityPurchasesGetAdditionalParamsCallbackSK2([jsonString UTF8String], ""); + if (!resultCStr) { + NSLog(@"[AppsFlyer] Unity callback returned null"); + return @{}; + } + + NSString *resultJson = [NSString stringWithUTF8String:resultCStr]; + + NSData *resultData = [resultJson dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary *parsedResult = [NSJSONSerialization JSONObjectWithData:resultData options:0 error:&error]; + + if (error || ![parsedResult isKindOfClass:[NSDictionary class]]) { + NSLog(@"[AppsFlyer] Failed to parse Unity response: %@", error); + return @{}; + } + + return parsedResult; + } else { + NSLog(@"[AppsFlyer] SK2 - Unity callback is NOT registered"); + } + } else { + NSLog(@"[AppsFlyer] SK2 - iOS version not supported"); + } + return @{}; +} + +@end + + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta new file mode 100644 index 0000000..3799161 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Plugins/iOS/AppsFlyeriOSWrapper.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 2bff3788f3d8747fe9679bd3818e1d76 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/ProductPurchase.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/ProductPurchase.cs new file mode 100644 index 0000000..536190f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/ProductPurchase.cs @@ -0,0 +1,184 @@ +#nullable enable + +using System.Collections; +using System.Collections.Generic; +using System; +using UnityEngine; + +[System.Serializable] +public class InAppPurchaseValidationResult : EventArgs +{ + public bool success; + public ProductPurchase? productPurchase; + public ValidationFailureData? failureData; + public string? token; +} + +[System.Serializable] +public class ProductPurchase +{ + public string? kind; + public string? purchaseTimeMillis; + public int purchaseState; + public int consumptionState; + public string? developerPayload; + public string? orderId; + public int purchaseType; + public int acknowledgementState; + public string? purchaseToken; + public string? productId; + public int quantity; + public string? obfuscatedExternalAccountId; + public string? obfuscatedExternalProfil; + public string? regionCode; +} + +[System.Serializable] +public class ValidationFailureData +{ + public int status; + public string? description; +} + +[System.Serializable] +public class SubscriptionValidationResult +{ + public bool success; + public SubscriptionPurchase? subscriptionPurchase; + public ValidationFailureData? failureData; + public string? token; +} + +[System.Serializable] +public class SubscriptionPurchase +{ + public string? acknowledgementState; + public CanceledStateContext? canceledStateContext; + public ExternalAccountIdentifiers? externalAccountIdentifiers; + public string? kind; + public string? latestOrderId; + public List? lineItems; + public string? linkedPurchaseToken; + public PausedStateContext? pausedStateContext; + public string? regionCode; + public string? startTime; + public SubscribeWithGoogleInfo? subscribeWithGoogleInfo; + public string? subscriptionState; + public TestPurchase? testPurchase; +} + +[System.Serializable] +public class CanceledStateContext +{ + public DeveloperInitiatedCancellation? developerInitiatedCancellation; + public ReplacementCancellation? replacementCancellation; + public SystemInitiatedCancellation? systemInitiatedCancellation; + public UserInitiatedCancellation? userInitiatedCancellation; + +} + +[System.Serializable] +public class ExternalAccountIdentifiers +{ + public string? externalAccountId; + public string? obfuscatedExternalAccountId; + public string? obfuscatedExternalProfileId; +} + +[System.Serializable] +public class SubscriptionPurchaseLineItem +{ + public AutoRenewingPlan? autoRenewingPlan; + public DeferredItemReplacement? deferredItemReplacement; + public string? expiryTime; + public OfferDetails? offerDetails; + public PrepaidPlan? prepaidPlan; + public string? productId; +} + +[System.Serializable] +public class PausedStateContext +{ + public string? autoResumeTime; +} + +[System.Serializable] +public class SubscribeWithGoogleInfo +{ + public string? emailAddress; + public string? familyName; + public string? givenName; + public string? profileId; + public string? profileName; +} + +[System.Serializable] +public class TestPurchase{} + +[System.Serializable] +public class DeveloperInitiatedCancellation{} + +[System.Serializable] +public class ReplacementCancellation{} + +[System.Serializable] +public class SystemInitiatedCancellation{} + +[System.Serializable] +public class UserInitiatedCancellation +{ + public CancelSurveyResult? cancelSurveyResult; + public string? cancelTime; +} + +[System.Serializable] +public class AutoRenewingPlan +{ + public string? autoRenewEnabled; + public SubscriptionItemPriceChangeDetails? priceChangeDetails; +} + +[System.Serializable] +public class DeferredItemReplacement +{ + public string? productId; +} + +[System.Serializable] +public class OfferDetails +{ + public List? offerTags; + public string? basePlanId; + public string? offerId; +} + +[System.Serializable] +public class PrepaidPlan +{ + public string? allowExtendAfterTime; +} + +[System.Serializable] +public class CancelSurveyResult +{ + public string? reason; + public string? reasonUserInput; +} + +[System.Serializable] +public class SubscriptionItemPriceChangeDetails +{ + public string? expectedNewPriceChargeTime; + public Money? newPrice; + public string? priceChangeMode; + public string? priceChangeState; +} + +[System.Serializable] + public class Money + { + public string? currencyCode; + public long nanos; + public long units; + } + \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/ProductPurchase.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/ProductPurchase.cs.meta new file mode 100644 index 0000000..7fdbf37 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/ProductPurchase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a1435104a69d4c8ebcc6f237cc29a54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests.meta new file mode 100644 index 0000000..8217a6a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f19f272c71674582bed1d93925da003 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Castle.Core.dll b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Castle.Core.dll new file mode 100644 index 0000000..268e311 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Castle.Core.dll differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Castle.Core.dll.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Castle.Core.dll.meta new file mode 100644 index 0000000..14cc646 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Castle.Core.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 7b5b4579db85b4cfd8395bfb19aa309e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/NSubstitute.dll b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/NSubstitute.dll new file mode 100644 index 0000000..f32e491 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/NSubstitute.dll differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/NSubstitute.dll.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/NSubstitute.dll.meta new file mode 100644 index 0000000..b716f6a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/NSubstitute.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 642cf65ed2573419bab7e7d44fc73181 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Runtime.CompilerServices.Unsafe.dll b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 0000000..c5ba4e4 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Runtime.CompilerServices.Unsafe.dll differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Runtime.CompilerServices.Unsafe.dll.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Runtime.CompilerServices.Unsafe.dll.meta new file mode 100644 index 0000000..fca3770 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Runtime.CompilerServices.Unsafe.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 3a5ccbd864ba94a9a9ba47895ff14922 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Threading.Tasks.Extensions.dll b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..dfc4cdf Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Threading.Tasks.Extensions.dll differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Threading.Tasks.Extensions.dll.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Threading.Tasks.Extensions.dll.meta new file mode 100644 index 0000000..cb661ca --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/System.Threading.Tasks.Extensions.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: ee45ae2608f3c44d08fc6e21a94d133f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests.asmdef b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests.asmdef new file mode 100644 index 0000000..4d10363 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests.asmdef @@ -0,0 +1,24 @@ +{ + "name": "Tests", + "references": [ + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "AppsFlyer" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "NSubstitute.dll", + "Castle.Core.dll", + "System.Threading.Tasks.Extensions.dll" + ], + "autoReferenced": false, + "defineConstraints": [ + "UNITY_INCLUDE_TESTS" + ], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests.asmdef.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests.asmdef.meta new file mode 100644 index 0000000..2778008 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1f155a0e4c9ab48eeb4b54b2dc0aeba7 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests_Suite.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests_Suite.cs new file mode 100644 index 0000000..9523131 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests_Suite.cs @@ -0,0 +1,810 @@ +using System.Collections.Generic; +using NUnit.Framework; +using UnityEngine; +using NSubstitute; + +namespace AppsFlyerSDK.Tests +{ + public class NewTestScript + { + + [Test] + public void test_startSDK_called() + { + var AppsFlyerMOCKInterface = Substitute.For(); + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.startSDK(); + AppsFlyerMOCKInterface.Received().startSDK(Arg.Any(), Arg.Any()); + + } + + [Test] + public void test_sendEvent_withValues() + { + var AppsFlyerMOCKInterface = Substitute.For(); + AppsFlyer.instance = AppsFlyerMOCKInterface; + var eventParams = new Dictionary(); + eventParams.Add("key", "value"); + AppsFlyer.sendEvent("testevent", eventParams); + AppsFlyerMOCKInterface.Received().sendEvent("testevent", eventParams, false, null); + } + + [Test] + public void test_sendEvent_withNullParams() + { + var AppsFlyerMOCKInterface = Substitute.For(); + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.sendEvent("testevent", null); + AppsFlyerMOCKInterface.Received().sendEvent("testevent", null,false, null); + } + + + [Test] + public void test_isSDKStopped_true() + { + var AppsFlyerMOCKInterface = Substitute.For(); + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.stopSDK(true); + + AppsFlyerMOCKInterface.Received().stopSDK(true); + + } + + [Test] + public void test_isSDKStopped_false() + { + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + AppsFlyer.stopSDK(false); + + AppsFlyerMOCKInterface.Received().stopSDK(false); + + } + + [Test] + public void test_isSDKStopped_called() + { + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + var isSDKStopped = AppsFlyer.isSDKStopped(); + + AppsFlyerMOCKInterface.Received().isSDKStopped(); + + } + + [Test] + public void test_isSDKStopped_receveivedFalse() + { + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + var isSDKStopped = AppsFlyer.isSDKStopped(); + + Assert.AreEqual(AppsFlyerMOCKInterface.Received().isSDKStopped(), false); + + + } + + + [Test] + public void test_getSdkVersion_called() + { + var AppsFlyerMOCKInterface = Substitute.For(); + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.getSdkVersion(); + AppsFlyerMOCKInterface.Received().getSdkVersion(); + } + + [Test] + public void test_setCustomerUserId_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCustomerUserId("test"); + AppsFlyerMOCKInterface.Received().setCustomerUserId("test"); + + } + + [Test] + public void Test_setAppInviteOneLinkID_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setAppInviteOneLinkID("2f36"); + AppsFlyerMOCKInterface.Received().setAppInviteOneLinkID("2f36"); + + } + + [Test] + public void Test_setAdditionalData_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + var customData = new Dictionary(); + customData.Add("test", "test"); + AppsFlyer.setAdditionalData(customData); + AppsFlyerMOCKInterface.Received().setAdditionalData(customData); + } + + [Test] + public void Test_setResolveDeepLinkURLs_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setResolveDeepLinkURLs("url1", "url2"); + AppsFlyerMOCKInterface.Received().setResolveDeepLinkURLs("url1", "url2"); + + } + + [Test] + public void Test_setOneLinkCustomDomain_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setOneLinkCustomDomain("url1", "url2"); + AppsFlyerMOCKInterface.Received().setOneLinkCustomDomain("url1", "url2"); + + } + + [Test] + public void Test_setCurrencyCode_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCurrencyCode("usd"); + AppsFlyerMOCKInterface.Received().setCurrencyCode("usd"); + + } + + [Test] + public void Test_recordLocation_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.recordLocation(0.3, 5.2); + AppsFlyerMOCKInterface.Received().recordLocation(0.3, 5.2); + + } + + [Test] + public void Test_anonymizeUser_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.anonymizeUser(true); + AppsFlyerMOCKInterface.Received().anonymizeUser(true); + + } + + [Test] + public void Test_anonymizeUser_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.anonymizeUser(false); + AppsFlyerMOCKInterface.Received().anonymizeUser(false); + + } + + [Test] + public void Test_getAppsFlyerId_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.getAppsFlyerId(); + AppsFlyerMOCKInterface.Received().getAppsFlyerId(); + + } + + [Test] + public void Test_setMinTimeBetweenSessions_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setMinTimeBetweenSessions(3); + AppsFlyerMOCKInterface.Received().setMinTimeBetweenSessions(3); + + } + + [Test] + public void Test_setHost_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setHost("prefix", "name"); + AppsFlyerMOCKInterface.Received().setHost("prefix", "name"); + + } + + [Test] + public void Test_setPhoneNumber_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setPhoneNumber("002"); + AppsFlyerMOCKInterface.Received().setPhoneNumber("002"); + + } + + + [Test] + [System.Obsolete] + public void Test_setSharingFilterForAllPartners_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setSharingFilterForAllPartners(); + AppsFlyerMOCKInterface.Received().setSharingFilterForAllPartners(); + + } + + [Test] + [System.Obsolete] + public void Test_setSharingFilter_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + + AppsFlyer.setSharingFilter("filter1", "filter2"); + AppsFlyerMOCKInterface.Received().setSharingFilter("filter1", "filter2"); + + } + + [Test] + public void Test_getConversionData_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + AppsFlyer.getConversionData("ObjectName"); + AppsFlyerMOCKInterface.Received().getConversionData("ObjectName"); + + } + + [Test] + public void Test_attributeAndOpenStore_called_withParams() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + Dictionary parameters = new Dictionary(); + parameters.Add("af_sub1", "val"); + parameters.Add("custom_param", "val2"); + AppsFlyer.attributeAndOpenStore("appid", "campaign", parameters, new MonoBehaviour()); + AppsFlyerMOCKInterface.Received().attributeAndOpenStore("appid", "campaign", parameters, Arg.Any()); + + } + + [Test] + public void Test_attributeAndOpenStore_called_nullParams() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + AppsFlyer.attributeAndOpenStore("appid", "campaign", null, new MonoBehaviour()); + AppsFlyerMOCKInterface.Received().attributeAndOpenStore("appid", "campaign", null, Arg.Any()); + + } + + [Test] + public void Test_recordCrossPromoteImpression_calledWithParameters() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + Dictionary parameters = new Dictionary(); + parameters.Add("af_sub1", "val"); + parameters.Add("custom_param", "val2"); + AppsFlyer.recordCrossPromoteImpression("appid", "campaign", parameters); + AppsFlyerMOCKInterface.Received().recordCrossPromoteImpression("appid", "campaign", parameters); + + } + + + + [Test] + public void Test_recordCrossPromoteImpression_calledWithoutParameters() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.recordCrossPromoteImpression("appid", "campaign", null); + AppsFlyerMOCKInterface.Received().recordCrossPromoteImpression("appid", "campaign", null); + + } + + [Test] + public void Test_generateUserInviteLink_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + + AppsFlyer.generateUserInviteLink(new Dictionary(), new MonoBehaviour()); + AppsFlyerMOCKInterface.Received().generateUserInviteLink(Arg.Any>(), Arg.Any()); + + } + + + [Test] + public void Test_addPushNotificationDeepLinkPath_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.addPushNotificationDeepLinkPath("path1", "path2"); + AppsFlyerMOCKInterface.Received().addPushNotificationDeepLinkPath("path1", "path2"); + + } + +#if UNITY_ANDROID + [Test] + public void updateServerUninstallToken_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.updateServerUninstallToken("tokenTest"); + AppsFlyerMOCKInterface.Received().updateServerUninstallToken("tokenTest"); + + } + + [Test] + public void setImeiData_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setImeiData("imei"); + AppsFlyerMOCKInterface.Received().setImeiData("imei"); + + } + + [Test] + public void setAndroidIdData_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setAndroidIdData("androidId"); + AppsFlyerMOCKInterface.Received().setAndroidIdData("androidId"); + + } + + [Test] + public void waitForCustomerUserId_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.waitForCustomerUserId(true); + AppsFlyerMOCKInterface.Received().waitForCustomerUserId(true); + + } + + [Test] + public void setCustomerIdAndStartSDK_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCustomerIdAndStartSDK("01234"); + AppsFlyerMOCKInterface.Received().setCustomerIdAndStartSDK("01234"); + + } + + + [Test] + public void getOutOfStore_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.getOutOfStore(); + AppsFlyerMOCKInterface.Received().getOutOfStore(); + + } + + [Test] + public void setOutOfStore_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setOutOfStore("test"); + AppsFlyerMOCKInterface.Received().setOutOfStore("test"); + + } + + [Test] + public void setCollectAndroidID_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCollectAndroidID(true); + AppsFlyerMOCKInterface.Received().setCollectAndroidID(true); + + } + + [Test] + public void setCollectIMEI_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCollectIMEI(true); + AppsFlyerMOCKInterface.Received().setCollectIMEI(true); + + } + + [Test] + public void setIsUpdate_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setIsUpdate(true); + AppsFlyerMOCKInterface.Received().setIsUpdate(true); + + } + + [Test] + public void setPreinstallAttribution_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setPreinstallAttribution("mediaSourceTestt", "campaign", "sideId"); + AppsFlyerMOCKInterface.Received().setPreinstallAttribution("mediaSourceTestt", "campaign", "sideId"); + + } + + [Test] + public void isPreInstalledApp_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.isPreInstalledApp(); + AppsFlyerMOCKInterface.Received().isPreInstalledApp(); + + } + + [Test] + public void getAttributionId_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.getAttributionId(); + AppsFlyerMOCKInterface.Received().getAttributionId(); + + } + + [Test] + public void handlePushNotifications_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.handlePushNotifications(); + AppsFlyerMOCKInterface.Received().handlePushNotifications(); + + } + + [Test] + public void validateAndSendInAppPurchase_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.validateAndSendInAppPurchase("ewjkekwjekw","hewjehwj", "purchaseData", "3.0", "USD", null, null); + AppsFlyerMOCKInterface.Received().validateAndSendInAppPurchase("ewjkekwjekw", "hewjehwj", "purchaseData", "3.0", "USD", null, null); + + } + + [Test] + public void setCollectOaid_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCollectOaid(true); + AppsFlyerMOCKInterface.Received().setCollectOaid(true); + + } + + [Test] + public void setDisableAdvertisingIdentifiers_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setDisableAdvertisingIdentifiers(true); + AppsFlyerMOCKInterface.Received().setDisableAdvertisingIdentifiers(true); + + } + + [Test] + public void setDisableNetworkData_called() { + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setDisableNetworkData(true); + AppsFlyerMOCKInterface.Received().setDisableNetworkData(true); + } +#elif UNITY_IOS + + [Test] + public void setDisableCollectAppleAdSupport_called_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setDisableCollectAppleAdSupport(true); + AppsFlyerMOCKInterface.Received().setDisableCollectAppleAdSupport(true); + + } + + [Test] + public void setDisableCollectAppleAdSupport_called_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setDisableCollectAppleAdSupport(false); + AppsFlyerMOCKInterface.Received().setDisableCollectAppleAdSupport(false); + + } + + [Test] + [System.Obsolete] + public void setShouldCollectDeviceName_called_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setShouldCollectDeviceName(true); + AppsFlyerMOCKInterface.Received().setShouldCollectDeviceName(true); + + } + + [Test] + [System.Obsolete] + public void setShouldCollectDeviceName_called_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setShouldCollectDeviceName(false); + AppsFlyerMOCKInterface.Received().setShouldCollectDeviceName(false); + + } + + [Test] + public void setDisableCollectIAd_called_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setDisableCollectIAd(true); + AppsFlyerMOCKInterface.Received().setDisableCollectIAd(true); + + } + + [Test] + public void setDisableCollectIAd_called_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setDisableCollectIAd(false); + AppsFlyerMOCKInterface.Received().setDisableCollectIAd(false); + + } + + [Test] + public void setUseReceiptValidationSandbox_called_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setUseReceiptValidationSandbox(true); + AppsFlyerMOCKInterface.Received().setUseReceiptValidationSandbox(true); + + } + + [Test] + public void setUseReceiptValidationSandbox_called_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setUseReceiptValidationSandbox(false); + AppsFlyerMOCKInterface.Received().setUseReceiptValidationSandbox(false); + + } + + [Test] + public void ssetUseUninstallSandbox_called_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setUseUninstallSandbox(true); + AppsFlyerMOCKInterface.Received().setUseUninstallSandbox(true); + + } + + [Test] + public void setUseUninstallSandbox_called_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setUseUninstallSandbox(false); + AppsFlyerMOCKInterface.Received().setUseUninstallSandbox(false); + + } + + [Test] + public void validateAndSendInAppPurchase_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.validateAndSendInAppPurchase("3d2", "5.0","USD", "45", null, null); + AppsFlyerMOCKInterface.Received().validateAndSendInAppPurchase("3d2", "5.0", "USD", "45", null, null); + + } + + [Test] + public void registerUninstall_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + byte[] token = System.Text.Encoding.UTF8.GetBytes("740f4707 bebcf74f 9b7c25d4 8e335894 5f6aa01d a5ddb387 462c7eaf 61bb78ad"); + AppsFlyer.registerUninstall(token); + AppsFlyerMOCKInterface.Received().registerUninstall(token); + + } + + [Test] + public void handleOpenUrl_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.handleOpenUrl("www.test.com", "appTest", "test"); + AppsFlyerMOCKInterface.Received().handleOpenUrl("www.test.com", "appTest", "test"); + + } + + [Test] + public void waitForATTUserAuthorizationWithTimeoutInterval_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.waitForATTUserAuthorizationWithTimeoutInterval(30); + AppsFlyerMOCKInterface.Received().waitForATTUserAuthorizationWithTimeoutInterval(30); + + } + + [Test] + public void setCurrentDeviceLanguage_called() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.setCurrentDeviceLanguage("en"); + AppsFlyerMOCKInterface.Received().setCurrentDeviceLanguage("en"); + + } + + [Test] + public void disableSKAdNetwork_called_true() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.disableSKAdNetwork(true); + AppsFlyerMOCKInterface.Received().disableSKAdNetwork(true); + + } + + [Test] + public void disableSKAdNetwork_called_false() + { + + var AppsFlyerMOCKInterface = Substitute.For(); + + AppsFlyer.instance = AppsFlyerMOCKInterface; + AppsFlyer.disableSKAdNetwork(false); + AppsFlyerMOCKInterface.Received().disableSKAdNetwork(false); + + } + +#endif + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests_Suite.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests_Suite.cs.meta new file mode 100644 index 0000000..c20a62c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Tests/Tests_Suite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b1a24aa01166451d804d7c03c14a3db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows.meta new file mode 100644 index 0000000..859b3f2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fbfcb6aeaa7f40e69a0daff450a2450 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pdb b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pdb new file mode 100644 index 0000000..1bea160 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pdb differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pdb.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pdb.meta new file mode 100644 index 0000000..fd461dc --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d0748deab2f031f42b801afab0837a59 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pri b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pri new file mode 100644 index 0000000..f3993be Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pri differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pri.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pri.meta new file mode 100644 index 0000000..ed4fbf8 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.pri.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c621896ec81267f478e98555031271ef +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.winmd b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.winmd new file mode 100644 index 0000000..381ce32 Binary files /dev/null and b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.winmd differ diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.winmd.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.winmd.meta new file mode 100644 index 0000000..728454c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerLib.winmd.meta @@ -0,0 +1,38 @@ +fileFormatVersion: 2 +guid: 5186898c6f4665f438e46763d4cff3ae +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: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 1 + settings: + CPU: AnyCPU + - first: + XboxOne: XboxOne + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerWindows.cs b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerWindows.cs new file mode 100644 index 0000000..8fd696f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerWindows.cs @@ -0,0 +1,145 @@ +//#define AFSDK_WIN_DEBUG +//#define UNITY_WSA_10_0 +//#define ENABLE_WINMD_SUPPORT + +#if UNITY_WSA_10_0 +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using System.ComponentModel; +using UnityEngine; +using System.Threading.Tasks; + +#if ENABLE_WINMD_SUPPORT +using AppsFlyerLib; +#endif + +namespace AppsFlyerSDK +{ + public class AppsFlyerWindows + { +#if ENABLE_WINMD_SUPPORT + static private MonoBehaviour _gameObject = null; +#endif + + public static void InitSDK(string devKey, string appId, MonoBehaviour gameObject) + { +#if ENABLE_WINMD_SUPPORT + +#if AFSDK_WIN_DEBUG + // Remove callstack + Application.SetStackTraceLogType(LogType.Log, StackTraceLogType.None); +#endif + Log("[InitSDK]: devKey: {0}, appId: {1}, gameObject: {2}", devKey, appId, gameObject == null ? "null" : gameObject.ToString()); + AppsFlyerTracker tracker = AppsFlyerTracker.GetAppsFlyerTracker(); + tracker.devKey = devKey; + tracker.appId = appId; + // Interface + _gameObject = gameObject; +#endif + } + + public static string GetAppsFlyerId() + { +#if ENABLE_WINMD_SUPPORT + Log("[GetAppsFlyerId]"); + return AppsFlyerTracker.GetAppsFlyerTracker().GetAppsFlyerUID(); +#else + return ""; +#endif + } + + public static void SetCustomerUserId(string customerUserId) + { +#if ENABLE_WINMD_SUPPORT + Log("[SetCustomerUserId] customerUserId: {0}", customerUserId); + if (customerUserId.Contains("test_device:")) + { + string testDeviceId = customerUserId.Substring(12); + AppsFlyerTracker.GetAppsFlyerTracker().testDeviceId = testDeviceId; + } + AppsFlyerTracker.GetAppsFlyerTracker().customerUserId = customerUserId; +#endif + } + + public static void Start() + { +#if ENABLE_WINMD_SUPPORT + Log("[Start]"); + AppsFlyerTracker.GetAppsFlyerTracker().TrackAppLaunchAsync(Callback); +#endif + } + +#if ENABLE_WINMD_SUPPORT + public static void Callback(AppsFlyerLib.ServerStatusCode code) + { + Log("[Callback]: {0}", code.ToString()); + + AppsFlyerRequestEventArgs eventArgs = new AppsFlyerRequestEventArgs((int)code, code.ToString()); + if (_gameObject != null) { + var method = _gameObject.GetType().GetMethod("AppsFlyerOnRequestResponse"); + if (method != null) { + method.Invoke(_gameObject, new object[] { AppsFlyerTracker.GetAppsFlyerTracker(), eventArgs }); + } + } + } +#endif + + public static void LogEvent(string eventName, Dictionary eventValues) + { +#if ENABLE_WINMD_SUPPORT + if (eventValues == null) + { + eventValues = new Dictionary(); + } + IDictionary result = new Dictionary(); + foreach (KeyValuePair kvp in eventValues) + { + result.Add(kvp.Key.ToString(), kvp.Value); + } + + Log("[LogEvent]: eventName: {0} result: {1}", eventName, result.ToString()); + + AppsFlyerTracker tracker = AppsFlyerTracker.GetAppsFlyerTracker(); + tracker.TrackEvent(eventName, result); + +#endif + } + + + public static void GetConversionData(string _reserved) + { +#if ENABLE_WINMD_SUPPORT + Task.Run(async () => + { + AppsFlyerLib.AppsFlyerTracker tracker = AppsFlyerLib.AppsFlyerTracker.GetAppsFlyerTracker(); + string conversionData = await tracker.GetConversionDataAsync(); + + IAppsFlyerConversionData conversionDataHandler = _gameObject as IAppsFlyerConversionData; + + if (conversionDataHandler != null) + { + Log("[GetConversionData] Will call `onConversionDataSuccess` with: {0}", conversionData); + conversionDataHandler.onConversionDataSuccess(conversionData); + } else { + Log("[GetConversionData] Object with `IAppsFlyerConversionData` interface not found! Check `InitSDK` implementation"); + } + // _gameObject.GetType().GetMethod("onConversionDataSuccess").Invoke(_gameObject, new[] { conversionData }); + }); +#endif + } + + private static void Log(string format, params string[] args) + { +#if AFSDK_WIN_DEBUG +#if ENABLE_WINMD_SUPPORT + Debug.Log("AF_UNITY_WSA_10_0" + String.Format(format, args)); +#endif +#endif + } + + } + +} +#endif diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerWindows.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerWindows.cs.meta new file mode 100644 index 0000000..66f10a1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/Windows/AppsFlyerWindows.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 034d11e52b599954181d7f08c0d89ca8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/package.json b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/package.json new file mode 100644 index 0000000..6ac2853 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/package.json @@ -0,0 +1,8 @@ +{ + "name": "appsflyer-unity-plugin", + "displayName": "AppsFlyer", + "description": "AppsFlyer Unity plugin", + "version": "6.17.91", + "unity": "2019.4", + "license": "MIT" + } diff --git a/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/package.json.meta b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/package.json.meta new file mode 100644 index 0000000..e9b3d87 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/AppsFlyer/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a2b3ab5da7dda473b8791503604647b4 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll.meta new file mode 100644 index 0000000..a3d4e72 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 429c3c4b79918684894c368157dad34a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds.meta new file mode 100644 index 0000000..c4a3cd5 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd0ef81b1482347b38905fab4f30e583 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/BigoAds.asmdef b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/BigoAds.asmdef new file mode 100644 index 0000000..2051c3a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/BigoAds.asmdef @@ -0,0 +1,3 @@ +{ + "name": "BigoAds" +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/BigoAds.asmdef.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/BigoAds.asmdef.meta new file mode 100644 index 0000000..2aef032 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/BigoAds.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a16a603f2fee3094a83a14116e2d8129 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts.meta new file mode 100644 index 0000000..dc11939 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 467aa0b9eadf04b22b5b3713a1b07bea +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api.meta new file mode 100644 index 0000000..15c0daf --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1dd438e36fdc745aaa018eac5d3b182c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdConfig.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdConfig.cs new file mode 100644 index 0000000..82e0447 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdConfig.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections.Generic; +using BigoAds.Scripts.Api.Constant; +using System.Collections.Generic; + +namespace BigoAds.Scripts.Api +{ + public class BigoAdConfig + { + public const string EXTRA_KEY_HOST_RULES = "host_rules"; + + /// + /// the unique identifier of the App + /// + internal string AppId { get; } + + /// + /// Custom set the debugLog to print debug Log. + /// debugLog NO: close debug log, YES: open debug log. + /// + internal bool DebugLog { get; } + + /// + /// Channels for publishing media applications + /// + internal string Channel { get; } + + internal int Age { get; } + + internal int Gender { get; } + + internal long ActivatedTime { get; } + + internal Dictionary ExtraDictionary { get; } + + private BigoAdConfig(BigoAdConfig.Builder builder) + { + AppId = builder.AppId; + DebugLog = builder.DebugLog; + Channel = builder.Channel; + Age = builder.Age; + Gender = (int)builder.Gender; + ActivatedTime = builder.ActivatedTime; + ExtraDictionary = builder.ExtraDictionary; + } + + public class Builder + { + internal string AppId; + + internal bool DebugLog; + + internal string Channel; + + internal int Age; + + internal BGAdGender Gender; + + internal long ActivatedTime; + + internal Dictionary ExtraDictionary = new Dictionary(); + + public Builder SetAppId(string appid) + { + this.AppId = appid; + return this; + } + + public Builder SetDebugLog(bool debugLog) + { + this.DebugLog = debugLog; + return this; + } + + public Builder SetChannel(string channel) + { + this.Channel = channel; + return this; + } + + public Builder SetAge(int age) + { + this.Age = age; + return this; + } + + public Builder SetGender(BGAdGender gender) + { + this.Gender = gender; + return this; + } + + public Builder SetActivatedTime(long activatedTime) + { + this.ActivatedTime = activatedTime; + return this; + } + + ///Only works on Android + public Builder SetExtra(string key, string extra) + { + if (key != null && extra != null) + { + this.ExtraDictionary.Add(key, extra); + } + return this; + } + + public BigoAdConfig Build() + { + return new BigoAdConfig(this); + } + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdConfig.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdConfig.cs.meta new file mode 100644 index 0000000..b457ea0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b18497a84c58a49f385b63be54aff0cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdSdk.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdSdk.cs new file mode 100644 index 0000000..c248141 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdSdk.cs @@ -0,0 +1,106 @@ +using BigoAds.Scripts.Common; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Api +{ + public static class BigoAdSdk + { + private static IClientFactory _clientFactory; + + private static ISDK _sdk; + + internal static ISDK SDK + { + get + { + if (_sdk == null) + { + _sdk = GetClientFactory().BuildSDKClient(); + } + + return _sdk; + } + } + + internal static IClientFactory GetClientFactory() + { + if (_clientFactory != null) + { + return _clientFactory; + } + + _clientFactory = +#if UNITY_ANDROID + new BigoAds.Scripts.Platforms.Android.AndroidClientFactory(); +#elif UNITY_IOS + new BigoAds.Scripts.Platforms.iOS.IOSClientFactory(); +#else + null; + throw new PlatformNotSupportedException(); +#endif + return _clientFactory; + } + + public delegate void InitResultDelegate(); + + public static event InitResultDelegate OnInitFinish; + + /// Starts the Bigo SDK + /// @warning Call this method as early as possible to reduce ad request fail. + /// @param config SDK configuration + /// @param callback Callback for starting the Bigo SDK + /// //// + public static void Initialize(BigoAdConfig config) + { + if (IsInitSuccess()) + { + OnInitFinish?.Invoke(); + return; + } + + SDK.Init(config, (() => { OnInitFinish?.Invoke(); })); + } + + //// + /// The SDK initialization state + //// + public static bool IsInitSuccess() + { + return SDK.IsInitSuccess(); + } + + /////// + /// Bigo SDK version + /// //// + public static string GetSDKVersion() + { + return SDK.GetSDKVersion(); + } + + /////// + /// Bigo SDK version name + /// //// + public static string GetSDKVersionName() + { + return SDK.GetSDKVersionName(); + } + + /////// + /// Bigo SDK set user consent + /// //// + public static void SetUserConsent(ConsentOptions option, bool consent) + { + SDK.SetUserConsent(option, consent); + } + + /////// + /// Only works on Android + /// Bigo SDK set user consent + /// //// + public static void AddExtraHost(string country, string host) + { + SDK.AddExtraHost(country, host); + } + + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdSdk.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdSdk.cs.meta new file mode 100644 index 0000000..4672ff6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoAdSdk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5ad9c8c265954d4e8f4f03312b5fa42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerAd.cs new file mode 100644 index 0000000..598d5bb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerAd.cs @@ -0,0 +1,30 @@ +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Api +{ + public class BigoBannerAd : BigoBaseAd + { + private readonly IBannerAd _bannerAdClient; + + + /// + /// create a banner ad + /// + /// + public BigoBannerAd(string slotId) : base(slotId, BigoAdSdk.GetClientFactory().BuildBannerAdClient()) + { + _bannerAdClient = (IBannerAd) ADClient; + } + + /// + /// set position for banner + /// + /// + public void SetPosition(BigoPosition position) + { + _bannerAdClient?.SetPosition(position); + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerAd.cs.meta new file mode 100644 index 0000000..c20e587 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5136d466cbb6c461f92fbd90b6fa157d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerRequest.cs new file mode 100644 index 0000000..a40d433 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerRequest.cs @@ -0,0 +1,22 @@ +using System; +using BigoAds.Scripts.Api.Constant; +using UnityEngine; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + public class BigoBannerRequest : BigoRequest + { + [SerializeField()] + private BigoBannerSize size; + public BigoBannerSize Size => size; + + public BigoPosition Position { get; } + + public BigoBannerRequest(BigoBannerSize size, BigoPosition position = BigoPosition.Bottom) + { + this.size = size; + this.Position = position; + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerRequest.cs.meta new file mode 100644 index 0000000..b1bc7ba --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoBannerRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 159c6164853954739adbca1ae7592df7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialAd.cs new file mode 100644 index 0000000..aadc6ff --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialAd.cs @@ -0,0 +1,11 @@ +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Api +{ + public class BigoInterstitialAd : BigoBaseAd + { + public BigoInterstitialAd(string slotId) : base(slotId, BigoAdSdk.GetClientFactory().BuildInterstitialAdClient()) + { + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialAd.cs.meta new file mode 100644 index 0000000..ef2cffe --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1323eae1e03094d8281b23f5527a53db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialRequest.cs new file mode 100644 index 0000000..29fd866 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + + public class BigoInterstitialRequest : BigoRequest + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialRequest.cs.meta new file mode 100644 index 0000000..dab3ed2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoInterstitialRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1947fd630823b4858af6c3a471497f70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeAd.cs new file mode 100644 index 0000000..d47b55b --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeAd.cs @@ -0,0 +1,26 @@ +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Api +{ + public class BigoNativeAd : BigoBaseAd + { + private readonly INativeAd _NativeAdClient; + + public BigoNativeAd(string slotId) : base(slotId, BigoAdSdk.GetClientFactory().BuildNativeAdClient()) + { + _NativeAdClient = (INativeAd) ADClient; + } + + /// + /// set position for native + /// + /// + public void SetPosition(BigoPosition position) + { + _NativeAdClient?.SetPosition(position); + } + + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeAd.cs.meta new file mode 100644 index 0000000..8660675 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1742d1ee2ff5e4d508ae81524cb94ade +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeRequest.cs new file mode 100644 index 0000000..fb99270 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + public class BigoNativeRequest : BigoRequest + { + + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeRequest.cs.meta new file mode 100644 index 0000000..304ad89 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoNativeRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 033c30386f5714bddb5dd41d7524979e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupAd.cs new file mode 100644 index 0000000..80a872b --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupAd.cs @@ -0,0 +1,11 @@ +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Api +{ + public class BigoPopupAd : BigoBaseAd + { + public BigoPopupAd(string slotId) : base(slotId, BigoAdSdk.GetClientFactory().BuildPopupAdClient()) + { + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupAd.cs.meta new file mode 100644 index 0000000..ad93110 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2be0a8fe9e5aa4bea8970a47e617a076 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupRequest.cs new file mode 100644 index 0000000..c30c437 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + + public class BigoPopupRequest : BigoRequest + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupRequest.cs.meta new file mode 100644 index 0000000..9b9e2ea --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoPopupRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 580aad20fbde543bab37a5e878c682cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRequest.cs new file mode 100644 index 0000000..fe217ba --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRequest.cs @@ -0,0 +1,47 @@ +using System; +using UnityEngine; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + public class BigoRequest + { + [SerializeField] private string extraInfo; + [SerializeField] private int age; + [SerializeField] private BGAdGender gender; + [SerializeField] private long activatedTime; + + public string ExtraInfoJson + { + get => extraInfo; + set => extraInfo = value; + } + + /// Only works on Android + public int Age + { + get => age; + set => age = value; + } + + /// Only works on Android + public BGAdGender Gender + { + get => gender; + set => gender = value; + } + + /// Only works on Android + public long ActivatedTime + { + get => activatedTime; + set => activatedTime = value; + } + + public string ToJson() + { + return JsonUtility.ToJson(this); + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRequest.cs.meta new file mode 100644 index 0000000..b054061 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2707ffe474e6443d6a5260876d5b1370 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedAd.cs new file mode 100644 index 0000000..8d594b2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedAd.cs @@ -0,0 +1,29 @@ +using System; +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Api +{ + public class BigoRewardedAd : BigoBaseAd + { + public event Action OnUserEarnedReward; + + public BigoRewardedAd(string slotId) : base(slotId, BigoAdSdk.GetClientFactory().BuildRewardedAdClient()) + { + var rewardedAdClient = (IRewardedAd) ADClient; + rewardedAdClient.OnUserEarnedReward += InvokeOnUserEarnedReward; + } + + + private void InvokeOnUserEarnedReward() + { + if (CallbackOnMainThread) + { + BigoDispatcher.PostTask((() => { OnUserEarnedReward?.Invoke(); })); + } + else + { + OnUserEarnedReward?.Invoke(); + } + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedAd.cs.meta new file mode 100644 index 0000000..95f6da4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f745c8797b25430685a5a08b34f0d9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedRequest.cs new file mode 100644 index 0000000..9b36137 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + + public class BigoRewardedRequest : BigoRequest + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedRequest.cs.meta new file mode 100644 index 0000000..2c3f5c6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoRewardedRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38f4a763a1fc9429ca87c62eed4b4645 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashAd.cs new file mode 100644 index 0000000..14dac42 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashAd.cs @@ -0,0 +1,11 @@ +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Api +{ + public class BigoSplashAd : BigoBaseAd + { + public BigoSplashAd(string slotId) : base(slotId, BigoAdSdk.GetClientFactory().BuildSplashAdClient()) + { + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashAd.cs.meta new file mode 100644 index 0000000..24bf412 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61b62ca232d2e42788e61f33d7784209 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashRequest.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashRequest.cs new file mode 100644 index 0000000..e6d9239 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace BigoAds.Scripts.Api +{ + [Serializable] + + public class BigoSplashRequest : BigoRequest + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashRequest.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashRequest.cs.meta new file mode 100644 index 0000000..54ba905 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/BigoSplashRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afdf808922a744419b5db1fdd4ca18b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant.meta new file mode 100644 index 0000000..df5fa74 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0762cd7e46c3c43e5a32b1558643eb74 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdGender.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdGender.cs new file mode 100644 index 0000000..462edff --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdGender.cs @@ -0,0 +1,10 @@ +using System; +namespace BigoAds.Scripts.Api.Constant +{ + [Serializable] + public enum BGAdGender + { + Female = 1, + Male = 2 + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdGender.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdGender.cs.meta new file mode 100644 index 0000000..f517742 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdGender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2784802c5b5b34470a0500118ccb7f55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdLossReason.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdLossReason.cs new file mode 100644 index 0000000..1e8b77e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdLossReason.cs @@ -0,0 +1,13 @@ +using System; + +namespace BigoAds.Scripts.Api.Constant +{ + [Serializable] + public enum BGAdLossReason + { + InternalError = 1, + Timeout = 2, + LowerThanFloorPrice = 100, + LowerThanHighestPrice = 101 + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdLossReason.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdLossReason.cs.meta new file mode 100644 index 0000000..c16d048 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BGAdLossReason.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 303b2e25e09c44797a167b642310a319 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoBannerSize.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoBannerSize.cs new file mode 100644 index 0000000..0d26ace --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoBannerSize.cs @@ -0,0 +1,23 @@ +using System; +using UnityEngine; + +namespace BigoAds.Scripts.Api.Constant +{ + [Serializable] + public struct BigoBannerSize + { + public static readonly BigoBannerSize BANNER_W_320_H_50 = new BigoBannerSize(320,50); + public static readonly BigoBannerSize BANNER_W_300_H_250 = new BigoBannerSize(300,250); + + [SerializeField] private int width; + [SerializeField] private int height; + public int Width => width; + public int Height => height; + + public BigoBannerSize(int width, int height) + { + this.width = width; + this.height = height; + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoBannerSize.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoBannerSize.cs.meta new file mode 100644 index 0000000..2a3dff5 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoBannerSize.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a4411a50cfc94717b30325ceed3d52f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoPosition.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoPosition.cs new file mode 100644 index 0000000..44a6cdb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoPosition.cs @@ -0,0 +1,12 @@ +using System; + +namespace BigoAds.Scripts.Api.Constant +{ + [Serializable] + public enum BigoPosition + { + Top = 0, + Middle = 1, + Bottom = 2 + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoPosition.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoPosition.cs.meta new file mode 100644 index 0000000..409da19 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/BigoPosition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6511065ffc7f44235bacb3ee16a87f5a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/ConsentOptions.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/ConsentOptions.cs new file mode 100644 index 0000000..5b49a5e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/ConsentOptions.cs @@ -0,0 +1,13 @@ +using System; + +namespace BigoAds.Scripts.Api.Constant +{ + [Serializable] + public enum ConsentOptions + { + GDPR, + CCPA, + LGPD, + COPPA + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/ConsentOptions.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/ConsentOptions.cs.meta new file mode 100644 index 0000000..c1ae974 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Api/Constant/ConsentOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7867ac15c426649a6aa633a772d54879 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common.meta new file mode 100644 index 0000000..f8e8c89 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b4db2c2875384f11b89eb7dec28b823 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoBaseAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoBaseAd.cs new file mode 100644 index 0000000..955822c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoBaseAd.cs @@ -0,0 +1,218 @@ +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Common +{ + public class BigoBaseAd where T : BigoRequest + { + /// + /// event for load ad success + /// + public event Action OnLoad; + + /// + /// load ad failed with error code and error message + /// + public event Action OnLoadFailed; + + /// + /// event for ad impression + /// + public event Action OnAdShowed; + + /// + /// event for ad be clicked + /// + public event Action OnAdClicked; + + /// + /// event for ad be closed + /// + public event Action OnAdDismissed; + + /// + /// event for ad error + /// + public event Action OnAdError; + + private readonly string _slotId; + + private bool _isAdLoaded; + + protected readonly IBigoAd ADClient; + + public bool CallbackOnMainThread { get; set; } = true; + + private BigoAdBid _bid; + + protected BigoBaseAd(string id, IBigoAd adClient) + { + _slotId = id; + ADClient = adClient; + InitEvent(ADClient); + } + + private void InitEvent(IBigoAd adClient) + { + adClient.OnLoad += InvokeOnLoad; + adClient.OnLoadFailed += InvokeOnLoadFailed; + + adClient.OnAdShowed += InvokeOnAdShowed; + adClient.OnAdClicked += InvokeOnAdClicked; + adClient.OnAdDismissed += InvokeOnAdDismissed; + adClient.OnAdError += InvokeOnAdError; + } + + public void Load(T request) + { + if (_isAdLoaded) + { + InvokeOnLoad(); + } + if (string.IsNullOrEmpty(_slotId)) + { + InvokeOnLoadFailed(-1, "slotId must be not null"); + return; + } + + if (!BigoAdSdk.IsInitSuccess()) + { + InvokeOnLoadFailed(-1, "sdk has not init"); + return; + } + ADClient?.Load(_slotId, request); + } + + public virtual void Show() + { + _isAdLoaded = false; + ADClient?.Show(); + } + + public void DestroyAd() + { + ADClient?.Destroy(); + } + + public bool IsLoaded() + { + return _isAdLoaded; + } + + public bool IsExpired() + { + return ADClient == null ? false : ADClient.IsExpired(); + } + + public string GetExtraInfo(String key) + { + return ADClient == null ? "" : ADClient.GetExtraInfo(key); + } + + private void InvokeOnLoad() + { + OnLoad?.Invoke(); + _isAdLoaded = true; + } + + protected void InvokeOnLoadFailed(int errorCode, string errorMessage) + { + if (CallbackOnMainThread) + { + BigoDispatcher.PostTask((() => { OnLoadFailed?.Invoke(errorCode, errorMessage); })); + } + else + { + OnLoadFailed?.Invoke(errorCode, errorMessage); + } + } + + + private void InvokeOnAdShowed() + { + if (CallbackOnMainThread) + { + BigoDispatcher.PostTask((() => { OnAdShowed?.Invoke(); })); + } + else + { + OnAdShowed?.Invoke(); + } + } + + private void InvokeOnAdClicked() + { + if (CallbackOnMainThread) + { + BigoDispatcher.PostTask((() => { OnAdClicked?.Invoke(); })); + } + else + { + OnAdClicked?.Invoke(); + } + } + + private void InvokeOnAdDismissed() + { + if (CallbackOnMainThread) + { + BigoDispatcher.PostTask((() => { OnAdDismissed?.Invoke(); })); + } + else + { + OnAdDismissed?.Invoke(); + } + } + + private void InvokeOnAdError(int errorCode, string errorMessage) + { + if (CallbackOnMainThread) + { + BigoDispatcher.PostTask((() => { OnAdError?.Invoke(errorCode, errorMessage); })); + } + else + { + OnAdError?.Invoke(errorCode, errorMessage); + } + } + + public BigoAdBid GetBid() + { + if (ADClient == null) return null; + if (!ADClient.IsClientBidding()) return null; + if (_bid == null) + { + _bid = new BigoAdBid(ADClient); + } + return _bid; + } + + public class BigoAdBid : IClientBidding + { + protected readonly IBigoAd _ADClient; + + public BigoAdBid(IBigoAd ADClient) + { + _ADClient = ADClient; + } + /// get price + public double getPrice() + { + return _ADClient == null ? 0 : _ADClient.getPrice(); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + _ADClient?.notifyWin(secPrice, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + _ADClient?.notifyLoss(firstPrice, firstBidder, lossReason); + } + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoBaseAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoBaseAd.cs.meta new file mode 100644 index 0000000..f0dae98 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoBaseAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8554386bfcec3403cb6fab89c7a35f31 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoDispatcher.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoDispatcher.cs new file mode 100644 index 0000000..18f0d61 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoDispatcher.cs @@ -0,0 +1,86 @@ +namespace BigoAds.Scripts.Common +{ + using System; + using System.Collections.Generic; + using UnityEngine; + + /// + /// The unity thread dispatcher. + /// + [DisallowMultipleComponent] + internal sealed class BigoDispatcher : MonoBehaviour + { + private static bool _instanceCreated; + + // The thread safe task queue. + private static readonly List PostTasks = new List(); + + // The executing buffer. + private static readonly List Executing = new List(); + + static BigoDispatcher() + { + CreateInstance(); + } + + /// + /// Work thread post a task to the main thread. + /// + public static void PostTask(Action task) + { + lock (PostTasks) + { + PostTasks.Add(task); + } + } + + /// + /// Start to run this dispatcher. + /// + [RuntimeInitializeOnLoadMethod] + private static void CreateInstance() + { + if (_instanceCreated || !Application.isPlaying) return; + var go = new GameObject( + "BigoDispatcher", typeof(BigoDispatcher)); + DontDestroyOnLoad(go); + _instanceCreated = true; + } + + private void OnDestroy() + { + lock (PostTasks) + { + PostTasks.Clear(); + } + + Executing.Clear(); + } + + private void Update() + { + lock (PostTasks) + { + if (PostTasks.Count > 0) + { + Executing.AddRange(PostTasks); + PostTasks.Clear(); + } + } + + foreach (var task in Executing) + { + try + { + task(); + } + catch (Exception e) + { + Debug.LogError(e.Message, this); + } + } + + Executing.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoDispatcher.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoDispatcher.cs.meta new file mode 100644 index 0000000..95d2986 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/BigoDispatcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d1af23e5ee93476382ea747bb4b6985 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBannerAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBannerAd.cs new file mode 100644 index 0000000..b47ae5d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBannerAd.cs @@ -0,0 +1,10 @@ +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Common +{ + public interface IBannerAd : IBigoAd + { + void SetPosition(BigoPosition position); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBannerAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBannerAd.cs.meta new file mode 100644 index 0000000..07400ff --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBannerAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9632da3a0b8674b539385af7fec47c33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBigoAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBigoAd.cs new file mode 100644 index 0000000..8bebc72 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBigoAd.cs @@ -0,0 +1,22 @@ +using System; +using BigoAds.Scripts.Api; + +namespace BigoAds.Scripts.Common +{ + public interface IBigoAd : IClientBidding where T : BigoRequest + { + event Action OnLoad; + event Action OnLoadFailed; + event Action OnAdShowed; + event Action OnAdClicked; + event Action OnAdDismissed; + event Action OnAdError; + void Load(string slotId, T request); + bool IsLoaded(); + bool IsExpired(); + void Show(); + void Destroy(); + bool IsClientBidding(); + string GetExtraInfo(String key); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBigoAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBigoAd.cs.meta new file mode 100644 index 0000000..aedaab2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IBigoAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac3c835ae5b8f421192fb72d32c9c6c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientBidding.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientBidding.cs new file mode 100644 index 0000000..941cb45 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientBidding.cs @@ -0,0 +1,16 @@ +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Common +{ + public interface IClientBidding + { + /// get price + double getPrice(); + + ///notify win + void notifyWin(double secPrice, string secBidder); + + ///notify loss + void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientBidding.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientBidding.cs.meta new file mode 100644 index 0000000..d02114a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientBidding.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be474d5a8f44740eeac370fd98153d15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientFactory.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientFactory.cs new file mode 100644 index 0000000..9dd9700 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientFactory.cs @@ -0,0 +1,13 @@ +namespace BigoAds.Scripts.Common +{ + public interface IClientFactory + { + ISDK BuildSDKClient(); + IBannerAd BuildBannerAdClient(); + INativeAd BuildNativeAdClient(); + IInterstitialAd BuildInterstitialAdClient(); + IPopupAd BuildPopupAdClient(); + ISplashAd BuildSplashAdClient(); + IRewardedAd BuildRewardedAdClient(); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientFactory.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientFactory.cs.meta new file mode 100644 index 0000000..4061cfb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IClientFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b2cb5f6ac1b7f463db75ac0bfa7d7fbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IInterstitialAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IInterstitialAd.cs new file mode 100644 index 0000000..7678caf --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IInterstitialAd.cs @@ -0,0 +1,8 @@ +using BigoAds.Scripts.Api; + +namespace BigoAds.Scripts.Common +{ + public interface IInterstitialAd : IBigoAd + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IInterstitialAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IInterstitialAd.cs.meta new file mode 100644 index 0000000..4b86fca --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IInterstitialAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2d31ee1df8a074b81a5575e9a7735b2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/INativeAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/INativeAd.cs new file mode 100644 index 0000000..530387d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/INativeAd.cs @@ -0,0 +1,10 @@ +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Common +{ + public interface INativeAd : IBigoAd + { + void SetPosition(BigoPosition position); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/INativeAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/INativeAd.cs.meta new file mode 100644 index 0000000..2c2e818 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/INativeAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eef5c6b4f590c4ceaac635a2992576ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IPopupAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IPopupAd.cs new file mode 100644 index 0000000..9cf8489 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IPopupAd.cs @@ -0,0 +1,8 @@ +using BigoAds.Scripts.Api; + +namespace BigoAds.Scripts.Common +{ + public interface IPopupAd : IBigoAd + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IPopupAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IPopupAd.cs.meta new file mode 100644 index 0000000..f0866ad --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IPopupAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e767b9004c4f4ca19baa6f54c409c5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IRewardedAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IRewardedAd.cs new file mode 100644 index 0000000..2b549ab --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IRewardedAd.cs @@ -0,0 +1,10 @@ +using System; +using BigoAds.Scripts.Api; + +namespace BigoAds.Scripts.Common +{ + public interface IRewardedAd : IBigoAd + { + event Action OnUserEarnedReward; + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IRewardedAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IRewardedAd.cs.meta new file mode 100644 index 0000000..a705be0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/IRewardedAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b3baa8d362724d19997664f34f4320d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISDK.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISDK.cs new file mode 100644 index 0000000..67113a0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISDK.cs @@ -0,0 +1,40 @@ +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Common +{ + public interface ISDK + { + /// + /// Starts the Bigo SDK + /// + void Init(BigoAdConfig config, BigoAdSdk.InitResultDelegate initResultDelegate); + + //// + /// The SDK initialization state + //// + bool IsInitSuccess(); + + /////// + /// Bigo SDK version + /// //// + string GetSDKVersion(); + + + /////// + /// Bigo SDK version name + /// //// + string GetSDKVersionName(); + + /////// + /// Bigo SDK set user consent + /// //// + void SetUserConsent(ConsentOptions option, bool consent); + + /////// + /// Only works on Android + /// Bigo SDK set user consent + /// //// + void AddExtraHost(string country, string host); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISDK.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISDK.cs.meta new file mode 100644 index 0000000..5b97bc8 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISDK.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00ad18b48fa1047ee98bd415dd127f65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISplashAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISplashAd.cs new file mode 100644 index 0000000..3cf05a6 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISplashAd.cs @@ -0,0 +1,8 @@ +using BigoAds.Scripts.Api; + +namespace BigoAds.Scripts.Common +{ + public interface ISplashAd:IBigoAd + { + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISplashAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISplashAd.cs.meta new file mode 100644 index 0000000..6aa7ff1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Common/ISplashAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1105e67678354e71850311744a989c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms.meta new file mode 100644 index 0000000..842ddfd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f730f3e43d10941928ac676ed88c7ee4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android.meta new file mode 100644 index 0000000..9103522 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e595ff25130d84811aae9bbe30751d78 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.cs new file mode 100644 index 0000000..89fef60 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.cs @@ -0,0 +1,99 @@ +using UnityEngine; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Common; +using BigoAds.Scripts.Api.Constant; + +public class AdHelper +{ + public static void ShowBannerAd(AndroidJavaObject bannerAd) + { + ShowBannerAd(bannerAd, BigoPosition.Bottom); + } + + public static void ShowBannerAd(AndroidJavaObject bannerAd, BigoPosition position) + { + if (bannerAd == null) return; + var adView = bannerAd.Call("adView"); + SetViewPosition(adView, position); + } + + public static void ShowNativeAd(AndroidJavaObject nativeAd) + { + ShowNativeAd(nativeAd, BigoPosition.Bottom); + } + + public static void RemoveAdView() + { + var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); + var activity = unityPlayer.GetStatic("currentActivity"); + new AndroidJavaClass("sg.bigo.ads.AdHelper").CallStatic("removeAdView", activity); + } + + public static void ShowNativeAd(AndroidJavaObject nativeAd, BigoPosition position) + { + if (nativeAd == null) return; + var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); + var activity = unityPlayer.GetStatic("currentActivity"); + var adView = new AndroidJavaClass("sg.bigo.ads.AdHelper").CallStatic("renderNativeAdView", activity, nativeAd, "layout_bigo_native_ad"); + SetViewPosition(adView, position); + } + + public static void SetViewPosition(AndroidJavaObject adView, BigoPosition position) + { + var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); + var activity = unityPlayer.GetStatic("currentActivity"); + int positionInt; + switch (position) + { + case BigoPosition.Top: + positionInt = 48; + break; + case BigoPosition.Middle: + positionInt = 16; + break; + case BigoPosition.Bottom: + default: + positionInt = 80; + break; + } + new AndroidJavaClass("sg.bigo.ads.AdHelper").CallStatic("addAdView", activity, adView, positionInt); + } + + + public abstract class Task : AndroidJavaProxy + { + public Task() : base("java.lang.Runnable") + { + } + + public abstract void run(); + } + + public static void DestroyAd(AndroidJavaObject ad) + { + if (ad != null) { + PostToAndroidMainThread(new DestryAdTask(ad)); + } + } + + private class DestryAdTask : Task + { + public AndroidJavaObject Ad; + + public DestryAdTask(AndroidJavaObject ad) + { + this.Ad = ad; + } + + public override void run() + { + Ad.Call("destroy"); + AdHelper.RemoveAdView(); + } + } + + public static void PostToAndroidMainThread(Task task) + { + new AndroidJavaClass("sg.bigo.ads.AdHelper").CallStatic("postToAndroidMainThread", task); + } +} \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.cs.meta new file mode 100644 index 0000000..a1fed7c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7b17fadc228c48b6900058970865c98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.java b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.java new file mode 100644 index 0000000..6900850 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.java @@ -0,0 +1,106 @@ +package sg.bigo.ads; + +import android.app.Activity; +import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.FrameLayout; +import android.widget.ImageView; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.List; + +import sg.bigo.ads.api.AdOptionsView; +import sg.bigo.ads.api.AdTag; +import sg.bigo.ads.api.MediaView; +import sg.bigo.ads.api.NativeAd; + +public class AdHelper { + + public static void postToAndroidMainThread(Runnable runnable) { + new Handler(Looper.getMainLooper()).post(runnable); + } + + public static void addAdView(Activity activity, View adView, int position) { + if (adView == null) return; + ViewGroup contentView = activity.findViewById(android.R.id.content); + String tag = "ad_container"; + ViewGroup adContainer = contentView.findViewWithTag(tag); + if (adContainer == null) { + adContainer = new FrameLayout(activity); + adContainer.setTag(tag); + } + contentView.removeView(adContainer); + FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, position); + contentView.addView(adContainer, layoutParams); + adContainer.removeAllViews(); + adContainer.addView(adView); + } + + public static void removeAdView(Activity activity) + { + ViewGroup contentView = activity.findViewById(android.R.id.content); + String tag = "ad_container"; + ViewGroup adContainer = contentView.findViewWithTag(tag); + if (adContainer == null) return; + adContainer.removeAllViews(); + } + + public static int getLayoutIdByResName(Activity activity, String resName) { + return activity.getResources().getIdentifier(resName, "layout", activity.getPackageName()); + } + + public static int getDrawableIdByResName(Activity activity, String resName) { + return activity.getResources().getIdentifier(resName, "drawable", activity.getPackageName()); + } + + public static View renderNativeAdView(Activity activity, NativeAd nativeAd, String layoutResName) { + int layoutId = getLayoutIdByResName(activity, layoutResName); + if (layoutId <= 0) { + Log.w("BigoAds-Unity", "Invalid res name: " + layoutResName); + return null; + } + View view = LayoutInflater.from(activity).inflate(layoutId, null, false); + if (!(view instanceof ViewGroup)) { + return view; + } + ViewGroup nativeView = (ViewGroup) view; + TextView titleView = findViewByIdName(nativeView, "native_title"); + TextView descriptionView = findViewByIdName(nativeView, "native_description"); + TextView warningView = findViewByIdName(nativeView, "native_warning"); + Button ctaButton = findViewByIdName(nativeView, "native_cta"); + MediaView mediaView = findViewByIdName(nativeView, "native_media_view"); + ImageView iconView = findViewByIdName(nativeView, "native_icon_view"); + AdOptionsView optionsView = findViewByIdName(nativeView, "native_option_view"); + + titleView.setTag(AdTag.TITLE); + descriptionView.setTag(AdTag.DESCRIPTION); + warningView.setTag(AdTag.WARNING); + ctaButton.setTag(AdTag.CALL_TO_ACTION); + + titleView.setText(nativeAd.getTitle()); + descriptionView.setText(nativeAd.getDescription()); + warningView.setText(nativeAd.getWarning()); + ctaButton.setText(nativeAd.getCallToAction()); + + List clickableViews = new ArrayList<>(); + clickableViews.add(titleView); + clickableViews.add(descriptionView); + clickableViews.add(ctaButton); + nativeAd.registerViewForInteraction(nativeView, mediaView, iconView, optionsView, clickableViews); + return nativeView; + } + + private static T findViewByIdName(ViewGroup parent, String name) { + Context context = parent.getContext(); + int id = context.getResources().getIdentifier(name, "id", context.getPackageName()); + return parent.findViewById(id); + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.java.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.java.meta new file mode 100644 index 0000000..ab4bd1d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdHelper.java.meta @@ -0,0 +1,32 @@ +fileFormatVersion: 2 +guid: 0edf95022edcd4f9d8919629603eb5e1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Android: Android + second: + enabled: 1 + settings: {} + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdInteractionCallback.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdInteractionCallback.cs new file mode 100644 index 0000000..3735717 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdInteractionCallback.cs @@ -0,0 +1,53 @@ +#if UNITY_ANDROID + +using System; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + public class AdInteractionCallback : AndroidJavaProxy + { + private readonly Action OnAdShowed; + protected readonly Action OnAdDismissed; + private readonly Action OnAdClicked; + private readonly Action OnAdError; + private const string ListenerName = AndroidPlatformTool.ClassPackage + ".api.AdInteractionListener"; + + public AdInteractionCallback(Action onAdShowed, Action onAdClicked, Action onAdDismissed, Action onAdError, + string listenerName = ListenerName) : base(listenerName) + { + OnAdShowed = onAdShowed; + OnAdDismissed = onAdDismissed; + OnAdClicked = onAdClicked; + OnAdError = onAdError; + } + + public void onAdImpression() + { + OnAdShowed?.Invoke(); + } + + public void onAdClosed() + { + OnAdDismissed?.Invoke(); + } + + public void onAdClicked() + { + OnAdClicked?.Invoke(); + } + + public void onAdError(AndroidJavaObject error) + { + var code = error.Call("getCode"); + var message = error.Call("getMessage"); + OnAdError?.Invoke(code, message); + } + + public void onAdOpened() + { + + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdInteractionCallback.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdInteractionCallback.cs.meta new file mode 100644 index 0000000..9524d94 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdInteractionCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eeaf0303131624578b3997f9db6cb014 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdLoadCallback.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdLoadCallback.cs new file mode 100644 index 0000000..96565b4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdLoadCallback.cs @@ -0,0 +1,33 @@ +#if UNITY_ANDROID +using System; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + public class AdLoadCallback : AndroidJavaProxy + { + private readonly Action onLoad; + private readonly Action onLoadFailed; + + public AdLoadCallback(Action onLoad, Action onLoadFailed) : base( + AndroidPlatformTool.ClassPackage + ".api.AdLoadListener") + { + this.onLoad = onLoad; + this.onLoadFailed = onLoadFailed; + } + + public void onError(AndroidJavaObject error) + { + var code = error.Call("getCode"); + var message = error.Call("getMessage"); + onLoadFailed?.Invoke(code, message); + } + + public void onAdLoaded(AndroidJavaObject ad) + { + onLoad?.Invoke(ad); + } + } + +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdLoadCallback.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdLoadCallback.cs.meta new file mode 100644 index 0000000..0fb8eef --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AdLoadCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4d06d46018574b7bae1c9dc60ef6122 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidBannerAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidBannerAd.cs new file mode 100644 index 0000000..d541307 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidBannerAd.cs @@ -0,0 +1,147 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidBannerAd : IBannerAd + { + private const string BannerAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.BannerAdLoader$Builder"; + private const string BannerAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.BannerAdRequest$Builder"; + private const string BannerSizeClassName = AndroidPlatformTool.ClassPackage + ".api.AdSize"; + private const string BannerBuildMethod = "build"; + private const string BannerAdLoaderBuildMethod = "withAdLoadListener"; + private const string BannerAdLoaderExtMethod = "withExt"; + + + private AndroidJavaObject BannerAd; + + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + + public AndroidBannerAd() + { + OnAdLoad += ((ad) => + { + BannerAd = ad; + OnLoad?.Invoke(); + }); + } + + private event Action OnAdLoad; + + public void Load(string slotId, BigoBannerRequest request) + { + if (request == null) + { + return; + } + var bannerLoaderBuilder = new AndroidJavaObject(BannerAdLoaderClassName); + bannerLoaderBuilder?.Call(BannerAdLoaderExtMethod, request.ExtraInfoJson); + bannerLoaderBuilder?.Call(BannerAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed)); + var bannerLoader = bannerLoaderBuilder?.Call(BannerBuildMethod); + + var bannerRequestBuilder = new AndroidJavaObject(BannerAdRequestClassName); + bannerRequestBuilder?.Call("withSlotId", slotId); + bannerRequestBuilder?.Call("withAge", request.Age); + bannerRequestBuilder?.Call("withGender", (int)(request.Gender)); + bannerRequestBuilder?.Call("withActivatedTime", request.ActivatedTime); + + var bannerSize = new AndroidJavaClass(BannerSizeClassName).GetStatic("BANNER"); + int width = request.Size.Width; + int height = request.Size.Height; + if (width == 300 && height == 250) { + bannerSize = new AndroidJavaClass(BannerSizeClassName).GetStatic("MEDIUM_RECTANGLE"); + } + AndroidJavaClass arrayClass = new AndroidJavaClass("java.lang.reflect.Array"); + AndroidJavaObject arrayObject = arrayClass.CallStatic("newInstance", new AndroidJavaClass(BannerSizeClassName), 1); + arrayClass.CallStatic("set", arrayObject, 0, bannerSize); + + bannerRequestBuilder?.Call("withAdSizes", arrayObject); + + var bannerRequest = bannerRequestBuilder?.Call(BannerBuildMethod); + + bannerLoader?.Call("loadAd", bannerRequest); + } + + public bool IsLoaded() + { + return BannerAd != null; + } + + public void Show() + { + BannerAd?.Call("setAdInteractionListener", new AdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError)); + AndroidPlatformTool.CallMethodOnMainThread(() => + { + AdHelper.ShowBannerAd(BannerAd); + }); + } + + public void Destroy() + { + //post to main + AdHelper.DestroyAd(BannerAd); + } + + public bool IsExpired() + { + + return BannerAd != null && BannerAd.Call("isExpired"); + } + + public void SetPosition(BigoPosition position) + { + AndroidPlatformTool.CallMethodOnMainThread(() => + { + AdHelper.ShowBannerAd(BannerAd, position); + }); + } + + public bool IsClientBidding() + { + if (BannerAd == null) return false; + AndroidJavaObject bid = BannerAd.Call("getBid"); + return bid != null; + } + + public string GetExtraInfo(string key) + { + if (BannerAd == null) return ""; + return BannerAd.Call("getExtraInfo", key); + } + + /// get price + public double getPrice() + { + if (BannerAd == null) return 0; + AndroidJavaObject bid = BannerAd.Call("getBid"); + return bid == null ? 0 : bid.Call("getPrice"); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + if (BannerAd == null) return; + var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", secPrice); + BannerAd.Call("getBid")?.Call("notifyWin", secPriceDouble, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + if (BannerAd == null) return; + var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", firstPrice); + BannerAd.Call("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason); + } + + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidBannerAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidBannerAd.cs.meta new file mode 100644 index 0000000..133fd1f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidBannerAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 46ee6aacd6a2546ce8e23dd89e5d27d4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidClientFactory.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidClientFactory.cs new file mode 100644 index 0000000..45d6f26 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidClientFactory.cs @@ -0,0 +1,49 @@ +#if UNITY_ANDROID + +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidClientFactory : IClientFactory + { + /// + /// + /// + /// + public ISDK BuildSDKClient() + { + return new BigoSdkClient(); + } + + public IBannerAd BuildBannerAdClient() + { + return new AndroidBannerAd(); + } + + public INativeAd BuildNativeAdClient() + { + return new AndroidNativeAd(); + } + + public IInterstitialAd BuildInterstitialAdClient() + { + return new AndroidInterstitialAd(); + } + + public IPopupAd BuildPopupAdClient() + { + return new AndroidPopupAd(); + } + + public ISplashAd BuildSplashAdClient() + { + return new AndroidSplashAd(); + } + + public IRewardedAd BuildRewardedAdClient() + { + return new AndroidRewardedAd(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidClientFactory.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidClientFactory.cs.meta new file mode 100644 index 0000000..8e800fb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidClientFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1809d4d3a8b034fa88284da804f66a71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidInterstitialAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidInterstitialAd.cs new file mode 100644 index 0000000..0beed80 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidInterstitialAd.cs @@ -0,0 +1,124 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidInterstitialAd : IInterstitialAd + { + private const string InterstitialAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.InterstitialAdLoader$Builder"; + private const string InterstitialAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.InterstitialAdRequest$Builder"; + private const string InterstitialBuildMethod = "build"; + private const string InterstitialAdLoaderBuildMethod = "withAdLoadListener"; + private const string InterstitialAdLoaderExtMethod = "withExt"; + + private AndroidJavaObject InterstitialAd; + + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + + public AndroidInterstitialAd() + { + OnAdLoad += ((ad) => + { + InterstitialAd = ad; + OnLoad?.Invoke(); + }); + } + + private event Action OnAdLoad; + + public void Load(string slotId, BigoInterstitialRequest request) + { + if (request == null) + { + return; + } + var InterstitialLoaderBuilder = new AndroidJavaObject(InterstitialAdLoaderClassName); + InterstitialLoaderBuilder?.Call(InterstitialAdLoaderExtMethod, request.ExtraInfoJson); + InterstitialLoaderBuilder?.Call(InterstitialAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed)); + var InterstitialLoader = InterstitialLoaderBuilder?.Call(InterstitialBuildMethod); + + var InterstitialRequestBuilder = new AndroidJavaObject(InterstitialAdRequestClassName); + InterstitialRequestBuilder?.Call("withSlotId", slotId); + InterstitialRequestBuilder?.Call("withAge", request.Age); + InterstitialRequestBuilder?.Call("withGender", (int)(request.Gender)); + InterstitialRequestBuilder?.Call("withActivatedTime", request.ActivatedTime); + + var InterstitialRequest = InterstitialRequestBuilder?.Call(InterstitialBuildMethod); + + InterstitialLoader?.Call("loadAd", InterstitialRequest); + } + + public bool IsLoaded() + { + return InterstitialAd != null; + } + + public void Show() + { + InterstitialAd?.Call("setAdInteractionListener", new AdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError)); + AndroidPlatformTool.CallMethodOnMainThread(() => + { + InterstitialAd?.Call("show"); + }); + + } + + public void Destroy() + { + //post to main + AdHelper.DestroyAd(InterstitialAd); + } + + public bool IsExpired() + { + return InterstitialAd != null && InterstitialAd.Call("isExpired"); + } + + public bool IsClientBidding() + { + if (InterstitialAd == null) return false; + AndroidJavaObject bid = InterstitialAd.Call("getBid"); + return bid != null; + } + + public string GetExtraInfo(string key) + { + if (InterstitialAd == null) return ""; + return InterstitialAd.Call("getExtraInfo", key); + } + + /// get price + public double getPrice() + { + if (InterstitialAd == null) return 0; + AndroidJavaObject bid = InterstitialAd.Call("getBid"); + return bid == null ? 0 : bid.Call("getPrice"); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + if (InterstitialAd == null) return; + var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", secPrice); + InterstitialAd.Call("getBid")?.Call("notifyWin", secPriceDouble, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + if (InterstitialAd == null) return; + var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", firstPrice); + InterstitialAd.Call("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidInterstitialAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidInterstitialAd.cs.meta new file mode 100644 index 0000000..2218096 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidInterstitialAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 087385bbddf0541e5be511be304caee8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidNativeAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidNativeAd.cs new file mode 100644 index 0000000..9cbd5a7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidNativeAd.cs @@ -0,0 +1,133 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidNativeAd : INativeAd + { + private const string NativeAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.NativeAdLoader$Builder"; + private const string NativeAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.NativeAdRequest$Builder"; + private const string NativeBuildMethod = "build"; + private const string NativeAdLoaderBuildMethod = "withAdLoadListener"; + private const string NativeAdLoaderExtMethod = "withExt"; + + private AndroidJavaObject NativeAd; + + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + + public AndroidNativeAd() + { + OnAdLoad += ((ad) => + { + NativeAd = ad; + OnLoad?.Invoke(); + }); + } + + private event Action OnAdLoad; + + public void Load(string slotId, BigoNativeRequest request) + { + if (request == null) + { + return; + } + var nativeLoaderBuilder = new AndroidJavaObject(NativeAdLoaderClassName); + nativeLoaderBuilder?.Call(NativeAdLoaderExtMethod, request.ExtraInfoJson); + nativeLoaderBuilder?.Call(NativeAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed)); + var nativeLoader = nativeLoaderBuilder?.Call(NativeBuildMethod); + + var nativeRequestBuilder = new AndroidJavaObject(NativeAdRequestClassName); + nativeRequestBuilder?.Call("withSlotId", slotId); + nativeRequestBuilder?.Call("withAge", request.Age); + nativeRequestBuilder?.Call("withGender", (int)(request.Gender)); + nativeRequestBuilder?.Call("withActivatedTime", request.ActivatedTime); + + var nativeRequest = nativeRequestBuilder?.Call(NativeBuildMethod); + + nativeLoader?.Call("loadAd", nativeRequest); + } + + public bool IsLoaded() + { + return NativeAd != null; + } + + public void Show() + { + NativeAd?.Call("setAdInteractionListener", new AdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError)); + + AndroidPlatformTool.CallMethodOnMainThread(() => + { + AdHelper.ShowNativeAd(NativeAd); + }); + + } + + public void Destroy() + { + AdHelper.DestroyAd(NativeAd); + } + + public bool IsExpired() + { + + return NativeAd != null && NativeAd.Call("isExpired"); + } + + public void SetPosition(BigoPosition position) + { + AndroidPlatformTool.CallMethodOnMainThread(() => + { + AdHelper.ShowNativeAd(NativeAd, position); + }); + } + + public bool IsClientBidding() + { + if (NativeAd == null) return false; + AndroidJavaObject bid = NativeAd.Call("getBid"); + return bid != null; + } + + public string GetExtraInfo(string key) + { + if (NativeAd == null) return ""; + return NativeAd.Call("getExtraInfo", key); + } + + /// get price + public double getPrice() + { + if (NativeAd == null) return 0; + AndroidJavaObject bid = NativeAd.Call("getBid"); + return bid == null ? 0 : bid.Call("getPrice"); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + if (NativeAd == null) return; + var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", secPrice); + NativeAd.Call("getBid")?.Call("notifyWin", secPriceDouble, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + if (NativeAd == null) return; + var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", firstPrice); + NativeAd.Call("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidNativeAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidNativeAd.cs.meta new file mode 100644 index 0000000..0369f2d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidNativeAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04dd9e8545a394cc0b0bd15cfe325045 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPlatformTool.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPlatformTool.cs new file mode 100644 index 0000000..208fcbb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPlatformTool.cs @@ -0,0 +1,101 @@ +#if UNITY_ANDROID + +using System; +using System.Collections.Generic; +using System.Text; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + internal static class AndroidPlatformTool + { + public const string ClassPackage = "sg.bigo.ads"; + private const string UnityPlayerClassName = "com.unity3d.player.UnityPlayer"; + private const string CurrentActivityMethod = "currentActivity"; + private const string ResourceUtilClassName = ClassPackage + ".ResourceUtil"; + private const string AdConfigClassName = ClassPackage + ".api.AdConfig$Builder"; + + public static AndroidJavaObject GetGameActivity() + { + return new AndroidJavaClass(UnityPlayerClassName).GetStatic(CurrentActivityMethod); + } + + public static AndroidJavaObject GetBigoConfig(BigoAdConfig config) + { + var builder = new AndroidJavaObject(AdConfigClassName); + if (config != null) + { + void CallNativeFunction(string methodName, T arg) + { + builder.Call(methodName, arg); + } + + if (!string.IsNullOrEmpty(config.AppId)) + { + CallNativeFunction("setAppId", config.AppId); + } + + if (config.DebugLog) //default value is false + { + Debug.Log("set debug true"); + CallNativeFunction("setDebug", true); + } + + if (!string.IsNullOrEmpty(config.Channel)) + { + CallNativeFunction("setChannel", config.Channel); + } + + if (config.Age > 0) + { + CallNativeFunction("setAge", config.Age); + } + + if (config.Gender > 0) + { + CallNativeFunction("setGender", config.Gender); + } + + if (config.ActivatedTime > 0) + { + CallNativeFunction("setActivatedTime", config.ActivatedTime); + } + + foreach (KeyValuePair item in config.ExtraDictionary) + { + Debug.Log($"bigo sdk config extra:" + item.Key + "=" + item.Value); + builder.Call("addExtra", item.Key, item.Value); + } + } + + return builder.Call("build"); + } + + public static AndroidJavaObject GetAdRequest(BigoRequest request) + { + switch (request) + { + case BigoBannerRequest _: + break; + case BigoNativeRequest _: + break; + case BigoSplashRequest _: + break; + case BigoInterstitialRequest _: + break; + case BigoRewardedRequest _: + break; + } + + return null; + } + + public static void CallMethodOnMainThread(Action task) + { + GetGameActivity()?.Call("runOnUiThread", new AndroidJavaRunnable(task)); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPlatformTool.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPlatformTool.cs.meta new file mode 100644 index 0000000..f643aef --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPlatformTool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec73d6fa8edaa4c619d96f6db2789dd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPopupAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPopupAd.cs new file mode 100644 index 0000000..81382d7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPopupAd.cs @@ -0,0 +1,124 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidPopupAd : IPopupAd + { + private const string PopupAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.popup.PopupAdLoader$Builder"; + private const string PopupAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.popup.PopupAdRequest$Builder"; + private const string PopupBuildMethod = "build"; + private const string PopupAdLoaderBuildMethod = "withAdLoadListener"; + private const string PopupAdLoaderExtMethod = "withExt"; + + private AndroidJavaObject PopupAd; + + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + + public AndroidPopupAd() + { + OnAdLoad += ((ad) => + { + PopupAd = ad; + OnLoad?.Invoke(); + }); + } + + private event Action OnAdLoad; + + public void Load(string slotId, BigoPopupRequest request) + { + if (request == null) + { + return; + } + var PopupLoaderBuilder = new AndroidJavaObject(PopupAdLoaderClassName); + PopupLoaderBuilder?.Call(PopupAdLoaderExtMethod, request.ExtraInfoJson); + PopupLoaderBuilder?.Call(PopupAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed)); + var PopupLoader = PopupLoaderBuilder?.Call(PopupBuildMethod); + + var PopupRequestBuilder = new AndroidJavaObject(PopupAdRequestClassName); + PopupRequestBuilder?.Call("withSlotId", slotId); + PopupRequestBuilder?.Call("withAge", request.Age); + PopupRequestBuilder?.Call("withGender", (int)(request.Gender)); + PopupRequestBuilder?.Call("withActivatedTime", request.ActivatedTime); + + var PopupRequest = PopupRequestBuilder?.Call(PopupBuildMethod); + + PopupLoader?.Call("loadAd", PopupRequest); + } + + public bool IsLoaded() + { + return PopupAd != null; + } + + public void Show() + { + PopupAd?.Call("setAdInteractionListener", new AdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError)); + AndroidPlatformTool.CallMethodOnMainThread(() => + { + PopupAd?.Call("show"); + }); + + } + + public void Destroy() + { + //post to main + AdHelper.DestroyAd(PopupAd); + } + + public bool IsExpired() + { + return PopupAd != null && PopupAd.Call("isExpired"); + } + + public bool IsClientBidding() + { + if (PopupAd == null) return false; + AndroidJavaObject bid = PopupAd.Call("getBid"); + return bid != null; + } + + public string GetExtraInfo(string key) + { + if (PopupAd == null) return ""; + return PopupAd.Call("getExtraInfo", key); + } + + /// get price + public double getPrice() + { + if (PopupAd == null) return 0; + AndroidJavaObject bid = PopupAd.Call("getBid"); + return bid == null ? 0 : bid.Call("getPrice"); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + if (PopupAd == null) return; + var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", secPrice); + PopupAd.Call("getBid")?.Call("notifyWin", secPriceDouble, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + if (PopupAd == null) return; + var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", firstPrice); + PopupAd.Call("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPopupAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPopupAd.cs.meta new file mode 100644 index 0000000..595df40 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidPopupAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34628c2993e174780bc5786dff90c900 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidRewardedAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidRewardedAd.cs new file mode 100644 index 0000000..3e2f204 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidRewardedAd.cs @@ -0,0 +1,125 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidRewardedAd : IRewardedAd + { + private const string RewardedAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.RewardVideoAdLoader$Builder"; + private const string RewardedAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.RewardVideoAdRequest$Builder"; + private const string RewardedAdBuildMethod = "build"; + private const string RewardedAdLoaderBuildMethod = "withAdLoadListener"; + private const string RewardedAdLoaderExtMethod = "withExt"; + + private AndroidJavaObject RewardedAd; + + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + public event Action OnUserEarnedReward; + + public AndroidRewardedAd() + { + OnAdLoad += ((ad) => + { + RewardedAd = ad; + OnLoad?.Invoke(); + }); + } + + private event Action OnAdLoad; + + public void Load(string slotId, BigoRewardedRequest request) + { + if (request == null) + { + return; + } + var rewardedAdLoaderBuilder = new AndroidJavaObject(RewardedAdLoaderClassName); + rewardedAdLoaderBuilder?.Call(RewardedAdLoaderExtMethod, request.ExtraInfoJson); + rewardedAdLoaderBuilder?.Call(RewardedAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed)); + var rewardedAdLoader = rewardedAdLoaderBuilder?.Call(RewardedAdBuildMethod); + + var rewardedAdRequestBuilder = new AndroidJavaObject(RewardedAdRequestClassName); + rewardedAdRequestBuilder?.Call("withSlotId", slotId); + rewardedAdRequestBuilder?.Call("withAge", request.Age); + rewardedAdRequestBuilder?.Call("withGender", (int)(request.Gender)); + rewardedAdRequestBuilder?.Call("withActivatedTime", request.ActivatedTime); + + var RewardedAdRequest = rewardedAdRequestBuilder?.Call(RewardedAdBuildMethod); + + rewardedAdLoader?.Call("loadAd", RewardedAdRequest); + } + + public bool IsLoaded() + { + return RewardedAd != null; + } + + public void Show() + { + RewardedAd?.Call("setAdInteractionListener", new RewardedAdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError, OnUserEarnedReward)); + AndroidPlatformTool.CallMethodOnMainThread(() => + { + RewardedAd?.Call("show"); + }); + + } + + public void Destroy() + { + //post to main + AdHelper.DestroyAd(RewardedAd); + } + + public bool IsExpired() + { + return RewardedAd != null && RewardedAd.Call("isExpired"); + } + + public bool IsClientBidding() + { + if (RewardedAd == null) return false; + AndroidJavaObject bid = RewardedAd.Call("getBid"); + return bid != null; + } + + public string GetExtraInfo(string key) + { + if (RewardedAd == null) return ""; + return RewardedAd.Call("getExtraInfo", key); + } + + /// get price + public double getPrice() + { + if (RewardedAd == null) return 0; + AndroidJavaObject bid = RewardedAd.Call("getBid"); + return bid == null ? 0 : bid.Call("getPrice"); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + if (RewardedAd == null) return; + var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", secPrice); + RewardedAd.Call("getBid")?.Call("notifyWin", secPriceDouble, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + if (RewardedAd == null) return; + var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", firstPrice); + RewardedAd.Call("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidRewardedAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidRewardedAd.cs.meta new file mode 100644 index 0000000..d075733 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidRewardedAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6bca6ddceb592449c9606175e8f5f77e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidSplashAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidSplashAd.cs new file mode 100644 index 0000000..ae9afce --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidSplashAd.cs @@ -0,0 +1,124 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + class AndroidSplashAd : ISplashAd + { + private const string SplashAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.SplashAdLoader$Builder"; + private const string SplashAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.SplashAdRequest$Builder"; + private const string SplashBuildMethod = "build"; + private const string SplashAdLoaderBuildMethod = "withAdLoadListener"; + private const string SplashAdLoaderExtMethod = "withExt"; + + private AndroidJavaObject SplashAd; + + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + + public AndroidSplashAd() + { + OnAdLoad += ((ad) => + { + SplashAd = ad; + OnLoad?.Invoke(); + }); + } + + private event Action OnAdLoad; + + public void Load(string slotId, BigoSplashRequest request) + { + if (request == null) + { + return; + } + var SplashLoaderBuilder = new AndroidJavaObject(SplashAdLoaderClassName); + SplashLoaderBuilder?.Call(SplashAdLoaderExtMethod, request.ExtraInfoJson); + SplashLoaderBuilder?.Call(SplashAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed)); + var SplashLoader = SplashLoaderBuilder?.Call(SplashBuildMethod); + + var SplashRequestBuilder = new AndroidJavaObject(SplashAdRequestClassName); + SplashRequestBuilder?.Call("withSlotId", slotId); + SplashRequestBuilder?.Call("withAge", request.Age); + SplashRequestBuilder?.Call("withGender", (int)(request.Gender)); + SplashRequestBuilder?.Call("withActivatedTime", request.ActivatedTime); + + var SplashRequest = SplashRequestBuilder?.Call(SplashBuildMethod); + + SplashLoader?.Call("loadAd", SplashRequest); + } + + public bool IsLoaded() + { + return SplashAd != null; + } + + public void Show() + { + SplashAd?.Call("setAdInteractionListener", new SplashAdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError)); + AndroidPlatformTool.CallMethodOnMainThread(() => + { + SplashAd?.Call("show"); + }); + + } + + public void Destroy() + { + //post to main + AdHelper.DestroyAd(SplashAd); + } + + public bool IsExpired() + { + return SplashAd != null && SplashAd.Call("isExpired"); + } + + public bool IsClientBidding() + { + if (SplashAd == null) return false; + AndroidJavaObject bid = SplashAd.Call("getBid"); + return bid != null; + } + + public string GetExtraInfo(string key) + { + if (SplashAd == null) return ""; + return SplashAd.Call("getExtraInfo", key); + } + + /// get price + public double getPrice() + { + if (SplashAd == null) return 0; + AndroidJavaObject bid = SplashAd.Call("getBid"); + return bid == null ? 0 : bid.Call("getPrice"); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + if (SplashAd == null) return; + var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", secPrice); + SplashAd.Call("getBid")?.Call("notifyWin", secPriceDouble, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + if (SplashAd == null) return; + var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic ("valueOf", firstPrice); + SplashAd.Call("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidSplashAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidSplashAd.cs.meta new file mode 100644 index 0000000..23d0ec2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/AndroidSplashAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdf1866c87531416d8159aae83c6e470 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/BigoSdkClient.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/BigoSdkClient.cs new file mode 100644 index 0000000..98acbc9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/BigoSdkClient.cs @@ -0,0 +1,99 @@ +#if UNITY_ANDROID + +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Common; +using UnityEngine; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Platforms.Android +{ + class BigoSdkClient : ISDK + { + private const string SDKClientClassName = AndroidPlatformTool.ClassPackage + ".BigoAdSdk"; + private const string InitMethod = "initialize"; + private const string InitSuccessMethod = "isInitialized"; + private const string SDKVersionMethod = "getSDKVersion"; + private const string InitListenerInterfaceName = AndroidPlatformTool.ClassPackage + ".BigoAdSdk$InitListener"; + private const string ConsentOptionsClassName = AndroidPlatformTool.ClassPackage + ".ConsentOptions"; + + + public void Init(BigoAdConfig config, BigoAdSdk.InitResultDelegate initResultDelegate) + { + InvokeNativeMethod(InitMethod, AndroidPlatformTool.GetGameActivity(), + AndroidPlatformTool.GetBigoConfig(config), + new InitCallBack(initResultDelegate)); + } + + public bool IsInitSuccess() + { + return InvokeNativeMethod(InitSuccessMethod); + } + + public string GetSDKVersion() + { + return InvokeNativeMethod("getSDKVersion"); + } + + public string GetSDKVersionName() + { + return InvokeNativeMethod("getSDKVersionName"); + } + + public void SetUserConsent(ConsentOptions option, bool consent) + { + var clazz = new AndroidJavaClass(ConsentOptionsClassName); + AndroidJavaObject obj = null; + switch (option) + { + case ConsentOptions.GDPR: + obj = clazz.GetStatic("GDPR"); + break; + case ConsentOptions.CCPA: + obj = clazz.GetStatic("CCPA"); + break; + case ConsentOptions.LGPD: + obj = clazz.GetStatic("LGPD"); + break; + case ConsentOptions.COPPA: + obj = clazz.GetStatic("COPPA"); + break; + default: + break; + } + + InvokeNativeMethod("setUserConsent", AndroidPlatformTool.GetGameActivity(), obj, consent); + } + + public void AddExtraHost(string country, string host) + { + InvokeNativeMethod("addExtraHost", country, host); + } + + + private static void InvokeNativeMethod(string methodName, params object[] args) + { + new AndroidJavaClass(SDKClientClassName).CallStatic(methodName, args); + } + + private static T InvokeNativeMethod(string methodName, params object[] args) + { + return new AndroidJavaClass(SDKClientClassName).CallStatic(methodName, args); + } + + private class InitCallBack : AndroidJavaProxy + { + private event BigoAdSdk.InitResultDelegate InitListener; + + public InitCallBack(BigoAdSdk.InitResultDelegate initResultDelegate) : base(InitListenerInterfaceName) + { + this.InitListener = initResultDelegate; + } + + public void onInitialized() + { + InitListener?.Invoke(); + } + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/BigoSdkClient.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/BigoSdkClient.cs.meta new file mode 100644 index 0000000..aa9e2ee --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/BigoSdkClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a768d78eefdf84ba4bcbfa8077fe6a62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/RewardedAdInteractionCallback.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/RewardedAdInteractionCallback.cs new file mode 100644 index 0000000..6774e3e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/RewardedAdInteractionCallback.cs @@ -0,0 +1,27 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + public class RewardedAdInteractionCallback : AdInteractionCallback + { + private event Action OnUserEarnedReward; + + private const string ListenerName = AndroidPlatformTool.ClassPackage + ".api.RewardAdInteractionListener"; + + public RewardedAdInteractionCallback(Action onAdShowed, Action onAdClicked, Action onAdDismissed, Action onAdError, + Action userEarnedReward) : base( + onAdShowed, onAdClicked, onAdDismissed, onAdError, ListenerName) + { + OnUserEarnedReward = userEarnedReward; + } + + public void onAdRewarded() + { + OnUserEarnedReward?.Invoke(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/RewardedAdInteractionCallback.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/RewardedAdInteractionCallback.cs.meta new file mode 100644 index 0000000..6645f1d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/RewardedAdInteractionCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 679833dea127f43cebbb043ff2a1c2f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/SplashAdInteractionCallback.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/SplashAdInteractionCallback.cs new file mode 100644 index 0000000..854829d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/SplashAdInteractionCallback.cs @@ -0,0 +1,29 @@ +#if UNITY_ANDROID +using System; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.Android +{ + public class SplashAdInteractionCallback : AdInteractionCallback + { + private const string ListenerName = AndroidPlatformTool.ClassPackage + ".api.SplashAdInteractionListener"; + + public SplashAdInteractionCallback(Action onAdShowed, Action onAdClicked, Action onAdDismissed, Action onAdError) : base( + onAdShowed, onAdClicked, onAdDismissed, onAdError, ListenerName) + { + + } + + public void onAdSkipped() + { + + } + + public void onAdFinished() + { + + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/SplashAdInteractionCallback.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/SplashAdInteractionCallback.cs.meta new file mode 100644 index 0000000..8e4456f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/Android/SplashAdInteractionCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 02f23872f0193427487d67e2373c8e41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS.meta new file mode 100644 index 0000000..d66d3ec --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc250d638e6404797a830f56c2b7e40e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter.meta new file mode 100644 index 0000000..0abfc3e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1921a1c99c3c47ae95c0103939e6ffa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd.meta new file mode 100644 index 0000000..1935887 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7eed132e5c97a47718143d7e692cafda +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner.meta new file mode 100644 index 0000000..3b590a4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aaf596d8ee1bd409e831a2c8c6919580 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.cs new file mode 100644 index 0000000..3fb5612 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.cs @@ -0,0 +1,112 @@ +#if UNITY_IOS +using System; +using System.Threading; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + using System; + using BigoAds.Scripts.Api; + using BigoAds.Scripts.Common; + using BigoAds.Scripts.Platforms.iOS; + using System.Runtime.InteropServices; + public class BigoUnityBannerAd: BigoIOSBaseAd, IBannerAd + { + private BigoBannerRequest bannerRequest; + //TODO:线程问题需要考虑下 + public void Load(string slotId, BigoBannerRequest request) + { + bannerRequest = request; + adType = 2; + this.unityAdPtr = (IntPtr)GCHandle.Alloc (this); + IntPtr ptr = this.unityAdPtr; + + int width = request.Size.Width; + int height = request.Size.Height; + + int x = CalculateMiddleX(width); + int y = CalculatePositionY(request.Position,height); + + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"calculate-origin:{x},{y}-size:{width},{height}"); + BigoIOS_loadBannerAdData(ptr, + slotId, + request.ToJson(), + x, + y, + width, + height, + cs_adDidLoadCallback, + cs_adLoadFailCallBack, + cs_adDidShowCallback, + cs_adDidClickCallback, + cs_adDidDismissCallback, + cs_adDidErrorCallBack + ); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"request.position:{request.Position},slotId:{slotId}"); + } + + private int CalculatePositionY(BigoPosition position, int bannerHeight) + { + int screenHeight = BigoIOS_getScreenHeight(); + float y = BigoIOS_getScreenSafeTop(); + if (position == BigoPosition.Middle) + { + y = (float)((screenHeight - bannerHeight) * 0.5); + } + else if (position == BigoPosition.Bottom) + { + y = (float)(screenHeight - bannerHeight - BigoIOS_getScreenSafeBottom()); + } + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"position:{position},screenHeight:{screenHeight}-y:{y}"); + return (int)y; + } + + private int CalculateMiddleX(int bannerWidth) + { + int screenWidth = BigoIOS_getScreenWidth(); + int x = (int)((screenWidth - bannerWidth) * 0.5); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"screenWidth:{screenWidth}-x:{x}"); + return x; + } + + public void SetPosition(BigoPosition position) + { + int x = CalculateMiddleX(bannerRequest.Size.Width); + int y = CalculatePositionY(position, bannerRequest.Size.Height); + BigoIOS_SetBannerAdPosition(unityAdPtr,x,y); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"position-{position}"); + } + //MARK: c# - oc + [DllImport("__Internal")] + static extern void BigoIOS_loadBannerAdData(IntPtr unityAdPtr, + string slotId, + string requestJson, + int x, + int y, + int width, + int height, + adDidLoadCallback_delegate successCallback, + adLoadFailCallBack_delegate failCallback, + adDidShowCallback_delegate showCallback, + adDidClickCallback_delegate clickCallback, + adDidDismissCallback_delegate dismissCallback, + adDidErrorCallback_delegate adErrorCallback + ); + + [DllImport("__Internal")] + static extern void BigoIOS_SetBannerAdPosition(IntPtr unityAdPtr, int x, int y); + + [DllImport("__Internal")] + static extern int BigoIOS_getScreenWidth(); + [DllImport("__Internal")] + static extern int BigoIOS_getScreenHeight(); + [DllImport("__Internal")] + static extern int BigoIOS_getScreenSafeTop(); + [DllImport("__Internal")] + static extern int BigoIOS_getScreenSafeBottom(); + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.cs.meta new file mode 100644 index 0000000..2928e7d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f3106d1522ac4b95a8f73c101387f8a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.h new file mode 100644 index 0000000..006c016 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.h @@ -0,0 +1,24 @@ +#import "BigoUnityBaseAdHandler.h" + +extern "C" { + + //load banner Ad + void BigoIOS_loadBannerAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + int x, + int y, + int width, + int height, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ); + //show banner ad + void BigoIOS_showBannerAd(UnityAd unityAd); + void BigoIOS_SetBannerAdPosition(UnityAd unityAd,int x, int y); + void BigoIOS_removeBannerView(UnityAd unityAd); +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.h.meta new file mode 100644 index 0000000..d82d603 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: a86c122698a834a0e868b3d38d576442 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.mm new file mode 100644 index 0000000..a2ff068 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.mm @@ -0,0 +1,133 @@ +#import +#import "UnityAppController.h" +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityAdHandlerManager.h" + +extern "C"{ + + +int BigoIOS_getScreenWidth () { + __block int width = 0; + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + width = (int)vc.view.frame.size.width; + }); + return width; +} + +int BigoIOS_getScreenHeight () { + __block int height = 0; + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + height = (int)vc.view.frame.size.height; + }); + return height; +} + +int BigoIOS_getScreenSafeBottom() { + __block int bottom = 0; + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + bottom = (int)vc.view.safeAreaInsets.bottom; + }); + return bottom; +} + +int BigoIOS_getScreenSafeTop() { + __block int top = 0; + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + top = (int)vc.view.safeAreaInsets.top; + }); + return top; +} + +//load Banner ad +void BigoIOS_loadBannerAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + int x, + int y, + int width, + int height, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ) { + BigoIOS_dispatchSyncMainQueue(^{ + BigoAdSize *size = BigoAdSize.BANNER; + if (width == 300 && height == 250) { + size = BigoAdSize.MEDIUM_RECTANGLE; + } + NSDictionary *requestDict = BigoIOS_requestJsonObjectFromJsonString(requestJson); + BigoUnityBannerAdHandler *adHandler = [[BigoUnityBannerAdHandler alloc] init]; + BigoBannerAdRequest *request = [[BigoBannerAdRequest alloc] initWithSlotId:BigoIOS_transformNSStringForm(slotId) adSizes:@[size]]; + request.age = [requestDict[@"age"] intValue]; + request.gender = (BigoAdGender)[requestDict[@"gender"] intValue]; + request.activatedTime = [requestDict[@"activatedTime"] longLongValue]; + BigoBannerAdLoader *adLoader = [[BigoBannerAdLoader alloc] initWithBannerAdLoaderDelegate:adHandler]; + adLoader.ext = requestDict[@"extraInfo"]; + adHandler.adLoader = adLoader; + adHandler.unityAd = unityAd; + adHandler.showCallback = showCallback; + adHandler.clickCallback = clickCallback; + adHandler.dismissCallback = dismissCallback; + adHandler.adErrorCallback = adErrorCallback; + adHandler.successCallback = successCallback; + adHandler.failCallback = failCallback; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + [BigoUnityAdHandlerManager saveAdHandler:adHandler withKey:unityAdKey]; + [adLoader loadAd:request]; + }); + +} + +BigoUnityBannerAdHandler* BigoIOS_getBannerAdHandler(UnityAd unityAd) { + if (!unityAd) return nil; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityBannerAdHandler *handler = (BigoUnityBannerAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + if (!handler || ![handler isMemberOfClass:[BigoUnityBannerAdHandler class]]) { + return nil; + } + return handler; +} + +void BigoIOS_showBannerAd(UnityAd unityAd) { + BigoUnityBannerAdHandler *handler = BigoIOS_getBannerAdHandler(unityAd); + if (!handler) return; + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + BigoBannerAd *ad = (BigoBannerAd *)handler.ad; + [vc.view addSubview:ad.adView]; + }); +} + +void BigoIOS_SetBannerAdPosition(UnityAd unityAd,int x, int y) { + BigoUnityBannerAdHandler *handler = BigoIOS_getBannerAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + BigoBannerAd *ad = (BigoBannerAd *)handler.ad; + CGRect frame = ad.adView.frame; + frame.origin.x = x; + frame.origin.y = y; + ad.adView.frame = frame; + }); +} + +void BigoIOS_removeBannerView(UnityAd unityAd) { + BigoUnityBannerAdHandler *handler = BigoIOS_getBannerAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + BigoBannerAd *ad = (BigoBannerAd *)handler.ad; + [ad.adView removeFromSuperview]; + }); +} + +} + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.mm.meta new file mode 100644 index 0000000..7b0acc0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Banner/BigoUnityBannerAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: fd1772b6ab58f4e74ac7e89d3fd471c3 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.cs new file mode 100644 index 0000000..5ff22cc --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.cs @@ -0,0 +1,265 @@ +#if UNITY_IOS + +using System.Collections.Generic; +using AOT; +using UnityEngine; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + using System; + using BigoAds.Scripts.Api; + using BigoAds.Scripts.Common; + using BigoAds.Scripts.Platforms.iOS; + using System.Runtime.InteropServices; + public class BigoIOSBaseAd : IBigoAd + { + public event Action OnLoad; + public event Action OnLoadFailed; + public event Action OnAdShowed; + public event Action OnAdClicked; + public event Action OnAdDismissed; + public event Action OnAdError; + public void Load(string slotId, BigoRequest request) + { + + } + + protected void LoadAdData(string slotId, BigoRequest request) { + this.unityAdPtr = (IntPtr)GCHandle.Alloc (this); + IntPtr ptr = this.unityAdPtr; + + BigoIOS_loadAdData(adType, + ptr, + slotId, + request.ToJson(), + cs_adDidLoadCallback, + cs_adLoadFailCallBack, + cs_adDidShowCallback, + cs_adDidClickCallback, + cs_adDidDismissCallback, + cs_adDidErrorCallBack + ); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"slotId:{slotId},request{request}"); + } + + public bool IsLoaded() + { + return bigoAdLoaded; + } + + public virtual void Show() + { + LOGWithMessage("Show"); + BigoIOS_showAd(adType,this.unityAdPtr); + } + + public virtual bool IsExpired() + { + return BigoIOS_IsExpired(unityAdPtr); + } + + public void Destroy() + { + BigoIOS_destroyAd(adType,unityAdPtr); + if (unityAdPtr != IntPtr.Zero) + { + GCHandle unityAdhandle = (GCHandle)this.unityAdPtr; + unityAdhandle.Free(); + } + unityAdPtr = IntPtr.Zero; + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"unityPtr:{unityAdPtr}"); + } + + public bool IsClientBidding() + { + return BigoIOS_IsClientBidding(unityAdPtr); + } + + public string GetExtraInfo(String key) + { + //todo + return ""; + } + + /// get price + public double getPrice() + { + return BigoIOS_GetPrice(unityAdPtr); + } + + ///notify win + public void notifyWin(double secPrice, string secBidder) + { + BigoIOS_NotifyWin(unityAdPtr, secPrice, secBidder); + } + + ///notify loss + public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason) + { + BigoIOS_NotifyLoss(unityAdPtr, firstPrice, firstBidder, (int)lossReason); + } + + protected void LOGWithMessage(string method) + { + LOGWithMessage(method,string.Empty); + } + protected void LOGWithMessage(string method,string msg) + { + //native = 1, banner = 2, interstitial = 3, rewarded = 4, appOpen = 5 + int adtype = adType; + string adTypeString = "unknown"; + if (adtype == 1) + { + adTypeString = "native"; + } + else if (adtype == 2) + { + adTypeString = "banner"; + } + else if (adtype == 3) + { + adTypeString = "interstitial"; + } + else if (adtype == 4) + { + adTypeString = "rewarded"; + } + else if (adtype == 5) + { + adTypeString = "appOpen"; + } + + //System.Reflection.MethodBase.GetCurrentMethod()?.Name + Type classType = this.GetType(); + string className = $"{adTypeString}-{classType.Name}"; + BigoUnityTools.LOGWithMessage(className,method,msg); + } + + protected static BigoIOSBaseAd GetUnityAd(IntPtr unityAdPtr) + { + GCHandle handle = (GCHandle) unityAdPtr; + BigoIOSBaseAd unityAd = handle.Target as BigoIOSBaseAd; + // handle.Free (); + return unityAd; + } + + protected int adType = 0; + private bool bigoAdLoaded = false; + protected IntPtr unityAdPtr = IntPtr.Zero; + //MARK: c --> oc + [DllImport("__Internal")] + static extern void BigoIOS_loadAdData(int adType, + IntPtr unityAdPtr, + string slotId, + string requestJson, + adDidLoadCallback_delegate successCallback, + adLoadFailCallBack_delegate failCallback, + adDidShowCallback_delegate showCallback, + adDidClickCallback_delegate clickCallback, + adDidDismissCallback_delegate dismissCallback, + adDidErrorCallback_delegate adErrorCallback); + [DllImport("__Internal")] + static extern void BigoIOS_showAd(int adType,IntPtr unityAdPtr); + + [DllImport("__Internal")] + static extern void BigoIOS_destroyAd(int adType, IntPtr unityAdPtr); + + [DllImport("__Internal")] + static extern bool BigoIOS_IsExpired(IntPtr unityAdPtr); + + [DllImport("__Internal")] + static extern bool BigoIOS_IsClientBidding(IntPtr unityAdPtr); + + [DllImport("__Internal")] + static extern double BigoIOS_GetPrice(IntPtr unityAdPtr); + + [DllImport("__Internal")] + static extern void BigoIOS_NotifyWin(IntPtr unityAdPtr, double secPrice, string secBidder); + + [DllImport("__Internal")] + static extern void BigoIOS_NotifyLoss(IntPtr unityAdPtr, double firstPrice, string firstBidder, int lossReason); + + //callback method + protected delegate void adDidLoadCallback_delegate(IntPtr unityAdPtr); + protected delegate void adLoadFailCallBack_delegate(IntPtr unityAdPtr, int code, string msg); + + protected delegate void adDidShowCallback_delegate(IntPtr unityAdPtr); + protected delegate void adDidClickCallback_delegate(IntPtr unityAdPtr); + protected delegate void adDidDismissCallback_delegate(IntPtr unityAdPtr); + protected delegate void adDidErrorCallback_delegate(IntPtr unityAdPtr, int code, string msg); + + [MonoPInvokeCallback(typeof(adDidLoadCallback_delegate))] + protected static void cs_adDidLoadCallback(IntPtr unityAdPtr) + { + BigoIOSBaseAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr); + if (unityAd == null) + { + return; + } + unityAd.bigoAdLoaded = true; + unityAd.OnLoad?.Invoke(); + unityAd.LOGWithMessage("cs_adDidLoad"); + } + + [MonoPInvokeCallback(typeof(adLoadFailCallBack_delegate))] + protected static void cs_adLoadFailCallBack(IntPtr unityAdPtr, int code, string msg) + { + + BigoIOSBaseAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr); + if (unityAd.OnLoadFailed != null) + { + unityAd.OnLoadFailed(code, msg); + } + unityAd.LOGWithMessage("cs_adLoadFail",$"code:{code},msg:{msg}"); + } + + [MonoPInvokeCallback(typeof(adDidShowCallback_delegate))] + protected static void cs_adDidShowCallback(IntPtr unityAdPtr) + { + BigoIOSBaseAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr); + if (unityAd == null) + { + return; + } + unityAd.OnAdShowed?.Invoke(); + unityAd.LOGWithMessage($"cs_show"); + } + + [MonoPInvokeCallback(typeof(adDidClickCallback_delegate))] + protected static void cs_adDidClickCallback(IntPtr unityAdPtr) + { + BigoIOSBaseAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr); + if (unityAd == null) + { + return; + } + unityAd.OnAdClicked?.Invoke(); + unityAd.LOGWithMessage("cs_click"); + } + + [MonoPInvokeCallback(typeof(adDidDismissCallback_delegate))] + protected static void cs_adDidDismissCallback(IntPtr unityAdPtr) + { + BigoIOSBaseAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr); + if (unityAd == null) + { + return; + } + unityAd.OnAdDismissed?.Invoke(); + unityAd.LOGWithMessage("cs_dismiss"); + } + + [MonoPInvokeCallback(typeof(adDidErrorCallback_delegate))] + protected static void cs_adDidErrorCallBack(IntPtr unityAdPtr, int code, string msg) + { + BigoIOSBaseAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr); + if (unityAd.OnAdError != null) + { + unityAd.OnAdError(code, msg); + } + unityAd.LOGWithMessage("cs_aderror",$"code:{code},msg:{msg}"); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.cs.meta new file mode 100644 index 0000000..68b37d0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b8d512f4ea0948bb8110a2eee062858 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.mm new file mode 100644 index 0000000..43f18d4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.mm @@ -0,0 +1,109 @@ +#import +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdHandlerManager.h" +#import "BigoUnityBannerAd.h" +#import "BigoUnityInterstitialAd.h" +#import "BigoUnityRewardedAd.h" +#import "BigoUnitySplashAd.h" +#import "BigoUnityNativeAd.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityPopupAd.h" + +extern "C" { +enum BigoIOSAdType { + native = 1, banner = 2, interstitial = 3, rewarded = 4, splash = 5, popup = 6 +}; +void BigoIOS_loadAdData(int adType, + UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback) { + if (adType == rewarded || adType == banner) {//custom load + return; + } + + if (adType == interstitial) { + BigoIOS_loadInterstitialAdData(unityAd, slotId, requestJson, successCallback, failCallback, showCallback, clickCallback, dismissCallback, adErrorCallback); + } + else if (adType == splash) { + BigoIOS_loadSplashAdData(unityAd, slotId, requestJson, successCallback, failCallback, showCallback, clickCallback, dismissCallback, adErrorCallback); + } + else if (adType == native) { + BigoIOS_loadNativeAdData(unityAd, slotId, requestJson, successCallback, failCallback, showCallback, clickCallback, dismissCallback, adErrorCallback); + } else if (adType == popup) { + BigoIOS_loadPopupAdData(unityAd, slotId, requestJson, successCallback, failCallback, showCallback, clickCallback, dismissCallback, adErrorCallback); + } + +} +void BigoIOS_showAd(int adType, UnityAd unityAd) { + if (adType == interstitial) { + BigoIOS_showInterstitialAd(unityAd); + } + else if (adType == splash) { + BigoIOS_showSplashAd(unityAd); + } + else if (adType == rewarded) { + BigoIOS_showRewardedAd(unityAd); + } + else if (adType == banner) { + BigoIOS_showBannerAd(unityAd); + } + else if (adType == native) { + BigoIOS_showNativeAd(unityAd); + } +} + +void BigoIOS_destroyAd(int adType, UnityAd unityAd) { + if (adType == banner) { + BigoIOS_removeBannerView(unityAd); + } + else if (adType == native) { + BigoIOS_removeNativeView(unityAd); + } + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + [BigoUnityAdHandlerManager removeAdHandlerWithKey:unityAdKey]; +} + +BOOL BigoIOS_IsExpired(UnityAd unityAd) { + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityBaseAdHandler *handler = (BigoUnityBaseAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + BigoAd *ad = (BigoAd *)(handler.ad); + return ad.isExpired; +} + +BOOL BigoIOS_IsClientBidding(UnityAd unityAd) { + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityBaseAdHandler *handler = (BigoUnityBaseAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + BigoAd *ad = (BigoAd *)(handler.ad); + return ad.getBid != nil; +} + +CGFloat BigoIOS_GetPrice(UnityAd unityAd) { + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityBaseAdHandler *handler = (BigoUnityBaseAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + BigoAd *ad = (BigoAd *)(handler.ad); + return ad.getBid.getPrice; +} + +void BigoIOS_NotifyWin(UnityAd unityAd, CGFloat secPrice, const char* secBidder) { + NSString *secBidderString = BigoIOS_transformNSStringForm(secBidder); + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityBaseAdHandler *handler = (BigoUnityBaseAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + BigoAd *ad = (BigoAd *)(handler.ad); + [ad.getBid notifyWinWithSecPrice:secPrice secBidder:secBidderString]; +} + +void BigoIOS_NotifyLoss(UnityAd unityAd, CGFloat firstPrice , const char* firstBidder, int lossReason) { + NSString *firstBidderString = BigoIOS_transformNSStringForm(firstBidder); + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityBaseAdHandler *handler = (BigoUnityBaseAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + BigoAd *ad = (BigoAd *)(handler.ad); + [ad.getBid notifyLossWithFirstPrice:firstPrice firstBidder:firstBidderString lossReason:(BGAdLossReasonType)lossReason]; +} + +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.mm.meta new file mode 100644 index 0000000..00a8018 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoIOSBaseAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 75401cc01b4054f97931486033a4c690 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.h new file mode 100644 index 0000000..acf3ece --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.h @@ -0,0 +1,22 @@ + +#import +#import "BigoUnityBaseAdHandler.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface BigoUnityAdHandlerManager : NSObject + ++ (void)saveAdHandler:(BigoUnityBaseAdHandler *)adhandler withKey:(NSString *)key; + ++ (void)removeAdHandlerWithKey:(NSString *)key; + ++ (NSString *)createKeyUnityAd:(UnityAd)unityAd; + ++ (nullable BigoUnityBaseAdHandler *)handlerWithKey:(NSString *)key; + ++ (void)printList; + + +@end + +NS_ASSUME_NONNULL_END diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.h.meta new file mode 100644 index 0000000..4aa61d9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: f39924fa7a4d144ee93ad3242f4c5e9f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.m b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.m new file mode 100644 index 0000000..2abc066 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.m @@ -0,0 +1,70 @@ +#import "BigoUnityAdHandlerManager.h" + +@interface BigoUnityAdHandlerManager() + +@property (nonatomic, strong) dispatch_semaphore_t semaphore; +@property (nonatomic, strong) NSMutableDictionary *dictionary; + +@end + +@implementation BigoUnityAdHandlerManager + ++ (instancetype)sharedInstance { + static BigoUnityAdHandlerManager *manager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + manager = [[BigoUnityAdHandlerManager alloc] init]; + }); + return manager; +} + +- (instancetype)init +{ + self = [super init]; + if (self) { + self.dictionary = [NSMutableDictionary new]; + self.semaphore = dispatch_semaphore_create(1); + } + return self; +} + ++ (void)saveAdHandler:(BigoUnityBaseAdHandler *)adhandler withKey:(NSString *)key { + if (!adhandler || key.length == 0) { + return; + } + BigoUnityAdHandlerManager *manager = [BigoUnityAdHandlerManager sharedInstance]; + dispatch_semaphore_wait(manager.semaphore, DISPATCH_TIME_FOREVER); + [manager.dictionary setObject:adhandler forKey:key]; + dispatch_semaphore_signal(manager.semaphore); +} + ++ (void)removeAdHandlerWithKey:(NSString *)key { + if (key.length == 0) { + return; + } + BigoUnityAdHandlerManager *manager = [BigoUnityAdHandlerManager sharedInstance]; + dispatch_semaphore_wait(manager.semaphore, DISPATCH_TIME_FOREVER); + [manager.dictionary removeObjectForKey:key]; + dispatch_semaphore_signal(manager.semaphore); +} + ++ (NSString *)createKeyUnityAd:(UnityAd)unityAd { + return [NSString stringWithFormat:@"%p",unityAd]; +} + ++ (nullable BigoUnityBaseAdHandler *)handlerWithKey:(NSString *)key { + if (key.length == 0) { + return nil; + } + BigoUnityAdHandlerManager *manager = [BigoUnityAdHandlerManager sharedInstance]; + dispatch_semaphore_wait(manager.semaphore, DISPATCH_TIME_FOREVER); + BigoUnityBaseAdHandler *handler = [manager.dictionary objectForKey:key]; + dispatch_semaphore_signal(manager.semaphore); + return handler; +} + ++ (void)printList { + NSLog(@"bigo-ios-list:%@",[BigoUnityAdHandlerManager sharedInstance].dictionary); +} + +@end diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.m.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.m.meta new file mode 100644 index 0000000..dcae4b1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityAdHandlerManager.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 053a4c32bd9344bcd9a22f2e0c87f777 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.h new file mode 100644 index 0000000..f703364 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.h @@ -0,0 +1,62 @@ + +#import +#import +#import + +typedef void* UnityAd;//unity ad +typedef void* BigoAdSdkAd;//bigo ad +//int + +//callback of ad load +typedef void(*AdDidLoadCallback)(UnityAd unityAd); +typedef void (*AdLoadFailCallBack)(UnityAd unityAd, int code, const char *msg); + +//callback of ad event +typedef void(*AdDidShowCallback)(UnityAd unityAd); +typedef void(*AdDidClickCallback)(UnityAd unityAd); +typedef void(*AdDidDismissCallback)(UnityAd unityAd); +typedef void (*AdDidErrorCallback)(UnityAd unityAd, int code, const char *msg); + +typedef void (*AdDidEarnRewardCallback)(UnityAd unityA); + +@interface BigoUnityBaseAdHandler : NSObject + +@property (nonatomic, assign) UnityAd unityAd; +@property (nonatomic, strong) BigoAd *ad; + +@property (nonatomic, assign) AdDidShowCallback showCallback; +@property (nonatomic, assign) AdDidClickCallback clickCallback; +@property (nonatomic, assign) AdDidDismissCallback dismissCallback; +@property (nonatomic, assign) AdDidErrorCallback adErrorCallback; + +//强持有AdLoader +@property (nonatomic, strong) BigoAdLoader *adLoader; +@property (nonatomic, assign) AdDidLoadCallback successCallback; +@property (nonatomic, assign) AdLoadFailCallBack failCallback; + +@end + +@interface BigoUnityBannerAdHandler : BigoUnityBaseAdHandler + +@end + + +@interface BigoUnityInterstitialAdHandler : BigoUnityBaseAdHandler + +@end + +@interface BigoUnityRewardedAdHandler : BigoUnityBaseAdHandler + +@property (nonatomic, assign) AdDidEarnRewardCallback earnCallback; + +@end + +@interface BigoUnitySplashAdHandler : BigoUnityBaseAdHandler + +@end + +@interface BigoUnityNativeAdHandler : BigoUnityBaseAdHandler + +@property (nonatomic, strong) UIView *nativeView; + +@end diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.h.meta new file mode 100644 index 0000000..7c85306 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 0f898c08506444b2cae9b6fb32656a61 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.mm new file mode 100644 index 0000000..d6c46ad --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.mm @@ -0,0 +1,170 @@ + +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdHandlerManager.h" + +@implementation BigoUnityBaseAdHandler + +//广告异常 +- (void)onAd:(BigoAd *)ad error:(BigoAdError *)error { + +} + +//广告展示 +- (void)onAdImpression:(BigoAd *)ad { + if (self.showCallback) { + self.showCallback(self.unityAd); + } +} + +//广告点击 +- (void)onAdClicked:(BigoAd *)ad { + if (self.clickCallback) { + self.clickCallback(self.unityAd); + } +} + +//广告打开 +- (void)onAdOpened:(BigoAd *)ad { + +} + +//广告关闭 +- (void)onAdClosed:(BigoAd *)ad { + if (self.dismissCallback) { + self.dismissCallback(self.unityAd); + } + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:self.unityAd]; + [BigoUnityAdHandlerManager removeAdHandlerWithKey:unityAdKey]; +} + +- (void)dealloc { + NSLog(@"BigoAd-iOS-[BigoUnityBaseAdHandler]-[dealloc]"); +} + +@end + +@implementation BigoUnityBannerAdHandler + + +#pragma mark - BigoBannerAdLoaderDelegate +- (void)onBannerAdLoaded:(BigoBannerAd *)ad { + [ad setAdInteractionDelegate:self]; + self.ad = ad; + if (self.successCallback) { + self.successCallback(self.unityAd); + } +} + + +- (void)onBannerAdLoadError:(BigoAdError *)error { + if (self.failCallback) { + self.failCallback(self.unityAd, error.errorCode, error.errorMsg.UTF8String); + } +} + +@end + +@implementation BigoUnityInterstitialAdHandler + +#pragma mark - BigoInterstitialAdLoaderDelegate +- (void)onInterstitialAdLoaded:(BigoInterstitialAd *)ad { + [ad setAdInteractionDelegate:self]; + self.ad = ad; + if (self.successCallback) { + self.successCallback(self.unityAd); + } +} + +- (void)onInterstitialAdLoadError:(BigoAdError *)error { + if (self.failCallback) { + self.failCallback(self.unityAd, error.errorCode, error.errorMsg.UTF8String); + } +} + +@end + +@implementation BigoUnityRewardedAdHandler + +#pragma mark - BigoRewardVideoAdLoaderDelegate +- (void)onRewardVideoAdLoaded:(BigoRewardVideoAd *)ad { + [ad setRewardVideoAdInteractionDelegate:self]; + self.ad = ad; + if (self.successCallback) { + self.successCallback(self.unityAd); + } +} + + +- (void)onRewardVideoAdLoadError:(BigoAdError *)error { + if (self.failCallback) { + self.failCallback(self.unityAd, error.errorCode, error.errorMsg.UTF8String); + } +} + +#pragma mark - BigoRewardVideoAdInteractionDelegate +//激励视频激励回调 +- (void)onAdRewarded:(BigoRewardVideoAd *)ad { + if (self.earnCallback) { + self.earnCallback(self.unityAd); + } +} +@end + +@implementation BigoUnitySplashAdHandler + +#pragma mark - BigoSplashAdLoaderDelegate +- (void)onSplashAdLoaded:(BigoSplashAd *)ad { + [ad setSplashAdInteractionDelegate:self]; + self.ad = ad; + if (self.successCallback) { + self.successCallback(self.unityAd); + } +} + + +- (void)onSplashAdLoadError:(BigoAdError *)error { + if (self.failCallback) { + self.failCallback(self.unityAd, error.errorCode, error.errorMsg.UTF8String); + } +} + +#pragma mark - BigoSplashAdInteractionDelegate + +/** + * 广告可跳过回调,通常是由用户点击了右上角 SKIP 按钮所触发 + */ +- (void)onAdSkipped:(BigoAd *)ad { + if (self.dismissCallback) { + self.dismissCallback(self.unityAd); + } +} + +/** + * 广告倒计时结束回调 + */ +- (void)onAdFinished:(BigoAd *)ad { + if (self.dismissCallback) { + self.dismissCallback(self.unityAd); + } +} + +@end + +@implementation BigoUnityNativeAdHandler + +#pragma mark - BigoNativeAdLoaderDelegate +- (void)onNativeAdLoaded:(BigoNativeAd *)ad { + [ad setAdInteractionDelegate:self]; + self.ad = ad; + if (self.successCallback) { + self.successCallback(self.unityAd); + } +} + +- (void)onNativeAdLoadError:(BigoAdError *)error { + if (self.failCallback) { + self.failCallback(self.unityAd, error.errorCode, error.errorMsg.UTF8String); + } +} + + @end \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.mm.meta new file mode 100644 index 0000000..94c261f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityBaseAdHandler.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 956299e395371425abfa788d6f80bad9 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.cs new file mode 100644 index 0000000..2dcae70 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.cs @@ -0,0 +1,44 @@ +#if UNITY_IOS +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using BigoAds.Scripts.Api; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + class BigoUnityConfig + { + private IntPtr _config; + internal void Init(BigoAdConfig config) + { + _config = BigoIOS_config(config.AppId); + BigoIOS_configSetInfo(_config, config.DebugLog, config.Age, config.Gender, config.ActivatedTime); + // set extra + foreach (KeyValuePair item in config.ExtraDictionary) + { + BigoIOS_configSetExtra(_config, item.Key, item.Value); + } + + } + + public IntPtr getInternalConfig() + { + return _config; + } + + //c# - > oc + [DllImport("__Internal")] + private static extern IntPtr BigoIOS_config(string appID); + + [DllImport(dllName: "__Internal")] + private static extern void BigoIOS_configSetInfo(IntPtr configPt, bool debugLog, int age, int gender, long activatedTime); + + [DllImport(dllName: "__Internal")] + private static extern void BigoIOS_configSetExtra(IntPtr configPt, string key, string extra); + + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.cs.meta new file mode 100644 index 0000000..7bcbb35 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd95f8f9cd401477c8b11db40da15a59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.mm new file mode 100644 index 0000000..a48bef4 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.mm @@ -0,0 +1,30 @@ +#import +#import +#import "BigoUnityAdapterTools.h" + +extern "C" { + +BigoAdConfig* BigoIOS_config(const char* appID) { + NSString *appId = BigoIOS_transformNSStringForm(appID); + return [[BigoAdConfig alloc] initWithAppId:appId]; +} +BigoAdConfig* BigoIOS_GetConfig(void* __nullable config) { + BigoAdConfig *bigoConfig = config ? (__bridge BigoAdConfig*)config : nil; + return bigoConfig; +} + +void BigoIOS_configSetExtra(void* __nullable config, const char* key, const char* extra) { + BigoAdConfig *bigoConfig = BigoIOS_GetConfig(config); + NSString *keyString = BigoIOS_transformNSStringForm(key); + NSString *extraString = BigoIOS_transformNSStringForm(extra); + [bigoConfig addExtraWithKey:keyString extra:extraString]; +} + +void BigoIOS_configSetInfo(void* config, bool debugLog, int age, int gender, long activatedTime) { + BigoIOS_GetConfig(config).testMode = debugLog; + BigoIOS_GetConfig(config).age = age; + BigoIOS_GetConfig(config).gender = (BigoAdGender)gender; + BigoIOS_GetConfig(config).activatedTime = activatedTime; +} + +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.mm.meta new file mode 100644 index 0000000..f9b5fbb --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityConfig.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: d89226cd1e10648008bd21184cd89fe0 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.cs new file mode 100644 index 0000000..0db3486 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.cs @@ -0,0 +1,105 @@ +#if UNITY_IOS +using AOT; +using UnityEngine; +using BigoAds.Scripts.Api.Constant; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + using System; + using BigoAds.Scripts.Api; + using BigoAds.Scripts.Common; + using BigoAds.Scripts.Platforms.iOS; + using System.Runtime.InteropServices; + + class BigoUnitySdk : ISDK + { + private BigoAdSdk.InitResultDelegate resultDelegate; + + public void Init(BigoAdConfig config, BigoAdSdk.InitResultDelegate initResultDelegate) + { + BigoUnityConfig unityConfig = new BigoUnityConfig(); + unityConfig.Init(config); + resultDelegate = initResultDelegate; + IntPtr ptr = (IntPtr)GCHandle.Alloc(this); + BigoIOS_initSDK(ptr, unityConfig.getInternalConfig(), cs_successCallback); + } + + public bool IsInitSuccess() + { + return BigoIOS_sdkInitializationState(); + } + + public string GetSDKVersion() + { + return BigoIOS_sdkVersion(); + } + + public string GetSDKVersionName() + { + return BigoIOS_sdkVersionName(); + } + + public void SetUserConsent(ConsentOptions option, bool consent) + { + if (option == ConsentOptions.GDPR) { + BigoIOS_setConsentGDPR(consent); + } else if (option == ConsentOptions.CCPA) { + BigoIOS_setConsentCCPA(consent); + } else if (option == ConsentOptions.LGPD) { + BigoIOS_setConsentLGPD(consent); + } else if (option == ConsentOptions.COPPA) { + BigoIOS_setConsentCOPPA(consent); + } + } + + public void AddExtraHost(string country, string host) + { + BigoIOS_addExtraHost(country, host); + } + + [DllImport("__Internal")] + static extern void BigoIOS_initSDK(IntPtr unitySDK, IntPtr config, SuccessCallbackDelegate successCallback); + + [DllImport("__Internal")] + static extern bool BigoIOS_sdkInitializationState(); + + [DllImport("__Internal")] + static extern string BigoIOS_sdkVersion(); + + [DllImport("__Internal")] + static extern string BigoIOS_sdkVersionName(); + + [DllImport("__Internal")] + static extern void BigoIOS_setConsentGDPR(bool consent); + + [DllImport("__Internal")] + static extern void BigoIOS_setConsentCCPA(bool consent); + + [DllImport("__Internal")] + static extern void BigoIOS_setConsentLGPD(bool consent); + + [DllImport("__Internal")] + static extern void BigoIOS_setConsentCOPPA(bool consent); + + [DllImport("__Internal")] + static extern void BigoIOS_addExtraHost(string country, string host); + + private delegate void SuccessCallbackDelegate(IntPtr unitySDK); + + [MonoPInvokeCallback(typeof(SuccessCallbackDelegate))] + private static void cs_successCallback(IntPtr unitySDK) + { + BigoUnitySdk sdk = GetUnitySdk(unitySDK); + sdk.resultDelegate(); + } + + private static BigoUnitySdk GetUnitySdk(IntPtr unitySdkPtr) + { + GCHandle handle = (GCHandle) unitySdkPtr; + BigoUnitySdk unitysdk = handle.Target as BigoUnitySdk; + return unitysdk; + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.cs.meta new file mode 100644 index 0000000..b71493a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0119df06271854e9497b8cab7cc3ef1b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.mm new file mode 100644 index 0000000..e416a88 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.mm @@ -0,0 +1,58 @@ + +#import +#import "BigoUnityAdapterTools.h" + +char* MakeStringCopy(const char* string) { + if (string == NULL) return NULL; + char* res = (char*)malloc(strlen(string) + 1); + strcpy(res, string); + return res; +} + +extern "C" { + + typedef void (*BigoSDKInitSuccessCallBack)(void* unitySDK); + + void BigoIOS_initSDK(void* unitySDK, void* config, BigoSDKInitSuccessCallBack successCallback) { + BigoAdConfig *adConfig = config ? (__bridge BigoAdConfig*)config : nil; + [[BigoAdSdk sharedInstance] initializeSdkWithAdConfig:adConfig completion:^{ + successCallback(unitySDK); + }]; + } + + BOOL BigoIOS_sdkInitializationState() { + return [[BigoAdSdk sharedInstance] isInitialized]; + } + + const char* BigoIOS_sdkVersion() { + NSString *version = [[BigoAdSdk sharedInstance] getSDKVersion]; + return MakeStringCopy([version UTF8String]); + } + + const char* BigoIOS_sdkVersionName() { + NSString *versionName = [[BigoAdSdk sharedInstance] getSDKVersionName]; + return MakeStringCopy([versionName UTF8String]); + } + + void BigoIOS_setConsentGDPR(bool consent) { + [BigoAdSdk setUserConsentWithOption:BigoConsentOptionsGDPR consent:consent]; + } + + void BigoIOS_setConsentCCPA(bool consent) { + [BigoAdSdk setUserConsentWithOption:BigoConsentOptionsCCPA consent:consent]; + } + + void BigoIOS_setConsentCOPPA(bool consent) { + [BigoAdSdk setUserConsentWithOption:BigoConsentOptionsCOPPA consent:consent]; + } + + void BigoIOS_setConsentLGPD(bool consent) { + [BigoAdSdk setUserConsentWithOption:BigoConsentOptionsLGPD consent:consent]; + } + + void BigoIOS_addExtraHost(const char* country, const char* host) { + NSString *countryString = BigoIOS_transformNSStringForm(country); + NSString *hostString = BigoIOS_transformNSStringForm(host); + [BigoAdSdk addExtraHostWithCountry:countryString host:hostString]; + } +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.mm.meta new file mode 100644 index 0000000..69f7ba3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnitySdk.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 2a926ae7c93f34a81ad8c0dca79dbe9f +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityTools.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityTools.cs new file mode 100644 index 0000000..584ffe2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityTools.cs @@ -0,0 +1,22 @@ +#if UNITY_IOS +using System.Collections.Generic; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + public class BigoUnityTools + { + private static int mainThreadID = System.Threading.Thread.CurrentThread.ManagedThreadId; + + internal static bool isMainThread() + { + return System.Threading.Thread.CurrentThread.ManagedThreadId == mainThreadID; + } + + internal static void LOGWithMessage(string className,string methodName,string msg) + { + Debug.Log($"BigoAds-iOS-[{className}]-[{methodName}]-{msg}"); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityTools.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityTools.cs.meta new file mode 100644 index 0000000..71bc64c --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/BigoUnityTools.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a2171856213534228be217d8b18397ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial.meta new file mode 100644 index 0000000..80d9b73 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3d154fcfff71f4a50bbcb02fe73c8a63 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.cs new file mode 100644 index 0000000..eb1f860 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.cs @@ -0,0 +1,17 @@ +#if UNITY_IOS +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + + class BigoUnityinterstitialAd : BigoIOSBaseAd, IInterstitialAd + { + public void Load(string slotId, BigoInterstitialRequest request) + { + adType = 3; + LoadAdData(slotId,request); + } + } +} +#endif diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.cs.meta new file mode 100644 index 0000000..8887e68 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 439e9f1b2a72c4d52bbba125c8625121 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.h new file mode 100644 index 0000000..a6152f3 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.h @@ -0,0 +1,17 @@ +#import "BigoUnityBaseAdHandler.h" + +extern "C" { + + //load appOpen Ad + void BigoIOS_loadInterstitialAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback); + //show open ad + void BigoIOS_showInterstitialAd(UnityAd unityAd); +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.h.meta new file mode 100644 index 0000000..220ea50 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 09b930587afa743ca93ec5ae2d427b8a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.mm new file mode 100644 index 0000000..9ae2677 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.mm @@ -0,0 +1,67 @@ +#import +#import "UnityAppController.h" +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityAdHandlerManager.h" + +extern "C"{ + +//load interstitial ad +void BigoIOS_loadInterstitialAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ) { + BigoIOS_dispatchSyncMainQueue(^{ + + BigoUnityInterstitialAdHandler *adHandler = [[BigoUnityInterstitialAdHandler alloc] init]; + BigoInterstitialAdRequest *request = [[BigoInterstitialAdRequest alloc] initWithSlotId:BigoIOS_transformNSStringForm(slotId)]; + NSDictionary *requestDict = BigoIOS_requestJsonObjectFromJsonString(requestJson); + request.age = [requestDict[@"age"] intValue]; + request.gender = (BigoAdGender)[requestDict[@"gender"] intValue]; + request.activatedTime = [requestDict[@"activatedTime"] longLongValue]; + BigoInterstitialAdLoader *adLoader = [[BigoInterstitialAdLoader alloc] initWithInterstitialAdLoaderDelegate:adHandler]; + adLoader.ext = requestDict[@"extraInfo"]; + adHandler.adLoader = adLoader; + adHandler.unityAd = unityAd; + adHandler.showCallback = showCallback; + adHandler.clickCallback = clickCallback; + adHandler.dismissCallback = dismissCallback; + adHandler.adErrorCallback = adErrorCallback; + adHandler.successCallback = successCallback; + adHandler.failCallback = failCallback; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + [BigoUnityAdHandlerManager saveAdHandler:adHandler withKey:unityAdKey]; + [adLoader loadAd:request]; + }); + +} + +BigoUnityInterstitialAdHandler* BigoIOS_getInterstitialAdHandler(UnityAd unityAd) { + if (!unityAd) return nil; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityInterstitialAdHandler *handler = (BigoUnityInterstitialAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + if (!handler || ![handler isMemberOfClass:[BigoUnityInterstitialAdHandler class]]) { + return nil; + } + return handler; +} + +void BigoIOS_showInterstitialAd(UnityAd unityAd) { + BigoUnityInterstitialAdHandler *handler = BigoIOS_getInterstitialAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + BigoInterstitialAd *ad = (BigoInterstitialAd *)handler.ad; + [ad show:vc]; + }); +} + +} + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.mm.meta new file mode 100644 index 0000000..793758a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Interstitial/BigoUnityInterstitialAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 0ed50328a865a41e6a0c4c862dfc3a20 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native.meta new file mode 100644 index 0000000..0c6a97d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91d71cd2823ff4f758ffc2f9340dd36a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.cs new file mode 100644 index 0000000..d4ee571 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.cs @@ -0,0 +1,84 @@ +#if UNITY_IOS +using System; +using System.Threading; +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Api.Constant; +using BigoAds.Scripts.Common; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + using System; + using BigoAds.Scripts.Api; + using BigoAds.Scripts.Common; + using BigoAds.Scripts.Platforms.iOS; + using System.Runtime.InteropServices; + public class BigoUnityNativeAd : BigoIOSBaseAd, INativeAd + { + public void Load(string slotId, BigoNativeRequest request) + { + adType = 1; + LoadAdData(slotId,request); + } + + private int CalculatePositionY(BigoPosition position, int nativeHeight) + { + int screenHeight = BigoIOS_getScreenHeight(); + float y = BigoIOS_getScreenSafeTop(); + if (position == BigoPosition.Middle) + { + y = (float)((screenHeight - nativeHeight) * 0.5); + } + else if (position == BigoPosition.Bottom) + { + y = (float)(screenHeight - nativeHeight - BigoIOS_getScreenSafeBottom()); + } + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"position:{position},screenHeight:{screenHeight}-y:{y}"); + return (int)y; + } + + private int CalculateMiddleX(int nativeWidth) + { + int screenWidth = BigoIOS_getScreenWidth(); + int x = (int)((screenWidth - nativeWidth) * 0.5); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"screenWidth:{screenWidth}-x:{x}"); + return x; + } + + public void SetPosition(BigoPosition position) + { + int x = 0; + int y = CalculatePositionY(position, 300); //dafault 300 + BigoIOS_SetNativeAdPosition(unityAdPtr,x,y); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"position-{position}"); + } + //MARK: c# - oc + [DllImport("__Internal")] + static extern void BigoIOS_loadNativeAdData(IntPtr unityAdPtr, + string slotId, + string requestJson, + int x, + int y, + int width, + int height, + adDidLoadCallback_delegate successCallback, + adLoadFailCallBack_delegate failCallback, + adDidShowCallback_delegate showCallback, + adDidClickCallback_delegate clickCallback, + adDidDismissCallback_delegate dismissCallback + ); + + [DllImport("__Internal")] + static extern void BigoIOS_SetNativeAdPosition(IntPtr unityAdPtr, int x, int y); + + [DllImport("__Internal")] + static extern int BigoIOS_getScreenWidth(); + [DllImport("__Internal")] + static extern int BigoIOS_getScreenHeight(); + [DllImport("__Internal")] + static extern int BigoIOS_getScreenSafeTop(); + [DllImport("__Internal")] + static extern int BigoIOS_getScreenSafeBottom(); + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.cs.meta new file mode 100644 index 0000000..772f5dd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2826ac57d309146a69194c7d0ba5764b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.h new file mode 100644 index 0000000..1b150d9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.h @@ -0,0 +1,21 @@ +#import "BigoUnityBaseAdHandler.h" + +extern "C" { + + //load Native ad + void BigoIOS_loadNativeAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ); + + void BigoIOS_SetNativeAdPosition(UnityAd unityAd,int x, int y); + void BigoIOS_showNativeAd(UnityAd unityAd); + void BigoIOS_removeNativeView(UnityAd unityAd); + +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.h.meta new file mode 100644 index 0000000..fba7f26 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 7e57a1c9615984eaa8fcabfd30911db3 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.mm new file mode 100644 index 0000000..3b58da9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.mm @@ -0,0 +1,102 @@ +#import +#import "UnityAppController.h" +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityAdHandlerManager.h" +#import "BigoUnityNativeCustomView.h" + +extern "C"{ + +//load interstitial ad +void BigoIOS_loadNativeAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ) { + BigoIOS_dispatchSyncMainQueue(^{ + + UIViewController *vc = GetAppController().rootViewController; + BigoUnityNativeCustomView *nativeView = [[BigoUnityNativeCustomView alloc] initWithFrame:CGRectMake(0, 0, vc.view.frame.size.width, 300)]; + NSDictionary *requestDict = BigoIOS_requestJsonObjectFromJsonString(requestJson); + BigoUnityNativeAdHandler *adHandler = [[BigoUnityNativeAdHandler alloc] init]; + BigoNativeAdRequest *request = [[BigoNativeAdRequest alloc] initWithSlotId:BigoIOS_transformNSStringForm(slotId)]; + request.age = [requestDict[@"age"] intValue]; + request.gender = (BigoAdGender)[requestDict[@"gender"] intValue]; + request.activatedTime = [requestDict[@"activatedTime"] longLongValue]; + BigoNativeAdLoader *adLoader = [[BigoNativeAdLoader alloc] initWithNativeAdLoaderDelegate:adHandler]; + adLoader.ext = requestDict[@"extraInfo"]; + adHandler.nativeView = nativeView; + adHandler.adLoader = adLoader; + adHandler.unityAd = unityAd; + adHandler.showCallback = showCallback; + adHandler.clickCallback = clickCallback; + adHandler.dismissCallback = dismissCallback; + adHandler.adErrorCallback = adErrorCallback; + adHandler.successCallback = successCallback; + adHandler.failCallback = failCallback; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + [BigoUnityAdHandlerManager saveAdHandler:adHandler withKey:unityAdKey]; + [adLoader loadAd:request]; + }); + +} + +BigoUnityNativeAdHandler* BigoIOS_getNativeAdHandler(UnityAd unityAd) { + if (!unityAd) return nil; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityNativeAdHandler *handler = (BigoUnityNativeAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + if (!handler || ![handler isMemberOfClass:[BigoUnityNativeAdHandler class]]) { + return nil; + } + return handler; +} + +void BigoIOS_showNativeAd(UnityAd unityAd) { + BigoUnityNativeAdHandler *handler = BigoIOS_getNativeAdHandler(unityAd); + if (!handler) return; + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + BigoNativeAd *ad = (BigoNativeAd *)handler.ad; + //render + BigoUnityNativeCustomView *nativeView = (BigoUnityNativeCustomView *)handler.nativeView; + [ad registerViewForInteraction:nativeView mediaView:nativeView.mediaView adIconView:nativeView.adIconView adOptionsView:nativeView.adOptionsView clickableViews:nativeView.clickAbleViews]; + [nativeView refreshNativeView:ad]; + + CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; + CGRect frame = nativeView.frame; + frame.origin.y = screenHeight - frame.size.height; + nativeView.frame = frame; + + [vc.view addSubview:handler.nativeView]; + + }); +} + +void BigoIOS_SetNativeAdPosition(UnityAd unityAd,int x, int y) { + BigoUnityNativeAdHandler *handler = BigoIOS_getNativeAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + CGRect frame = handler.nativeView.frame; + frame.origin.x = x; + frame.origin.y = y; + handler.nativeView.frame = frame; + }); +} + +void BigoIOS_removeNativeView(UnityAd unityAd) { + BigoUnityNativeAdHandler *handler = BigoIOS_getNativeAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + [handler.nativeView removeFromSuperview]; + }); +} + +} + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.mm.meta new file mode 100644 index 0000000..1609c82 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 6e061b29b36eb4be7a56af7098092fb3 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.h new file mode 100644 index 0000000..ffbdb68 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.h @@ -0,0 +1,17 @@ +#import +#import + +@interface BigoUnityNativeCustomView : UIView + +@property (nonatomic, strong) BigoAdMediaView *mediaView; +@property (nonatomic, strong) UIImageView *adIconView; +@property (nonatomic, strong) BigoAdOptionsView *adOptionsView; +@property (nonatomic, strong) UILabel *titleLabel; +@property (nonatomic, strong) UILabel *detailLabel; +@property (nonatomic, strong) UIButton *cta; + +- (NSArray *)clickAbleViews; + +- (void)refreshNativeView:(BigoNativeAd *)nativeAd; + +@end diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.h.meta new file mode 100644 index 0000000..10dea82 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 1d74138abaf434fd38dce6301cac1107 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.m b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.m new file mode 100644 index 0000000..87accfe --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.m @@ -0,0 +1,72 @@ + +#import "BigoUnityNativeCustomView.h" + +@implementation BigoUnityNativeCustomView + +- (instancetype)initWithFrame:(CGRect)frame { + + if (self = [super initWithFrame:frame]) { + + self.backgroundColor = UIColor.whiteColor; + + self.mediaView = [BigoAdMediaView new]; + self.mediaView.bigoNativeAdViewTag = BigoNativeAdViewTagMedia; + self.mediaView.frame = CGRectMake(0, 50, CGRectGetWidth(self.bounds) , CGRectGetHeight(self.bounds) - 100); + + self.adIconView = [UIImageView new]; + self.adIconView.bigoNativeAdViewTag = BigoNativeAdViewTagIcon; + self.adIconView.frame = CGRectMake(0, 0, 50, 50); + + self.cta = [UIButton new]; + self.cta.bigoNativeAdViewTag = BigoNativeAdViewTagCallToAction; + self.cta.titleLabel.textColor = [UIColor colorWithRed:0 green:0 blue:255 alpha:255]; + self.cta.bigoNativeAdViewTag = BigoNativeAdViewTagCallToAction; + [self.cta setBackgroundColor:[UIColor grayColor]]; + + self.adOptionsView = [BigoAdOptionsView new]; + self.adOptionsView.bigoNativeAdViewTag = BigoNativeAdViewTagOption; + self.adOptionsView.frame = CGRectMake(CGRectGetWidth(self.bounds) - 20, 0, 20, 20); + + [self addSubview:self.mediaView]; + [self addSubview:self.adOptionsView]; + [self addSubview:self.adIconView]; + [self addSubview:self.cta]; + + self.titleLabel = UILabel.new; + self.titleLabel.textColor = UIColor.blackColor; + self.titleLabel.bigoNativeAdViewTag = BigoNativeAdViewTagTitle; + self.titleLabel.font = [UIFont systemFontOfSize:18]; + [self addSubview:self.titleLabel]; + + self.detailLabel = UILabel.new; + self.detailLabel.textColor = UIColor.lightGrayColor; + self.detailLabel.bigoNativeAdViewTag = BigoNativeAdViewTagDescription; + self.detailLabel.font = [UIFont systemFontOfSize:18]; + [self addSubview:self.detailLabel]; + + self.titleLabel.frame = CGRectMake(65, 5, CGRectGetWidth(self.bounds)-95, 20); + self.detailLabel.frame = CGRectMake(65, 30, CGRectGetWidth(self.bounds)-95, 20); + + self.cta.frame = CGRectMake(CGRectGetWidth(self.bounds)-100, 250, 100, 50); + + + } + return self; +} + +- (NSArray *)clickAbleViews { + return @[self.adIconView, self.titleLabel, self.detailLabel, self.cta]; +} + +- (void)refreshNativeView:(BigoNativeAd *)nativeAd { + self.titleLabel.text = nativeAd.title; + self.detailLabel.text = nativeAd.adDescription; + NSString *ctaTitle = nativeAd.callToAction.length > 0 ? nativeAd.callToAction : @"Install"; + [self.cta setTitle:ctaTitle forState:UIControlStateNormal]; + //设置按钮选择状态下的标题 + [self.cta setTitle:ctaTitle forState:UIControlStateSelected]; + //设置按钮高亮状态下的标题 + [self.cta setTitle:ctaTitle forState:UIControlStateHighlighted]; +} + +@end diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.m.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.m.meta new file mode 100644 index 0000000..0fe8a60 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Native/BigoUnityNativeCustomView.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: d9e95ef6076f8408a98e195f9786007a +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup.meta new file mode 100644 index 0000000..1be8634 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24e19875a9807479e8e67ede8568a37d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.cs new file mode 100644 index 0000000..dcca3b9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.cs @@ -0,0 +1,17 @@ +#if UNITY_IOS +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + + class BigoUnitypopupAd : BigoIOSBaseAd, IPopupAd + { + public void Load(string slotId, BigoPopupRequest request) + { + adType = 6; + LoadAdData(slotId,request); + } + } +} +#endif diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.cs.meta new file mode 100644 index 0000000..b015e0d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6db3f7d6fb1a84a6eb484a3a8de4498a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.h new file mode 100644 index 0000000..ed0d768 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.h @@ -0,0 +1,17 @@ +#import "BigoUnityBaseAdHandler.h" + +extern "C" { + + //load appOpen Ad + void BigoIOS_loadPopupAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback); + //show open ad + void BigoIOS_showPopupAd(UnityAd unityAd); +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.h.meta new file mode 100644 index 0000000..d0d26d0 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 60f143a983fcf474f9c68938033d595e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.mm new file mode 100644 index 0000000..83ce26a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.mm @@ -0,0 +1,29 @@ +#import +#import "UnityAppController.h" +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityAdHandlerManager.h" + +extern "C"{ + +//load popup ad +void BigoIOS_loadPopupAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ) { + + +} + +void BigoIOS_showPopupAd(UnityAd unityAd) { + +} + +} + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.mm.meta new file mode 100644 index 0000000..3e2fce7 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Popup/BigoUnityPopupAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 1216b7bb5404a4e478138d98a4ceabc8 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded.meta new file mode 100644 index 0000000..83e47cd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fc24c03453ca84472831cbe13d0cd70d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.cs new file mode 100644 index 0000000..42bcde8 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.cs @@ -0,0 +1,63 @@ +#if UNITY_IOS +using System.Collections.Generic; +using AOT; +using UnityEngine; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + using System; + using BigoAds.Scripts.Api; + using BigoAds.Scripts.Common; + using BigoAds.Scripts.Platforms.iOS; + using System.Runtime.InteropServices; + class BigoUnityRewardedAd : BigoIOSBaseAd, IRewardedAd + { + public event Action OnUserEarnedReward; + + public void Load(string slotId, BigoRewardedRequest request) + { + adType = 4; + this.unityAdPtr = (IntPtr)GCHandle.Alloc (this); + IntPtr ptr = this.unityAdPtr; + + BigoIOS_loadRewardedAdData(ptr, + slotId, + request.ToJson(), + cs_adDidLoadCallback, + cs_adLoadFailCallBack, + cs_adDidShowCallback, + cs_adDidClickCallback, + cs_adDidDismissCallback, + cs_adDidErrorCallBack, + cs_adDidEarnRewardCallback); + LOGWithMessage(System.Reflection.MethodBase.GetCurrentMethod()?.Name,$"slotId:{slotId},request{request}"); + } + + // c-> oc + [DllImport("__Internal")] + static extern void BigoIOS_loadRewardedAdData(IntPtr unityAd, + string slotId, + string requestJson, + adDidLoadCallback_delegate successCallback, + adLoadFailCallBack_delegate failCallback, + adDidShowCallback_delegate showCallback, + adDidClickCallback_delegate clickCallback, + adDidDismissCallback_delegate dismissCallback, + adDidErrorCallback_delegate adErrorCallback, + adDidEarnRewardCallback_delegate earnCallback); + + private delegate void adDidEarnRewardCallback_delegate(IntPtr unityAdPtr); + + [MonoPInvokeCallback(typeof(adDidEarnRewardCallback_delegate))] + private static void cs_adDidEarnRewardCallback(IntPtr unityAdPtr) + { + BigoUnityRewardedAd unityAd = BigoIOSBaseAd.GetUnityAd(unityAdPtr) as BigoUnityRewardedAd; + if (unityAd == null) + { + return; + } + unityAd.OnUserEarnedReward?.Invoke(); + } + } +} +#endif diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.cs.meta new file mode 100644 index 0000000..cdab5d2 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63ac6f7f8298c4f2585c4847b19ae90d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.h new file mode 100644 index 0000000..efe9083 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.h @@ -0,0 +1,18 @@ +#import "BigoUnityBaseAdHandler.h" + +extern "C" { + + //load Rewarded Ad + void BigoIOS_loadRewardedAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback, + AdDidEarnRewardCallback earnCallback); + //show open ad + void BigoIOS_showRewardedAd(UnityAd unityAd); +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.h.meta new file mode 100644 index 0000000..1963bd9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: 780f30ce3796b4a89a92aa7e746d76bd +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.mm new file mode 100644 index 0000000..339e78b --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.mm @@ -0,0 +1,69 @@ +#import +#import "UnityAppController.h" +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityAdHandlerManager.h" + +extern "C"{ + +//load rewarded ad +void BigoIOS_loadRewardedAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback, + AdDidEarnRewardCallback earnCallback + ) { + BigoIOS_dispatchSyncMainQueue(^{ + + BigoUnityRewardedAdHandler *adHandler = [[BigoUnityRewardedAdHandler alloc] init]; + BigoRewardVideoAdRequest *request = [[BigoRewardVideoAdRequest alloc] initWithSlotId:BigoIOS_transformNSStringForm(slotId)]; + NSDictionary *requestDict = BigoIOS_requestJsonObjectFromJsonString(requestJson); + request.age = [requestDict[@"age"] intValue]; + request.gender = (BigoAdGender)[requestDict[@"gender"] intValue]; + request.activatedTime = [requestDict[@"activatedTime"] longLongValue]; + BigoRewardVideoAdLoader *adLoader = [[BigoRewardVideoAdLoader alloc] initWithRewardVideoAdLoaderDelegate:adHandler]; + adLoader.ext = requestDict[@"extraInfo"]; + adHandler.adLoader = adLoader; + adHandler.unityAd = unityAd; + adHandler.showCallback = showCallback; + adHandler.clickCallback = clickCallback; + adHandler.dismissCallback = dismissCallback; + adHandler.adErrorCallback = adErrorCallback; + adHandler.successCallback = successCallback; + adHandler.failCallback = failCallback; + adHandler.earnCallback = earnCallback; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + [BigoUnityAdHandlerManager saveAdHandler:adHandler withKey:unityAdKey]; + [adLoader loadAd:request]; + }); + +} + +BigoUnityRewardedAdHandler* BigoIOS_getRewardedAdHandler(UnityAd unityAd) { + if (!unityAd) return nil; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnityRewardedAdHandler *handler = (BigoUnityRewardedAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + if (!handler || ![handler isMemberOfClass:[BigoUnityRewardedAdHandler class]]) { + return nil; + } + return handler; +} + +void BigoIOS_showRewardedAd(UnityAd unityAd) { + BigoUnityRewardedAdHandler *handler = BigoIOS_getRewardedAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + UIViewController *vc = GetAppController().rootViewController; + BigoRewardVideoAd *ad = (BigoRewardVideoAd *)handler.ad; + [ad show:vc]; + }); +} + +} + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.mm.meta new file mode 100644 index 0000000..71a5f96 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Rewarded/BigoUnityRewardedAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: d8fabace3a5bc43d1909e6d2e3d11b76 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash.meta new file mode 100644 index 0000000..2dca882 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f81b17e4602f4d049f2f1679dd986df +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.h new file mode 100644 index 0000000..0dd0477 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.h @@ -0,0 +1,24 @@ +// +// BGSplashAdViewController.h +// demo +// +// Created by cai on 2022/5/23. +// + +#import +#import +#import "BigoUnityBaseAdHandler.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface BGSplashAdViewController : UIViewController + +@property (nonatomic, strong) UIViewController *rootVC; + +@property (nonatomic, strong) BigoSplashAd *ad; + +@property (nonatomic, weak) BigoUnitySplashAdHandler *adHandle; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.h.meta new file mode 100644 index 0000000..6a06c0e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: fb04cd43cee464aaca615d708992dd8c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.m b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.m new file mode 100644 index 0000000..2ab13ff --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.m @@ -0,0 +1,71 @@ +// +// BGSplashAdViewController.m +// demo +// +// Created by cai on 2022/5/23. +// + +#import "BGSplashAdViewController.h" + +@interface BGSplashAdViewController () + +@end + +@implementation BGSplashAdViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [UIColor whiteColor]; + + [self.ad setSplashAdInteractionDelegate:self]; + [self.ad showInAdContainer:self.view]; +} + +- (void)dismissSplashController:(BigoAd *)ad { + [self.adHandle onAdClosed:ad]; + [[UIApplication sharedApplication].keyWindow setRootViewController:self.rootVC]; +} + +/** + * 广告可跳过回调,通常是由用户点击了右上角 SKIP 按钮所触发 + */ +- (void)onAdSkipped:(BigoAd *)ad { + [self dismissSplashController:ad]; +} + +/** + * 广告倒计时结束回调 + */ +- (void)onAdFinished:(BigoAd *)ad { + +} + +- (void)onAd:(BigoAd *)ad error:(BigoAdError *)error { + [self dismissSplashController:ad]; +} + +//广告展示 +- (void)onAdImpression:(BigoAd *)ad { + [self.adHandle onAdImpression:ad]; +} + +//广告点击 +- (void)onAdClicked:(BigoAd *)ad { + [self.adHandle onAdClicked:ad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + [self.navigationController setNavigationBarHidden:YES animated:animated]; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + [self.navigationController setNavigationBarHidden:NO animated:animated]; +} + +- (BOOL)prefersStatusBarHidden { + return YES; +} + +@end diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.m.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.m.meta new file mode 100644 index 0000000..21558bd --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BGSplashAdViewController.m.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 39e7476be840e4443b46b46741933efe +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.cs new file mode 100644 index 0000000..3d524cf --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.cs @@ -0,0 +1,17 @@ +#if UNITY_IOS +using BigoAds.Scripts.Api; +using BigoAds.Scripts.Common; + +namespace BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd +{ + + class BigoUnitySplashAd : BigoIOSBaseAd, ISplashAd + { + public void Load(string slotId, BigoSplashRequest request) + { + adType = 5; + LoadAdData(slotId,request); + } + } +} +#endif diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.cs.meta new file mode 100644 index 0000000..f7fd32d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75707b903f9fd4fdaa3146b0ec0fad6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.h new file mode 100644 index 0000000..f2a616a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.h @@ -0,0 +1,17 @@ +#import "BigoUnityBaseAdHandler.h" + +extern "C" { + + //load appOpen Ad + void BigoIOS_loadSplashAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback); + //show open ad + void BigoIOS_showSplashAd(UnityAd unityAd); +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.h.meta new file mode 100644 index 0000000..265c352 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: b558ab701b1ae4f74a9bf6908be239c4 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.mm new file mode 100644 index 0000000..4024579 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.mm @@ -0,0 +1,71 @@ +#import +#import "UnityAppController.h" +#import "BigoUnityBaseAdHandler.h" +#import "BigoUnityAdapterTools.h" +#import "BigoUnityAdHandlerManager.h" +#import "BGSplashAdViewController.h" + +extern "C"{ + +//load splash ad +void BigoIOS_loadSplashAdData(UnityAd unityAd, + const char *slotId, + const char *requestJson, + AdDidLoadCallback successCallback, + AdLoadFailCallBack failCallback, + AdDidShowCallback showCallback, + AdDidClickCallback clickCallback, + AdDidDismissCallback dismissCallback, + AdDidErrorCallback adErrorCallback + ) { + BigoIOS_dispatchSyncMainQueue(^{ + + BigoUnitySplashAdHandler *adHandler = [[BigoUnitySplashAdHandler alloc] init]; + BigoSplashAdRequest *request = [[BigoSplashAdRequest alloc] initWithSlotId:BigoIOS_transformNSStringForm(slotId)]; + NSDictionary *requestDict = BigoIOS_requestJsonObjectFromJsonString(requestJson); + request.age = [requestDict[@"age"] intValue]; + request.gender = (BigoAdGender)[requestDict[@"gender"] intValue]; + request.activatedTime = [requestDict[@"activatedTime"] longLongValue]; + BigoSplashAdLoader *adLoader = [[BigoSplashAdLoader alloc] initWithSplashAdLoaderDelegate:adHandler]; + adLoader.ext = requestDict[@"extraInfo"]; + adHandler.adLoader = adLoader; + adHandler.unityAd = unityAd; + adHandler.showCallback = showCallback; + adHandler.clickCallback = clickCallback; + adHandler.dismissCallback = dismissCallback; + adHandler.adErrorCallback = adErrorCallback; + adHandler.successCallback = successCallback; + adHandler.failCallback = failCallback; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + [BigoUnityAdHandlerManager saveAdHandler:adHandler withKey:unityAdKey]; + [adLoader loadAd:request]; + }); + +} + +BigoUnitySplashAdHandler* BigoIOS_getSplashAdHandler(UnityAd unityAd) { + if (!unityAd) return nil; + NSString *unityAdKey = [BigoUnityAdHandlerManager createKeyUnityAd:unityAd]; + BigoUnitySplashAdHandler *handler = (BigoUnitySplashAdHandler*)[BigoUnityAdHandlerManager handlerWithKey:unityAdKey]; + if (!handler || ![handler isMemberOfClass:[BigoUnitySplashAdHandler class]]) { + return nil; + } + return handler; +} + +void BigoIOS_showSplashAd(UnityAd unityAd) { + BigoUnitySplashAdHandler *handler = BigoIOS_getSplashAdHandler(unityAd); + if (!handler) return; + + BigoIOS_dispatchSyncMainQueue(^{ + BGSplashAdViewController *vc = [BGSplashAdViewController new]; + BigoSplashAd *ad = (BigoSplashAd *)handler.ad; + vc.ad = ad; + vc.adHandle = handler; + vc.rootVC = [UIApplication sharedApplication].keyWindow.rootViewController; + [[UIApplication sharedApplication].keyWindow setRootViewController:vc]; + }); +} + +} + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.mm.meta new file mode 100644 index 0000000..fad9286 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoAd/Splash/BigoUnitySplashAd.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 8235e7e5bc3aa4161911cbb121a01ed6 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.h b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.h new file mode 100644 index 0000000..d78de0d --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.h @@ -0,0 +1,6 @@ +extern "C" { + NSString* BigoIOS_transformNSStringForm(const char * string); + void BigoIOS_dispatchSyncMainQueue(void (^block)(void)); + NSDictionary* BigoIOS_jsonObjectFromJsonString(NSString *jsonString); + NSDictionary* BigoIOS_requestJsonObjectFromJsonString(const char * json); +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.h.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.h.meta new file mode 100644 index 0000000..a39f59f --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.h.meta @@ -0,0 +1,27 @@ +fileFormatVersion: 2 +guid: b79d02d93f49840b7ad17017bcb5f3fe +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.mm b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.mm new file mode 100644 index 0000000..36c107a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.mm @@ -0,0 +1,43 @@ +#import + +extern "C" { +//字符串转化工具 +NSString* BigoIOS_transformNSStringForm(const char * string) +{ + if (!string) + { + string = ""; + } + return [NSString stringWithUTF8String:string]; +} + +void BigoIOS_dispatchSyncMainQueue(void (^block)(void)) { + if (!block) return; + if ([[NSThread currentThread] isMainThread]){ + block(); + return; + } + dispatch_sync(dispatch_get_main_queue(), ^{ block(); }); +} + +NSDictionary* BigoIOS_jsonObjectFromJsonString(NSString *jsonString) { + if (jsonString.length == 0) { + return [[NSDictionary alloc] init]; + } + NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; + NSError *error = nil; + id obj = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; + if (error || ![obj isKindOfClass:[NSDictionary class]]) { + return [[NSDictionary alloc] init]; + } + return obj; +} + +NSDictionary* BigoIOS_requestJsonObjectFromJsonString(const char * json) { + NSString *string = BigoIOS_transformNSStringForm(json); + return BigoIOS_jsonObjectFromJsonString(string); +} + + + +} diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.mm.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.mm.meta new file mode 100644 index 0000000..d1965c5 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/Adapter/BigoUnityAdapterTools.mm.meta @@ -0,0 +1,37 @@ +fileFormatVersion: 2 +guid: 486cb19aab9734f3182b6ff6dc3d23b4 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: {} + - first: + tvOS: tvOS + second: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/IOSClientFactory.cs b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/IOSClientFactory.cs new file mode 100644 index 0000000..8f03a0a --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/IOSClientFactory.cs @@ -0,0 +1,46 @@ +#if UNITY_IOS +using BigoAds.Scripts.Common; +using BigoAds.Scripts.Platforms.iOS; +using BigoAds.Scripts.Platforms.iOS.Adapter.BigoAd; + +namespace BigoAds.Scripts.Platforms.iOS +{ + class IOSClientFactory : IClientFactory + { + + public ISDK BuildSDKClient() + { + return new BigoUnitySdk(); + } + + public IBannerAd BuildBannerAdClient() + { + return new BigoUnityBannerAd(); + } + + public INativeAd BuildNativeAdClient() + { + return new BigoUnityNativeAd(); + } + + public IInterstitialAd BuildInterstitialAdClient() + { + return new BigoUnityinterstitialAd(); + } + + public ISplashAd BuildSplashAdClient() + { + return new BigoUnitySplashAd(); + } + + public IRewardedAd BuildRewardedAdClient() + { + return new BigoUnityRewardedAd(); + } + public IPopupAd BuildPopupAdClient() + { + return new BigoUnitypopupAd(); + } + } +} +#endif \ No newline at end of file diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/IOSClientFactory.cs.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/IOSClientFactory.cs.meta new file mode 100644 index 0000000..3c9b051 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoAds/Scripts/Platforms/iOS/IOSClientFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19b9b3ee98a034640a2530047c2a4d7a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK.meta new file mode 100644 index 0000000..ba780c9 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2154e3fcfcb7f460db1c13464bb1355f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor.meta new file mode 100644 index 0000000..39c97da --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec31bab3b8560467a9ec89b7934596bd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor/Dependencies.xml b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor/Dependencies.xml new file mode 100644 index 0000000..ce4d37e --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor/Dependencies.xml @@ -0,0 +1,13 @@ + + + + + + + + + https://repo1.maven.org/maven2/ + + + + diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor/Dependencies.xml.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor/Dependencies.xml.meta new file mode 100644 index 0000000..f60ea08 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/BigoSDK/Editor/Dependencies.xml.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1b669f66367be4697b7819f165f9842b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins.meta new file mode 100644 index 0000000..b09bf35 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca1b7cf972e5d7a4ebc9e77be68a314b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android.meta new file mode 100644 index 0000000..570b366 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1cdd34ee8d852e4e9b14eea343fef69 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res.meta new file mode 100644 index 0000000..bc27901 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 09459092961e841bb83f8a01e1e0c22e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res/layout.meta b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res/layout.meta new file mode 100644 index 0000000..828e4a1 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res/layout.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c220b7479c41f472da80fb5a47a9c7ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res/layout/layout_bigo_native_ad.xml b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res/layout/layout_bigo_native_ad.xml new file mode 100644 index 0000000..27f9078 --- /dev/null +++ b/Assets/NCWWA6A0SDK/ThirdParty/BigoAdsAll/Plugins/Android/res/layout/layout_bigo_native_ad.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/Plugins/iOS/NativeTemplates/GADTMediumTemplateView.xib.meta b/Assets/Plugins/iOS/NativeTemplates/GADTMediumTemplateView.xib.meta new file mode 100644 index 0000000..014af98 --- /dev/null +++ b/Assets/Plugins/iOS/NativeTemplates/GADTMediumTemplateView.xib.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 766f36c9503c48e5915b2dbb1b312f64 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-Plugins/iOS/NativeTemplates/GADTMediumTemplateView.xib +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib b/Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib new file mode 100644 index 0000000..f819f1d --- /dev/null +++ b/Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib.meta b/Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib.meta new file mode 100644 index 0000000..9715b79 --- /dev/null +++ b/Assets/Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 6af78782470b4da9994fc4cf04f03183 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-Plugins/iOS/NativeTemplates/GADTSmallTemplateView.xib +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/ULiteWebView.mm b/Assets/Plugins/iOS/ULiteWebView.mm new file mode 100644 index 0000000..7ff4874 --- /dev/null +++ b/Assets/Plugins/iOS/ULiteWebView.mm @@ -0,0 +1,286 @@ + +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import +#import + +@interface ULiteWebView : NSObject +{ + WKWebView* _webView; + NSString* _gameObjectName; +} +@end + +@implementation ULiteWebView +//注册webview +- (void)init:(const char*)gameObjectName{ + _gameObjectName = [NSString stringWithUTF8String:gameObjectName]; +} + +- (void)createWebView{ + if(_webView == nil){ + UIView* view = UnityGetGLViewController().view; + _webView = [[WKWebView alloc] initWithFrame:view.frame]; + _webView.hidden = YES; + _webView.navigationDelegate = self; +// _webView.UIDelegate = self; + [[_webView configuration].userContentController addScriptMessageHandler:self name:@"ULiteWebView"]; + + // //创建网页配置对象 + // WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; + // + // // 创建设置对象 + // WKPreferences *preference = [[WKPreferences alloc]init]; + // //最小字体大小 当将javaScriptEnabled属性设置为NO时,可以看到明显的效果 + // preference.minimumFontSize = 0; + // //设置是否支持javaScript 默认是支持的 + // preference.javaScriptEnabled = YES; + // // 在iOS上默认为NO,表示是否允许不经过用户交互由javaScript自动打开窗口 + // preference.javaScriptCanOpenWindowsAutomatically = YES; + // config.preferences = preference; + // + // // 是使用h5的视频播放器在线播放, 还是使用原生播放器全屏播放 + // config.allowsInlineMediaPlayback = YES; + // //设置视频是否需要用户手动播放 设置为NO则会允许自动播放 + // config.requiresUserActionForMediaPlayback = YES; + // //设置是否允许画中画技术 在特定设备上有效 + // config.allowsPictureInPictureMediaPlayback = YES; + // //设置请求的User-Agent信息中应用程序名称 iOS9后可用 + // config.applicationNameForUserAgent = @"ChinaDailyForiPad"; + // + // //这个类主要用来做native与JavaScript的交互管理 + // WKUserContentController * wkUController = [[WKUserContentController alloc] init]; + // //注册一个name为jsToOcNoPrams的js方法 + // [wkUController addScriptMessageHandler:self name:@"ULiteWebView"]; + // config.userContentController = wkUController; + + + + [view addSubview:_webView]; + } +} + +- (void)disposeWebView{ + if(_webView != nil){ + [_webView removeFromSuperview]; + [[_webView configuration].userContentController removeScriptMessageHandlerForName:@"ULiteWebView"]; + _webView.navigationDelegate = nil; + _webView.UIDelegate = nil; + _webView = nil; + } +} + +//显示webview +- (void)show:(int)top bottom:(int)bottom left:(int)left right:(int)right { + [self createWebView]; + UIView *view = UnityGetGLViewController().view; + _webView.hidden = NO; + CGRect frame = view.frame; + CGFloat scale = view.contentScaleFactor; + frame.size.width -= (left + right) / scale; + frame.size.height -= (top + bottom) / scale; + frame.origin.x += left / scale; + frame.origin.y += top / scale; + _webView.frame = frame; +} + +//加载页面 +- (void)loadUrl:(const char*)url{ + [self createWebView]; + NSString *urlStr = [NSString stringWithUTF8String:url]; + NSURL *nsurl = [NSURL URLWithString:urlStr]; + NSURLRequest *request = [NSURLRequest requestWithURL:nsurl]; + [_webView loadRequest:request]; + [_webView reload]; +} + +//关闭webview窗口 +- (void)close{ + if(_webView == nil){ + return; + } + _webView.hidden = YES; + [self disposeWebView]; +} + +//调用JS +- (void)callJS:(const char*)funName msg:(const char*)msg{ + if(_webView == nil){ + return; + } + + //OC调用JS completionHandler是异步回调block + NSString *jsStr= [NSString stringWithFormat:@"%s(\"%s\")",funName,msg]; + [_webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable data, NSError * _Nullable error) { + NSLog(@"调用JS:%@", jsStr); + }]; +} + +//被JS调用 +- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message { + + NSLog(@"方法名:%@", message.name); + NSString* content = message.body; + NSLog(@"参数:%@", content); + + + UnitySendMessage([_gameObjectName UTF8String], "OnJsCall", [content UTF8String]); +} + +//捕获链接请求 +//- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType +//{ +// NSString *url = [[request URL] absoluteString]; +// +// UnitySendMessage([_gameObjectName UTF8String], "OnLoadingUrl", [url UTF8String]); +// +// NSRange range = [url rangeOfString:@"ulitewebview://"]; +// if(range.location != NSNotFound){ +// NSString *msg = [url substringFromIndex:range.length]; +// UnitySendMessage([_gameObjectName UTF8String], "OnJsCall", [msg UTF8String]); +// return YES; +// } +// return YES; +//} + +// 页面开始加载时调用 +- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { + + NSLog(@"页面开始加载: %@", webView.URL.absoluteString); + UnitySendMessage([_gameObjectName UTF8String], "OnLoadingUrl", [webView.URL.absoluteString UTF8String]); +} +// 页面加载失败时调用 +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(null_unspecified WKNavigation *)navigation withError:(NSError *)error { + NSLog(@"页面加载失败"); +} + +// 当内容开始返回时调用 +- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation { + NSLog(@"页面内容开始加载"); +} + +// 页面加载完成之后调用 +- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { + NSLog(@"页面内容加载完成"); +} +//提交发生错误时调用 +- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error { + NSLog(@"提交发生错误时调用"); +} +// 接收到服务器跳转请求即服务重定向时之后调用 +- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation { + +} +// 根据WebView对于即将跳转的HTTP请求头信息和相关信息来决定是否跳转 +- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { + + NSString * urlStr = navigationAction.request.URL.absoluteString; + NSLog(@"发送跳转请求:%@",urlStr); + //自己定义的协议头 + // NSString *htmlHeadString = @"github://"; + // if([urlStr hasPrefix:htmlHeadString]){ + // UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"通过截取URL调用OC" message:@"你想前往我的Github主页?" preferredStyle:UIAlertControllerStyleAlert]; + // [alertController addAction:([UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { + // }])]; + // [alertController addAction:([UIAlertAction actionWithTitle:@"打开" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + // NSURL * url = [NSURL URLWithString:[urlStr stringByReplacingOccurrencesOfString:@"github://callName_?" withString:@""]]; + // [[UIApplication sharedApplication] openURL:url]; + // }])]; + // + // decisionHandler(WKNavigationActionPolicyCancel); + // }else{ + // decisionHandler(WKNavigationActionPolicyAllow); + // } + + decisionHandler(WKNavigationActionPolicyAllow); +} + +// 根据客户端受到的服务器响应头以及response相关信息来决定是否可以跳转 +- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler{ + NSString * urlStr = navigationResponse.response.URL.absoluteString; + NSLog(@"当前跳转地址:%@",urlStr); + //允许跳转 + decisionHandler(WKNavigationResponsePolicyAllow); + //不允许跳转 + // decisionHandler(WKNavigationResponsePolicyCancel); +} + +//需要响应身份验证时调用 同样在block中需要传入用户身份凭证 +//- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * _Nullable credential))completionHandler{ +// +//} +//进程被终止时调用 +- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView{ + NSLog(@"进程终止了"); +} + +@end + + +extern "C" +{ +void _registResponseGameObject(const char* gameObjectName); +void _show(int top, int bottom, int left, int right); +void _loadUrl(const char* url); +void _close(); +void _callJS(const char* funName, const char* msg); + + +static ULiteWebView *ulite; +const char* gameObjectName; + +void _registCallBackGameObjectName(const char* gameObjectName){ + if(ulite != nil){ + return; + } + + ulite = [ULiteWebView alloc]; + [ulite init:gameObjectName]; + // NSLog(@"_registResponseGameObject"); +} + +void _show(int top, int bottom, int left, int right){ + if(ulite == nil){ + return; + } + + [ulite show:top bottom:bottom left:left right:right]; + // NSLog(@"_show"); + +} + +void _loadUrl(const char* url){ + if(ulite == nil){ + return; + } + + [ulite loadUrl:url]; + // NSLog(@"_loadUrl"); +} + +void _close(){ + if(ulite == nil){ + return; + } + + [ulite close]; + // NSLog(@"_close"); +} + +void _callJS(const char* funName, const char* msg){ + if(ulite == nil){ + return; + } + + [ulite callJS:funName msg:msg]; + // NSLog(@"_callJS"); +} +} + diff --git a/Assets/Plugins/iOS/ULiteWebView.mm.meta b/Assets/Plugins/iOS/ULiteWebView.mm.meta new file mode 100644 index 0000000..3bf81d8 --- /dev/null +++ b/Assets/Plugins/iOS/ULiteWebView.mm.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 7481d2e5260f48e45b496eeff53f98e1 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/WebView.mm b/Assets/Plugins/iOS/WebView.mm new file mode 100644 index 0000000..4620012 --- /dev/null +++ b/Assets/Plugins/iOS/WebView.mm @@ -0,0 +1,1218 @@ +/* + * Copyright (C) 2011 Keijiro Takahashi + * Copyright (C) 2012 GREE, Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#if !(__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) + +#import +#import + +// NOTE: we need extern without "C" before unity 4.5 +//extern UIViewController *UnityGetGLViewController(); +extern "C" UIViewController *UnityGetGLViewController(); +extern "C" void UnitySendMessage(const char *, const char *, const char *); + +// cf. https://stackoverflow.com/questions/26383031/wkwebview-causes-my-view-controller-to-leak/33365424#33365424 +@interface WeakScriptMessageDelegate : NSObject + +@property (nonatomic, weak) id scriptDelegate; + +- (instancetype)initWithDelegate:(id)scriptDelegate; + +@end + +@implementation WeakScriptMessageDelegate + +- (instancetype)initWithDelegate:(id)scriptDelegate +{ + self = [super init]; + if (self) { + _scriptDelegate = scriptDelegate; + } + return self; +} + +- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message +{ + [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message]; +} + +@end + +@protocol WebViewProtocol +@property (nonatomic, getter=isOpaque) BOOL opaque; +@property (nullable, nonatomic, copy) UIColor *backgroundColor UI_APPEARANCE_SELECTOR; +@property (nonatomic, getter=isHidden) BOOL hidden; +@property (nonatomic) CGRect frame; +@property (nullable, nonatomic, weak) id navigationDelegate; +@property (nullable, nonatomic, weak) id UIDelegate; +@property (nullable, nonatomic, readonly, copy) NSURL *URL; +- (void)load:(NSURLRequest *)request; +- (void)loadHTML:(NSString *)html baseURL:(NSURL *)baseUrl; +- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ __nullable)(__nullable id, NSError * __nullable error))completionHandler; +@property (nonatomic, readonly) BOOL canGoBack; +@property (nonatomic, readonly) BOOL canGoForward; +- (void)goBack; +- (void)goForward; +- (void)reload; +- (void)stopLoading; +- (void)setScrollbarsVisibility:(BOOL)visibility; +- (void)setScrollBounce:(BOOL)enable; +@end + +@interface WKWebView(WebViewProtocolConformed) +@end + +@implementation WKWebView(WebViewProtocolConformed) + +- (void)load:(NSURLRequest *)request +{ + WKWebView *webView = (WKWebView *)self; + NSURL *url = [request URL]; + if ([url.absoluteString hasPrefix:@"file:"]) { + NSURL *top = [NSURL URLWithString:[[url absoluteString] stringByDeletingLastPathComponent]]; + [webView loadFileURL:url allowingReadAccessToURL:top]; + } else { + [webView loadRequest:request]; + } +} + +- (NSURLRequest *)constructionCustomHeader:(NSURLRequest *)originalRequest with:(NSDictionary *)headerDictionary +{ + NSMutableURLRequest *convertedRequest = originalRequest.mutableCopy; + for (NSString *key in [headerDictionary allKeys]) { + [convertedRequest setValue:headerDictionary[key] forHTTPHeaderField:key]; + } + return (NSURLRequest *)[convertedRequest copy]; +} + +- (void)loadHTML:(NSString *)html baseURL:(NSURL *)baseUrl +{ + WKWebView *webView = (WKWebView *)self; + [webView loadHTMLString:html baseURL:baseUrl]; +} + +- (void)setScrollbarsVisibility:(BOOL)visibility +{ + WKWebView *webView = (WKWebView *)self; + webView.scrollView.showsHorizontalScrollIndicator = visibility; + webView.scrollView.showsVerticalScrollIndicator = visibility; +} + +- (void)setScrollBounce:(BOOL)enable +{ + WKWebView *webView = (WKWebView *)self; + webView.scrollView.bounces = enable; +} + +@end + +@interface CWebViewPlugin : NSObject +{ + UIView *webView; + NSString *gameObjectName; + NSMutableDictionary *customRequestHeader; + BOOL alertDialogEnabled; + NSRegularExpression *allowRegex; + NSRegularExpression *denyRegex; + NSRegularExpression *hookRegex; + NSString *basicAuthUserName; + NSString *basicAuthPassword; +} +@end + +@implementation CWebViewPlugin + +static WKProcessPool *_sharedProcessPool; +static NSMutableArray *_instances = [[NSMutableArray alloc] init]; + +- (BOOL)isInitialized +{ + return webView != nil; +} + +- (id)initWithGameObjectName:(const char *)gameObjectName_ transparent:(BOOL)transparent zoom:(BOOL)zoom ua:(const char *)ua enableWKWebView:(BOOL)enableWKWebView contentMode:(WKContentMode)contentMode allowsLinkPreview:(BOOL)allowsLinkPreview allowsBackForwardNavigationGestures:(BOOL)allowsBackForwardNavigationGestures radius:(int)radius +{ + self = [super init]; + + gameObjectName = [NSString stringWithUTF8String:gameObjectName_]; + customRequestHeader = [[NSMutableDictionary alloc] init]; + alertDialogEnabled = true; + allowRegex = nil; + denyRegex = nil; + hookRegex = nil; + basicAuthUserName = nil; + basicAuthPassword = nil; + UIView *view = UnityGetGLViewController().view; + if (enableWKWebView && [WKWebView class]) { + if (_sharedProcessPool == NULL) { + _sharedProcessPool = [[WKProcessPool alloc] init]; + } + WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; + WKUserContentController *controller = [[WKUserContentController alloc] init]; + [controller addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"unityControl"]; + [controller addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"saveDataURL"]; + NSString *str = @"\ +window.Unity = { \ + call: function(msg) { \ + window.webkit.messageHandlers.unityControl.postMessage(msg); \ + }, \ + saveDataURL: function(fileName, dataURL) { \ + window.webkit.messageHandlers.saveDataURL.postMessage(fileName + '\t' + dataURL); \ + } \ +}; \ +"; + if (!zoom) { + str = [str stringByAppendingString:@"\ +(function() { \ + var meta = document.querySelector('meta[name=viewport]'); \ + if (meta == null) { \ + meta = document.createElement('meta'); \ + meta.name = 'viewport'; \ + } \ + meta.content += ((meta.content.length > 0) ? ',' : '') + 'user-scalable=no'; \ + var head = document.getElementsByTagName('head')[0]; \ + head.appendChild(meta); \ +})(); \ +" + ]; + } + WKUserScript *script + = [[WKUserScript alloc] initWithSource:str injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; + [controller addUserScript:script]; + configuration.userContentController = controller; + configuration.allowsInlineMediaPlayback = true; + if (@available(iOS 10.0, *)) { + configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone; + } else { + if (@available(iOS 9.0, *)) { + configuration.requiresUserActionForMediaPlayback = NO; + } else { + configuration.mediaPlaybackRequiresUserAction = NO; + } + } + configuration.websiteDataStore = [WKWebsiteDataStore defaultDataStore]; + configuration.processPool = _sharedProcessPool; + if (@available(iOS 13.0, *)) { + configuration.defaultWebpagePreferences.preferredContentMode = contentMode; + } +#if UNITYWEBVIEW_IOS_ALLOW_FILE_URLS + // cf. https://stackoverflow.com/questions/35554814/wkwebview-xmlhttprequest-with-file-url/44365081#44365081 + try { + [configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"]; + } + catch (NSException *ex) { + } + try { + [configuration setValue:@TRUE forKey:@"allowUniversalAccessFromFileURLs"]; + } + catch (NSException *ex) { + } +#endif + WKWebView *wkwebView = [[WKWebView alloc] initWithFrame:view.frame configuration:configuration]; +#if UNITYWEBVIEW_DEVELOPMENT + NSOperatingSystemVersion version = { 16, 4, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + wkwebView.inspectable = true; + } +#endif + wkwebView.allowsLinkPreview = allowsLinkPreview; + wkwebView.allowsBackForwardNavigationGestures = allowsBackForwardNavigationGestures; + webView = wkwebView; + webView.UIDelegate = self; + webView.navigationDelegate = self; + if (radius > 0) { + webView.layer.cornerRadius = radius; + webView.layer.masksToBounds = YES; + } + if (ua != NULL && strcmp(ua, "") != 0) { + ((WKWebView *)webView).customUserAgent = [[NSString alloc] initWithUTF8String:ua]; + } + // cf. https://rick38yip.medium.com/wkwebview-weird-spacing-issue-in-ios-13-54a4fc686f72 + // cf. https://stackoverflow.com/questions/44390971/automaticallyadjustsscrollviewinsets-was-deprecated-in-ios-11-0 + if (@available(iOS 11.0, *)) { + ((WKWebView *)webView).scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } else { + //UnityGetGLViewController().automaticallyAdjustsScrollViewInsets = false; + } + } else { + webView = nil; + return self; + } + if (transparent) { + webView.opaque = NO; + webView.backgroundColor = [UIColor clearColor]; + } + webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + webView.hidden = YES; + + [webView addObserver:self forKeyPath: @"loading" options: NSKeyValueObservingOptionNew context:nil]; + + [view addSubview:webView]; + + return self; +} + +- (void)dispose +{ + if (webView != nil) { + UIView *webView0 = webView; + webView = nil; + if ([webView0 isKindOfClass:[WKWebView class]]) { + webView0.UIDelegate = nil; + webView0.navigationDelegate = nil; + [((WKWebView *)webView0).configuration.userContentController removeScriptMessageHandlerForName:@"saveDataURL"]; + [((WKWebView *)webView0).configuration.userContentController removeScriptMessageHandlerForName:@"unityControl"]; + } + [webView0 stopLoading]; + [webView0 removeFromSuperview]; + [webView0 removeObserver:self forKeyPath:@"loading"]; + } + basicAuthPassword = nil; + basicAuthUserName = nil; + hookRegex = nil; + denyRegex = nil; + allowRegex = nil; + customRequestHeader = nil; + gameObjectName = nil; +} + ++ (void)resetSharedProcessPool +{ + // cf. https://stackoverflow.com/questions/33156567/getting-all-cookies-from-wkwebview/49744695#49744695 + _sharedProcessPool = [[WKProcessPool alloc] init]; + [_instances enumerateObjectsUsingBlock:^(CWebViewPlugin *obj, NSUInteger idx, BOOL *stop) { + if ([obj->webView isKindOfClass:[WKWebView class]]) { + WKWebView *webView = (WKWebView *)obj->webView; + webView.configuration.processPool = _sharedProcessPool; + } + }]; +} + ++ (void)clearCookies +{ + [CWebViewPlugin resetSharedProcessPool]; + + // cf. https://dev.classmethod.jp/smartphone/remove-webview-cookies/ + NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject; + NSString *cookiesPath = [libraryPath stringByAppendingPathComponent:@"Cookies"]; + NSString *webKitPath = [libraryPath stringByAppendingPathComponent:@"WebKit"]; + [[NSFileManager defaultManager] removeItemAtPath:cookiesPath error:nil]; + [[NSFileManager defaultManager] removeItemAtPath:webKitPath error:nil]; + + NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + if (cookieStorage == nil) { + // cf. https://stackoverflow.com/questions/33876295/nshttpcookiestorage-sharedhttpcookiestorage-comes-up-empty-in-10-11 + cookieStorage = [NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier:@"Cookies"]; + } + [[cookieStorage cookies] enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) { + [cookieStorage deleteCookie:cookie]; + }]; + + NSOperatingSystemVersion version = { 9, 0, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + // cf. https://stackoverflow.com/questions/46465070/how-to-delete-cookies-from-wkhttpcookiestore/47928399#47928399 + NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; + NSDate *date = [NSDate dateWithTimeIntervalSince1970:0]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes + modifiedSince:date + completionHandler:^{}]; + } +} + ++ saveCookies +{ + [CWebViewPlugin resetSharedProcessPool]; +} + +- (void)getCookies:(const char *)url +{ + NSOperatingSystemVersion version = { 9, 0, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]; + WKHTTPCookieStore *cookieStore = WKWebsiteDataStore.defaultDataStore.httpCookieStore; + [cookieStore + getAllCookies:^(NSArray *array) { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; + NSMutableString *result = [NSMutableString string]; + [array enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) { + if ([cookie.domain isEqualToString:nsurl.host]) { + [result appendString:[NSString stringWithFormat:@"%@=%@", cookie.name, cookie.value]]; + if ([cookie.domain length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Domain=%@", cookie.domain]]; + } + if ([cookie.path length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Path=%@", cookie.path]]; + } + if (cookie.expiresDate != nil) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Expires=%@", [formatter stringFromDate:cookie.expiresDate]]]; + } + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Version=%zd", cookie.version]]; + [result appendString:[NSString stringWithFormat:@"\n"]]; + } + }]; + UnitySendMessage([gameObjectName UTF8String], "CallOnCookies", [result UTF8String]); + }]; + } else { + [CWebViewPlugin resetSharedProcessPool]; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; + NSMutableString *result = [NSMutableString string]; + NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + if (cookieStorage == nil) { + // cf. https://stackoverflow.com/questions/33876295/nshttpcookiestorage-sharedhttpcookiestorage-comes-up-empty-in-10-11 + cookieStorage = [NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier:@"Cookies"]; + } + [[cookieStorage cookiesForURL:[NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]] + enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) { + [result appendString:[NSString stringWithFormat:@"%@=%@", cookie.name, cookie.value]]; + if ([cookie.domain length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Domain=%@", cookie.domain]]; + } + if ([cookie.path length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Path=%@", cookie.path]]; + } + if (cookie.expiresDate != nil) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Expires=%@", [formatter stringFromDate:cookie.expiresDate]]]; + } + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Version=%zd", cookie.version]]; + [result appendString:[NSString stringWithFormat:@"\n"]]; + }]; + UnitySendMessage([gameObjectName UTF8String], "CallOnCookies", [result UTF8String]); + } +} + +- (void)userContentController:(WKUserContentController *)userContentController + didReceiveScriptMessage:(WKScriptMessage *)message { + + // Log out the message received + //NSLog(@"Received event %@", message.body); + if ([message.name isEqualToString:@"unityControl"]) { + UnitySendMessage([gameObjectName UTF8String], "CallFromJS", [[NSString stringWithFormat:@"%@", message.body] UTF8String]); + } else if ([message.name isEqualToString:@"saveDataURL"]) { + NSRange range = [message.body rangeOfString:@"\t"]; + if (range.location == NSNotFound) { + return; + } + NSString *fileName = [[message.body substringWithRange:NSMakeRange(0, range.location)] lastPathComponent]; + NSString *dataURL = [message.body substringFromIndex:(range.location + 1)]; + range = [dataURL rangeOfString:@"data:"]; + if (range.location != 0) { + return; + } + NSString *tmp = [dataURL substringFromIndex:[@"data:" length]]; + range = [tmp rangeOfString:@";"]; + if (range.location == NSNotFound) { + return; + } + NSString *base64data = [tmp substringFromIndex:(range.location + 1 + [@"base64," length])]; + NSString *type = [tmp substringWithRange:NSMakeRange(0, range.location)]; + NSData *data = [[NSData alloc] initWithBase64EncodedString:base64data options:0]; + NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; + path = [path stringByAppendingString:@"/Downloads"]; + BOOL isDir; + NSError *err = nil; + if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) { + if (!isDir) { + return; + } + } else { + [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&err]; + if (err != nil) { + return; + } + } + NSString *prefix = [path stringByAppendingString:@"/"]; + path = [prefix stringByAppendingString:fileName]; + int count = 0; + while ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + count++; + NSString *name = [fileName stringByDeletingPathExtension]; + NSString *ext = [fileName pathExtension]; + if (ext.length == 0) { + path = [NSString stringWithFormat:@"%@%@ (%d)", prefix, name, count]; + } else { + path = [NSString stringWithFormat:@"%@%@ (%d).%@", prefix, name, count, ext]; + } + } + [data writeToFile:path atomically:YES]; + } + + /* + // Then pull something from the device using the message body + NSString *version = [[UIDevice currentDevice] valueForKey:message.body]; + + // Execute some JavaScript using the result? + NSString *exec_template = @"set_headline(\"received: %@\");"; + NSString *exec = [NSString stringWithFormat:exec_template, version]; + [webView evaluateJavaScript:exec completionHandler:nil]; + */ +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if (webView == nil) + return; + + if ([keyPath isEqualToString:@"loading"] && [[change objectForKey:NSKeyValueChangeNewKey] intValue] == 0 + && [webView URL] != nil) { + UnitySendMessage( + [gameObjectName UTF8String], + "CallOnLoaded", + [[[webView URL] absoluteString] UTF8String]); + + } +} + +- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", "webViewWebContentProcessDidTerminate"); +} + +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", [[error description] UTF8String]); +} + +- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", [[error description] UTF8String]); +} + +- (WKWebView *)webView:(WKWebView *)wkWebView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures +{ + // cf. for target="_blank", cf. http://qiita.com/ShingoFukuyama/items/b3a1441025a36ab7659c + if (!navigationAction.targetFrame.isMainFrame) { + [wkWebView loadRequest:navigationAction.request]; + } + return nil; +} + +- (void)webView:(WKWebView *)wkWebView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler +{ + if (webView == nil) { + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + NSURL *nsurl = [navigationAction.request URL]; + NSString *url = [nsurl absoluteString]; + BOOL pass = YES; + if (allowRegex != nil && [allowRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + pass = YES; + } else if (denyRegex != nil && [denyRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + pass = NO; + } + if (!pass) { + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + if ([url rangeOfString:@"//itunes.apple.com/"].location != NSNotFound) { + [[UIApplication sharedApplication] openURL:nsurl]; + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if ([url hasPrefix:@"unity:"]) { + UnitySendMessage([gameObjectName UTF8String], "CallFromJS", [[url substringFromIndex:6] UTF8String]); + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if (hookRegex != nil && [hookRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + UnitySendMessage([gameObjectName UTF8String], "CallOnHooked", [url UTF8String]); + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if (![url hasPrefix:@"about:blank"] // for loadHTML(), cf. #365 + && ![url hasPrefix:@"about:srcdoc"] // for iframe srcdoc attribute + && ![url hasPrefix:@"file:"] + && ![url hasPrefix:@"http:"] + && ![url hasPrefix:@"https:"]) { + if([[UIApplication sharedApplication] canOpenURL:nsurl]) { + [[UIApplication sharedApplication] openURL:nsurl]; + } + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if (navigationAction.navigationType == WKNavigationTypeLinkActivated + && (!navigationAction.targetFrame || !navigationAction.targetFrame.isMainFrame)) { + // cf. for target="_blank", cf. http://qiita.com/ShingoFukuyama/items/b3a1441025a36ab7659c + [webView load:navigationAction.request]; + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else { + if (navigationAction.targetFrame != nil && navigationAction.targetFrame.isMainFrame) { + // If the custom header is not attached, give it and make a request again. + if (![self isSetupedCustomHeader:[navigationAction request]]) { + NSLog(@"navi ... %@", navigationAction); + [wkWebView loadRequest:[self constructionCustomHeader:navigationAction.request]]; + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + } + } + UnitySendMessage([gameObjectName UTF8String], "CallOnStarted", [url UTF8String]); + decisionHandler(WKNavigationActionPolicyAllow); +} + +- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { + + if ([navigationResponse.response isKindOfClass:[NSHTTPURLResponse class]]) { + + NSHTTPURLResponse * response = (NSHTTPURLResponse *)navigationResponse.response; + if (response.statusCode >= 400) { + UnitySendMessage([gameObjectName UTF8String], "CallOnHttpError", [[NSString stringWithFormat:@"%d", response.statusCode] UTF8String]); + } + + } + decisionHandler(WKNavigationResponsePolicyAllow); +} + +// alert +- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler +{ + if (!alertDialogEnabled) { + completionHandler(); + return; + } + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" + message:message + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction: [UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionHandler(); + }]]; + [UnityGetGLViewController() presentViewController:alertController animated:YES completion:^{}]; +} + +// confirm +- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler +{ + if (!alertDialogEnabled) { + completionHandler(NO); + return; + } + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" + message:message + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + completionHandler(YES); + }]]; + [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionHandler(NO); + }]]; + [UnityGetGLViewController() presentViewController:alertController animated:YES completion:^{}]; +} + +// prompt +- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *))completionHandler +{ + if (!alertDialogEnabled) { + completionHandler(nil); + return; + } + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" + message:prompt + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { + textField.text = defaultText; + }]; + [alertController addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + NSString *input = ((UITextField *)alertController.textFields.firstObject).text; + completionHandler(input); + }]]; + [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionHandler(nil); + }]]; + [UnityGetGLViewController() presentViewController:alertController animated:YES completion:^{}]; +} + +- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition; + NSURLCredential *credential; + if (basicAuthUserName && basicAuthPassword && [challenge previousFailureCount] == 0) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialWithUser:basicAuthUserName password:basicAuthPassword persistence:NSURLCredentialPersistenceForSession]; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + credential = nil; + } + completionHandler(disposition, credential); +} + +- (BOOL)isSetupedCustomHeader:(NSURLRequest *)targetRequest +{ + // Check for additional custom header. + for (NSString *key in [customRequestHeader allKeys]) { + if (![[[targetRequest allHTTPHeaderFields] objectForKey:key] isEqualToString:[customRequestHeader objectForKey:key]]) { + return NO; + } + } + return YES; +} + +- (NSURLRequest *)constructionCustomHeader:(NSURLRequest *)originalRequest +{ + NSMutableURLRequest *convertedRequest = originalRequest.mutableCopy; + for (NSString *key in [customRequestHeader allKeys]) { + [convertedRequest setValue:customRequestHeader[key] forHTTPHeaderField:key]; + } + return (NSURLRequest *)[convertedRequest copy]; +} + +- (void)setMargins:(float)left top:(float)top right:(float)right bottom:(float)bottom relative:(BOOL)relative +{ + if (webView == nil) + return; + UIView *view = UnityGetGLViewController().view; + CGRect frame = webView.frame; + CGRect screen = view.bounds; + if (relative) { + frame.size.width = floor(screen.size.width * (1.0f - left - right)); + frame.size.height = floor(screen.size.height * (1.0f - top - bottom)); + frame.origin.x = floor(screen.size.width * left); + frame.origin.y = floor(screen.size.height * top); + } else { + CGFloat scale = 1.0f / [self getScale:view]; + frame.size.width = floor(screen.size.width - scale * (left + right)); + frame.size.height = floor(screen.size.height - scale * (top + bottom)); + frame.origin.x = floor(scale * left); + frame.origin.y = floor(scale * top); + } + webView.frame = frame; +} + +- (CGFloat)getScale:(UIView *)view +{ + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) + return view.window.screen.nativeScale; + return view.contentScaleFactor; +} + +- (void)setVisibility:(BOOL)visibility +{ + if (webView == nil) + return; + webView.hidden = visibility ? NO : YES; +} + +- (void)setInteractionEnabled:(BOOL)enabled +{ + if (webView == nil) + return; + webView.userInteractionEnabled = enabled; +} + +- (void)setAlertDialogEnabled:(BOOL)enabled +{ + alertDialogEnabled = enabled; +} + +- (void)setScrollbarsVisibility:(BOOL)visibility +{ + if (webView == nil) + return; + [webView setScrollbarsVisibility:visibility]; +} + +- (void)setScrollBounceEnabled:(BOOL)enabled +{ + if (webView == nil) + return; + [webView setScrollBounce:enabled]; +} + +- (BOOL)setURLPattern:(const char *)allowPattern and:(const char *)denyPattern and:(const char *)hookPattern +{ + NSError *err = nil; + NSRegularExpression *allow = nil; + NSRegularExpression *deny = nil; + NSRegularExpression *hook = nil; + if (allowPattern == nil || *allowPattern == '\0') { + allow = nil; + } else { + allow + = [NSRegularExpression + regularExpressionWithPattern:[NSString stringWithUTF8String:allowPattern] + options:0 + error:&err]; + if (err != nil) { + return NO; + } + } + if (denyPattern == nil || *denyPattern == '\0') { + deny = nil; + } else { + deny + = [NSRegularExpression + regularExpressionWithPattern:[NSString stringWithUTF8String:denyPattern] + options:0 + error:&err]; + if (err != nil) { + return NO; + } + } + if (hookPattern == nil || *hookPattern == '\0') { + hook = nil; + } else { + hook + = [NSRegularExpression + regularExpressionWithPattern:[NSString stringWithUTF8String:hookPattern] + options:0 + error:&err]; + if (err != nil) { + return NO; + } + } + allowRegex = allow; + denyRegex = deny; + hookRegex = hook; + return YES; +} + +- (void)loadURL:(const char *)url +{ + if (webView == nil) + return; + NSString *urlStr = [NSString stringWithUTF8String:url]; + NSURL *nsurl = [NSURL URLWithString:urlStr]; + NSURLRequest *request = [NSURLRequest requestWithURL:nsurl]; + [webView load:request]; +} + +- (void)loadHTML:(const char *)html baseURL:(const char *)baseUrl +{ + if (webView == nil) + return; + NSString *htmlStr = [NSString stringWithUTF8String:html]; + NSString *baseStr = [NSString stringWithUTF8String:baseUrl]; + NSURL *baseNSUrl = [NSURL URLWithString:baseStr]; + [webView loadHTML:htmlStr baseURL:baseNSUrl]; +} + +- (void)evaluateJS:(const char *)js +{ + if (webView == nil) + return; + NSString *jsStr = [NSString stringWithUTF8String:js]; + [webView evaluateJavaScript:jsStr completionHandler:^(NSString *result, NSError *error) {}]; +} + +- (int)progress +{ + if (webView == nil) + return 0; + if ([webView isKindOfClass:[WKWebView class]]) { + return (int)([(WKWebView *)webView estimatedProgress] * 100); + } else { + return 0; + } +} + +- (BOOL)canGoBack +{ + if (webView == nil) + return false; + return [webView canGoBack]; +} + +- (BOOL)canGoForward +{ + if (webView == nil) + return false; + return [webView canGoForward]; +} + +- (void)goBack +{ + if (webView == nil) + return; + [webView goBack]; +} + +- (void)goForward +{ + if (webView == nil) + return; + [webView goForward]; +} + +- (void)reload +{ + if (webView == nil) + return; + [webView reload]; +} + +- (void)addCustomRequestHeader:(const char *)headerKey value:(const char *)headerValue +{ + NSString *keyString = [NSString stringWithUTF8String:headerKey]; + NSString *valueString = [NSString stringWithUTF8String:headerValue]; + + [customRequestHeader setObject:valueString forKey:keyString]; +} + +- (void)removeCustomRequestHeader:(const char *)headerKey +{ + NSString *keyString = [NSString stringWithUTF8String:headerKey]; + + if ([[customRequestHeader allKeys]containsObject:keyString]) { + [customRequestHeader removeObjectForKey:keyString]; + } +} + +- (void)clearCustomRequestHeader +{ + [customRequestHeader removeAllObjects]; +} + +- (const char *)getCustomRequestHeaderValue:(const char *)headerKey +{ + NSString *keyString = [NSString stringWithUTF8String:headerKey]; + NSString *result = [customRequestHeader objectForKey:keyString]; + if (!result) { + return NULL; + } + + const char *s = [result UTF8String]; + char *r = (char *)malloc(strlen(s) + 1); + strcpy(r, s); + return r; +} + +- (void)setBasicAuthInfo:(const char *)userName password:(const char *)password +{ + basicAuthUserName = [NSString stringWithUTF8String:userName]; + basicAuthPassword = [NSString stringWithUTF8String:password]; +} + +- (void)clearCache:(BOOL)includeDiskFiles +{ + if (webView == nil) + return; + NSMutableSet *types = [NSMutableSet setWithArray:@[WKWebsiteDataTypeMemoryCache]]; + if (includeDiskFiles) { + [types addObject:WKWebsiteDataTypeDiskCache]; + } + NSDate *date = [NSDate dateWithTimeIntervalSince1970:0]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:types modifiedSince:date completionHandler:^{}]; +} + +- (void)setAllMediaPlaybackSuspended:(BOOL)suspended +{ + NSOperatingSystemVersion version = { 15, 0, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + if ([webView isKindOfClass:[WKWebView class]]) { + [(WKWebView *)webView setAllMediaPlaybackSuspended:suspended completionHandler:nil]; + } + } +} +@end + +extern "C" { + BOOL _CWebViewPlugin_IsInitialized(void *instance); + void *_CWebViewPlugin_Init(const char *gameObjectName, BOOL transparent, BOOL zoom, const char *ua, BOOL enableWKWebView, int contentMode, BOOL allowsLinkPreview, BOOL allowsBackForwardNavigationGestures, int radius); + void _CWebViewPlugin_Destroy(void *instance); + void _CWebViewPlugin_SetMargins( + void *instance, float left, float top, float right, float bottom, BOOL relative); + void _CWebViewPlugin_SetVisibility(void *instance, BOOL visibility); + void _CWebViewPlugin_SetInteractionEnabled(void *instance, BOOL enabled); + void _CWebViewPlugin_SetAlertDialogEnabled(void *instance, BOOL visibility); + void _CWebViewPlugin_SetScrollbarsVisibility(void *instance, BOOL visibility); + void _CWebViewPlugin_SetScrollBounceEnabled(void *instance, BOOL enabled); + BOOL _CWebViewPlugin_SetURLPattern(void *instance, const char *allowPattern, const char *denyPattern, const char *hookPattern); + void _CWebViewPlugin_LoadURL(void *instance, const char *url); + void _CWebViewPlugin_LoadHTML(void *instance, const char *html, const char *baseUrl); + void _CWebViewPlugin_EvaluateJS(void *instance, const char *url); + int _CWebViewPlugin_Progress(void *instance); + BOOL _CWebViewPlugin_CanGoBack(void *instance); + BOOL _CWebViewPlugin_CanGoForward(void *instance); + void _CWebViewPlugin_GoBack(void *instance); + void _CWebViewPlugin_GoForward(void *instance); + void _CWebViewPlugin_Reload(void *instance); + void _CWebViewPlugin_AddCustomHeader(void *instance, const char *headerKey, const char *headerValue); + void _CWebViewPlugin_RemoveCustomHeader(void *instance, const char *headerKey); + void _CWebViewPlugin_ClearCustomHeader(void *instance); + void _CWebViewPlugin_ClearCookies(); + void _CWebViewPlugin_SaveCookies(); + void _CWebViewPlugin_GetCookies(void *instance, const char *url); + const char *_CWebViewPlugin_GetCustomHeaderValue(void *instance, const char *headerKey); + void _CWebViewPlugin_SetBasicAuthInfo(void *instance, const char *userName, const char *password); + void _CWebViewPlugin_ClearCache(void *instance, BOOL includeDiskFiles); + void _CWebViewPlugin_SetSuspended(void *instance, BOOL suspended); +} + +BOOL _CWebViewPlugin_IsInitialized(void *instance) +{ + if (instance == NULL) + return NO; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin isInitialized]; +} + +void *_CWebViewPlugin_Init(const char *gameObjectName, BOOL transparent, BOOL zoom, const char *ua, BOOL enableWKWebView, int contentMode, BOOL allowsLinkPreview, BOOL allowsBackForwardNavigationGestures, int radius) +{ + if (! (enableWKWebView && [WKWebView class])) + return nil; + WKContentMode wkContentMode = WKContentModeRecommended; + switch (contentMode) { + case 1: + wkContentMode = WKContentModeMobile; + break; + case 2: + wkContentMode = WKContentModeDesktop; + break; + default: + wkContentMode = WKContentModeRecommended; + break; + } + CWebViewPlugin *webViewPlugin = [[CWebViewPlugin alloc] initWithGameObjectName:gameObjectName transparent:transparent zoom:zoom ua:ua enableWKWebView:enableWKWebView contentMode:wkContentMode allowsLinkPreview:allowsLinkPreview allowsBackForwardNavigationGestures:allowsBackForwardNavigationGestures radius:radius]; + [_instances addObject:webViewPlugin]; + return (__bridge_retained void *)webViewPlugin; +} + +void _CWebViewPlugin_Destroy(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge_transfer CWebViewPlugin *)instance; + [_instances removeObject:webViewPlugin]; + [webViewPlugin dispose]; + webViewPlugin = nil; +} + +void _CWebViewPlugin_SetMargins( + void *instance, float left, float top, float right, float bottom, BOOL relative) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setMargins:left top:top right:right bottom:bottom relative:relative]; +} + +void _CWebViewPlugin_SetVisibility(void *instance, BOOL visibility) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setVisibility:visibility]; +} + +void _CWebViewPlugin_SetInteractionEnabled(void *instance, BOOL enabled) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setInteractionEnabled:enabled]; +} + +void _CWebViewPlugin_SetAlertDialogEnabled(void *instance, BOOL enabled) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setAlertDialogEnabled:enabled]; +} + +void _CWebViewPlugin_SetScrollbarsVisibility(void *instance, BOOL visibility) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setScrollbarsVisibility:visibility]; +} + +void _CWebViewPlugin_SetScrollBounceEnabled(void *instance, BOOL enabled) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setScrollBounceEnabled:enabled]; +} + +BOOL _CWebViewPlugin_SetURLPattern(void *instance, const char *allowPattern, const char *denyPattern, const char *hookPattern) +{ + if (instance == NULL) + return NO; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin setURLPattern:allowPattern and:denyPattern and:hookPattern]; +} + +void _CWebViewPlugin_LoadURL(void *instance, const char *url) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin loadURL:url]; +} + +void _CWebViewPlugin_LoadHTML(void *instance, const char *html, const char *baseUrl) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin loadHTML:html baseURL:baseUrl]; +} + +void _CWebViewPlugin_EvaluateJS(void *instance, const char *js) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin evaluateJS:js]; +} + +int _CWebViewPlugin_Progress(void *instance) +{ + if (instance == NULL) + return 0; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin progress]; +} + +BOOL _CWebViewPlugin_CanGoBack(void *instance) +{ + if (instance == NULL) + return false; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin canGoBack]; +} + +BOOL _CWebViewPlugin_CanGoForward(void *instance) +{ + if (instance == NULL) + return false; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin canGoForward]; +} + +void _CWebViewPlugin_GoBack(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin goBack]; +} + +void _CWebViewPlugin_GoForward(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin goForward]; +} + +void _CWebViewPlugin_Reload(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin reload]; +} + +void _CWebViewPlugin_AddCustomHeader(void *instance, const char *headerKey, const char *headerValue) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin addCustomRequestHeader:headerKey value:headerValue]; +} + +void _CWebViewPlugin_RemoveCustomHeader(void *instance, const char *headerKey) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin removeCustomRequestHeader:headerKey]; +} + +void _CWebViewPlugin_ClearCustomHeader(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin clearCustomRequestHeader]; +} + +void _CWebViewPlugin_ClearCookies() +{ + [CWebViewPlugin clearCookies]; +} + +void _CWebViewPlugin_SaveCookies() +{ + [CWebViewPlugin saveCookies]; +} + +void _CWebViewPlugin_GetCookies(void *instance, const char *url) +{ + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin getCookies:url]; +} + +const char *_CWebViewPlugin_GetCustomHeaderValue(void *instance, const char *headerKey) +{ + if (instance == NULL) + return NULL; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin getCustomRequestHeaderValue:headerKey]; +} + +void _CWebViewPlugin_SetBasicAuthInfo(void *instance, const char *userName, const char *password) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setBasicAuthInfo:userName password:password]; +} + +void _CWebViewPlugin_ClearCache(void *instance, BOOL includeDiskFiles) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin clearCache:includeDiskFiles]; +} + +void _CWebViewPlugin_SetSuspended(void *instance, BOOL suspended) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setAllMediaPlaybackSuspended:suspended]; +} +#endif // !(__IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0) diff --git a/Assets/Plugins/iOS/WebView.mm.meta b/Assets/Plugins/iOS/WebView.mm.meta new file mode 100644 index 0000000..fb91d13 --- /dev/null +++ b/Assets/Plugins/iOS/WebView.mm.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2cabb4f60971742a28f3bd04e65de504 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/WebViewWithUIWebView.mm b/Assets/Plugins/iOS/WebViewWithUIWebView.mm new file mode 100644 index 0000000..1f28865 --- /dev/null +++ b/Assets/Plugins/iOS/WebViewWithUIWebView.mm @@ -0,0 +1,1303 @@ +/* + * Copyright (C) 2011 Keijiro Takahashi + * Copyright (C) 2012 GREE, Inc. + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0 + +#import +#import + +// NOTE: we need extern without "C" before unity 4.5 +//extern UIViewController *UnityGetGLViewController(); +extern "C" UIViewController *UnityGetGLViewController(); +extern "C" void UnitySendMessage(const char *, const char *, const char *); + +// cf. https://stackoverflow.com/questions/26383031/wkwebview-causes-my-view-controller-to-leak/33365424#33365424 +@interface WeakScriptMessageDelegate : NSObject + +@property (nonatomic, weak) id scriptDelegate; + +- (instancetype)initWithDelegate:(id)scriptDelegate; + +@end + +@implementation WeakScriptMessageDelegate + +- (instancetype)initWithDelegate:(id)scriptDelegate +{ + self = [super init]; + if (self) { + _scriptDelegate = scriptDelegate; + } + return self; +} + +- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message +{ + [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message]; +} + +@end + +@protocol WebViewProtocol +@property (nonatomic, getter=isOpaque) BOOL opaque; +@property (nullable, nonatomic, copy) UIColor *backgroundColor UI_APPEARANCE_SELECTOR; +@property (nonatomic, getter=isHidden) BOOL hidden; +@property (nonatomic, getter=isUserInteractionEnabled) BOOL userInteractionEnabled; +@property (nonatomic) CGRect frame; +@property (nonatomic, readonly, strong) UIScrollView *scrollView; +@property (nullable, nonatomic, assign) id delegate; +@property (nullable, nonatomic, weak) id navigationDelegate; +@property (nullable, nonatomic, weak) id UIDelegate; +@property (nullable, nonatomic, readonly, copy) NSURL *URL; +- (void)load:(NSURLRequest *)request; +- (void)loadHTML:(NSString *)html baseURL:(NSURL *)baseUrl; +- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ __nullable)(__nullable id, NSError * __nullable error))completionHandler; +@property (nonatomic, readonly) BOOL canGoBack; +@property (nonatomic, readonly) BOOL canGoForward; +- (void)goBack; +- (void)goForward; +- (void)reload; +- (void)stopLoading; +- (void)setScrollbarsVisibility:(BOOL)visibility; +- (void)setScrollBounce:(BOOL)enable; +@end + +@interface WKWebView(WebViewProtocolConformed) +@end + +@implementation WKWebView(WebViewProtocolConformed) + +@dynamic delegate; + +- (void)load:(NSURLRequest *)request +{ + WKWebView *webView = (WKWebView *)self; + NSURL *url = [request URL]; + if ([url.absoluteString hasPrefix:@"file:"]) { + NSURL *top = [NSURL URLWithString:[[url absoluteString] stringByDeletingLastPathComponent]]; + [webView loadFileURL:url allowingReadAccessToURL:top]; + } else { + [webView loadRequest:request]; + } +} + +- (NSURLRequest *)constructionCustomHeader:(NSURLRequest *)originalRequest with:(NSDictionary *)headerDictionary +{ + NSMutableURLRequest *convertedRequest = originalRequest.mutableCopy; + for (NSString *key in [headerDictionary allKeys]) { + [convertedRequest setValue:headerDictionary[key] forHTTPHeaderField:key]; + } + return (NSURLRequest *)[convertedRequest copy]; +} + +- (void)loadHTML:(NSString *)html baseURL:(NSURL *)baseUrl +{ + WKWebView *webView = (WKWebView *)self; + [webView loadHTMLString:html baseURL:baseUrl]; +} + +- (void)setScrollbarsVisibility:(BOOL)visibility +{ + WKWebView *webView = (WKWebView *)self; + webView.scrollView.showsHorizontalScrollIndicator = visibility; + webView.scrollView.showsVerticalScrollIndicator = visibility; +} + +- (void)setScrollBounce:(BOOL)enable +{ + WKWebView *webView = (WKWebView *)self; + webView.scrollView.bounces = enable; +} + +@end + +@interface UIWebView(WebViewProtocolConformed) +@end + +@implementation UIWebView(WebViewProtocolConformed) + +@dynamic navigationDelegate; +@dynamic UIDelegate; + +- (NSURL *)URL +{ + return [NSURL URLWithString:[self stringByEvaluatingJavaScriptFromString:@"document.URL"]]; +} + +- (void)load:(NSURLRequest *)request +{ + UIWebView *webView = (UIWebView *)self; + [webView loadRequest:request]; +} + +- (void)loadHTML:(NSString *)html baseURL:(NSURL *)baseUrl +{ + UIWebView *webView = (UIWebView *)self; + [webView loadHTMLString:html baseURL:baseUrl]; +} + +- (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^ __nullable)(__nullable id, NSError * __nullable error))completionHandler +{ + NSString *result = [self stringByEvaluatingJavaScriptFromString:javaScriptString]; + if (completionHandler) { + completionHandler(result, nil); + } +} + +- (void)setScrollbarsVisibility:(BOOL)visibility +{ + UIWebView *webView = (UIWebView *)self; + webView.scrollView.showsHorizontalScrollIndicator = visibility; + webView.scrollView.showsVerticalScrollIndicator = visibility; +} + +- (void)setScrollBounce:(BOOL)enable +{ + UIWebView *webView = (UIWebView *)self; + webView.scrollView.bounces = enable; +} + +@end + +@interface CWebViewPlugin : NSObject +{ + UIView *webView; + NSString *gameObjectName; + NSMutableDictionary *customRequestHeader; + BOOL alertDialogEnabled; + NSRegularExpression *allowRegex; + NSRegularExpression *denyRegex; + NSRegularExpression *hookRegex; + NSString *basicAuthUserName; + NSString *basicAuthPassword; +} +@end + +@implementation CWebViewPlugin + +static WKProcessPool *_sharedProcessPool; +static NSMutableArray *_instances = [[NSMutableArray alloc] init]; + +- (BOOL)isInitialized +{ + return webView != nil; +} + +- (id)initWithGameObjectName:(const char *)gameObjectName_ transparent:(BOOL)transparent zoom:(BOOL)zoom ua:(const char *)ua enableWKWebView:(BOOL)enableWKWebView contentMode:(WKContentMode)contentMode allowsLinkPreview:(BOOL)allowsLinkPreview allowsBackForwardNavigationGestures:(BOOL)allowsBackForwardNavigationGestures radius:(int)radius +{ + self = [super init]; + + gameObjectName = [NSString stringWithUTF8String:gameObjectName_]; + customRequestHeader = [[NSMutableDictionary alloc] init]; + alertDialogEnabled = true; + allowRegex = nil; + denyRegex = nil; + hookRegex = nil; + basicAuthUserName = nil; + basicAuthPassword = nil; + UIView *view = UnityGetGLViewController().view; + if (enableWKWebView && [WKWebView class]) { + if (_sharedProcessPool == NULL) { + _sharedProcessPool = [[WKProcessPool alloc] init]; + } + WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; + WKUserContentController *controller = [[WKUserContentController alloc] init]; + [controller addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"unityControl"]; + [controller addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"saveDataURL"]; + NSString *str = @"\ +window.Unity = { \ + call: function(msg) { \ + window.webkit.messageHandlers.unityControl.postMessage(msg); \ + }, \ + saveDataURL: function(fileName, dataURL) { \ + window.webkit.messageHandlers.saveDataURL.postMessage(fileName + '\t' + dataURL); \ + } \ +}; \ +"; + if (!zoom) { + str = [str stringByAppendingString:@"\ +(function() { \ + var meta = document.querySelector('meta[name=viewport]'); \ + if (meta == null) { \ + meta = document.createElement('meta'); \ + meta.name = 'viewport'; \ + } \ + meta.content += ((meta.content.length > 0) ? ',' : '') + 'user-scalable=no'; \ + var head = document.getElementsByTagName('head')[0]; \ + head.appendChild(meta); \ +})(); \ +" + ]; + } + WKUserScript *script + = [[WKUserScript alloc] initWithSource:str injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; + [controller addUserScript:script]; + configuration.userContentController = controller; + configuration.allowsInlineMediaPlayback = true; + if (@available(iOS 10.0, *)) { + configuration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone; + } else { + if (@available(iOS 9.0, *)) { + configuration.requiresUserActionForMediaPlayback = NO; + } else { + configuration.mediaPlaybackRequiresUserAction = NO; + } + } + configuration.websiteDataStore = [WKWebsiteDataStore defaultDataStore]; + configuration.processPool = _sharedProcessPool; + if (@available(iOS 13.0, *)) { + configuration.defaultWebpagePreferences.preferredContentMode = contentMode; + } +#if UNITYWEBVIEW_IOS_ALLOW_FILE_URLS + // cf. https://stackoverflow.com/questions/35554814/wkwebview-xmlhttprequest-with-file-url/44365081#44365081 + try { + [configuration.preferences setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"]; + } + catch (NSException *ex) { + } + try { + [configuration setValue:@TRUE forKey:@"allowUniversalAccessFromFileURLs"]; + } + catch (NSException *ex) { + } +#endif + WKWebView *wkwebView = [[WKWebView alloc] initWithFrame:view.frame configuration:configuration]; +#if UNITYWEBVIEW_DEVELOPMENT + NSOperatingSystemVersion version = { 16, 4, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + wkwebView.inspectable = true; + } +#endif + wkwebView.allowsLinkPreview = allowsLinkPreview; + wkwebView.allowsBackForwardNavigationGestures = allowsBackForwardNavigationGestures; + webView = wkwebView; + webView.UIDelegate = self; + webView.navigationDelegate = self; + if (ua != NULL && strcmp(ua, "") != 0) { + ((WKWebView *)webView).customUserAgent = [[NSString alloc] initWithUTF8String:ua]; + } + // cf. https://rick38yip.medium.com/wkwebview-weird-spacing-issue-in-ios-13-54a4fc686f72 + // cf. https://stackoverflow.com/questions/44390971/automaticallyadjustsscrollviewinsets-was-deprecated-in-ios-11-0 + if (@available(iOS 11.0, *)) { + ((WKWebView *)webView).scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever; + } else { + //UnityGetGLViewController().automaticallyAdjustsScrollViewInsets = false; + } + } else { + if (ua != NULL && strcmp(ua, "") != 0) { + [[NSUserDefaults standardUserDefaults] + registerDefaults:@{ @"UserAgent": [[NSString alloc] initWithUTF8String:ua] }]; + } + UIWebView *uiwebview = [[UIWebView alloc] initWithFrame:view.frame]; + uiwebview.allowsInlineMediaPlayback = YES; + uiwebview.mediaPlaybackRequiresUserAction = NO; + webView = uiwebview; + webView.delegate = self; + } + if (transparent) { + webView.opaque = NO; + webView.backgroundColor = [UIColor clearColor]; + } + if (radius > 0) { + webView.layer.cornerRadius = radius; + webView.layer.masksToBounds = YES; + } + webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + webView.hidden = YES; + + [webView addObserver:self forKeyPath: @"loading" options: NSKeyValueObservingOptionNew context:nil]; + + [view addSubview:webView]; + + return self; +} + +- (void)dispose +{ + if (webView != nil) { + UIView *webView0 = webView; + webView = nil; + if ([webView0 isKindOfClass:[WKWebView class]]) { + webView0.UIDelegate = nil; + webView0.navigationDelegate = nil; + [((WKWebView *)webView0).configuration.userContentController removeScriptMessageHandlerForName:@"saveDataURL"]; + [((WKWebView *)webView0).configuration.userContentController removeScriptMessageHandlerForName:@"unityControl"]; + } else { + webView0.delegate = nil; + } + [webView0 stopLoading]; + [webView0 removeFromSuperview]; + [webView0 removeObserver:self forKeyPath:@"loading"]; + } + basicAuthPassword = nil; + basicAuthUserName = nil; + hookRegex = nil; + denyRegex = nil; + allowRegex = nil; + customRequestHeader = nil; + gameObjectName = nil; +} + ++ (void)resetSharedProcessPool +{ + // cf. https://stackoverflow.com/questions/33156567/getting-all-cookies-from-wkwebview/49744695#49744695 + _sharedProcessPool = [[WKProcessPool alloc] init]; + [_instances enumerateObjectsUsingBlock:^(CWebViewPlugin *obj, NSUInteger idx, BOOL *stop) { + if ([obj->webView isKindOfClass:[WKWebView class]]) { + WKWebView *webView = (WKWebView *)obj->webView; + webView.configuration.processPool = _sharedProcessPool; + } + }]; +} + ++ (void)clearCookies +{ + [CWebViewPlugin resetSharedProcessPool]; + + // cf. https://dev.classmethod.jp/smartphone/remove-webview-cookies/ + NSString *libraryPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).firstObject; + NSString *cookiesPath = [libraryPath stringByAppendingPathComponent:@"Cookies"]; + NSString *webKitPath = [libraryPath stringByAppendingPathComponent:@"WebKit"]; + [[NSFileManager defaultManager] removeItemAtPath:cookiesPath error:nil]; + [[NSFileManager defaultManager] removeItemAtPath:webKitPath error:nil]; + + NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + if (cookieStorage == nil) { + // cf. https://stackoverflow.com/questions/33876295/nshttpcookiestorage-sharedhttpcookiestorage-comes-up-empty-in-10-11 + cookieStorage = [NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier:@"Cookies"]; + } + [[cookieStorage cookies] enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) { + [cookieStorage deleteCookie:cookie]; + }]; + + NSOperatingSystemVersion version = { 9, 0, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + // cf. https://stackoverflow.com/questions/46465070/how-to-delete-cookies-from-wkhttpcookiestore/47928399#47928399 + NSSet *websiteDataTypes = [WKWebsiteDataStore allWebsiteDataTypes]; + NSDate *date = [NSDate dateWithTimeIntervalSince1970:0]; + [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes + modifiedSince:date + completionHandler:^{}]; + } +} + ++ saveCookies +{ + [CWebViewPlugin resetSharedProcessPool]; +} + +- (void)getCookies:(const char *)url +{ + NSOperatingSystemVersion version = { 9, 0, 0 }; + if ([[NSProcessInfo processInfo] isOperatingSystemAtLeastVersion:version]) { + NSURL *nsurl = [NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]; + WKHTTPCookieStore *cookieStore = WKWebsiteDataStore.defaultDataStore.httpCookieStore; + [cookieStore + getAllCookies:^(NSArray *array) { + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; + NSMutableString *result = [NSMutableString string]; + [array enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) { + if ([cookie.domain isEqualToString:nsurl.host]) { + [result appendString:[NSString stringWithFormat:@"%@=%@", cookie.name, cookie.value]]; + if ([cookie.domain length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Domain=%@", cookie.domain]]; + } + if ([cookie.path length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Path=%@", cookie.path]]; + } + if (cookie.expiresDate != nil) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Expires=%@", [formatter stringFromDate:cookie.expiresDate]]]; + } + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Version=%zd", cookie.version]]; + [result appendString:[NSString stringWithFormat:@"\n"]]; + } + }]; + UnitySendMessage([gameObjectName UTF8String], "CallOnCookies", [result UTF8String]); + }]; + } else { + [CWebViewPlugin resetSharedProcessPool]; + NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; + formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; + [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; + NSMutableString *result = [NSMutableString string]; + NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + if (cookieStorage == nil) { + // cf. https://stackoverflow.com/questions/33876295/nshttpcookiestorage-sharedhttpcookiestorage-comes-up-empty-in-10-11 + cookieStorage = [NSHTTPCookieStorage sharedCookieStorageForGroupContainerIdentifier:@"Cookies"]; + } + [[cookieStorage cookiesForURL:[NSURL URLWithString:[[NSString alloc] initWithUTF8String:url]]] + enumerateObjectsUsingBlock:^(NSHTTPCookie *cookie, NSUInteger idx, BOOL *stop) { + [result appendString:[NSString stringWithFormat:@"%@=%@", cookie.name, cookie.value]]; + if ([cookie.domain length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Domain=%@", cookie.domain]]; + } + if ([cookie.path length] > 0) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Path=%@", cookie.path]]; + } + if (cookie.expiresDate != nil) { + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Expires=%@", [formatter stringFromDate:cookie.expiresDate]]]; + } + [result appendString:[NSString stringWithFormat:@"; "]]; + [result appendString:[NSString stringWithFormat:@"Version=%zd", cookie.version]]; + [result appendString:[NSString stringWithFormat:@"\n"]]; + }]; + UnitySendMessage([gameObjectName UTF8String], "CallOnCookies", [result UTF8String]); + } +} + +- (void)userContentController:(WKUserContentController *)userContentController + didReceiveScriptMessage:(WKScriptMessage *)message { + + // Log out the message received + //NSLog(@"Received event %@", message.body); + if ([message.name isEqualToString:@"unityControl"]) { + UnitySendMessage([gameObjectName UTF8String], "CallFromJS", [[NSString stringWithFormat:@"%@", message.body] UTF8String]); + } else if ([message.name isEqualToString:@"saveDataURL"]) { + NSRange range = [message.body rangeOfString:@"\t"]; + if (range.location == NSNotFound) { + return; + } + NSString *fileName = [[message.body substringWithRange:NSMakeRange(0, range.location)] lastPathComponent]; + NSString *dataURL = [message.body substringFromIndex:(range.location + 1)]; + range = [dataURL rangeOfString:@"data:"]; + if (range.location != 0) { + return; + } + NSString *tmp = [dataURL substringFromIndex:[@"data:" length]]; + range = [tmp rangeOfString:@";"]; + if (range.location == NSNotFound) { + return; + } + NSString *base64data = [tmp substringFromIndex:(range.location + 1 + [@"base64," length])]; + NSString *type = [tmp substringWithRange:NSMakeRange(0, range.location)]; + NSData *data = [[NSData alloc] initWithBase64EncodedString:base64data options:0]; + NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; + path = [path stringByAppendingString:@"/Downloads"]; + BOOL isDir; + NSError *err = nil; + if ([[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir]) { + if (!isDir) { + return; + } + } else { + [[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&err]; + if (err != nil) { + return; + } + } + NSString *prefix = [path stringByAppendingString:@"/"]; + path = [prefix stringByAppendingString:fileName]; + int count = 0; + while ([[NSFileManager defaultManager] fileExistsAtPath:path]) { + count++; + NSString *name = [fileName stringByDeletingPathExtension]; + NSString *ext = [fileName pathExtension]; + if (ext.length == 0) { + path = [NSString stringWithFormat:@"%@%@ (%d)", prefix, name, count]; + } else { + path = [NSString stringWithFormat:@"%@%@ (%d).%@", prefix, name, count, ext]; + } + } + [data writeToFile:path atomically:YES]; + } + + /* + // Then pull something from the device using the message body + NSString *version = [[UIDevice currentDevice] valueForKey:message.body]; + + // Execute some JavaScript using the result? + NSString *exec_template = @"set_headline(\"received: %@\");"; + NSString *exec = [NSString stringWithFormat:exec_template, version]; + [webView evaluateJavaScript:exec completionHandler:nil]; + */ +} + +- (void)observeValueForKeyPath:(NSString *)keyPath + ofObject:(id)object + change:(NSDictionary *)change + context:(void *)context { + if (webView == nil) + return; + + if ([keyPath isEqualToString:@"loading"] && [[change objectForKey:NSKeyValueChangeNewKey] intValue] == 0 + && [webView URL] != nil) { + UnitySendMessage( + [gameObjectName UTF8String], + "CallOnLoaded", + [[[webView URL] absoluteString] UTF8String]); + + } +} + +- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", "webViewWebContentProcessDidTerminate"); +} + +- (void)webView:(UIWebView *)uiWebView didFailLoadWithError:(NSError *)error +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", [[error description] UTF8String]); +} + +- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", [[error description] UTF8String]); +} + +- (void)webView:(WKWebView *)webView didFailNavigation:(WKNavigation *)navigation withError:(NSError *)error +{ + UnitySendMessage([gameObjectName UTF8String], "CallOnError", [[error description] UTF8String]); +} + +- (void)webViewDidFinishLoad:(UIWebView *)uiWebView { + if (webView == nil) + return; + // cf. http://stackoverflow.com/questions/10996028/uiwebview-when-did-a-page-really-finish-loading/15916853#15916853 + if ([[uiWebView stringByEvaluatingJavaScriptFromString:@"document.readyState"] isEqualToString:@"complete"] + && [webView URL] != nil) { + UnitySendMessage( + [gameObjectName UTF8String], + "CallOnLoaded", + [[[webView URL] absoluteString] UTF8String]); + } +} + +- (BOOL)webView:(UIWebView *)uiWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType +{ + if (webView == nil) + return YES; + + NSURL *nsurl = [request URL]; + NSString *url = [nsurl absoluteString]; + BOOL pass = YES; + if (allowRegex != nil && [allowRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + pass = YES; + } else if (denyRegex != nil && [denyRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + pass = NO; + } + if (!pass) { + return NO; + } + if ([url rangeOfString:@"//itunes.apple.com/"].location != NSNotFound) { + [[UIApplication sharedApplication] openURL:nsurl]; + return NO; + } else if ([url hasPrefix:@"unity:"]) { + UnitySendMessage([gameObjectName UTF8String], "CallFromJS", [[url substringFromIndex:6] UTF8String]); + return NO; + } else if (hookRegex != nil && [hookRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + UnitySendMessage([gameObjectName UTF8String], "CallOnHooked", [url UTF8String]); + return NO; + } else { + if (![self isSetupedCustomHeader:request]) { + [uiWebView loadRequest:[self constructionCustomHeader:request]]; + return NO; + } + UnitySendMessage([gameObjectName UTF8String], "CallOnStarted", [url UTF8String]); + return YES; + } +} + +- (WKWebView *)webView:(WKWebView *)wkWebView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures +{ + // cf. for target="_blank", cf. http://qiita.com/ShingoFukuyama/items/b3a1441025a36ab7659c + if (!navigationAction.targetFrame.isMainFrame) { + [wkWebView loadRequest:navigationAction.request]; + } + return nil; +} + +- (void)webView:(WKWebView *)wkWebView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler +{ + if (webView == nil) { + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + NSURL *nsurl = [navigationAction.request URL]; + NSString *url = [nsurl absoluteString]; + BOOL pass = YES; + if (allowRegex != nil && [allowRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + pass = YES; + } else if (denyRegex != nil && [denyRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + pass = NO; + } + if (!pass) { + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + if ([url rangeOfString:@"//itunes.apple.com/"].location != NSNotFound) { + [[UIApplication sharedApplication] openURL:nsurl]; + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if ([url hasPrefix:@"unity:"]) { + UnitySendMessage([gameObjectName UTF8String], "CallFromJS", [[url substringFromIndex:6] UTF8String]); + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if (hookRegex != nil && [hookRegex firstMatchInString:url options:0 range:NSMakeRange(0, url.length)]) { + UnitySendMessage([gameObjectName UTF8String], "CallOnHooked", [url UTF8String]); + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if (![url hasPrefix:@"about:blank"] // for loadHTML(), cf. #365 + && ![url hasPrefix:@"about:srcdoc"] // for iframe srcdoc attribute + && ![url hasPrefix:@"file:"] + && ![url hasPrefix:@"http:"] + && ![url hasPrefix:@"https:"]) { + if([[UIApplication sharedApplication] canOpenURL:nsurl]) { + [[UIApplication sharedApplication] openURL:nsurl]; + } + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else if (navigationAction.navigationType == WKNavigationTypeLinkActivated + && (!navigationAction.targetFrame || !navigationAction.targetFrame.isMainFrame)) { + // cf. for target="_blank", cf. http://qiita.com/ShingoFukuyama/items/b3a1441025a36ab7659c + [webView load:navigationAction.request]; + decisionHandler(WKNavigationActionPolicyCancel); + return; + } else { + if (navigationAction.targetFrame != nil && navigationAction.targetFrame.isMainFrame) { + // If the custom header is not attached, give it and make a request again. + if (![self isSetupedCustomHeader:[navigationAction request]]) { + NSLog(@"navi ... %@", navigationAction); + [wkWebView loadRequest:[self constructionCustomHeader:navigationAction.request]]; + decisionHandler(WKNavigationActionPolicyCancel); + return; + } + } + } + UnitySendMessage([gameObjectName UTF8String], "CallOnStarted", [url UTF8String]); + decisionHandler(WKNavigationActionPolicyAllow); +} + +- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { + + if ([navigationResponse.response isKindOfClass:[NSHTTPURLResponse class]]) { + + NSHTTPURLResponse * response = (NSHTTPURLResponse *)navigationResponse.response; + if (response.statusCode >= 400) { + UnitySendMessage([gameObjectName UTF8String], "CallOnHttpError", [[NSString stringWithFormat:@"%d", response.statusCode] UTF8String]); + } + + } + decisionHandler(WKNavigationResponsePolicyAllow); +} + +// alert +- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler +{ + if (!alertDialogEnabled) { + completionHandler(); + return; + } + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" + message:message + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction: [UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionHandler(); + }]]; + [UnityGetGLViewController() presentViewController:alertController animated:YES completion:^{}]; +} + +// confirm +- (void)webView:(WKWebView *)webView runJavaScriptConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(BOOL))completionHandler +{ + if (!alertDialogEnabled) { + completionHandler(NO); + return; + } + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" + message:message + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + completionHandler(YES); + }]]; + [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionHandler(NO); + }]]; + [UnityGetGLViewController() presentViewController:alertController animated:YES completion:^{}]; +} + +// prompt +- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString *))completionHandler +{ + if (!alertDialogEnabled) { + completionHandler(nil); + return; + } + UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" + message:prompt + preferredStyle:UIAlertControllerStyleAlert]; + [alertController addTextFieldWithConfigurationHandler:^(UITextField *textField) { + textField.text = defaultText; + }]; + [alertController addAction:[UIAlertAction actionWithTitle:@"OK" + style:UIAlertActionStyleDefault + handler:^(UIAlertAction *action) { + NSString *input = ((UITextField *)alertController.textFields.firstObject).text; + completionHandler(input); + }]]; + [alertController addAction:[UIAlertAction actionWithTitle:@"Cancel" + style:UIAlertActionStyleCancel + handler:^(UIAlertAction *action) { + completionHandler(nil); + }]]; + [UnityGetGLViewController() presentViewController:alertController animated:YES completion:^{}]; +} + +- (void)webView:(WKWebView *)webView didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition, NSURLCredential *))completionHandler +{ + NSURLSessionAuthChallengeDisposition disposition; + NSURLCredential *credential; + if (basicAuthUserName && basicAuthPassword && [challenge previousFailureCount] == 0) { + disposition = NSURLSessionAuthChallengeUseCredential; + credential = [NSURLCredential credentialWithUser:basicAuthUserName password:basicAuthPassword persistence:NSURLCredentialPersistenceForSession]; + } else { + disposition = NSURLSessionAuthChallengePerformDefaultHandling; + credential = nil; + } + completionHandler(disposition, credential); +} + +- (BOOL)isSetupedCustomHeader:(NSURLRequest *)targetRequest +{ + // Check for additional custom header. + for (NSString *key in [customRequestHeader allKeys]) { + if (![[[targetRequest allHTTPHeaderFields] objectForKey:key] isEqualToString:[customRequestHeader objectForKey:key]]) { + return NO; + } + } + return YES; +} + +- (NSURLRequest *)constructionCustomHeader:(NSURLRequest *)originalRequest +{ + NSMutableURLRequest *convertedRequest = originalRequest.mutableCopy; + for (NSString *key in [customRequestHeader allKeys]) { + [convertedRequest setValue:customRequestHeader[key] forHTTPHeaderField:key]; + } + return (NSURLRequest *)[convertedRequest copy]; +} + +- (void)setMargins:(float)left top:(float)top right:(float)right bottom:(float)bottom relative:(BOOL)relative +{ + if (webView == nil) + return; + UIView *view = UnityGetGLViewController().view; + CGRect frame = webView.frame; + CGRect screen = view.bounds; + if (relative) { + frame.size.width = floor(screen.size.width * (1.0f - left - right)); + frame.size.height = floor(screen.size.height * (1.0f - top - bottom)); + frame.origin.x = floor(screen.size.width * left); + frame.origin.y = floor(screen.size.height * top); + } else { + CGFloat scale = 1.0f / [self getScale:view]; + frame.size.width = floor(screen.size.width - scale * (left + right)); + frame.size.height = floor(screen.size.height - scale * (top + bottom)); + frame.origin.x = floor(scale * left); + frame.origin.y = floor(scale * top); + } + webView.frame = frame; +} + +- (CGFloat)getScale:(UIView *)view +{ + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) + return view.window.screen.nativeScale; + return view.contentScaleFactor; +} + +- (void)setVisibility:(BOOL)visibility +{ + if (webView == nil) + return; + webView.hidden = visibility ? NO : YES; +} + +- (void)setInteractionEnabled:(BOOL)enabled +{ + if (webView == nil) + return; + webView.userInteractionEnabled = enabled; +} + +- (void)setAlertDialogEnabled:(BOOL)enabled +{ + alertDialogEnabled = enabled; +} + +- (void)setScrollbarsVisibility:(BOOL)visibility +{ + if (webView == nil) + return; + [webView setScrollbarsVisibility:visibility]; +} + +- (void)setScrollBounceEnabled:(BOOL)enabled +{ + if (webView == nil) + return; + [webView setScrollBounce:enabled]; +} + +- (BOOL)setURLPattern:(const char *)allowPattern and:(const char *)denyPattern and:(const char *)hookPattern +{ + NSError *err = nil; + NSRegularExpression *allow = nil; + NSRegularExpression *deny = nil; + NSRegularExpression *hook = nil; + if (allowPattern == nil || *allowPattern == '\0') { + allow = nil; + } else { + allow + = [NSRegularExpression + regularExpressionWithPattern:[NSString stringWithUTF8String:allowPattern] + options:0 + error:&err]; + if (err != nil) { + return NO; + } + } + if (denyPattern == nil || *denyPattern == '\0') { + deny = nil; + } else { + deny + = [NSRegularExpression + regularExpressionWithPattern:[NSString stringWithUTF8String:denyPattern] + options:0 + error:&err]; + if (err != nil) { + return NO; + } + } + if (hookPattern == nil || *hookPattern == '\0') { + hook = nil; + } else { + hook + = [NSRegularExpression + regularExpressionWithPattern:[NSString stringWithUTF8String:hookPattern] + options:0 + error:&err]; + if (err != nil) { + return NO; + } + } + allowRegex = allow; + denyRegex = deny; + hookRegex = hook; + return YES; +} + +- (void)loadURL:(const char *)url +{ + if (webView == nil) + return; + NSString *urlStr = [NSString stringWithUTF8String:url]; + NSURL *nsurl = [NSURL URLWithString:urlStr]; + NSURLRequest *request = [NSURLRequest requestWithURL:nsurl]; + [webView load:request]; +} + +- (void)loadHTML:(const char *)html baseURL:(const char *)baseUrl +{ + if (webView == nil) + return; + NSString *htmlStr = [NSString stringWithUTF8String:html]; + NSString *baseStr = [NSString stringWithUTF8String:baseUrl]; + NSURL *baseNSUrl = [NSURL URLWithString:baseStr]; + [webView loadHTML:htmlStr baseURL:baseNSUrl]; +} + +- (void)evaluateJS:(const char *)js +{ + if (webView == nil) + return; + NSString *jsStr = [NSString stringWithUTF8String:js]; + [webView evaluateJavaScript:jsStr completionHandler:^(NSString *result, NSError *error) {}]; +} + +- (int)progress +{ + if (webView == nil) + return 0; + if ([webView isKindOfClass:[WKWebView class]]) { + return (int)([(WKWebView *)webView estimatedProgress] * 100); + } else { + return 0; + } +} + +- (BOOL)canGoBack +{ + if (webView == nil) + return false; + return [webView canGoBack]; +} + +- (BOOL)canGoForward +{ + if (webView == nil) + return false; + return [webView canGoForward]; +} + +- (void)goBack +{ + if (webView == nil) + return; + [webView goBack]; +} + +- (void)goForward +{ + if (webView == nil) + return; + [webView goForward]; +} + +- (void)reload +{ + if (webView == nil) + return; + [webView reload]; +} + +- (void)addCustomRequestHeader:(const char *)headerKey value:(const char *)headerValue +{ + NSString *keyString = [NSString stringWithUTF8String:headerKey]; + NSString *valueString = [NSString stringWithUTF8String:headerValue]; + + [customRequestHeader setObject:valueString forKey:keyString]; +} + +- (void)removeCustomRequestHeader:(const char *)headerKey +{ + NSString *keyString = [NSString stringWithUTF8String:headerKey]; + + if ([[customRequestHeader allKeys]containsObject:keyString]) { + [customRequestHeader removeObjectForKey:keyString]; + } +} + +- (void)clearCustomRequestHeader +{ + [customRequestHeader removeAllObjects]; +} + +- (const char *)getCustomRequestHeaderValue:(const char *)headerKey +{ + NSString *keyString = [NSString stringWithUTF8String:headerKey]; + NSString *result = [customRequestHeader objectForKey:keyString]; + if (!result) { + return NULL; + } + + const char *s = [result UTF8String]; + char *r = (char *)malloc(strlen(s) + 1); + strcpy(r, s); + return r; +} + +- (void)setBasicAuthInfo:(const char *)userName password:(const char *)password +{ + basicAuthUserName = [NSString stringWithUTF8String:userName]; + basicAuthPassword = [NSString stringWithUTF8String:password]; +} +@end + +extern "C" { + BOOL _CWebViewPlugin_IsInitialized(void *instance); + void *_CWebViewPlugin_Init(const char *gameObjectName, BOOL transparent, BOOL zoom, const char *ua, BOOL enableWKWebView, int contentMode, BOOL allowsLinkPreview, BOOL allowsBackForwardNavigationGestures, int radius); + void _CWebViewPlugin_Destroy(void *instance); + void _CWebViewPlugin_SetMargins( + void *instance, float left, float top, float right, float bottom, BOOL relative); + void _CWebViewPlugin_SetVisibility(void *instance, BOOL visibility); + void _CWebViewPlugin_SetInteractionEnabled(void *instance, BOOL enabled); + void _CWebViewPlugin_SetAlertDialogEnabled(void *instance, BOOL visibility); + void _CWebViewPlugin_SetScrollbarsVisibility(void *instance, BOOL visibility); + void _CWebViewPlugin_SetScrollBounceEnabled(void *instance, BOOL enabled); + BOOL _CWebViewPlugin_SetURLPattern(void *instance, const char *allowPattern, const char *denyPattern, const char *hookPattern); + void _CWebViewPlugin_LoadURL(void *instance, const char *url); + void _CWebViewPlugin_LoadHTML(void *instance, const char *html, const char *baseUrl); + void _CWebViewPlugin_EvaluateJS(void *instance, const char *url); + int _CWebViewPlugin_Progress(void *instance); + BOOL _CWebViewPlugin_CanGoBack(void *instance); + BOOL _CWebViewPlugin_CanGoForward(void *instance); + void _CWebViewPlugin_GoBack(void *instance); + void _CWebViewPlugin_GoForward(void *instance); + void _CWebViewPlugin_Reload(void *instance); + void _CWebViewPlugin_AddCustomHeader(void *instance, const char *headerKey, const char *headerValue); + void _CWebViewPlugin_RemoveCustomHeader(void *instance, const char *headerKey); + void _CWebViewPlugin_ClearCustomHeader(void *instance); + void _CWebViewPlugin_ClearCookies(); + void _CWebViewPlugin_SaveCookies(); + void _CWebViewPlugin_GetCookies(void *instance, const char *url); + const char *_CWebViewPlugin_GetCustomHeaderValue(void *instance, const char *headerKey); + void _CWebViewPlugin_SetBasicAuthInfo(void *instance, const char *userName, const char *password); + void _CWebViewPlugin_ClearCache(void *instance, BOOL includeDiskFiles); + void _CWebViewPlugin_SetSuspended(void *instance, BOOL suspended); +} + +BOOL _CWebViewPlugin_IsInitialized(void *instance) +{ + if (instance == NULL) + return NO; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin isInitialized]; +} + +void *_CWebViewPlugin_Init(const char *gameObjectName, BOOL transparent, BOOL zoom, const char *ua, BOOL enableWKWebView, int contentMode, BOOL allowsLinkPreview, BOOL allowsBackForwardNavigationGestures, int radius) +{ + WKContentMode wkContentMode = WKContentModeRecommended; + switch (contentMode) { + case 1: + wkContentMode = WKContentModeMobile; + break; + case 2: + wkContentMode = WKContentModeDesktop; + break; + default: + wkContentMode = WKContentModeRecommended; + break; + } + CWebViewPlugin *webViewPlugin = [[CWebViewPlugin alloc] initWithGameObjectName:gameObjectName transparent:transparent zoom:zoom ua:ua enableWKWebView:enableWKWebView contentMode:wkContentMode allowsLinkPreview:allowsLinkPreview allowsBackForwardNavigationGestures:allowsBackForwardNavigationGestures radius:radius]; + [_instances addObject:webViewPlugin]; + return (__bridge_retained void *)webViewPlugin; +} + +void _CWebViewPlugin_Destroy(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge_transfer CWebViewPlugin *)instance; + [_instances removeObject:webViewPlugin]; + [webViewPlugin dispose]; + webViewPlugin = nil; +} + +void _CWebViewPlugin_SetMargins( + void *instance, float left, float top, float right, float bottom, BOOL relative) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setMargins:left top:top right:right bottom:bottom relative:relative]; +} + +void _CWebViewPlugin_SetVisibility(void *instance, BOOL visibility) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setVisibility:visibility]; +} + +void _CWebViewPlugin_SetInteractionEnabled(void *instance, BOOL enabled) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setInteractionEnabled:enabled]; +} + +void _CWebViewPlugin_SetAlertDialogEnabled(void *instance, BOOL enabled) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setAlertDialogEnabled:enabled]; +} + +void _CWebViewPlugin_SetScrollbarsVisibility(void *instance, BOOL visibility) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setScrollbarsVisibility:visibility]; +} + +void _CWebViewPlugin_SetScrollBounceEnabled(void *instance, BOOL enabled) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setScrollBounceEnabled:enabled]; +} + +BOOL _CWebViewPlugin_SetURLPattern(void *instance, const char *allowPattern, const char *denyPattern, const char *hookPattern) +{ + if (instance == NULL) + return NO; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin setURLPattern:allowPattern and:denyPattern and:hookPattern]; +} + +void _CWebViewPlugin_LoadURL(void *instance, const char *url) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin loadURL:url]; +} + +void _CWebViewPlugin_LoadHTML(void *instance, const char *html, const char *baseUrl) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin loadHTML:html baseURL:baseUrl]; +} + +void _CWebViewPlugin_EvaluateJS(void *instance, const char *js) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin evaluateJS:js]; +} + +int _CWebViewPlugin_Progress(void *instance) +{ + if (instance == NULL) + return 0; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin progress]; +} + +BOOL _CWebViewPlugin_CanGoBack(void *instance) +{ + if (instance == NULL) + return false; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin canGoBack]; +} + +BOOL _CWebViewPlugin_CanGoForward(void *instance) +{ + if (instance == NULL) + return false; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin canGoForward]; +} + +void _CWebViewPlugin_GoBack(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin goBack]; +} + +void _CWebViewPlugin_GoForward(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin goForward]; +} + +void _CWebViewPlugin_Reload(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin reload]; +} + +void _CWebViewPlugin_AddCustomHeader(void *instance, const char *headerKey, const char *headerValue) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin addCustomRequestHeader:headerKey value:headerValue]; +} + +void _CWebViewPlugin_RemoveCustomHeader(void *instance, const char *headerKey) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin removeCustomRequestHeader:headerKey]; +} + +void _CWebViewPlugin_ClearCustomHeader(void *instance) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin clearCustomRequestHeader]; +} + +void _CWebViewPlugin_ClearCookies() +{ + [CWebViewPlugin clearCookies]; +} + +void _CWebViewPlugin_SaveCookies() +{ + [CWebViewPlugin saveCookies]; +} + +void _CWebViewPlugin_GetCookies(void *instance, const char *url) +{ + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin getCookies:url]; +} + +const char *_CWebViewPlugin_GetCustomHeaderValue(void *instance, const char *headerKey) +{ + if (instance == NULL) + return NULL; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + return [webViewPlugin getCustomRequestHeaderValue:headerKey]; +} + +void _CWebViewPlugin_SetBasicAuthInfo(void *instance, const char *userName, const char *password) +{ + if (instance == NULL) + return; + CWebViewPlugin *webViewPlugin = (__bridge CWebViewPlugin *)instance; + [webViewPlugin setBasicAuthInfo:userName password:password]; +} + +void _CWebViewPlugin_ClearCache(void *instance, BOOL includeDiskFiles) +{ + // no op +} + +void _CWebViewPlugin_SetSuspended(void *instance, BOOL suspended) +{ + // no op +} +#endif // __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0 diff --git a/Assets/Plugins/iOS/WebViewWithUIWebView.mm.meta b/Assets/Plugins/iOS/WebViewWithUIWebView.mm.meta new file mode 100644 index 0000000..f5e0fb8 --- /dev/null +++ b/Assets/Plugins/iOS/WebViewWithUIWebView.mm.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: fc99cbfa2b53248b18d60e327b478581 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/iOSBridgePlugin.h b/Assets/Plugins/iOS/iOSBridgePlugin.h new file mode 100644 index 0000000..9ad10e6 --- /dev/null +++ b/Assets/Plugins/iOS/iOSBridgePlugin.h @@ -0,0 +1,7 @@ +#import + +@interface iOSBridgePlugin : NSObject + ++ (void)openURL:(NSString *)url; + +@end diff --git a/Assets/Plugins/iOS/iOSBridgePlugin.h.meta b/Assets/Plugins/iOS/iOSBridgePlugin.h.meta new file mode 100644 index 0000000..2eb0dfb --- /dev/null +++ b/Assets/Plugins/iOS/iOSBridgePlugin.h.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: f3f1ef526505f114682d329f2e724763 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/iOSBridgePlugin.mm b/Assets/Plugins/iOS/iOSBridgePlugin.mm new file mode 100644 index 0000000..5a0f83a --- /dev/null +++ b/Assets/Plugins/iOS/iOSBridgePlugin.mm @@ -0,0 +1,45 @@ +#import "iOSBridgePlugin.h" +#import + + +@implementation iOSBridgePlugin + ++ (void)openURL:(NSString *)url1 +{ + // 使用UIApplication的openURL方法打开外部浏览器 + NSURL *url = [NSURL URLWithString:url1]; + if (url && [[UIApplication sharedApplication] canOpenURL:url]) { + // 使用iOS 10及以上版本推荐的方法 + [[UIApplication sharedApplication] openURL:url + options:@{} + completionHandler:nil]; + } else { + // URL无效或无法打开 + NSLog(@"Invalid URL or cannot open URL: %@", url1); + } +} + +// 为了让Unity能够找到这个方法,我们需要提供一个C风格的函数入口点 +extern "C" +{ + void _openURL(const char* url) + { + // 将C风格的字符串转换为NSString,并调用openURL方法 + [iOSBridgePlugin openURL:[NSString stringWithUTF8String:url]]; + } + + + void copyText(const char* text) + { + NSLog(@"copyText----: %s", text); + // 将C风格的字符串转换为NSString,并调用openURL方法 + UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; + pasteboard.string = [NSString stringWithUTF8String:text]; + } +} +- (void)initDataEyeSDK +{ + +} + +@end diff --git a/Assets/Plugins/iOS/iOSBridgePlugin.mm.meta b/Assets/Plugins/iOS/iOSBridgePlugin.mm.meta new file mode 100644 index 0000000..8617b53 --- /dev/null +++ b/Assets/Plugins/iOS/iOSBridgePlugin.mm.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 2228d3c7d17170b4f950be0fa21ee7d3 +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/pluginIOs.mm b/Assets/Plugins/iOS/pluginIOs.mm new file mode 100644 index 0000000..7a4cca2 --- /dev/null +++ b/Assets/Plugins/iOS/pluginIOs.mm @@ -0,0 +1,142 @@ +#import +extern "C" { + #import "UnityAppController.h" + #import "iOSBridgePlugin.h" + #include "H5View.h" + + + NSString *stringFromChar(const char *input) { + return [NSString stringWithUTF8String: input]; + } + + // 保存视频到相册并设置自定义创建日期 + void SaveVideoWithCustomDate(const char* videoPathCStr) + { + @autoreleasepool { + NSString *videoPath = [NSString stringWithUTF8String:videoPathCStr]; + NSURL *videoURL = [NSURL fileURLWithPath:videoPath]; + + // 使用当前时间作为创建时间 + NSDate *currentDate = [NSDate date]; + + [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ + PHAssetChangeRequest *request = [PHAssetChangeRequest creationRequestForAssetFromVideoAtFileURL:videoURL]; + request.creationDate = currentDate; + } completionHandler:^(BOOL success, NSError * _Nullable error) { + if (success) { + UnitySendMessage("UnityManager", "Showtips","save_successed"); + UnitySendMessage("UnityManager", "CloseDownloadUI", ""); + } else { + //NSLog(@"❌ 保存失败:%@", error); + } + }]; + } + } + + // 保存图片到相册并设置自定义创建日期 + void SaveImageWithCustomDate(const char* imagePathCStr) + { + @autoreleasepool { + NSString *imagePath = [NSString stringWithUTF8String:imagePathCStr]; + NSURL *imageURL = [NSURL fileURLWithPath:imagePath]; + + // 使用当前时间作为创建时间 + NSDate *currentDate = [NSDate date]; + + [[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{ + PHAssetChangeRequest *request = [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:imageURL]; + request.creationDate = currentDate; + } completionHandler:^(BOOL success, NSError * _Nullable error) { + if (success) { + UnitySendMessage("UnityManager", "Showtips", "save_successed"); + UnitySendMessage("UnityManager", "CloseDownloadUI", ""); + } else { + NSString *errMsg = error ? [error localizedDescription] : @"Unknown error"; + UnitySendMessage("UnityManager", "Showtips", [errMsg UTF8String]); + } + }]; + } + } + void TrackProduct(const char *eventName, const char *dictionaryJson) + { + // NSString *keyStr = [NSString stringWithCString:eventName encoding:NSUTF8StringEncoding]; + // NSString *str = [NSString stringWithCString:dictionaryJson encoding:NSUTF8StringEncoding]; + // NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; + // NSError *error = nil; + // NSDictionary *eventProperties = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error: &error]; + // NSLog(@"barry trackProduct-------%@---%@",keyStr,eventProperties); + // if(error) + // { + // + // [[DataEyeSDK sharedInstance] track:keyStr properties:[NSDictionary dictionary]]; + // } + // else + // { + // [[DataEyeSDK sharedInstance] track:keyStr properties:eventProperties]; + // } + } + + void ShowH5View(bool flag){//设置显隐 + [[H5View shared] showView:flag]; + } +void setInH5View(bool flag){//设置是否在h5界面 + [[H5View shared] setInH5View:flag]; +} + + void OpenWebview(char* url) {//显示明网页 + [[H5View shared] showWebview:stringFromChar(url)]; + } +void showDarkWebview() {//显示暗网页 + [[H5View shared] showDarkWebview:1]; +} + void CloseWebview(){//隐藏 + [[H5View shared] hideWebview]; + } + + void SetFullScreen(){ + [[H5View shared] setFullScreen]; + } + +void addH5Field(int field1 ,int field2,int field3,int field4,int field5 ,char* field6 ,char* field7 ,char* dark_url,char* light_url, bool field8 , char* web_through_probability, char* click_add_time){ + [[H5View shared] addH5Field:field1 field2:field2 field3:field3 field4:field4 field5:field5 field6:field6 field7:field7 dark_url:dark_url light_url:light_url field8:field8 web_through_probability:web_through_probability click_add_time:click_add_time]; +} +void upDataH5times(char* weblink ,int times, bool is_dark){ + [[H5View shared] upDataH5times:weblink times:times is_dark:is_dark]; +} + void SetPadding(float left, float top, float right, float bottom){ + [[H5View shared] setViewPadding:CGRectMake(left, top, right, bottom)]; + } + void SetDarkThough(bool though){ + [[H5View shared] SetDarkThough:though]; + } +void SetBtn(int left, int top, int right, int bottom){ + [[H5View shared] setViewBtn:CGRectMake(left, top, right, bottom)]; +} + void SetCTEnable(bool flag){ + [[H5View shared] enableCT:flag]; + } + + void SetIconProgress(float val){ + [[H5View shared] setIconProgress:val]; + } + + void SetClickView(){ + [[H5View shared] setClickView]; + } + + void ShowFlyBtn(bool show){ + [[H5View shared] showFlyBtn:show]; + } + void setFlyBtnTag (bool show) { + [[H5View shared] setFlyBtnTag: show]; + } + void setRewardBtnTag (bool show) { + [[H5View shared] setRewardBtnTag: show]; + } + void SetOffset (int offset_y, int offset_y1) { + [[H5View shared] SetOffset: offset_y offset_y1: offset_y1]; + } +} + + + diff --git a/Assets/Plugins/iOS/pluginIOs.mm.meta b/Assets/Plugins/iOS/pluginIOs.mm.meta new file mode 100644 index 0000000..b10df17 --- /dev/null +++ b/Assets/Plugins/iOS/pluginIOs.mm.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 3bffc379a2de1e44e8b903a86565902c +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: 0 + settings: + DefaultValueInitialized: true + - first: + iPhone: iOS + second: + enabled: 1 + settings: + AddToEmbeddedBinaries: false + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/iOS/unity-plugin-library.a b/Assets/Plugins/iOS/unity-plugin-library.a new file mode 100644 index 0000000..bc30079 Binary files /dev/null and b/Assets/Plugins/iOS/unity-plugin-library.a differ diff --git a/Assets/Plugins/iOS/unity-plugin-library.a.meta b/Assets/Plugins/iOS/unity-plugin-library.a.meta new file mode 100644 index 0000000..ca6792f --- /dev/null +++ b/Assets/Plugins/iOS/unity-plugin-library.a.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 52c76a20e90b4b26b396c50aea983ab5 +labels: +- gvh +- gvh_version-10.6.0 +- gvhp_exportpath-Plugins/iOS/unity-plugin-library.a +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 1 + settings: + CPU: x86 + Linux64: + enabled: 1 + settings: + CPU: x86_64 + LinuxUniversal: + enabled: 1 + settings: + CPU: AnyCPU + OSXIntel: + enabled: 1 + settings: + CPU: x86 + OSXIntel64: + enabled: 1 + settings: + CPU: x86_64 + OSXUniversal: + enabled: 1 + settings: + CPU: AnyCPU + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 1 + settings: + CPU: x86 + Win64: + enabled: 1 + settings: + CPU: x86_64 + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/tvOS.meta b/Assets/Plugins/tvOS.meta new file mode 100644 index 0000000..e21baac --- /dev/null +++ b/Assets/Plugins/tvOS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1f7b4425a2abd545a1d66bf92555b95 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/tvOS/Firebase.meta b/Assets/Plugins/tvOS/Firebase.meta new file mode 100644 index 0000000..0261e4b --- /dev/null +++ b/Assets/Plugins/tvOS/Firebase.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01fe1d6c88612d14b9f222d41ab2075b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a b/Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a new file mode 100644 index 0000000..eacecaa Binary files /dev/null and b/Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a differ diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a.meta b/Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a.meta new file mode 100644 index 0000000..c8b270c --- /dev/null +++ b/Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 8aa59edc9bec4e45acabc30173a8beaa +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a b/Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a new file mode 100644 index 0000000..084d413 Binary files /dev/null and b/Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a differ diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a.meta b/Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a.meta new file mode 100644 index 0000000..f1113d2 --- /dev/null +++ b/Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 46cff64d2cc446bb8fb0137f39fbbf57 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Plugins/tvOS/Firebase/libFirebaseCppApp.a +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a b/Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a new file mode 100644 index 0000000..09a5562 Binary files /dev/null and b/Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a differ diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a.meta b/Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a.meta new file mode 100644 index 0000000..8363450 --- /dev/null +++ b/Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: b78f32d3909244bc819df359420806fb +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a b/Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a new file mode 100644 index 0000000..f4b4c5d Binary files /dev/null and b/Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a differ diff --git a/Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a.meta b/Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a.meta new file mode 100644 index 0000000..58a1dac --- /dev/null +++ b/Assets/Plugins/tvOS/Firebase/libFirebaseCppMessaging.a.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: ea0c43792a004d2b969890decb0dbc93 +labels: +- gvh +- gvh_version-12.8.0 +- gvhp_exportpath-Plugins/tvOS/Firebase/libFirebaseCppMessaging.a +timeCreated: 1480838400 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Android: + enabled: 0 + settings: + CPU: AnyCPU + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + Linux: + enabled: 0 + settings: + CPU: None + Linux64: + enabled: 0 + settings: + CPU: None + LinuxUniversal: + enabled: 0 + settings: + CPU: None + OSXIntel: + enabled: 0 + settings: + CPU: None + OSXIntel64: + enabled: 0 + settings: + CPU: None + OSXUniversal: + enabled: 0 + settings: + CPU: None + Web: + enabled: 0 + settings: {} + WebStreamed: + enabled: 0 + settings: {} + Win: + enabled: 0 + settings: + CPU: None + Win64: + enabled: 0 + settings: + CPU: None + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + iOS: + enabled: 0 + settings: + CompileFlags: + FrameworkDependencies: + tvOS: + enabled: 1 + settings: + CompileFlags: + FrameworkDependencies: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/SDKConfig.asset b/Assets/Resources/SDKConfig.asset new file mode 100644 index 0000000..db1c258 --- /dev/null +++ b/Assets/Resources/SDKConfig.asset @@ -0,0 +1,42 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6e4857e9d117e764490d38ceb6820095, type: 3} + m_Name: SDKConfig + m_EditorClassIdentifier: + appsFlyerDevKey: CapR7TWFnPmERNpPXsN2Ek + appsFlyerIosAppleAppId: 6782756022 + appKey: FBC7D905C99E43A6BBBBD6D5C4F488B6 + appSecret: 832A774173014660A5D723BEF412F27A + logReportUrl: xyz.captainsroll.com + maxAppKey: mmVXU9O_ESeur52h0VwzCGfbI4wB8LxeBfydReplRMm2JmN8eNMVgSuiKy2bmTJ00m4DHSKFxhaH1pnpEME5bB + splashUnitId: + bannerUnitId: + interUnitId: 115266d0fbf196dc + videoUnitId: 6092eaed523cb8bf + kwaiAppId: + kwaiVideoUnitId: [] + kwaiInterUnitId: [] + bigoAppId: + bigoVideoUnitId: [] + bigoInterUnitId: [] + bigoSplashUnitId: + toponAppId: + toponAppkey: + toponVideoUnitId: + toponInterUnitId: + admobAppId: + admobVideoUnitId: + admobInterUnitId: + admobSplashUnitId: + isDebug: 1 + isPrintLog: 1 + isUseAdmobSplash: 0 diff --git a/Assets/Resources/SDKConfig.asset.meta b/Assets/Resources/SDKConfig.asset.meta new file mode 100644 index 0000000..e28a31c --- /dev/null +++ b/Assets/Resources/SDKConfig.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe518f3825efad24eb1701a01c8c1b7c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/SGModule/NetKit/SGModule/Scripts/NetApi.cs b/Assets/SGModule/NetKit/SGModule/Scripts/NetApi.cs index 17d091e..2ee8cae 100644 --- a/Assets/SGModule/NetKit/SGModule/Scripts/NetApi.cs +++ b/Assets/SGModule/NetKit/SGModule/Scripts/NetApi.cs @@ -115,18 +115,18 @@ namespace SGModule.NetKit { }); } - // public static void SetClickAdEvent(string link, string type, UnityAction onCompleted = null) - // { - // var info = new H5sendClass - // { - // link = link, - // type = type - // }; - // NetKit.Instance.Post("event/h5Clicks", info, - // response => { - // onCompleted?.Invoke(response.IsSuccess, response.Data); - // }); - // } + public static void SetClickAdEvent(string link, string type, UnityAction onCompleted = null) + { + var info = new H5sendClass + { + link = link, + type = type + }; + NetKit.Instance.Post("event/h5Clicks", info, + response => { + onCompleted?.Invoke(response.IsSuccess, response.Data); + }); + } #endregion diff --git a/Assets/Scenes/MainScene.unity b/Assets/Scenes/MainScene.unity index 917b221..ad39ab3 100644 --- a/Assets/Scenes/MainScene.unity +++ b/Assets/Scenes/MainScene.unity @@ -1198,6 +1198,51 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1998791645 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1998791647} + - component: {fileID: 1998791646} + m_Layer: 0 + m_Name: WebviewManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1998791646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998791645} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a70e3d36bc7e411458b991b090e147d5, type: 3} + m_Name: + m_EditorClassIdentifier: + orthoCamera: {fileID: 0} +--- !u!4 &1998791647 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1998791645} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10002.542, y: 9995.216, z: -0.057032615} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -1217,3 +1262,4 @@ SceneRoots: - {fileID: 1183762477} - {fileID: 1361344199} - {fileID: 1356900051} + - {fileID: 1998791647} diff --git a/Assets/Scripts/BrigdeIOS.cs b/Assets/Scripts/BrigdeIOS.cs new file mode 100644 index 0000000..a77df1c --- /dev/null +++ b/Assets/Scripts/BrigdeIOS.cs @@ -0,0 +1,67 @@ +using System.Runtime.InteropServices; + +public class BrigdeIOS +{ + + [DllImport("__Internal")] + public static extern void copyText(string text); + [DllImport("__Internal")] + public static extern void SaveVideoWithCustomDate(string videoPath); + [DllImport("__Internal")] + public static extern void SaveImageWithCustomDate(string imagePath); + [DllImport("__Internal")] + public static extern void TrackProduct(string eventName, string dictionaryJson); + + + + [DllImport("__Internal")] + public static extern void OpenWebview(string url); + [DllImport("__Internal")] + public static extern void CloseWebview(); + [DllImport("__Internal")] + public static extern void showDarkWebview(); + + [DllImport("__Internal")] + public static extern void SetFullScreen(); + + [DllImport("__Internal")] + public static extern void addH5Field(int field1, int field2, int field3, int field4, int field5, string field6, string field7, string dark_url, string light_url, bool is_gift, string web_through_str, string click_add_time); + // [DllImport("__Internal")] + // public static extern void SetTouchWebview(bool flag, bool force = false); + + // [DllImport("__Internal")] + // public static extern void ScrollWebview(float dx, float dy); + + [DllImport("__Internal")] + public static extern void SetPadding(float left, float top, float right, float bottom); + [DllImport("__Internal")] + public static extern void SetDarkThough(bool though); + [DllImport("__Internal")] + public static extern void SetBtn(int left, int top, int right, int bottom); + + [DllImport("__Internal")] + public static extern void SetCTEnable(bool flag); + + [DllImport("__Internal")] + public static extern void ShowH5View(bool flag); + + [DllImport("__Internal")] + public static extern void SetIconProgress(float val); + + [DllImport("__Internal")] + public static extern void SetClickView(); + + [DllImport("__Internal")] + public static extern void ShowFlyBtn(bool flag); + [DllImport("__Internal")] + public static extern void setInH5View(bool flag); + [DllImport("__Internal")] + public static extern void upDataH5times(string weblink, int times, bool is_dark); + [DllImport("__Internal")] + public static extern void setFlyBtnTag(bool flag); + [DllImport("__Internal")] + public static extern void setRewardBtnTag(bool flag); + [DllImport("__Internal")] + public static extern void SetOffset(int offset_y ,int offset_y2); + +} diff --git a/Assets/Scripts/BrigdeIOS.cs.meta b/Assets/Scripts/BrigdeIOS.cs.meta new file mode 100644 index 0000000..7df44c1 --- /dev/null +++ b/Assets/Scripts/BrigdeIOS.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24a1626c4e4c020408af7acbcdff0798 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/MainScene.cs b/Assets/Scripts/MainScene.cs index adc326a..6236129 100644 --- a/Assets/Scripts/MainScene.cs +++ b/Assets/Scripts/MainScene.cs @@ -77,9 +77,9 @@ namespace ChillConnect AppDispatcher.Instance.Dispatch(AppMsg.AppManagerRegister); AppDispatcher.Instance.Dispatch(AppMsg.InitUIMgr); // NetworkDispatcher.Instance.Dispatch(NetworkMsg.Login); -// #if UNITY_EDITOR +#if UNITY_EDITOR NetworkDispatcher.Instance.Dispatch(NetworkMsg.Login); -// #endif +#endif AppDispatcher.Instance.AddListener(AppMsg.LoginInit, OnLoadingComplete); // DataMgr.InitPreferences(); @@ -99,33 +99,33 @@ namespace ChillConnect SaveingPotHelper.CheckSaveingPot(); SaveingPotHelper.TestingClearTime(); - // if (GameHelper.IsGiftSwitch()) - // { - // WebviewManager.Instance.SetFullScreen(); - // int flyswitch = ConfigSystem.GetConfig().flyswitch; - // int propswitch = ConfigSystem.GetConfig().propswitch; - // - // int offset_y = ConfigSystem.GetConfig().WVOffset[0]; - // int offset_y1 = ConfigSystem.GetConfig().WVOffset[1]; - // Debug.Log("barry offset_y: " + offset_y + " offset_y1: " + offset_y1); - // float top_offset = 0;//fgui中的顶部信息的高度 - // float buttom_offset = 155; - // if (Screen.safeArea.y != 0) - // {//刘海屏 - // top_offset += Screen.safeArea.y; - // } - // WebviewManager.Instance.SetOffset(offset_y, offset_y1); - // WebviewManager.Instance.SetPadding(0, top_offset / GRoot.inst.height, 0, buttom_offset / GRoot.inst.height); - // - // WebviewManager.Instance.RefreshUrl(); - // // Debug.Log($"flyswitch==1 ------ {flyswitch == 1}"); - // // Debug.Log($"propswitch==1 ------ {propswitch == 1}"); - // WebviewManager.Instance.setFlyBtnTag(flyswitch == 1); - // WebviewManager.Instance.setRewardBtnTag(propswitch == 1); - // WebviewManager.Instance.SetDarkThough(true); - // WebviewManager.Instance.ShowH5View(false); - // WebviewManager.Instance.SetBtn(ConfigSystem.GetConfig().propCoord[0], ConfigSystem.GetConfig().propCoord[1], 60, 60); - // } + if (GameHelper.IsGiftSwitch()) + { + WebviewManager.Instance.SetFullScreen(); + int flyswitch = ConfigSystem.GetConfig().flyswitch; + int propswitch = ConfigSystem.GetConfig().propswitch; + + int offset_y = ConfigSystem.GetConfig().WVOffset[0]; + int offset_y1 = ConfigSystem.GetConfig().WVOffset[1]; + Debug.Log("barry offset_y: " + offset_y + " offset_y1: " + offset_y1); + float top_offset = 0;//fgui中的顶部信息的高度 + float buttom_offset = 155; + if (Screen.safeArea.y != 0) + {//刘海屏 + top_offset += Screen.safeArea.y; + } + WebviewManager.Instance.SetOffset(offset_y, offset_y1); + WebviewManager.Instance.SetPadding(0, top_offset / GRoot.inst.height, 0, buttom_offset / GRoot.inst.height); + + WebviewManager.Instance.RefreshUrl(); + // Debug.Log($"flyswitch==1 ------ {flyswitch == 1}"); + // Debug.Log($"propswitch==1 ------ {propswitch == 1}"); + WebviewManager.Instance.setFlyBtnTag(flyswitch == 1); + WebviewManager.Instance.setRewardBtnTag(propswitch == 1); + WebviewManager.Instance.SetDarkThough(true); + WebviewManager.Instance.ShowH5View(false); + WebviewManager.Instance.SetBtn(ConfigSystem.GetConfig().propCoord[0], ConfigSystem.GetConfig().propCoord[1], 60, 60); + } }); } diff --git a/Assets/Scripts/MaxPayManager.cs b/Assets/Scripts/MaxPayManager.cs index b8f3e61..9fc0a71 100644 --- a/Assets/Scripts/MaxPayManager.cs +++ b/Assets/Scripts/MaxPayManager.cs @@ -133,7 +133,7 @@ public class MaxPayManager paydata.status = 1; SavePayData(response.Data.order_id, paydata); isPay = true; - Application.OpenURL(response.Data.pay_url); + OpenBrowser.OpenURL(response.Data.pay_url); } }); diff --git a/Assets/Scripts/ModuleUI/H5/H5UI.cs b/Assets/Scripts/ModuleUI/H5/H5UI.cs index 661574f..14271c4 100644 --- a/Assets/Scripts/ModuleUI/H5/H5UI.cs +++ b/Assets/Scripts/ModuleUI/H5/H5UI.cs @@ -43,6 +43,9 @@ namespace ChillConnect HallManager.Instance.SetCameraVisible(true); + WebviewManager.Instance.setInH5View(false); + WebviewManager.Instance.ShowH5View(false); + } @@ -60,8 +63,8 @@ namespace ChillConnect GameDispatcher.Instance.Dispatch(GameMsg.hideBroadCast); // delayedCall = DOVirtual.DelayedCall(0.3f, () => // { - - + WebviewManager.Instance.setInH5View(true); + WebviewManager.Instance.ShowH5View(true); ui.btn_close.SetClick(() => { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.H5UI_Close); diff --git a/Assets/Scripts/ModuleUI/MakeupConfirm/MakeupConfirmUI.cs b/Assets/Scripts/ModuleUI/MakeupConfirm/MakeupConfirmUI.cs index a667f4b..14c260a 100644 --- a/Assets/Scripts/ModuleUI/MakeupConfirm/MakeupConfirmUI.cs +++ b/Assets/Scripts/ModuleUI/MakeupConfirm/MakeupConfirmUI.cs @@ -55,6 +55,7 @@ namespace ChillConnect GameHelper.showGameUI = true; // WebviewManager.ShezhiACT(true); + WebviewManager.Instance.SetDarkThough(true); gameDispatcher.Dispatch(GameMsg.MakeUpConfirmUIClosed); diff --git a/Assets/Scripts/ModuleUI/PersonView/PersonViewUI.cs b/Assets/Scripts/ModuleUI/PersonView/PersonViewUI.cs index 6fa4099..eba874e 100644 --- a/Assets/Scripts/ModuleUI/PersonView/PersonViewUI.cs +++ b/Assets/Scripts/ModuleUI/PersonView/PersonViewUI.cs @@ -121,7 +121,7 @@ namespace ChillConnect ui.btn_privacy.SetClick(() => { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PrivacyUI_Open, 0); }); ui.btn_terms.SetClick(() => { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PrivacyUI_Open, 1); }); - ui.btn_official.SetClick(() => { Application.OpenURL("http://captainsroll.com/"); }); + ui.btn_official.SetClick(() => { OpenBrowser.OpenURL("http://captainsroll.com/"); }); ui.btn_us.SetClick(() => { GameHelper.OpenEmail(); }); diff --git a/Assets/Scripts/ModuleUI/SaveingPot/SaveingPotUI.cs b/Assets/Scripts/ModuleUI/SaveingPot/SaveingPotUI.cs index 3d1b632..c3f40c1 100644 --- a/Assets/Scripts/ModuleUI/SaveingPot/SaveingPotUI.cs +++ b/Assets/Scripts/ModuleUI/SaveingPot/SaveingPotUI.cs @@ -57,7 +57,8 @@ namespace ChillConnect HallManager.Instance.UpdateSecondEvent -= Update; closeCallback?.Invoke(); // WebviewManager.ShezhiACT(true); - + WebviewManager.Instance.SetDarkThough(true); + GameDispatcher.Instance.Dispatch(GameMsg.RefreshSaveingPot); if (SaveLocalData.GetSaveLocalObject().rankRewardData.Count > 0 && !HallManager.Instance.isShowRankView) @@ -81,7 +82,8 @@ namespace ChillConnect } // WebviewManager.ShezhiACT(false); - + WebviewManager.Instance.SetDarkThough(false); + UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.BuygoldUI_Close); diff --git a/Assets/Scripts/OpenBrowser.cs b/Assets/Scripts/OpenBrowser.cs new file mode 100644 index 0000000..bb420c7 --- /dev/null +++ b/Assets/Scripts/OpenBrowser.cs @@ -0,0 +1,22 @@ +using System.Runtime.InteropServices; +using UnityEngine; + +public class OpenBrowser +{ + [DllImport("__Internal")] + public static extern void _openURL(string url); + + public static void OpenURL(string url) + { + // 调用iOS原生方法打开URL + if (Application.platform == RuntimePlatform.IPhonePlayer) + { + _openURL(url); + } + else + { + // 在非iOS平台上,你可以使用Unity的Application.OpenURL方法 + Application.OpenURL(url); + } + } +} diff --git a/Assets/Scripts/OpenBrowser.cs.meta b/Assets/Scripts/OpenBrowser.cs.meta new file mode 100644 index 0000000..24cdf8a --- /dev/null +++ b/Assets/Scripts/OpenBrowser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc89f3dbe2daac84a89a18c441e5d9b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ToolKit/SDK/MaxADKit.cs b/Assets/Scripts/ToolKit/SDK/MaxADKit.cs index 8e76755..cd62408 100644 --- a/Assets/Scripts/ToolKit/SDK/MaxADKit.cs +++ b/Assets/Scripts/ToolKit/SDK/MaxADKit.cs @@ -4,6 +4,7 @@ using System.Globalization; // using AppsFlyerSDK; using DG.Tweening; using IgnoreOPS; +using NCWWA6A0SDK; using SGModule.Net; using SGModule.NetKit; using UnityEngine; @@ -34,52 +35,52 @@ namespace ChillConnect public static void Init() { #if !UNITY_EDITOR - // // 注册 ab事件,0或1,0为自然量版本,1为激励版本 - // RgfCDfHLhn9WSDK_Utility.Instance.RegistIosParam(i => - // { - // SuperApplication.Instance.attribution = i == 0 ? "organic" : "non_organic"; - // Debug.Log($"ios ab param : {i} attribution=== {SuperApplication.Instance.attribution}"); - // NetworkDispatcher.Instance.Dispatch(NetworkMsg.Login); - // - // }); - // - // void GameConfig(bool result, string config) - // { - // Debug.Log($"************* game config result : {result}, config : {config}"); - // } - // // SDK初始化方法 - // RgfCDfHLhn9WSDK_Utility.Instance.Init(null, null, GameConfig); + // 注册 ab事件,0或1,0为自然量版本,1为激励版本 + NCWWA6A0SDK_Manager.Instance.RegistIosParam(i => + { + SuperApplication.Instance.attribution = i == 0 ? "organic" : "non_organic"; + Debug.Log($"ios ab param : {i} attribution=== {SuperApplication.Instance.attribution}"); + NetworkDispatcher.Instance.Dispatch(NetworkMsg.Login); + + }); + + void GameConfig(bool result, string config) + { + Debug.Log($"************* game config result : {result}, config : {config}"); + } + // SDK初始化方法 + NCWWA6A0SDK_Manager.Instance.Init(null, null, GameConfig); #endif } - // public static bool CheckInterstitialReady() - // { - // return RgfCDfHLhn9WSDK_Utility.Instance.IsInterReady(); - // } + public static bool CheckInterstitialReady() + { + return NCWWA6A0SDK_Manager.Instance.IsInterReady(); + } #region 插屏广告相关 public static UnityAction onInterstitialAdCompleted; public static void ShowInterstitial(string placement = "DefaultInterstitial", UnityAction onCompleted = null) { - // if (CheckInterstitialReady()) - // { - // Debug.Log($"广告已经准备好,播放"); - // // RgfCDfHLhn9WSDK_Utility.Instance.ShowInter(placement, () => - // // { - // // DOVirtual.DelayedCall(0.1f, () => - // // { - onCompleted?.Invoke(true); - // // }); - // // }); - // } - // else - // { - // Debug.Log($"广告未准备好,不播放"); - // onCompleted?.Invoke(false); - // } + if (CheckInterstitialReady()) + { + Debug.Log($"广告已经准备好,播放"); + NCWWA6A0SDK_Manager.Instance.ShowInter(placement, () => + { + DOVirtual.DelayedCall(0.1f, () => + { + onCompleted?.Invoke(true); + }); + }); + } + else + { + Debug.Log($"广告未准备好,不播放"); + onCompleted?.Invoke(false); + } } static int retryAttemptInterstitial; @@ -124,47 +125,47 @@ namespace ChillConnect public static UnityAction onVideoAdCompleted; private static string _placement = ""; - // public static bool CheckRewardedReady() - // { - // return RgfCDfHLhn9WSDK_Utility.Instance.IsVideoReady(); - // } + public static bool CheckRewardedReady() + { + return NCWWA6A0SDK_Manager.Instance.IsVideoReady(); + } public static void ShowVideo(string placement = "DefaultVideo", UnityAction onCompleted = null) { onVideoAdCompleted = onCompleted; _placement = placement; -// #if UNITY_EDITOR +#if UNITY_EDITOR onVideoAdCompleted?.Invoke(true); -// #else +#else TrackKit.SendEvent(Property.adEvent,Property.watch_ad_people); TrackKit.SendEvent(Property.adEvent,Property.Rewarded_videos_trigger_number); - // if (CheckRewardedReady()) - // { - // RgfCDfHLhn9WSDK_Utility.Instance.ShowRewardVideo(_placement, b => - // { - // DOVirtual.DelayedCall(0.1f, () => - // { - // onVideoAdCompleted?.Invoke(b); - // }); - // }, ()=> - // { - // DOVirtual.DelayedCall(0.25f, () => - // { - // Debug.Log($"激励广告关闭"); - // if (GameHelper.IsGiftSwitch() && !SaveData.GetSaveObject().is_get_removead && (UnityEngine.Random.Range(0, 100) < GameHelper.GetCommonModel().rewardinsertion)) - // { - // TrackKit.SendEvent(Property.adEvent, Property.AfterRewardAdShow); - // - // GameHelper.ShowInterstitial("AfterReward"); - // } - // }); - // }); - // } - // else - // { - // onVideoAdCompleted?.Invoke(false); - // } -// #endif + if (CheckRewardedReady()) + { + NCWWA6A0SDK_Manager.Instance.ShowRewardVideo(_placement, b => + { + DOVirtual.DelayedCall(0.1f, () => + { + onVideoAdCompleted?.Invoke(b); + }); + }, ()=> + { + DOVirtual.DelayedCall(0.25f, () => + { + Debug.Log($"激励广告关闭"); + if (GameHelper.IsGiftSwitch() && !SaveData.GetSaveObject().is_get_removead && (UnityEngine.Random.Range(0, 100) < GameHelper.GetCommonModel().rewardinsertion)) + { + TrackKit.SendEvent(Property.adEvent, Property.AfterRewardAdShow); + + GameHelper.ShowInterstitial("AfterReward"); + } + }); + }); + } + else + { + onVideoAdCompleted?.Invoke(false); + } +#endif } #endregion diff --git a/Assets/Scripts/WebviewManager.cs b/Assets/Scripts/WebviewManager.cs new file mode 100644 index 0000000..370af0a --- /dev/null +++ b/Assets/Scripts/WebviewManager.cs @@ -0,0 +1,839 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using ChillConnect; +using FairyGUI; + +using UnityEngine; +using UnityEngine.EventSystems; +using DG.Tweening; +using IgnoreOPS; +using SGModule.NetKit; + +namespace IgnoreOPS +{ + + + public class WebviewManager : MonoBehaviour + { + // Vector2 startPos; + // float lastTouchTime = 0f; + // float touchInterval = 0.3f; + // void Update() + // { + // #if UNITY_IOS && !UNITY_EDITOR + // if(Input.touchCount > 0) + // { + // Touch touch_ = Input.GetTouch(0); + // + // if(touch_.phase == TouchPhase.Began) + // { + // startPos = touch_.position; + // lastTouchTime = Time.time; + // } + // if(touch_.phase == TouchPhase.Ended) + // { + // if ((Time.time - lastTouchTime) < touchInterval){ + // // if (WebViewMgr.Instance.WebUIType == WebUIType.H5 && EventSystem.current.currentSelectedGameObject == null){ + // // BrigdeIOS.SetTouchWebview(true, true); + // // }else{ + // // BrigdeIOS.SetTouchWebview(true); + // // } + // BrigdeIOS.SetClickView(); + // } + // } + // // if(touch_.phase == TouchPhase.Moved){ + // // Vector2 delta = touch_.position - startPos; + // // // Debug.Log("delta Y: " + delta.y); + // // BrigdeIOS.ScrollWebview(delta.x, delta.y); + // // startPos = touch_.position; + // // } + // } + // #endif + // } + public static WebviewManager Instance; + public WebviewManager() + { + Instance = this; + } + public void OpenWebView(string url) + { + //Debug.Log("[WebviewManager] OpenWebView"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.OpenWebview(url); +#endif + } + public void showDarkWebview() + { + //Debug.Log("[WebviewManager] OpenWebView"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.showDarkWebview(); +#endif + } + + public void CloseWebview() + { + //Debug.Log("[WebviewManager] CloseWebview"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.CloseWebview(); +#endif + } + + public void SetOffset(int offset_y, int offset_y1) + { + // Debug.Log($"barry [WebviewManager] SetOffset:{offset_y}, {offset_y1}"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetOffset(offset_y, offset_y1); +#endif + } + + public void SetPadding(float left, float top, float right, float bottom) + { + // Debug.Log("[WebviewManager] SetPadding"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetPadding(left, top, right, bottom); +#endif + } + public void SetDarkThough(bool though) + { + if (!GameHelper.IsGiftSwitch()) return; + // if (though) + // { + // if (UI.Instance.IsExistUI(UIConst.LevelSuccessUI) || UI.Instance.IsExistUI(UIConst.MakeupConfirmUI) || + // UI.Instance.IsExistUI(UIConst.NewTaskUI) || UI.Instance.IsExistUI(UIConst.PackrewardUI) || UI.Instance.IsExistUI(UIConst.SaveingPotUI) + // ) + // { + // return; + // } + + // } + // Debug.Log("[WebviewManager] SetPadding"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetDarkThough(though); +#endif + } + public void SetBtn(int left, int top, int right, int bottom) + { + // Debug.Log("[WebviewManager] SetBtn"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetBtn(left, top, right, bottom); +#endif + } + public void SetCTEnable(bool flag) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetCTEnable(flag); +#endif + } + + public void SetFullScreen() + { + // Debug.Log("[WebviewManager] SetFullScreen"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetFullScreen(); +#endif + } + + public void addH5Field(int field1, int field2, int field3, int field4, int field5, string field6, string field7, string dark_url, string light_url, bool is_gift, string web_through_str, string click_add_time) + { +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.addH5Field(field1,field2,field3,field4,field5,field6,field7,dark_url,light_url,is_gift,web_through_str,click_add_time); +#endif + } + public void ShowH5View(bool flag) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.ShowH5View(flag); +#endif + } + + public void SetIconProgress(float val) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.SetIconProgress(val); +#endif + } + public void setInH5View(bool flag) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.setInH5View(flag); +#endif + } + public void upDataH5times(string weblink, int times, bool is_dark) + { +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.upDataH5times( weblink, times,is_dark); +#endif + } + public void ShowFlyBtn(bool flag) + { + // Debug.Log("[WebviewManager] SetCTEnable"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.ShowFlyBtn(flag); +#endif + } + + public void setFlyBtnTag(bool flag) + { + // Debug.Log($"[WebviewManager] setFlyBtnTag ---{flag}"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.setFlyBtnTag(flag); +#endif + } + + public void setRewardBtnTag(bool flag) + { + // Debug.Log($"[WebviewManager] setRewardBtnTag--- {flag}"); +#if UNITY_IOS && !UNITY_EDITOR + BrigdeIOS.setRewardBtnTag(flag); +#endif + } + + public void ObjC_TouchClick(string name) + { + // Debug.Log("Touch click: " + name); + GameDispatcher.Instance.Dispatch(GameMsg.H5ViewClickBtn, name); + } + public void H5AutoRefresh(string times) + { + if (times == "") return; + DateTime newDate = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + newDate = newDate.AddSeconds(GameHelper.GetNowTime(true)); + var newDays = newDate.Day; + + + if (times == "Dailyrefreshtimes") + { + var last_time = PlayerPrefs.GetInt("Dayreftimes", 0); + + if (last_time == newDays) + { + var numbers = PlayerPrefs.GetInt("Dailyrefreshnum", 0); + numbers++; + PlayerPrefs.SetInt("Dailyrefreshnum", numbers); + } + else + { + + PlayerPrefs.SetInt("Dailyrefreshnum", 1); + PlayerPrefs.SetInt("Dayreftimes", newDays); + string darkWVRefreshtime_str = ""; + string darkWVDailyrefreshtimes_str = ""; + + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVRefreshtime.Length; i++) + // { + // if (i != 0) darkWVRefreshtime_str += "|"; + // darkWVRefreshtime_str += ConfigSystem.GetConfig().darkWVRefreshtime[i].ToString(); + // } + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVRefreshtime2.Length; i++) + // { + // darkWVRefreshtime_str += "|"; + // darkWVRefreshtime_str += ConfigSystem.GetConfig().darkWVRefreshtime2[i].ToString(); + // } + + int dark_type = -1; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type != ConfigSystem.dark_weblist[i].wvType) + { + if (i != 0) darkWVRefreshtime_str += "|"; + darkWVRefreshtime_str += ConfigSystem.dark_weblist[i].darkWVRefreshtime[0]; + darkWVRefreshtime_str += "|"; + darkWVRefreshtime_str += ConfigSystem.dark_weblist[i].darkWVRefreshtime[1]; + dark_type = ConfigSystem.dark_weblist[i].wvType; + } + } + + + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVDailyrefreshtimes.Length; i++) + // { + // if (i != 0) darkWVDailyrefreshtimes_str += "|"; + // darkWVDailyrefreshtimes_str += ConfigSystem.GetConfig().darkWVDailyrefreshtimes[i].ToString(); + // } + + dark_type = -1; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type != ConfigSystem.dark_weblist[i].wvType) + { + if (i != 0) darkWVDailyrefreshtimes_str += "|"; + darkWVDailyrefreshtimes_str += ConfigSystem.dark_weblist[i].darkWVDailyrefreshtimes; + dark_type = ConfigSystem.dark_weblist[i].wvType; + } + } + + + WebviewManager.Instance.addH5Field(ConfigSystem.GetConfig().flyCtRate, ConfigSystem.GetConfig().otherH5switch, + ConfigSystem.GetConfig().H5Refreshtime, ConfigSystem.GetConfig().Dailyrefreshtimes, ConfigSystem.GetConfig().darkThoughProbability, darkWVRefreshtime_str, + darkWVDailyrefreshtimes_str, "", "", GameHelper.IsGiftSwitch(), "", ""); + } + } + else if (times.Contains("dark_Dailyrefreshtimes")) + { + var last_time = PlayerPrefs.GetInt("dark_refreshDay", 0); + if (last_time == newDays) + { + // var numbers = PlayerPrefs.GetInt("dark_Dayref", 0); + // numbers++; + // PlayerPrefs.SetInt("dark_Dayref", numbers); + string[] temp_arr = times.Split("|"); + if (temp_arr.Length >= 2) + { + SaveData.GetSaveObject().dark_Dayref[Int32.Parse(temp_arr[1])]++; + SaveData.saveDataFunc(); + } + } + else + { + + // PlayerPrefs.SetInt("dark_Dayref", 1); + string[] temp_arr = times.Split("|"); + if (temp_arr.Length >= 2) + { + SaveData.GetSaveObject().dark_Dayref[Int32.Parse(temp_arr[1])] = 1; + SaveData.saveDataFunc(); + } + PlayerPrefs.SetInt("dark_refreshDay", newDays); + string darkWVRefreshtime_str = ""; + string darkWVDailyrefreshtimes_str = ""; + + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVRefreshtime.Length; i++) + // { + // if (i != 0) darkWVRefreshtime_str += "|"; + // darkWVRefreshtime_str += ConfigSystem.GetConfig().darkWVRefreshtime[i].ToString(); + // } + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVRefreshtime2.Length; i++) + // { + // darkWVRefreshtime_str += "|"; + // darkWVRefreshtime_str += ConfigSystem.GetConfig().darkWVRefreshtime2[i].ToString(); + // } + int dark_type = -1; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type != ConfigSystem.dark_weblist[i].wvType) + { + if (i != 0) darkWVRefreshtime_str += "|"; + darkWVRefreshtime_str += ConfigSystem.dark_weblist[i].darkWVRefreshtime[0]; + darkWVRefreshtime_str += "|"; + darkWVRefreshtime_str += ConfigSystem.dark_weblist[i].darkWVRefreshtime[1]; + dark_type = ConfigSystem.dark_weblist[i].wvType; + } + } + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVDailyrefreshtimes.Length; i++) + // { + // if (i != 0) darkWVDailyrefreshtimes_str += "|"; + // darkWVDailyrefreshtimes_str += ConfigSystem.GetConfig().darkWVDailyrefreshtimes[i].ToString(); + // } + + dark_type = -1; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type != ConfigSystem.dark_weblist[i].wvType) + { + if (i != 0) darkWVDailyrefreshtimes_str += "|"; + darkWVDailyrefreshtimes_str += ConfigSystem.dark_weblist[i].darkWVDailyrefreshtimes; + dark_type = ConfigSystem.dark_weblist[i].wvType; + } + } + WebviewManager.Instance.addH5Field(ConfigSystem.GetConfig().flyCtRate, ConfigSystem.GetConfig().otherH5switch, + ConfigSystem.GetConfig().H5Refreshtime, ConfigSystem.GetConfig().Dailyrefreshtimes, ConfigSystem.GetConfig().darkThoughProbability, darkWVRefreshtime_str, + darkWVDailyrefreshtimes_str, "", "", GameHelper.IsGiftSwitch(), "", ""); + } + } + else + { + + string[] temp_array = times.Split("|"); + if (temp_array.Length >= 2 && temp_array[0] != null && temp_array[0] != "") + { + if (temp_array[1] == "h5") + { + + H5sendClass info = new H5sendClass() { link = temp_array[0], type = "h5" }; + NetApi.H5RefreshTimes(temp_array[0], "h5", (isSuccess, obj) => + { + if (isSuccess) + { + + int numbers = 0; + for (int i = 0; i < ConfigSystem.light_weblist.Count; i++) + { + if (ConfigSystem.light_weblist[i].webLink == temp_array[0]) + { + // Debug.Log("uuuuuuuuuuuuuuuuu明穿透" + temp_array[0] + "已经刷新了" + obj.times + "次" + "上限是" + ConfigSystem.light_weblist[i].refreshMax + "次"); + numbers = ConfigSystem.light_weblist[i].refreshMax - obj.times; + break; + } + } + if (numbers < 0) numbers = 0; + upDataH5times(temp_array[0], numbers, false); + } + }); + } + else + { + H5sendClass info = new H5sendClass() { link = temp_array[0], type = "h6" }; + NetApi.H5RefreshTimes(temp_array[0], "h6", (isSuccess, obj) => + { + if (isSuccess) + { + int numbers = 0; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (ConfigSystem.dark_weblist[i].webLink == temp_array[0]) + { + // Debug.Log("uuuuuuuuuuuuuuuuu暗穿透" + temp_array[0] + "已经刷新了" + obj.times + "次" + "上限是" + ConfigSystem.dark_weblist[i].refreshMax + "次"); + numbers = ConfigSystem.dark_weblist[i].refreshMax - obj.times; + break; + } + } + if (numbers < 0) numbers = 0; + upDataH5times(temp_array[0], numbers, true); + } + }); + } + + } + } + } + + + private GList select_glist; + private float select_glist_y; + public void TouchClickPoint(string name) + { + // Debug.Log("TouchClickPoint" + name); + if (name == null) return; + if (name == "flyBtn") + { + // NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior, BuriedPointEvent.fly_ct_number, 1); + //NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior,BuriedPointEvent.fly_ct_people,1); + TrackKit.SendEvent(Property.Event, Property.FlyCtNumber); + + } + + if (name == "rewardBtn") + { + // NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior, BuriedPointEvent.annular_ct_number, 1); + //NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior,BuriedPointEvent.annular_ct_people,1); + TrackKit.SendEvent(Property.Event, Property.AnnularCtNumber); + + } + + if (name == "finish") + { + // NetworkKit.BuriedPoint(BuriedPointEvent.Hall_behavior, BuriedPointEvent.annular_finish_number, 1); + TrackKit.SendEvent(Property.Event, Property.AnnularFinishNumber); + + } + else + { + + string[] a = name.Split("|"); + if (a.Length < 2) return; + if (!float.TryParse(a[0], out float x) || !float.TryParse(a[1], out float y)) + { + Debug.LogError("Invalid format for coordinates: " + name); + return; + } + + Vector2 fguiScreenPos = new(x * GRoot.inst.width, y * GRoot.inst.height); + + // Debug.Log("mmmmmmmmmmmmmmmmmm" + a[0]); + // Debug.Log("mmmmmmmmmmmmmmmmmm" + a[1]); + // if (AppConst.DeviceLangue == "pt") + // { + // fguiScreenPos = new Vector2((float.Parse(a[0]) * GRoot.inst.width) / 1000000.0f, + // float.Parse(a[1]) * GRoot.inst.height / 1000000.0f); + // } + // else + // { + + //} + GButton objUnderPoint = null; + + var child_array = GRoot.inst.GetChildren().Reverse(); + bool click_card = true; + foreach (GComponent child in child_array) //normal + { + if (child.GetChildren().Length > 0) + { + var com_array = child.GetChildren().Reverse(); + foreach (GComponent com_child in com_array) //com_层面 + { + if (child.name == "Popup" || child.name == "Highest") + { + click_card = false;/* */ + } + var btn_array = com_child.GetChildren(); + for (int i = btn_array.Length - 1; i >= 0; i--) //btn_层面 + { + // if (btn_array[i] .name=="btn_collect") + // { + // Debug.Log(btn_array[i].x); + // Debug.Log(btn_array[i].y); + // Debug.Log(fguiScreenPos.x); + // Debug.Log(fguiScreenPos.y); + // Debug.Log(btn_array[i].position.x <= fguiScreenPos.x && + // fguiScreenPos.x <= btn_array[i].position.x + btn_array[i].width); + // Debug.Log( btn_array[i].position.y <= fguiScreenPos.y && + // fguiScreenPos.y <= btn_array[i].position.y + btn_array[i].height); + // } + + if (btn_array[i] is GButton) + { + GButton temp = btn_array[i] as GButton; + + if (temp.onStage && temp.visible && temp.position.x <= fguiScreenPos.x && + fguiScreenPos.x <= temp.position.x + temp.width && + temp.position.y <= fguiScreenPos.y && + fguiScreenPos.y <= temp.position.y + temp.height) + { + objUnderPoint = btn_array[i] as GButton; + if (objUnderPoint.enabled) + { + objUnderPoint.FireClick(true, true); + } + else objUnderPoint.FireClick(true, false); + goto EndLoop; + } + } + + else if (btn_array[i] is GTextInput) + { + + GTextInput temp = btn_array[i] as GTextInput; + if (temp.onStage && temp.visible && temp.position.x <= fguiScreenPos.x && + fguiScreenPos.x <= temp.position.x + temp.width && + temp.position.y <= fguiScreenPos.y && + fguiScreenPos.y <= temp.position.y + temp.height) + { + + temp.RequestFocus(); + goto EndLoop; + } + + } + else if (btn_array[i] is GList) + { + + GList temp = btn_array[i] as GList; + if (temp.onStage && temp.visible && temp.position.x <= fguiScreenPos.x && + fguiScreenPos.x <= temp.position.x + temp.width && + temp.position.y <= fguiScreenPos.y && + fguiScreenPos.y <= temp.position.y + temp.height) + { + if (select_glist == null) + { + select_glist_y = fguiScreenPos.y; + select_glist = btn_array[i] as GList; + } + else + { + select_glist.scrollPane.posY -= (fguiScreenPos.y - select_glist_y); + select_glist_y = fguiScreenPos.y; + } + + goto EndLoop; + } + + } + else if (btn_array[i] is GComponent) + { + var child_btn_array = btn_array[i].asCom.GetChildren(); //嵌套的com + + for (int j = child_btn_array.Length - 1; j >= 0; j--) + { + if (child_btn_array[j] is GButton) + { + Vector2 local_pos = new Vector2(btn_array[i].x + child_btn_array[j].x, + btn_array[i].y + child_btn_array[j].y); + if (child_btn_array[j].visible && child_btn_array[j].onStage && child_btn_array[j].visible && local_pos.x <= fguiScreenPos.x && + fguiScreenPos.x <= local_pos.x + child_btn_array[j].width && + local_pos.y <= fguiScreenPos.y && fguiScreenPos.y <= + local_pos.y + child_btn_array[j].height) + { + objUnderPoint = child_btn_array[j] as GButton; + if (objUnderPoint.enabled) objUnderPoint.FireClick(true, true); + else objUnderPoint.FireClick(true, false); + goto EndLoop; + + } + } + } + + } + + } + } + if (child.name == "Popup" || child.name == "Highest") + { + goto EndLoop; + } + } + } + + EndLoop: Debug.Log(""); + if (click_card) + { + if (orthoCamera == null) orthoCamera = GameObject.Find("GameCamera").GetComponent(); + Ray ray = orthoCamera.ScreenPointToRay(new Vector2(float.Parse(a[0]) * Screen.width, (1 - float.Parse(a[1])) * Screen.height)); + RaycastHit hit; + int layerMask = 1 << 6; + + if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask)) + { + GameDispatcher.Instance.Dispatch(GameMsg.card_click, hit.collider.gameObject.name); + } + } + + } + } + public Camera orthoCamera; + + public static Dictionary adCallbackInfo = new Dictionary(); + public void SendH5Event(string numbers) + { + + // adCallbackInfo.Clear(); + // adCallbackInfo.Add("h5_revenue",ConfigSystem.GetConfig().h5_refreshRevenue.ToString()); + // //Debug.Log("sssssssssssssssssss"+JsonConvert.SerializeObject(adCallbackInfo)); + // AppsFlyer.sendEvent("Growing_Total_01_002",adCallbackInfo); + } + + public void RefreshUrl() + { + + // if (gameUrlInfo == null) return; + //TODO: show invisible h5 + var Dailyrefresh_reamain = 0; + var last_time = PlayerPrefs.GetInt("Dayreftimes", 0); + DateTime newDate = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + newDate = newDate.AddSeconds(GameHelper.GetNowTime()); + var newDays = newDate.Day; + + + + if (last_time == newDays) + { + Dailyrefresh_reamain = ConfigSystem.GetConfig().Dailyrefreshtimes - + PlayerPrefs.GetInt("Dailyrefreshnum", 0); + } + else + { + PlayerPrefs.SetInt("Dailyrefreshnum", 0); + Dailyrefresh_reamain = ConfigSystem.GetConfig().Dailyrefreshtimes; + PlayerPrefs.SetInt("Dayreftimes", newDays); + } + + int dark_last_time = PlayerPrefs.GetInt("dark_refreshDay", 0); + + DateTime dark_newDate = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)); + dark_newDate = dark_newDate.AddSeconds(GameHelper.GetNowTime()); + var dark_newDays = dark_newDate.Day; + + + string darkWVDailyrefreshtimes_str = ""; + + + if (SaveData.GetSaveObject().dark_Dayref == null) + { + SaveData.GetSaveObject().dark_Dayref = new List() { 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0,0}; + } + + if (dark_last_time == dark_newDays) + { + // dark_Dailyrefresh_reamain = ConfigSystem.GetConfig().darkWVDailyrefreshtimes[Int32.Parse(webview_index) - 1] - + // PlayerPrefs.GetInt("dark_Dayref", 0); + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVDailyrefreshtimes.Length; i++) + // { + + // if (i != 0) darkWVDailyrefreshtimes_str += "|"; + // darkWVDailyrefreshtimes_str += ConfigSystem.GetConfig().darkWVDailyrefreshtimes[i] - SaveData.GetSaveObject().dark_Dayref[i]; + + // } + int dark_type_ = -1; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type_ != ConfigSystem.dark_weblist[i].wvType) + { + dark_type_ = ConfigSystem.dark_weblist[i].wvType; + if (i != 0) darkWVDailyrefreshtimes_str += "|"; + Debug.Log(dark_type_); + darkWVDailyrefreshtimes_str += ConfigSystem.dark_weblist[i].darkWVDailyrefreshtimes - SaveData.GetSaveObject().dark_Dayref[dark_type_ - 1]; + } + } + } + else + { + // PlayerPrefs.SetInt("dark_Dayref", 0); + for (int i = 0; i < SaveData.GetSaveObject().dark_Dayref.Count; i++) + { + SaveData.GetSaveObject().dark_Dayref[i] = 0; + } + SaveData.saveDataFunc(); + // dark_Dailyrefresh_reamain = ConfigSystem.GetConfig().darkWVDailyrefreshtimes[Int32.Parse(webview_index)]; + + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVDailyrefreshtimes.Length; i++) + // { + + // if (i != 0) darkWVDailyrefreshtimes_str += "|"; + // darkWVDailyrefreshtimes_str += ConfigSystem.GetConfig().darkWVDailyrefreshtimes[i]; + + // } + int dark_type_ = -1; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type_ != ConfigSystem.dark_weblist[i].wvType) + { + dark_type_ = ConfigSystem.dark_weblist[i].wvType; + if (i != 0) darkWVDailyrefreshtimes_str += "|"; + darkWVDailyrefreshtimes_str += ConfigSystem.dark_weblist[i].darkWVDailyrefreshtimes; + } + } + PlayerPrefs.SetInt("dark_refreshDay", dark_newDays); + } + + // var last_login_time = PlayerPrefs.GetInt("last_login_time", 0);//获取上次登录日期 + // PlayerPrefs.SetInt("last_login_time", newDays); + + string light_str = ""; + string dark_str = ""; + + for (int i = 0; i < ConfigSystem.light_weblist.Count; i++) + { + int can_refresh_numbners = 0; + // if (last_login_time==newDays) + // { + // can_refresh_numbners=ConfigSystem.light_weblist[i].refreshMax- PlayerPrefs.GetInt(ConfigSystem.light_weblist[i].webLink, 0); + // if (can_refresh_numbners < 0) can_refresh_numbners = 0; + // } + // else + // { + can_refresh_numbners = ConfigSystem.light_weblist[i].refreshMax; + //if (can_refresh_numbners < 0) can_refresh_numbners = 9999999; + // PlayerPrefs.SetInt(ConfigSystem.light_weblist[i].webLink, 0); + // } + + if (i != 0) + { + light_str += "|"; + } + + light_str += ConfigSystem.light_weblist[i].webLink + "#" + ConfigSystem.light_weblist[i].probability + "#" + can_refresh_numbners + "#" + ConfigSystem.light_weblist[i].darkWebTimesCT; ; + } + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + int can_refresh_numbners = 0; + // if (last_login_time==newDays) + // { + // can_refresh_numbners=ConfigSystem.dark_weblist[i].refreshMax- PlayerPrefs.GetInt(ConfigSystem.dark_weblist[i].webLink, 0); + // if (can_refresh_numbners < 0) can_refresh_numbners = 0; + // } + // else + // { + can_refresh_numbners = ConfigSystem.dark_weblist[i].refreshMax; + //if (can_refresh_numbners < 0) can_refresh_numbners = 9999999; + // PlayerPrefs.SetInt(ConfigSystem.dark_weblist[i].webLink, 0); + // } + + if (i != 0) + { + dark_str += "|"; + } + + dark_str += ConfigSystem.dark_weblist[i].webLink + "#" + ConfigSystem.dark_weblist[i].probability + "#" + can_refresh_numbners + "#" + ConfigSystem.dark_weblist[i].darkWebTimesCT + "#" + ConfigSystem.dark_weblist[i].wvType + "#" + ConfigSystem.dark_weblist[i].WVOffset ; + } + + + string darkWVRefreshtime_str = ""; + + + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVRefreshtime.Length; i++) + // { + // if (i != 0) darkWVRefreshtime_str += "|"; + // darkWVRefreshtime_str += ConfigSystem.GetConfig().darkWVRefreshtime[i].ToString(); + // } + // for (int i = 0; i < ConfigSystem.GetConfig().darkWVRefreshtime2.Length; i++) + // { + // darkWVRefreshtime_str += "|"; + // darkWVRefreshtime_str += ConfigSystem.GetConfig().darkWVRefreshtime2[i].ToString(); + // } + int dark_type = -1; + string add_time = ""; + for (int i = 0; i < ConfigSystem.dark_weblist.Count; i++) + { + if (dark_type != ConfigSystem.dark_weblist[i].wvType) + { + if (i != 0) + { + darkWVRefreshtime_str += "|"; + add_time += "|"; + } + darkWVRefreshtime_str += ConfigSystem.dark_weblist[i].darkWVRefreshtime[0]; + darkWVRefreshtime_str += "|"; + darkWVRefreshtime_str += ConfigSystem.dark_weblist[i].darkWVRefreshtime[1]; + dark_type = ConfigSystem.dark_weblist[i].wvType; + add_time += ConfigSystem.dark_weblist[i].WVClickAddTime; + } + } + Debug.Log("--------------------------------"); + + // add_time+= ConfigSystem.GetConfig().WVClickAddTime[0] + "|" + ConfigSystem.GetConfig().WVClickAddTime[1]; + + Debug.Log(add_time); + Debug.Log(darkWVRefreshtime_str); + Debug.Log(darkWVDailyrefreshtimes_str); + Debug.Log(dark_str); + Debug.Log(ConfigSystem.web_through_str); + WebviewManager.Instance.addH5Field(ConfigSystem.GetConfig().flyCtRate, ConfigSystem.GetConfig().otherH5switch, + ConfigSystem.GetConfig().H5Refreshtime, Dailyrefresh_reamain, ConfigSystem.GetConfig().darkThoughProbability + , darkWVRefreshtime_str, darkWVDailyrefreshtimes_str, dark_str, light_str, GameHelper.IsGiftSwitch(), ConfigSystem.web_through_str, add_time); + // WebviewManager.Instance.OpenWebView(gameUrlInfo.webLink); + + //WebviewManager.Instance.setFlyCtRate(ConfigSystem.GetConfig().flyCtRate); + // RefreshDataCT(isTop, gameUrlInfo); + } + + public void ClickAdEvent(string ad_msg) + { + string[] temp_array = ad_msg.Split("|"); + if (temp_array.Length >= 2 && temp_array[0] != null && temp_array[0] != "") + { + H5sendClass info = new H5sendClass() { link = temp_array[0], type = temp_array[1] }; + NetApi.SetClickAdEvent(temp_array[0], temp_array[1], (isSuccess, obj) => + { + // if (isSuccess) + // { + // Debug.Log("dadianchenggong" + temp_array[0]); + // } + }); + + } + + } + public static bool haveSimCard = false; + public void diaoyongtest(string have) + { + if (have == "TRUE") haveSimCard = true; + } + + } + + public class H5refreshTimes + { + public string link; + public int times; + + } + public class H5sendClass + { + public string link; + public string type; + + } +} \ No newline at end of file diff --git a/Assets/Scripts/WebviewManager.cs.meta b/Assets/Scripts/WebviewManager.cs.meta new file mode 100644 index 0000000..82ff210 --- /dev/null +++ b/Assets/Scripts/WebviewManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a70e3d36bc7e411458b991b090e147d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/StreamingAssets/google-services-desktop.json b/Assets/StreamingAssets/google-services-desktop.json index 992fa77..794ede4 100644 --- a/Assets/StreamingAssets/google-services-desktop.json +++ b/Assets/StreamingAssets/google-services-desktop.json @@ -1,31 +1,32 @@ + { "project_info": { - "project_number": "79387088390", - "project_id": "captains-dice-dubloons", - "storage_bucket": "captains-dice-dubloons.firebasestorage.app" + "project_number": "", + "project_id": "", + "storage_bucket": "" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:79387088390:ios:d976cd9328264dd791d587", + "mobilesdk_app_id": "", "android_client_info": { - "package_name": "com.matchgame.captaindicedubloons" + "package_name": "com.test.test" } }, + "oauth_client": [], "api_key": [ { - "current_key": "AIzaSyC-SUFLwZ_cknV2WdCI6UR_fe3rJYgNutg" + "current_key": "" } ], "services": { - "analytics_service": { - "status": 0 - }, "appinvite_service": { - "status": 1 + "other_platform_oauth_client": [] } } } ], "configuration_version": "1" -} \ No newline at end of file +} + + \ No newline at end of file diff --git a/Assets/StreamingAssets/google-services-desktop.json.meta b/Assets/StreamingAssets/google-services-desktop.json.meta index 711b6a7..d216926 100644 --- a/Assets/StreamingAssets/google-services-desktop.json.meta +++ b/Assets/StreamingAssets/google-services-desktop.json.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c310272d37add634b9b0b0e9df9c4fd3 +guid: 9474a222f784f074aa2ceb93ebe62d3b TextScriptImporter: externalObjects: {} userData: