Commit 3e09e792 authored by Hà Trung (NEGAXY)'s avatar Hà Trung (NEGAXY)

Merge branch 'iostmp' of http://103.147.34.20:30081/trung.ha/galaxysmash into iostmp

# Conflicts:
parents 83ac8c71 3dcf210b
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="UserContentModel">
<attachedFolders />
<explicitIncludes />
<explicitExcludes />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RiderProjectSettingsUpdater">
<option name="vcsConfiguration" value="2" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="737e1b58-8646-42b8-bb79-ddc162c9db3d" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/Assets/Hovl Studio/Render Pipelines support/URP and HD for Unity 2019.2+.unitypackage.meta" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Hovl Studio/Render Pipelines support/URP and HDRP for Unity 2019.3+.unitypackage.meta" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/Hovl Studio/Render Pipelines support/Unity 2020+ URP and HDRP.unitypackage.meta" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/StarSparrow/UpgradeHDRP/HDRP_2019.4+.unitypackage.meta" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/StarSparrow/UpgradeHDRP/HDRP_2020.2+.unitypackage.meta" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/StarSparrow/UpgradeURP/URP_Materials.unitypackage.meta" beforeDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="master" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="ProjectId" id="22MFzwhLFAbsfPtR76V99XswXIQ" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="Discover.Launch.Via.Unity" value="true" />
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
</component>
<component name="RunManager" selected="Attach to Unity Editor.Attach to Unity Editor">
<configuration name="Attach to Unity Editor &amp; Play" type="UNITY_DEBUG_RUN_CONFIGURATION" factoryName="UNITY_ATTACH_AND_PLAY" show_console_on_std_err="false" show_console_on_std_out="false" port="50000" address="localhost">
<option name="allowRunningInParallel" value="false" />
<option name="listenPortForConnections" value="false" />
<option name="pid" />
<option name="projectPathOnTarget" />
<option name="selectedOptions">
<list />
</option>
<method v="2" />
</configuration>
<configuration name="Attach to Unity Editor" type="UNITY_DEBUG_RUN_CONFIGURATION" factoryName="Unity Debug" show_console_on_std_err="false" show_console_on_std_out="false" port="50000" address="localhost">
<option name="allowRunningInParallel" value="false" />
<option name="listenPortForConnections" value="false" />
<option name="pid" />
<option name="projectPathOnTarget" />
<option name="selectedOptions">
<list />
</option>
<method v="2" />
</configuration>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="737e1b58-8646-42b8-bb79-ddc162c9db3d" name="Changes" comment="" />
<created>1639639816653</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1639639816653</updated>
<workItem from="1639639823339" duration="2410000" />
</task>
<task id="LOCAL-00001" summary="Vi commit iOS">
<created>1639642853344</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1639642853344</updated>
</task>
<option name="localTasksCounter" value="2" />
<servers />
</component>
<component name="UnityCheckinConfiguration" checkUnsavedScenes="true" />
<component name="UnityProjectConfiguration" hasMinimizedUI="true" />
<component name="UnityUnitTestConfiguration" currentTestLauncher="EditMode" />
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
<MESSAGE value="Vi commit iOS" />
<option name="LAST_COMMIT_MESSAGE" value="Vi commit iOS" />
</component>
</project>
\ No newline at end of file
fileFormatVersion: 2 fileFormatVersion: 2
guid: c5c36414e8273294aae9dae26893b8a3 guid: fa312c4195da8472684676f92e04e69f
folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
......
fileFormatVersion: 2
guid: b45c7b45c9256a745978ed0eb3cf5663
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: d2e45ca1b6714194e90f7eb923c3f243
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using UnityEngine;
using System;
namespace Crystal
{
public class SafeAreaDemo : MonoBehaviour
{
[SerializeField] KeyCode KeySafeArea = KeyCode.A;
SafeArea.SimDevice[] Sims;
int SimIdx;
void Awake ()
{
if (!Application.isEditor)
Destroy (this);
Sims = (SafeArea.SimDevice[])Enum.GetValues (typeof (SafeArea.SimDevice));
}
void Update ()
{
if (Input.GetKeyDown (KeySafeArea))
ToggleSafeArea ();
}
/// <summary>
/// Toggle the safe area simulation device.
/// </summary>
void ToggleSafeArea ()
{
SimIdx++;
if (SimIdx >= Sims.Length)
SimIdx = 0;
SafeArea.Sim = Sims[SimIdx];
Debug.LogFormat ("Switched to sim device {0} with debug key '{1}'", Sims[SimIdx], KeySafeArea);
}
}
}
fileFormatVersion: 2
guid: 9dd219ac2bff62648a6ae1c651c2eb5b
timeCreated: 1475885146
licenseType: Store
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
===============================
Safe Area Helper
===============================
Usage:
1. Create desired aspect ratios in the Game Window, e.g. 195:90 and 90:195 for iPhone X series.
2. Add the SafeArea.cs component to your GUI panels.
3. Add the SafeAreaDemo.cs once to a component in your scene.
4. Run the game and use the Toggle hotkey (default "A") to toggle between simulated devices.
Be sure to match the simulated device with the correct aspect ratio in your Game Window.
Add your own simulated devices:
1. Run an empty scene to the target mobile device with one GUI panel containing the SafeArea.cs component.
2. Rotate the device to each of the four orientations. Copy the pixel coordinates for each orientation from the debug output.
3. Enter the simulated device into SafeArea.cs using the same technique for the iPhone X.
See notes in SafeArea.cs and read our article online for a full breakdown of how the Safe Area works.
If you have a suggestion or request for a simluated device to be added to the list, please let us know in the Unity forums.
If this asset helped you, please rate us on the Asset Store!
fileFormatVersion: 2
guid: 1c5d0ac416e6c7847bc6fc71a0c41f8b
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2 fileFormatVersion: 2
guid: 5846b5bb2b526d74c83c795f9ab0487c guid: a6e5e67a77ff0402b907d9f025feb0f8
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
......
using UnityEngine;
namespace Crystal
{
/// <summary>
/// Safe area implementation for notched mobile devices. Usage:
/// (1) Add this component to the top level of any GUI panel.
/// (2) If the panel uses a full screen background image, then create an immediate child and put the component on that instead, with all other elements childed below it.
/// This will allow the background image to stretch to the full extents of the screen behind the notch, which looks nicer.
/// (3) For other cases that use a mixture of full horizontal and vertical background stripes, use the Conform X & Y controls on separate elements as needed.
/// </summary>
public class SafeArea : MonoBehaviour
{
#region Simulations
/// <summary>
/// Simulation device that uses safe area due to a physical notch or software home bar. For use in Editor only.
/// </summary>
public enum SimDevice
{
/// <summary>
/// Don't use a simulated safe area - GUI will be full screen as normal.
/// </summary>
None,
/// <summary>
/// Simulate the iPhone X and Xs (identical safe areas).
/// </summary>
iPhoneX,
/// <summary>
/// Simulate the iPhone Xs Max and XR (identical safe areas).
/// </summary>
iPhoneXsMax,
/// <summary>
/// Simulate the Google Pixel 3 XL using landscape left.
/// </summary>
Pixel3XL_LSL,
/// <summary>
/// Simulate the Google Pixel 3 XL using landscape right.
/// </summary>
Pixel3XL_LSR
}
/// <summary>
/// Simulation mode for use in editor only. This can be edited at runtime to toggle between different safe areas.
/// </summary>
public static SimDevice Sim = SimDevice.None;
/// <summary>
/// Normalised safe areas for iPhone X with Home indicator (ratios are identical to Xs, 11 Pro). Absolute values:
/// PortraitU x=0, y=102, w=1125, h=2202 on full extents w=1125, h=2436;
/// PortraitD x=0, y=102, w=1125, h=2202 on full extents w=1125, h=2436 (not supported, remains in Portrait Up);
/// LandscapeL x=132, y=63, w=2172, h=1062 on full extents w=2436, h=1125;
/// LandscapeR x=132, y=63, w=2172, h=1062 on full extents w=2436, h=1125.
/// Aspect Ratio: ~19.5:9.
/// </summary>
Rect[] NSA_iPhoneX = new Rect[]
{
new Rect (0f, 102f / 2436f, 1f, 2202f / 2436f), // Portrait
new Rect (132f / 2436f, 63f / 1125f, 2172f / 2436f, 1062f / 1125f) // Landscape
};
/// <summary>
/// Normalised safe areas for iPhone Xs Max with Home indicator (ratios are identical to XR, 11, 11 Pro Max). Absolute values:
/// PortraitU x=0, y=102, w=1242, h=2454 on full extents w=1242, h=2688;
/// PortraitD x=0, y=102, w=1242, h=2454 on full extents w=1242, h=2688 (not supported, remains in Portrait Up);
/// LandscapeL x=132, y=63, w=2424, h=1179 on full extents w=2688, h=1242;
/// LandscapeR x=132, y=63, w=2424, h=1179 on full extents w=2688, h=1242.
/// Aspect Ratio: ~19.5:9.
/// </summary>
Rect[] NSA_iPhoneXsMax = new Rect[]
{
new Rect (0f, 102f / 2688f, 1f, 2454f / 2688f), // Portrait
new Rect (132f / 2688f, 63f / 1242f, 2424f / 2688f, 1179f / 1242f) // Landscape
};
/// <summary>
/// Normalised safe areas for Pixel 3 XL using landscape left. Absolute values:
/// PortraitU x=0, y=0, w=1440, h=2789 on full extents w=1440, h=2960;
/// PortraitD x=0, y=0, w=1440, h=2789 on full extents w=1440, h=2960;
/// LandscapeL x=171, y=0, w=2789, h=1440 on full extents w=2960, h=1440;
/// LandscapeR x=0, y=0, w=2789, h=1440 on full extents w=2960, h=1440.
/// Aspect Ratio: 18.5:9.
/// </summary>
Rect[] NSA_Pixel3XL_LSL = new Rect[]
{
new Rect (0f, 0f, 1f, 2789f / 2960f), // Portrait
new Rect (0f, 0f, 2789f / 2960f, 1f) // Landscape
};
/// <summary>
/// Normalised safe areas for Pixel 3 XL using landscape right. Absolute values and aspect ratio same as above.
/// </summary>
Rect[] NSA_Pixel3XL_LSR = new Rect[]
{
new Rect (0f, 0f, 1f, 2789f / 2960f), // Portrait
new Rect (171f / 2960f, 0f, 2789f / 2960f, 1f) // Landscape
};
#endregion
RectTransform Panel;
Rect LastSafeArea = new Rect (0, 0, 0, 0);
Vector2Int LastScreenSize = new Vector2Int (0, 0);
ScreenOrientation LastOrientation = ScreenOrientation.AutoRotation;
[SerializeField] bool ConformX = true; // Conform to screen safe area on X-axis (default true, disable to ignore)
[SerializeField] bool ConformY = true; // Conform to screen safe area on Y-axis (default true, disable to ignore)
[SerializeField] bool Logging = false; // Conform to screen safe area on Y-axis (default true, disable to ignore)
void Awake ()
{
Panel = GetComponent<RectTransform> ();
if (Panel == null)
{
Debug.LogError ("Cannot apply safe area - no RectTransform found on " + name);
Destroy (gameObject);
}
Refresh ();
}
void Update ()
{
Refresh ();
}
void Refresh ()
{
Rect safeArea = GetSafeArea ();
if (safeArea != LastSafeArea
|| Screen.width != LastScreenSize.x
|| Screen.height != LastScreenSize.y
|| Screen.orientation != LastOrientation)
{
// Fix for having auto-rotate off and manually forcing a screen orientation.
// See https://forum.unity.com/threads/569236/#post-4473253 and https://forum.unity.com/threads/569236/page-2#post-5166467
LastScreenSize.x = Screen.width;
LastScreenSize.y = Screen.height;
LastOrientation = Screen.orientation;
ApplySafeArea (safeArea);
}
}
Rect GetSafeArea ()
{
Rect safeArea = Screen.safeArea;
if (Application.isEditor && Sim != SimDevice.None)
{
Rect nsa = new Rect (0, 0, Screen.width, Screen.height);
switch (Sim)
{
case SimDevice.iPhoneX:
if (Screen.height > Screen.width) // Portrait
nsa = NSA_iPhoneX[0];
else // Landscape
nsa = NSA_iPhoneX[1];
break;
case SimDevice.iPhoneXsMax:
if (Screen.height > Screen.width) // Portrait
nsa = NSA_iPhoneXsMax[0];
else // Landscape
nsa = NSA_iPhoneXsMax[1];
break;
case SimDevice.Pixel3XL_LSL:
if (Screen.height > Screen.width) // Portrait
nsa = NSA_Pixel3XL_LSL[0];
else // Landscape
nsa = NSA_Pixel3XL_LSL[1];
break;
case SimDevice.Pixel3XL_LSR:
if (Screen.height > Screen.width) // Portrait
nsa = NSA_Pixel3XL_LSR[0];
else // Landscape
nsa = NSA_Pixel3XL_LSR[1];
break;
default:
break;
}
safeArea = new Rect (Screen.width * nsa.x, Screen.height * nsa.y, Screen.width * nsa.width, Screen.height * nsa.height);
}
return safeArea;
}
void ApplySafeArea (Rect r)
{
LastSafeArea = r;
// Ignore x-axis?
if (!ConformX)
{
r.x = 0;
r.width = Screen.width;
}
// Ignore y-axis?
if (!ConformY)
{
r.y = 0;
r.height = Screen.height;
}
// Check for invalid screen startup state on some Samsung devices (see below)
if (Screen.width > 0 && Screen.height > 0)
{
// Convert safe area rectangle from absolute pixels to normalised anchor coordinates
Vector2 anchorMin = r.position;
Vector2 anchorMax = r.position + r.size;
anchorMin.x /= Screen.width;
anchorMin.y /= Screen.height;
anchorMax.x /= Screen.width;
anchorMax.y /= Screen.height;
// Fix for some Samsung devices (e.g. Note 10+, A71, S20) where Refresh gets called twice and the first time returns NaN anchor coordinates
// See https://forum.unity.com/threads/569236/page-2#post-6199352
if (anchorMin.x >= 0 && anchorMin.y >= 0 && anchorMax.x >= 0 && anchorMax.y >= 0)
{
Panel.anchorMin = anchorMin;
Panel.anchorMax = anchorMax;
}
}
if (Logging)
{
Debug.LogFormat ("New safe area applied to {0}: x={1}, y={2}, w={3}, h={4} on full extents w={5}, h={6}",
name, r.x, r.y, r.width, r.height, Screen.width, Screen.height);
}
}
}
}
fileFormatVersion: 2
guid: c97afc556caea1c44969477eb7ddec74
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
This diff is collapsed.
fileFormatVersion: 2
guid: 43e43e25d06a0c640a6fb8d7e4beca4e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2 fileFormatVersion: 2
guid: 4776e10b4c7f8454d8f294ae9476381d guid: 6a30a4578cddd424fa473c03ec4c51de
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
......
...@@ -12,6 +12,6 @@ MonoBehaviour: ...@@ -12,6 +12,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a187246822bbb47529482707f3e0eff8, type: 3} m_Script: {fileID: 11500000, guid: a187246822bbb47529482707f3e0eff8, type: 3}
m_Name: GoogleMobileAdsSettings m_Name: GoogleMobileAdsSettings
m_EditorClassIdentifier: m_EditorClassIdentifier:
adMobAndroidAppId: ca-app-pub-9085952480111777~7996189377 adMobAndroidAppId:
adMobIOSAppId: adMobIOSAppId:
delayAppMeasurementInit: 0 delayAppMeasurementInit: 0
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>73219361853-4lg03g9mpd7oh3r8rium2h53hu68em1f.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.73219361853-4lg03g9mpd7oh3r8rium2h53hu68em1f</string>
<key>API_KEY</key>
<string>AIzaSyDnQFABHd_ytoIJ1adfPW4RYGVsRJ0x9gM</string>
<key>GCM_SENDER_ID</key>
<string>73219361853</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>negaxy.galaxypuzzle.galazysmash</string>
<key>PROJECT_ID</key>
<string>galaxy-smash</string>
<key>STORAGE_BUCKET</key>
<string>galaxy-smash.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:73219361853:ios:4e900251594ad3e292ae54</string>
</dict>
</plist>
\ No newline at end of file
fileFormatVersion: 2 fileFormatVersion: 2
guid: 0545315f4e3d2ca4e8dee1c7743990bc guid: 98899e24163bd43c7be065ac83c3d082
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}
userData: userData:
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<dependencies> <dependencies>
<androidPackages> <androidPackages>
<androidPackage spec="com.applovin:applovin-sdk:10.3.1" /> <androidPackage spec="com.applovin:applovin-sdk:10.3.5" />
<androidPackage spec="com.google.android.gms:play-services-ads-identifier:16.0.0" /> <androidPackage spec="com.google.android.gms:play-services-ads-identifier:16.0.0" />
<androidPackage spec="com.google.android.exoplayer:exoplayer:2.13.3" /> <androidPackage spec="com.google.android.exoplayer:exoplayer:2.13.3" />
</androidPackages> </androidPackages>
<iosPods> <iosPods>
<iosPod name="AppLovinSDK" version="10.3.2" /> <iosPod name="AppLovinSDK" version="10.3.7" />
</iosPods> </iosPods>
</dependencies> </dependencies>
fileFormatVersion: 2
guid: 1db980bd612824d2097f78fd779e6051
labels:
- al_max
- al_max_export_path-MaxSdk/AppLovin/Plugins/Android/applovin-max-unity-plugin.aar
- al_max_export_path-MaxSdk\AppLovin\Plugins\Android\applovin-max-unity-plugin.aar
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:
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
#import "MAUnityAdManager.h" #import "MAUnityAdManager.h"
#define VERSION @"4.3.1" #define VERSION @"4.3.12"
#define KEY_WINDOW [UIApplication sharedApplication].keyWindow #define KEY_WINDOW [UIApplication sharedApplication].keyWindow
#define DEVICE_SPECIFIC_ADVIEW_AD_FORMAT ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) ? MAAdFormat.leader : MAAdFormat.banner #define DEVICE_SPECIFIC_ADVIEW_AD_FORMAT ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) ? MAAdFormat.leader : MAAdFormat.banner
...@@ -15,6 +15,11 @@ ...@@ -15,6 +15,11 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
// UnityAppController.mm
UIViewController* UnityGetGLViewController(void);
UIWindow* UnityGetMainWindow(void);
// life cycle management // life cycle management
void UnityPause(int pause); void UnityPause(int pause);
void UnitySendMessage(const char* obj, const char* method, const char* msg); void UnitySendMessage(const char* obj, const char* method, const char* msg);
...@@ -133,7 +138,7 @@ static NSString *ALSerializeKeyValuePairSeparator; ...@@ -133,7 +138,7 @@ static NSString *ALSerializeKeyValuePairSeparator;
self.safeAreaBackground.translatesAutoresizingMaskIntoConstraints = NO; self.safeAreaBackground.translatesAutoresizingMaskIntoConstraints = NO;
self.safeAreaBackground.userInteractionEnabled = NO; self.safeAreaBackground.userInteractionEnabled = NO;
UIViewController *rootViewController = [MAUnityAdManager unityViewController]; UIViewController *rootViewController = [self unityViewController];
[rootViewController.view addSubview: self.safeAreaBackground]; [rootViewController.view addSubview: self.safeAreaBackground];
}); });
...@@ -452,6 +457,7 @@ static NSString *ALSerializeKeyValuePairSeparator; ...@@ -452,6 +457,7 @@ static NSString *ALSerializeKeyValuePairSeparator;
{ {
return @{@"adUnitId" : ad.adUnitIdentifier, return @{@"adUnitId" : ad.adUnitIdentifier,
@"networkName" : ad.networkName, @"networkName" : ad.networkName,
@"networkPlacement" : ad.networkPlacement,
@"creativeId" : ad.creativeIdentifier ?: @"", @"creativeId" : ad.creativeIdentifier ?: @"",
@"placement" : ad.placement ?: @"", @"placement" : ad.placement ?: @"",
@"revenue" : [@(ad.revenue) stringValue]}; @"revenue" : [@(ad.revenue) stringValue]};
...@@ -1005,9 +1011,9 @@ static NSString *ALSerializeKeyValuePairSeparator; ...@@ -1005,9 +1011,9 @@ static NSString *ALSerializeKeyValuePairSeparator;
// Check edge case where ad may be detatched from view controller // Check edge case where ad may be detatched from view controller
if ( !view.window.rootViewController ) if ( !view.window.rootViewController )
{ {
[self log: @"%@ missing view controller - re-attaching to %@...", adFormat, [MAUnityAdManager unityViewController]]; [self log: @"%@ missing view controller - re-attaching to %@...", adFormat, [self unityViewController]];
UIViewController *rootViewController = [MAUnityAdManager unityViewController]; UIViewController *rootViewController = [self unityViewController];
[rootViewController.view addSubview: view]; [rootViewController.view addSubview: view];
[self positionAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat]; [self positionAdViewForAdUnitIdentifier: adUnitIdentifier adFormat: adFormat];
...@@ -1158,7 +1164,7 @@ static NSString *ALSerializeKeyValuePairSeparator; ...@@ -1158,7 +1164,7 @@ static NSString *ALSerializeKeyValuePairSeparator;
self.adViewPositions[adUnitIdentifier] = adViewPosition; self.adViewPositions[adUnitIdentifier] = adViewPosition;
self.adViewOffsets[adUnitIdentifier] = [NSValue valueWithCGPoint: offset]; self.adViewOffsets[adUnitIdentifier] = [NSValue valueWithCGPoint: offset];
UIViewController *rootViewController = [MAUnityAdManager unityViewController]; UIViewController *rootViewController = [self unityViewController];
[rootViewController.view addSubview: result]; [rootViewController.view addSubview: result];
} }
...@@ -1479,9 +1485,10 @@ static NSString *ALSerializeKeyValuePairSeparator; ...@@ -1479,9 +1485,10 @@ static NSString *ALSerializeKeyValuePairSeparator;
}); });
} }
+ (UIViewController *)unityViewController - (UIViewController *)unityViewController
{ {
return [KEY_WINDOW rootViewController]; // Handle edge case where `UnityGetGLViewController()` returns nil
return UnityGetGLViewController() ?: UnityGetMainWindow().rootViewController ?: [KEY_WINDOW rootViewController];
} }
+ (void)forwardUnityEventWithArgs:(NSDictionary<NSString *, NSString *> *)args + (void)forwardUnityEventWithArgs:(NSDictionary<NSString *, NSString *> *)args
......
...@@ -8,7 +8,11 @@ ...@@ -8,7 +8,11 @@
#import "MAUnityAdManager.h" #import "MAUnityAdManager.h"
#define NSSTRING(_X) ( (_X != NULL) ? [NSString stringWithCString: _X encoding: NSStringEncodingConversionAllowLossy] : nil) #define NSSTRING(_X) ( (_X != NULL) ? [NSString stringWithCString: _X encoding: NSStringEncodingConversionAllowLossy].al_stringByTrimmingWhitespace : nil)
@interface NSString (ALUtils)
@property (nonatomic, copy, readonly) NSString *al_stringByTrimmingWhitespace;
@end
UIView* UnityGetGLView(); UIView* UnityGetGLView();
...@@ -559,7 +563,7 @@ extern "C" ...@@ -559,7 +563,7 @@ extern "C"
float _MaxScreenDensity() float _MaxScreenDensity()
{ {
return [UIScreen.mainScreen scale]; return [UIScreen.mainScreen nativeScale];
} }
const char * _MaxGetAdInfo(const char *adUnitIdentifier) const char * _MaxGetAdInfo(const char *adUnitIdentifier)
......
...@@ -2,6 +2,7 @@ fileFormatVersion: 2 ...@@ -2,6 +2,7 @@ fileFormatVersion: 2
guid: 91403944b5f324e2e97449216ed04dbb guid: 91403944b5f324e2e97449216ed04dbb
labels: labels:
- al_max - al_max
- al_max_export_path-MaxSdk/Mediation/AdColony
- al_max_export_path-MaxSdk\Mediation\AdColony - al_max_export_path-MaxSdk\Mediation\AdColony
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
......
...@@ -2,6 +2,7 @@ fileFormatVersion: 2 ...@@ -2,6 +2,7 @@ fileFormatVersion: 2
guid: c44d4f0f178014127a271c8dbcbeffe5 guid: c44d4f0f178014127a271c8dbcbeffe5
labels: labels:
- al_max - al_max
- al_max_export_path-MaxSdk/Mediation/Facebook
- al_max_export_path-MaxSdk\Mediation\Facebook - al_max_export_path-MaxSdk\Mediation\Facebook
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
......
...@@ -2,6 +2,7 @@ fileFormatVersion: 2 ...@@ -2,6 +2,7 @@ fileFormatVersion: 2
guid: bd173679e095e434cba0d7d8261166e5 guid: bd173679e095e434cba0d7d8261166e5
labels: labels:
- al_max - al_max
- al_max_export_path-MaxSdk/Mediation/Google
- al_max_export_path-MaxSdk\Mediation\Google - al_max_export_path-MaxSdk\Mediation\Google
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
......
...@@ -2,6 +2,7 @@ fileFormatVersion: 2 ...@@ -2,6 +2,7 @@ fileFormatVersion: 2
guid: cab786f5f9cf6472193f9b0e0efc04ef guid: cab786f5f9cf6472193f9b0e0efc04ef
labels: labels:
- al_max - al_max
- al_max_export_path-MaxSdk/Mediation/Mintegral
- al_max_export_path-MaxSdk\Mediation\Mintegral - al_max_export_path-MaxSdk\Mediation\Mintegral
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
......
...@@ -27,4 +27,4 @@ MonoBehaviour: ...@@ -27,4 +27,4 @@ MonoBehaviour:
userTrackingUsageDescriptionZhHans: userTrackingUsageDescriptionZhHans:
userTrackingUsageDescriptionZhHant: userTrackingUsageDescriptionZhHant:
adMobAndroidAppId: ca-app-pub-9085952480111777~7996189377 adMobAndroidAppId: ca-app-pub-9085952480111777~7996189377
adMobIosAppId: adMobIosAppId: ca-app-pub-6409857233709298~1447952690
...@@ -2,6 +2,7 @@ fileFormatVersion: 2 ...@@ -2,6 +2,7 @@ fileFormatVersion: 2
guid: 6d98bc5e71785304b93e910618f3840f guid: 6d98bc5e71785304b93e910618f3840f
labels: labels:
- al_max - al_max
- al_max_export_path-MaxSdk/Resources/AppLovinSettings.asset
- al_max_export_path-MaxSdk\Resources\AppLovinSettings.asset - al_max_export_path-MaxSdk\Resources\AppLovinSettings.asset
NativeFormatImporter: NativeFormatImporter:
externalObjects: {} externalObjects: {}
......
...@@ -36,6 +36,9 @@ namespace AppLovinMax.Scripts.Editor ...@@ -36,6 +36,9 @@ namespace AppLovinMax.Scripts.Editor
private const string UnityMainTargetName = "Unity-iPhone"; private const string UnityMainTargetName = "Unity-iPhone";
#endif #endif
private const string TargetUnityIphonePodfileLine = "target 'Unity-iPhone' do"; private const string TargetUnityIphonePodfileLine = "target 'Unity-iPhone' do";
private const string LegacyResourcesDirectoryName = "Resources";
private const string AppLovinMaxResourcesDirectoryName = "AppLovinMAXResources";
private const string AppLovinAdvertisingAttributionEndpoint = "https://postbacks-app.com";
private static readonly List<string> AtsRequiringNetworks = new List<string> private static readonly List<string> AtsRequiringNetworks = new List<string>
{ {
...@@ -56,6 +59,8 @@ namespace AppLovinMax.Scripts.Editor ...@@ -56,6 +59,8 @@ namespace AppLovinMax.Scripts.Editor
{ {
var dynamicLibraryPathsToEmbed = new List<string>(2); var dynamicLibraryPathsToEmbed = new List<string>(2);
dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "HyprMX/HyprMX.xcframework")); dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "HyprMX/HyprMX.xcframework"));
dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "smaato-ios-sdk/vendor/OMSDK_Smaato.xcframework"));
dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "FBSDKCoreKit_Basics/XCFrameworks/FBSDKCoreKit_Basics.xcframework"));
if (ShouldEmbedSnapSdk()) if (ShouldEmbedSnapSdk())
{ {
dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "SAKSDK/SAKSDK.framework")); dynamicLibraryPathsToEmbed.Add(Path.Combine("Pods/", "SAKSDK/SAKSDK.framework"));
...@@ -122,14 +127,14 @@ namespace AppLovinMax.Scripts.Editor ...@@ -122,14 +127,14 @@ namespace AppLovinMax.Scripts.Editor
if (dynamicLibraryPathsPresentInProject.Count <= 0) return; if (dynamicLibraryPathsPresentInProject.Count <= 0) return;
#if UNITY_2019_3_OR_NEWER #if UNITY_2019_3_OR_NEWER
var containsUnityIphoneTargetInPodfile = ContainsUnityIphoneTargetInPodfile(buildPath); // Embed framework only if the podfile does not contain target `Unity-iPhone`.
// Embed framework if it is .xcframework or is .framework and the podfile does not contain target `Unity-iPhone`. if (!ContainsUnityIphoneTargetInPodfile(buildPath))
foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject)
{ {
if (dynamicLibraryPath.EndsWith(".framework") && containsUnityIphoneTargetInPodfile) continue; foreach (var dynamicLibraryPath in dynamicLibraryPathsPresentInProject)
{
var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath); var fileGuid = project.AddFile(dynamicLibraryPath, dynamicLibraryPath);
project.AddFileToEmbedFrameworks(targetGuid, fileGuid); project.AddFileToEmbedFrameworks(targetGuid, fileGuid);
}
} }
#else #else
string runpathSearchPaths; string runpathSearchPaths;
...@@ -156,7 +161,8 @@ namespace AppLovinMax.Scripts.Editor ...@@ -156,7 +161,8 @@ namespace AppLovinMax.Scripts.Editor
private static void LocalizeUserTrackingDescriptionIfNeeded(string localizedUserTrackingDescription, string localeCode, string buildPath, PBXProject project, string targetGuid) private static void LocalizeUserTrackingDescriptionIfNeeded(string localizedUserTrackingDescription, string localeCode, string buildPath, PBXProject project, string targetGuid)
{ {
const string resourcesDirectoryName = "Resources"; // Use the legacy resources directory name if the build is being appended (the "Resources" directory already exists if it is an incremental build).
var resourcesDirectoryName = Directory.Exists(Path.Combine(buildPath, LegacyResourcesDirectoryName)) ? LegacyResourcesDirectoryName : AppLovinMaxResourcesDirectoryName;
var resourcesDirectoryPath = Path.Combine(buildPath, resourcesDirectoryName); var resourcesDirectoryPath = Path.Combine(buildPath, resourcesDirectoryName);
var localeSpecificDirectoryName = localeCode + ".lproj"; var localeSpecificDirectoryName = localeCode + ".lproj";
var localeSpecificDirectoryPath = Path.Combine(resourcesDirectoryPath, localeSpecificDirectoryName); var localeSpecificDirectoryPath = Path.Combine(resourcesDirectoryPath, localeSpecificDirectoryName);
...@@ -294,16 +300,38 @@ namespace AppLovinMax.Scripts.Editor ...@@ -294,16 +300,38 @@ namespace AppLovinMax.Scripts.Editor
var plist = new PlistDocument(); var plist = new PlistDocument();
plist.ReadFromFile(plistPath); plist.ReadFromFile(plistPath);
SetAttributionReportEndpointIfNeeded(plist);
#if UNITY_2018_2_OR_NEWER #if UNITY_2018_2_OR_NEWER
EnableVerboseLoggingIfNeeded(plist); EnableVerboseLoggingIfNeeded(plist);
#endif #endif
EnableConsentFlowIfNeeded(plist, path); EnableConsentFlowIfNeeded(plist);
AddSkAdNetworksInfoIfNeeded(plist); AddSkAdNetworksInfoIfNeeded(plist);
UpdateAppTransportSecuritySettingsIfNeeded(plist); UpdateAppTransportSecuritySettingsIfNeeded(plist);
AddSnapAppStoreAppIdIfNeeded(plist);
plist.WriteToFile(plistPath); plist.WriteToFile(plistPath);
} }
private static void SetAttributionReportEndpointIfNeeded(PlistDocument plist)
{
if (AppLovinSettings.Instance.SetAttributionReportEndpoint)
{
plist.root.SetString("NSAdvertisingAttributionReportEndpoint", AppLovinAdvertisingAttributionEndpoint);
}
else
{
PlistElement attributionReportEndPoint;
plist.root.values.TryGetValue("NSAdvertisingAttributionReportEndpoint", out attributionReportEndPoint);
// Check if we had previously set the attribution endpoint and un-set it.
if (attributionReportEndPoint != null && AppLovinAdvertisingAttributionEndpoint.Equals(attributionReportEndPoint.AsString()))
{
plist.root.values.Remove("NSAdvertisingAttributionReportEndpoint");
}
}
}
#if UNITY_2018_2_OR_NEWER #if UNITY_2018_2_OR_NEWER
private static void EnableVerboseLoggingIfNeeded(PlistDocument plist) private static void EnableVerboseLoggingIfNeeded(PlistDocument plist)
{ {
...@@ -322,7 +350,7 @@ namespace AppLovinMax.Scripts.Editor ...@@ -322,7 +350,7 @@ namespace AppLovinMax.Scripts.Editor
} }
#endif #endif
private static void EnableConsentFlowIfNeeded(PlistDocument plist, string buildPath) private static void EnableConsentFlowIfNeeded(PlistDocument plist)
{ {
// Check if consent flow is enabled. No need to update info.plist if consent flow is disabled. // Check if consent flow is enabled. No need to update info.plist if consent flow is disabled.
var consentFlowEnabled = AppLovinSettings.Instance.ConsentFlowEnabled; var consentFlowEnabled = AppLovinSettings.Instance.ConsentFlowEnabled;
...@@ -488,6 +516,25 @@ namespace AppLovinMax.Scripts.Editor ...@@ -488,6 +516,25 @@ namespace AppLovinMax.Scripts.Editor
} }
} }
private static void AddSnapAppStoreAppIdIfNeeded(PlistDocument plist)
{
var snapDependencyPath = Path.Combine(PluginMediationDirectory, "Snap/Editor/Dependencies.xml");
if (!File.Exists(snapDependencyPath)) return;
// App Store App ID is only needed for iOS versions 2.0.0.0 or newer.
var currentVersion = AppLovinIntegrationManager.GetCurrentVersions(snapDependencyPath);
var iosVersionComparison = MaxSdkUtils.CompareVersions(currentVersion.Ios, AppLovinSettings.SnapAppStoreAppIdMinVersion);
if (iosVersionComparison == MaxSdkUtils.VersionComparisonResult.Lesser) return;
if (AppLovinSettings.Instance.SnapAppStoreAppId <= 0)
{
MaxSdkLogger.UserError("Snap App Store App ID is not set. Please enter a valid App ID within the AppLovin Integration Manager window.");
return;
}
plist.root.SetInteger("SCAppStoreAppID", AppLovinSettings.Instance.SnapAppStoreAppId);
}
private static bool ShouldEmbedSnapSdk() private static bool ShouldEmbedSnapSdk()
{ {
var snapDependencyPath = Path.Combine(PluginMediationDirectory, "Snap/Editor/Dependencies.xml"); var snapDependencyPath = Path.Combine(PluginMediationDirectory, "Snap/Editor/Dependencies.xml");
......
...@@ -121,6 +121,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -121,6 +121,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
public static readonly string GradleTemplatePath = Path.Combine("Assets/Plugins/Android", "mainTemplate.gradle"); public static readonly string GradleTemplatePath = Path.Combine("Assets/Plugins/Android", "mainTemplate.gradle");
public static readonly string DefaultPluginExportPath = Path.Combine("Assets", "MaxSdk"); public static readonly string DefaultPluginExportPath = Path.Combine("Assets", "MaxSdk");
private const string DefaultMaxSdkAssetExportPath = "MaxSdk/Scripts/MaxSdk.cs";
private static readonly string MaxSdkAssetExportPath = Path.Combine("MaxSdk", "Scripts/MaxSdk.cs"); private static readonly string MaxSdkAssetExportPath = Path.Combine("MaxSdk", "Scripts/MaxSdk.cs");
/// <summary> /// <summary>
...@@ -159,7 +160,22 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -159,7 +160,22 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
/// </summary> /// </summary>
public static string PluginParentDirectory public static string PluginParentDirectory
{ {
get { return MaxSdkUtils.GetAssetPathForExportPath(MaxSdkAssetExportPath).Replace(MaxSdkAssetExportPath, ""); } get
{
// Search for the asset with the default exported path first, In most cases, we should be able to find the asset.
// In some cases where we don't, use the platform specific export path to search for the asset (in case of migrating a project from Windows to Mac or vice versa).
var maxSdkScriptAssetPath = MaxSdkUtils.GetAssetPathForExportPath(DefaultMaxSdkAssetExportPath);
if (File.Exists(maxSdkScriptAssetPath))
{
// maxSdkScriptAssetPath will always have AltDirectorySeparatorChar (/) as the path separator. Convert to platform specific path.
return maxSdkScriptAssetPath.Replace(DefaultMaxSdkAssetExportPath, "")
.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
}
// We should never reach this line but leaving this in out of paranoia.
return MaxSdkUtils.GetAssetPathForExportPath(MaxSdkAssetExportPath).Replace(MaxSdkAssetExportPath, "")
.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
}
} }
/// <summary> /// <summary>
...@@ -773,7 +789,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -773,7 +789,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
private static string GetPluginFileName(Network network) private static string GetPluginFileName(Network network)
{ {
return network.Name.ToLower() + "_" + network.LatestVersions.Unity + ".unitypackage"; return network.Name.ToLowerInvariant() + "_" + network.LatestVersions.Unity + ".unitypackage";
} }
#endregion #endregion
......
...@@ -185,23 +185,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -185,23 +185,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
GUILayout.Space(5); GUILayout.Space(5);
// Draw AppLovin MAX plugin details // Draw AppLovin MAX plugin details
GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("AppLovin MAX Plugin Details", titleLabelStyle);
EditorGUILayout.LabelField("AppLovin MAX Plugin Details", titleLabelStyle, GUILayout.Width(220f)); // Seems like LabelField has an arbitrarily fixed width set by default. Need to set it to the preferred width (arrived at by trail & error) for the text to not be cut off (https://docs.unity3d.com/ScriptReference/EditorGUIUtility-labelWidth.html)
GUILayout.FlexibleSpace();
var autoUpdateEnabled = GUILayout.Toggle(EditorPrefs.GetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, true), " Enable Auto Update");
EditorPrefs.SetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, autoUpdateEnabled);
GUILayout.Space(10);
#if UNITY_2018_2_OR_NEWER
const string verboseLoggingText = " Enable Verbose Logging";
#else
const string verboseLoggingText = " Enable Build Verbose Logging";
#endif
var verboseLoggingEnabled = GUILayout.Toggle(EditorPrefs.GetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, false), verboseLoggingText);
EditorPrefs.SetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, verboseLoggingEnabled);
GUILayout.Space(10);
GUILayout.EndHorizontal();
DrawPluginDetails(); DrawPluginDetails();
...@@ -216,6 +200,9 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -216,6 +200,9 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
EditorGUILayout.LabelField("Privacy Settings", titleLabelStyle); EditorGUILayout.LabelField("Privacy Settings", titleLabelStyle);
DrawPrivacySettings(); DrawPrivacySettings();
EditorGUILayout.LabelField("Other Settings", titleLabelStyle);
DrawOtherSettings();
// Draw Unity environment details // Draw Unity environment details
EditorGUILayout.LabelField("Unity Environment Details", titleLabelStyle); EditorGUILayout.LabelField("Unity Environment Details", titleLabelStyle);
DrawUnityEnvironmentDetails(); DrawUnityEnvironmentDetails();
...@@ -492,39 +479,63 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -492,39 +479,63 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
GUILayout.Space(5); GUILayout.Space(5);
} }
// Custom integration for AdMob where the user can enter the Android and iOS App IDs. if (isInstalled)
if (network.Name.Equals("ADMOB_NETWORK") && isInstalled)
{ {
// Custom integration requires Google AdMob adapter version newer than android_19.0.1.0_ios_7.57.0.0. // Custom integration for AdMob where the user can enter the Android and iOS App IDs.
if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, "android_19.0.1.0_ios_7.57.0.0") == VersionComparisonResult.Greater) if (network.Name.Equals("ADMOB_NETWORK"))
{ {
GUILayout.BeginHorizontal(); // Custom integration requires Google AdMob adapter version newer than android_19.0.1.0_ios_7.57.0.0.
GUILayout.Space(20); if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, "android_19.0.1.0_ios_7.57.0.0") == VersionComparisonResult.Greater)
using (new EditorGUILayout.VerticalScope("box"))
{ {
string requiredVersion; GUILayout.BeginHorizontal();
string warningMessage; GUILayout.Space(20);
if (isPluginMoved) using (new EditorGUILayout.VerticalScope("box"))
{
requiredVersion = "android_19.6.0.1_ios_7.69.0.0";
warningMessage = "Looks like the MAX plugin has been moved to a different directory. This requires Google adapter version newer than " + requiredVersion + " for auto-export of AdMob App ID to work correctly.";
}
else
{ {
requiredVersion = "android_19.2.0.0_ios_7.61.0.0"; string requiredVersion;
warningMessage = "The current version of AppLovin MAX plugin requires Google adapter version newer than " + requiredVersion + " to enable auto-export of AdMob App ID."; string warningMessage;
if (isPluginMoved)
{
requiredVersion = "android_19.6.0.1_ios_7.69.0.0";
warningMessage = "Looks like the MAX plugin has been moved to a different directory. This requires Google adapter version newer than " + requiredVersion + " for auto-export of AdMob App ID to work correctly.";
}
else
{
requiredVersion = "android_19.2.0.0_ios_7.61.0.0";
warningMessage = "The current version of AppLovin MAX plugin requires Google adapter version newer than " + requiredVersion + " to enable auto-export of AdMob App ID.";
}
GUILayout.Space(2);
if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, requiredVersion) == VersionComparisonResult.Greater)
{
AppLovinSettings.Instance.AdMobAndroidAppId = DrawTextField("App ID (Android)", AppLovinSettings.Instance.AdMobAndroidAppId, networkWidthOption);
AppLovinSettings.Instance.AdMobIosAppId = DrawTextField("App ID (iOS)", AppLovinSettings.Instance.AdMobIosAppId, networkWidthOption);
}
else
{
EditorGUILayout.HelpBox(warningMessage, MessageType.Warning);
}
} }
GUILayout.EndHorizontal();
}
}
// Snap requires SCAppStoreAppID to be set starting adapter version 2.0.0.0 or newer. Show a text field for the publisher to input the App ID.
else if (network.Name.Equals("SNAP_NETWORK") &&
MaxSdkUtils.CompareVersions(network.CurrentVersions.Ios, AppLovinSettings.SnapAppStoreAppIdMinVersion) != VersionComparisonResult.Lesser)
{
GUILayout.BeginHorizontal();
GUILayout.Space(20);
using (new EditorGUILayout.VerticalScope("box"))
{
GUILayout.Space(2);
GUILayout.BeginHorizontal();
GUILayout.Space(4);
EditorGUILayout.LabelField(new GUIContent("App Store App ID (iOS)"), networkWidthOption);
GUILayout.Space(4);
AppLovinSettings.Instance.SnapAppStoreAppId = EditorGUILayout.IntField(AppLovinSettings.Instance.SnapAppStoreAppId);
GUILayout.Space(4);
GUILayout.EndHorizontal();
GUILayout.Space(2); GUILayout.Space(2);
if (MaxSdkUtils.CompareUnityMediationVersions(network.CurrentVersions.Unity, requiredVersion) == VersionComparisonResult.Greater)
{
AppLovinSettings.Instance.AdMobAndroidAppId = DrawTextField("App ID (Android)", AppLovinSettings.Instance.AdMobAndroidAppId, networkWidthOption);
AppLovinSettings.Instance.AdMobIosAppId = DrawTextField("App ID (iOS)", AppLovinSettings.Instance.AdMobIosAppId, networkWidthOption);
}
else
{
EditorGUILayout.HelpBox(warningMessage, MessageType.Warning);
}
} }
GUILayout.EndHorizontal(); GUILayout.EndHorizontal();
...@@ -666,6 +677,45 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -666,6 +677,45 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
GUILayout.EndHorizontal(); GUILayout.EndHorizontal();
} }
private void DrawOtherSettings()
{
GUILayout.BeginHorizontal();
GUILayout.Space(10);
using (new EditorGUILayout.VerticalScope("box"))
{
GUILayout.Space(5);
AppLovinSettings.Instance.SetAttributionReportEndpoint = DrawOtherSettingsToggle(AppLovinSettings.Instance.SetAttributionReportEndpoint, " Set Advertising Attribution Report Endpoint in Info.plist (iOS only)");
GUILayout.Space(5);
var autoUpdateEnabled = DrawOtherSettingsToggle(EditorPrefs.GetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, true), " Enable Auto Update");
EditorPrefs.SetBool(AppLovinAutoUpdater.KeyAutoUpdateEnabled, autoUpdateEnabled);
GUILayout.Space(5);
var verboseLoggingEnabled = DrawOtherSettingsToggle(EditorPrefs.GetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, false),
#if UNITY_2018_2_OR_NEWER
" Enable Verbose Logging"
#else
" Enable Build Verbose Logging"
#endif
);
EditorPrefs.SetBool(MaxSdkLogger.KeyVerboseLoggingEnabled, verboseLoggingEnabled);
GUILayout.Space(5);
}
GUILayout.Space(5);
GUILayout.EndHorizontal();
}
private bool DrawOtherSettingsToggle(bool value, string text)
{
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.Space(4);
var toggleValue = GUILayout.Toggle(value, text);
GUILayout.Space(4);
return toggleValue;
}
}
private void DrawUnityEnvironmentDetails() private void DrawUnityEnvironmentDetails()
{ {
GUILayout.BeginHorizontal(); GUILayout.BeginHorizontal();
......
...@@ -38,13 +38,14 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -38,13 +38,14 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
private const string BuildScriptMatcher = "buildscript"; private const string BuildScriptMatcher = "buildscript";
private const string QualityServiceMavenRepo = "maven { url 'https://artifacts.applovin.com/android' }"; private const string QualityServiceMavenRepo = "maven { url 'https://artifacts.applovin.com/android' }";
private const string QualityServiceDependencyClassPath = "classpath 'com.applovin.quality:AppLovinQualityServiceGradlePlugin:3.+'"; private const string QualityServiceDependencyClassPath = "classpath 'com.applovin.quality:AppLovinQualityServiceGradlePlugin:+'";
private const string QualityServiceApplyPlugin = "apply plugin: 'applovin-quality-service'"; private const string QualityServiceApplyPlugin = "apply plugin: 'applovin-quality-service'";
private const string QualityServicePlugin = "applovin {"; private const string QualityServicePlugin = "applovin {";
private const string QualityServiceApiKey = " apiKey '{0}'"; private const string QualityServiceApiKey = " apiKey '{0}'";
private const string QualityServiceBintrayMavenRepo = "https://applovin.bintray.com/Quality-Service"; private const string QualityServiceBintrayMavenRepo = "https://applovin.bintray.com/Quality-Service";
// Legacy plugin detection variables // Legacy plugin detection variables
private const string QualityServiceDependencyClassPathV3 = "classpath 'com.applovin.quality:AppLovinQualityServiceGradlePlugin:3.+'";
private static readonly Regex TokenSafeDkLegacyApplyPlugin = new Regex(".*apply plugin:.+?(?=safedk).*"); private static readonly Regex TokenSafeDkLegacyApplyPlugin = new Regex(".*apply plugin:.+?(?=safedk).*");
private const string SafeDkLegacyPlugin = "safedk {"; private const string SafeDkLegacyPlugin = "safedk {";
private const string SafeDkLegacyMavenRepo = "http://download.safedk.com"; private const string SafeDkLegacyMavenRepo = "http://download.safedk.com";
...@@ -288,6 +289,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -288,6 +289,7 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
var insideAppLovinClosure = false; var insideAppLovinClosure = false;
var updatedApiKey = false; var updatedApiKey = false;
var mavenRepoUpdated = false; var mavenRepoUpdated = false;
var dependencyClassPathUpdated = false;
foreach (var line in lines) foreach (var line in lines)
{ {
// Bintray maven repo is no longer being used. Update to s3 maven repo. // Bintray maven repo is no longer being used. Update to s3 maven repo.
...@@ -298,6 +300,14 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor ...@@ -298,6 +300,14 @@ namespace AppLovinMax.Scripts.IntegrationManager.Editor
continue; continue;
} }
// We no longer use version specific dependency class path. Just use + for version to always pull the latest.
if (!dependencyClassPathUpdated && line.Contains(QualityServiceDependencyClassPathV3))
{
outputLines.Add(GetFormattedBuildScriptLine(QualityServiceDependencyClassPath));
dependencyClassPathUpdated = true;
continue;
}
if (!pluginMatched && line.Contains(QualityServicePlugin)) if (!pluginMatched && line.Contains(QualityServicePlugin))
{ {
insideAppLovinClosure = true; insideAppLovinClosure = true;
......
...@@ -25,6 +25,7 @@ public class AppLovinSettings : ScriptableObject ...@@ -25,6 +25,7 @@ public class AppLovinSettings : ScriptableObject
public const string DefaultUserTrackingDescriptionEnV0 = "Pressing \\\"Allow\\\" uses device info for more relevant ad content"; public const string DefaultUserTrackingDescriptionEnV0 = "Pressing \\\"Allow\\\" uses device info for more relevant ad content";
public const string DefaultUserTrackingDescriptionEnV1 = "This only uses device info for less annoying, more relevant ads"; public const string DefaultUserTrackingDescriptionEnV1 = "This only uses device info for less annoying, more relevant ads";
public const string DefaultUserTrackingDescriptionEnV2 = "This only uses device info for more interesting and relevant ads";
public const string DefaultUserTrackingDescriptionDe = "\\\"Erlauben\\\" drücken benutzt Gerätinformationen für relevantere Werbeinhalte"; public const string DefaultUserTrackingDescriptionDe = "\\\"Erlauben\\\" drücken benutzt Gerätinformationen für relevantere Werbeinhalte";
public const string DefaultUserTrackingDescriptionEs = "Presionando \\\"Permitir\\\", se usa la información del dispositivo para obtener contenido publicitario más relevante"; public const string DefaultUserTrackingDescriptionEs = "Presionando \\\"Permitir\\\", se usa la información del dispositivo para obtener contenido publicitario más relevante";
...@@ -34,6 +35,8 @@ public class AppLovinSettings : ScriptableObject ...@@ -34,6 +35,8 @@ public class AppLovinSettings : ScriptableObject
public const string DefaultUserTrackingDescriptionZhHans = "点击\\\"允许\\\"以使用设备信息获得更加相关的广告内容"; public const string DefaultUserTrackingDescriptionZhHans = "点击\\\"允许\\\"以使用设备信息获得更加相关的广告内容";
public const string DefaultUserTrackingDescriptionZhHant = "點擊\\\"允許\\\"以使用設備信息獲得更加相關的廣告內容"; public const string DefaultUserTrackingDescriptionZhHant = "點擊\\\"允許\\\"以使用設備信息獲得更加相關的廣告內容";
public const string SnapAppStoreAppIdMinVersion = "2.0.0.0";
/// <summary> /// <summary>
/// A placeholder constant to be replaced with the actual default localization or an empty string based on whether or not localization is enabled when when the getter is called. /// A placeholder constant to be replaced with the actual default localization or an empty string based on whether or not localization is enabled when when the getter is called.
/// </summary> /// </summary>
...@@ -44,6 +47,8 @@ public class AppLovinSettings : ScriptableObject ...@@ -44,6 +47,8 @@ public class AppLovinSettings : ScriptableObject
[SerializeField] private bool qualityServiceEnabled = true; [SerializeField] private bool qualityServiceEnabled = true;
[SerializeField] private string sdkKey; [SerializeField] private string sdkKey;
[SerializeField] private bool setAttributionReportEndpoint;
[SerializeField] private bool consentFlowEnabled; [SerializeField] private bool consentFlowEnabled;
[SerializeField] private string consentFlowPrivacyPolicyUrl = string.Empty; [SerializeField] private string consentFlowPrivacyPolicyUrl = string.Empty;
[SerializeField] private string consentFlowTermsOfServiceUrl = string.Empty; [SerializeField] private string consentFlowTermsOfServiceUrl = string.Empty;
...@@ -60,6 +65,8 @@ public class AppLovinSettings : ScriptableObject ...@@ -60,6 +65,8 @@ public class AppLovinSettings : ScriptableObject
[SerializeField] private string adMobAndroidAppId = string.Empty; [SerializeField] private string adMobAndroidAppId = string.Empty;
[SerializeField] private string adMobIosAppId = string.Empty; [SerializeField] private string adMobIosAppId = string.Empty;
[SerializeField] private int snapAppStoreAppId;
/// <summary> /// <summary>
/// An instance of AppLovin Setting. /// An instance of AppLovin Setting.
/// </summary> /// </summary>
...@@ -123,6 +130,15 @@ public class AppLovinSettings : ScriptableObject ...@@ -123,6 +130,15 @@ public class AppLovinSettings : ScriptableObject
set { Instance.sdkKey = value; } set { Instance.sdkKey = value; }
} }
/// <summary>
/// Whether or not to set `NSAdvertisingAttributionReportEndpoint` in Info.plist.
/// </summary>
public bool SetAttributionReportEndpoint
{
get { return Instance.setAttributionReportEndpoint; }
set { Instance.setAttributionReportEndpoint = value; }
}
/// <summary> /// <summary>
/// Whether or not AppLovin Consent Flow is enabled. /// Whether or not AppLovin Consent Flow is enabled.
/// </summary> /// </summary>
...@@ -131,9 +147,10 @@ public class AppLovinSettings : ScriptableObject ...@@ -131,9 +147,10 @@ public class AppLovinSettings : ScriptableObject
get get
{ {
// Update the default EN description if an old version of the description is still being used. // Update the default EN description if an old version of the description is still being used.
if (DefaultUserTrackingDescriptionEnV0.Equals(Instance.UserTrackingUsageDescriptionEn)) if (DefaultUserTrackingDescriptionEnV0.Equals(Instance.UserTrackingUsageDescriptionEn)
|| DefaultUserTrackingDescriptionEnV1.Equals(Instance.UserTrackingUsageDescriptionEn))
{ {
Instance.UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEnV1; Instance.UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEnV2;
} }
return Instance.consentFlowEnabled; return Instance.consentFlowEnabled;
...@@ -148,7 +165,7 @@ public class AppLovinSettings : ScriptableObject ...@@ -148,7 +165,7 @@ public class AppLovinSettings : ScriptableObject
// If the value didn't change, we don't need to update anything. // If the value didn't change, we don't need to update anything.
if (previousValue) return; if (previousValue) return;
Instance.UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEnV1; Instance.UserTrackingUsageDescriptionEn = DefaultUserTrackingDescriptionEnV2;
Instance.UserTrackingUsageLocalizationEnabled = true; Instance.UserTrackingUsageLocalizationEnabled = true;
} }
else else
...@@ -204,7 +221,7 @@ public class AppLovinSettings : ScriptableObject ...@@ -204,7 +221,7 @@ public class AppLovinSettings : ScriptableObject
if (value) if (value)
{ {
// If the value didn't change or the english localization text is not the default one, we don't need to update anything. // If the value didn't change or the english localization text is not the default one, we don't need to update anything.
if (previousValue || !DefaultUserTrackingDescriptionEnV1.Equals(Instance.UserTrackingUsageDescriptionEn)) return; if (previousValue || !DefaultUserTrackingDescriptionEnV2.Equals(Instance.UserTrackingUsageDescriptionEn)) return;
Instance.UserTrackingUsageDescriptionDe = DefaultUserTrackingDescriptionDe; Instance.UserTrackingUsageDescriptionDe = DefaultUserTrackingDescriptionDe;
Instance.UserTrackingUsageDescriptionEs = DefaultUserTrackingDescriptionEs; Instance.UserTrackingUsageDescriptionEs = DefaultUserTrackingDescriptionEs;
...@@ -317,7 +334,7 @@ public class AppLovinSettings : ScriptableObject ...@@ -317,7 +334,7 @@ public class AppLovinSettings : ScriptableObject
} }
/// <summary> /// <summary>
/// AdMob iOS App ID /// AdMob iOS App ID.
/// </summary> /// </summary>
public string AdMobIosAppId public string AdMobIosAppId
{ {
...@@ -325,6 +342,15 @@ public class AppLovinSettings : ScriptableObject ...@@ -325,6 +342,15 @@ public class AppLovinSettings : ScriptableObject
set { Instance.adMobIosAppId = value; } set { Instance.adMobIosAppId = value; }
} }
/// <summary>
/// Snap App Store App ID.
/// </summary>
public int SnapAppStoreAppId
{
get { return Instance.snapAppStoreAppId; }
set { Instance.snapAppStoreAppId = value; }
}
/// <summary> /// <summary>
/// Saves the instance of the settings. /// Saves the instance of the settings.
/// </summary> /// </summary>
......
...@@ -18,7 +18,7 @@ public class MaxSdk : ...@@ -18,7 +18,7 @@ public class MaxSdk :
MaxSdkUnityEditor MaxSdkUnityEditor
#endif #endif
{ {
private const string _version = "4.3.1"; private const string _version = "4.3.12";
/// <summary> /// <summary>
/// Returns the current plugin version. /// Returns the current plugin version.
......
...@@ -238,6 +238,7 @@ public abstract class MaxSdkBase ...@@ -238,6 +238,7 @@ public abstract class MaxSdkBase
{ {
public string AdUnitIdentifier { get; private set; } public string AdUnitIdentifier { get; private set; }
public string NetworkName { get; private set; } public string NetworkName { get; private set; }
public string NetworkPlacement { get; private set; }
public string Placement { get; private set; } public string Placement { get; private set; }
public string CreativeIdentifier { get; private set; } public string CreativeIdentifier { get; private set; }
public double Revenue { get; private set; } public double Revenue { get; private set; }
...@@ -246,6 +247,7 @@ public abstract class MaxSdkBase ...@@ -246,6 +247,7 @@ public abstract class MaxSdkBase
{ {
string adUnitIdentifier; string adUnitIdentifier;
string networkName; string networkName;
string networkPlacement;
string creativeIdentifier; string creativeIdentifier;
string placement; string placement;
string revenue; string revenue;
...@@ -253,6 +255,7 @@ public abstract class MaxSdkBase ...@@ -253,6 +255,7 @@ public abstract class MaxSdkBase
// NOTE: Unity Editor creates empty string // NOTE: Unity Editor creates empty string
AdUnitIdentifier = adInfoDictionary.TryGetValue("adUnitId", out adUnitIdentifier) ? adUnitIdentifier : ""; AdUnitIdentifier = adInfoDictionary.TryGetValue("adUnitId", out adUnitIdentifier) ? adUnitIdentifier : "";
NetworkName = adInfoDictionary.TryGetValue("networkName", out networkName) ? networkName : ""; NetworkName = adInfoDictionary.TryGetValue("networkName", out networkName) ? networkName : "";
NetworkPlacement = adInfoDictionary.TryGetValue("networkPlacement", out networkPlacement) ? networkPlacement : "";
CreativeIdentifier = adInfoDictionary.TryGetValue("creativeId", out creativeIdentifier) ? creativeIdentifier : ""; CreativeIdentifier = adInfoDictionary.TryGetValue("creativeId", out creativeIdentifier) ? creativeIdentifier : "";
Placement = adInfoDictionary.TryGetValue("placement", out placement) ? placement : ""; Placement = adInfoDictionary.TryGetValue("placement", out placement) ? placement : "";
...@@ -279,6 +282,7 @@ public abstract class MaxSdkBase ...@@ -279,6 +282,7 @@ public abstract class MaxSdkBase
{ {
return "[AdInfo adUnitIdentifier: " + AdUnitIdentifier + return "[AdInfo adUnitIdentifier: " + AdUnitIdentifier +
", networkName: " + NetworkName + ", networkName: " + NetworkName +
", networkPlacement: " + NetworkPlacement +
", creativeIdentifier: " + CreativeIdentifier + ", creativeIdentifier: " + CreativeIdentifier +
", placement: " + Placement + ", placement: " + Placement +
", revenue: " + Revenue + "]"; ", revenue: " + Revenue + "]";
......
...@@ -198,9 +198,11 @@ public class MaxSdkUtils ...@@ -198,9 +198,11 @@ public class MaxSdkUtils
/// </summary> /// </summary>
public static float GetScreenDensity() public static float GetScreenDensity()
{ {
#if UNITY_IOS #if UNITY_EDITOR
return 1;
#elif UNITY_IOS
return _MaxScreenDensity(); return _MaxScreenDensity();
#elif UNITY_ANDROID && !UNITY_EDITOR #elif UNITY_ANDROID
return MaxUnityPluginClass.CallStatic<float>("getScreenDensity"); return MaxUnityPluginClass.CallStatic<float>("getScreenDensity");
#else #else
return -1; return -1;
......
...@@ -3,7 +3,9 @@ using GoogleMobileAds.Api; ...@@ -3,7 +3,9 @@ using GoogleMobileAds.Api;
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using Unity.Advertisement.IosSupport;
using UnityEngine; using UnityEngine;
using UnityEngine.iOS;
public class AdsController : MonoBehaviour, OnMaxCallBackListener public class AdsController : MonoBehaviour, OnMaxCallBackListener
{ {
...@@ -57,6 +59,7 @@ public class AdsController : MonoBehaviour, OnMaxCallBackListener ...@@ -57,6 +59,7 @@ public class AdsController : MonoBehaviour, OnMaxCallBackListener
} }
private void Start() private void Start()
{ {
requestATT();
if (useMAX) if (useMAX)
{ {
maxInstances = GetComponent<MaxInstances>(); maxInstances = GetComponent<MaxInstances>();
...@@ -80,6 +83,29 @@ public class AdsController : MonoBehaviour, OnMaxCallBackListener ...@@ -80,6 +83,29 @@ public class AdsController : MonoBehaviour, OnMaxCallBackListener
StartCoroutine(StartCountTimeInter()); StartCoroutine(StartCountTimeInter());
FB.Init(); FB.Init();
} }
private void requestATT()
{
#if UNITY_IOS
// check with iOS to see if the user has accepted or declined tracking
var status = ATTrackingStatusBinding.GetAuthorizationTrackingStatus();
Version currentVersion = new Version(Device.systemVersion);
Version ios14 = new Version("14.5");
if (status == ATTrackingStatusBinding.AuthorizationTrackingStatus.NOT_DETERMINED && currentVersion >= ios14)
{
Debug.Log("Unity iOS Support: Requesting iOS App Tracking Transparency native dialog.");
ATTrackingStatusBinding.RequestAuthorizationTracking(AuthorizationTrackingReceived);
}
#else
Debug.Log("Unity iOS Support: App Tracking Transparency status not checked, because the platform is not iOS.");
#endif
}
private void AuthorizationTrackingReceived(int status) {
Debug.LogFormat("Authorization App-Transparency-Tracking status received: {0}", status);
}
protected bool ShouldShowInter() protected bool ShouldShowInter()
{ {
......
...@@ -38,7 +38,7 @@ RenderSettings: ...@@ -38,7 +38,7 @@ RenderSettings:
m_ReflectionIntensity: 1 m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0} m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0} m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_IndirectSpecularColor: {r: 0.44657838, g: 0.49641234, b: 0.57481676, a: 1}
m_UseRadianceAmbientProbe: 0 m_UseRadianceAmbientProbe: 0
--- !u!157 &3 --- !u!157 &3
LightmapSettings: LightmapSettings:
...@@ -1728,15 +1728,45 @@ PrefabInstance: ...@@ -1728,15 +1728,45 @@ PrefabInstance:
propertyPath: m_LocalEulerAnglesHint.z propertyPath: m_LocalEulerAnglesHint.z
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3}
propertyPath: useMAX
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b, - target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3} type: 3}
propertyPath: testAds propertyPath: testAds
value: 0 value: 0
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3}
propertyPath: bannerID_IOS
value: ca-app-pub-6409857233709298/9134871027
objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3}
propertyPath: openAdID_IOS
value: ca-app-pub-6409857233709298/8540168172
objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3}
propertyPath: rewardID_IOS
value: ca-app-pub-6409857233709298/5244577531
objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3}
propertyPath: nativeAdID_IOS
value: ca-app-pub-6409857233709298/2166331517
objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b, - target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3} type: 3}
propertyPath: timeDelayInter propertyPath: timeDelayInter
value: 30 value: 30
objectReference: {fileID: 0} objectReference: {fileID: 0}
- target: {fileID: 8609939059637033751, guid: f0fc5c17fd614f641bd5dc8b9500be4b,
type: 3}
propertyPath: interstitialID_IOS
value: ca-app-pub-6409857233709298/7825674693
objectReference: {fileID: 0}
m_RemovedComponents: [] m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: f0fc5c17fd614f641bd5dc8b9500be4b, type: 3} m_SourcePrefab: {fileID: 100100000, guid: f0fc5c17fd614f641bd5dc8b9500be4b, type: 3}
fileFormatVersion: 2
guid: fe2452388426a4e469265d5abbb8b35f
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: ab51692b9870fbe44807232a1ad0875c
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
{ {
"project_info": {
"project_number": "73219361853",
"project_id": "galaxy-smash",
"storage_bucket": "galaxy-smash.appspot.com"
},
"client": [ "client": [
{ {
"client_info": { "services": {
"mobilesdk_app_id": "1:73219361853:android:bde2d40bd8a5561692ae54", "appinvite_service": {
"android_client_info": { "status": 1
"package_name": "negaxy.galaxypuzzle.galazysmash" },
"analytics_service": {
"status": 0
} }
}, },
"oauth_client": [ "oauth_client": [
{ {
"client_id": "73219361853-uo5u0418sr6ini1gabv2qbq4iudm2o40.apps.googleusercontent.com", "client_id": "73219361853-4lg03g9mpd7oh3r8rium2h53hu68em1f.apps.googleusercontent.com"
"client_type": 3
} }
], ],
"api_key": [ "api_key": [
{ {
"current_key": "AIzaSyCsvxmao3NmwY6uuP2tqZsBeKdb7eathyk" "current_key": "AIzaSyDnQFABHd_ytoIJ1adfPW4RYGVsRJ0x9gM"
} }
], ],
"services": { "client_info": {
"appinvite_service": { "mobilesdk_app_id": "1:73219361853:ios:4e900251594ad3e292ae54",
"other_platform_oauth_client": [ "android_client_info": {
{ "package_name": "negaxy.galaxypuzzle.galazysmash"
"client_id": "73219361853-uo5u0418sr6ini1gabv2qbq4iudm2o40.apps.googleusercontent.com",
"client_type": 3
}
]
} }
} }
} }
], ],
"configuration_version": "1" "configuration_version": "1",
"project_info": {
"storage_bucket": "galaxy-smash.appspot.com",
"project_id": "galaxy-smash",
"project_number": "73219361853"
}
} }
\ No newline at end of file
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
"dependencies": { "dependencies": {
"com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git", "com.coffee.ui-particle": "https://github.com/mob-sakai/ParticleEffectForUGUI.git",
"com.unity.2d.sprite": "1.0.0", "com.unity.2d.sprite": "1.0.0",
"com.unity.ads.ios-support": "1.2.0",
"com.unity.cinemachine": "2.6.11", "com.unity.cinemachine": "2.6.11",
"com.unity.collab-proxy": "1.5.7", "com.unity.collab-proxy": "1.5.7",
"com.unity.ide.rider": "2.0.7", "com.unity.ide.rider": "2.0.7",
......
...@@ -13,6 +13,13 @@ ...@@ -13,6 +13,13 @@
"source": "builtin", "source": "builtin",
"dependencies": {} "dependencies": {}
}, },
"com.unity.ads.ios-support": {
"version": "1.2.0",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.cinemachine": { "com.unity.cinemachine": {
"version": "2.6.11", "version": "2.6.11",
"depth": 0, "depth": 0,
......
...@@ -129,7 +129,7 @@ PlayerSettings: ...@@ -129,7 +129,7 @@ PlayerSettings:
16:10: 1 16:10: 1
16:9: 1 16:9: 1
Others: 1 Others: 1
bundleVersion: 1.0.6 bundleVersion: 1.0.1
preloadedAssets: [] preloadedAssets: []
metroInputSource: 0 metroInputSource: 0
wsaTransparentSwapchain: 0 wsaTransparentSwapchain: 0
...@@ -149,9 +149,10 @@ PlayerSettings: ...@@ -149,9 +149,10 @@ PlayerSettings:
androidMaxAspectRatio: 2.1 androidMaxAspectRatio: 2.1
applicationIdentifier: applicationIdentifier:
Android: negaxy.galaxypuzzle.galazysmash Android: negaxy.galaxypuzzle.galazysmash
iPhone: negaxy.galaxypuzzle.galazysmash
buildNumber: buildNumber:
Standalone: 0 Standalone: 0
iPhone: 0 iPhone: 2
tvOS: 0 tvOS: 0
overrideDefaultApplicationIdentifier: 1 overrideDefaultApplicationIdentifier: 1
AndroidBundleVersionCode: 9 AndroidBundleVersionCode: 9
...@@ -217,8 +218,8 @@ PlayerSettings: ...@@ -217,8 +218,8 @@ PlayerSettings:
metalAPIValidation: 1 metalAPIValidation: 1
iOSRenderExtraFrameOnPause: 0 iOSRenderExtraFrameOnPause: 0
iosCopyPluginsCodeInsteadOfSymlink: 0 iosCopyPluginsCodeInsteadOfSymlink: 0
appleDeveloperTeamID: appleDeveloperTeamID: VAG8T66Q3U
iOSManualSigningProvisioningProfileID: iOSManualSigningProvisioningProfileID: 3bdd27af-2654-44d6-bc19-82c8ddc4e0f7
tvOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID:
iOSManualSigningProvisioningProfileType: 0 iOSManualSigningProvisioningProfileType: 0
tvOSManualSigningProvisioningProfileType: 0 tvOSManualSigningProvisioningProfileType: 0
...@@ -719,6 +720,7 @@ PlayerSettings: ...@@ -719,6 +720,7 @@ PlayerSettings:
gcWBarrierValidation: 0 gcWBarrierValidation: 0
apiCompatibilityLevelPerPlatform: apiCompatibilityLevelPerPlatform:
Android: 3 Android: 3
iPhone: 3
m_RenderingPath: 1 m_RenderingPath: 1
m_MobileRenderingPath: 1 m_MobileRenderingPath: 1
metroPackageName: PixelWorl3d_Spped metroPackageName: PixelWorl3d_Spped
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment