com.amanotes.gdk 0.2.67 → 0.2.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/Editor/AmaGDKEditor.cs +76 -22
- package/Editor/AmaGDKExtra.cs +14 -13
- package/Editor/Extra/GDKAutoUpdateAdapter.cs +14 -1
- package/Editor/Extra/GDKSymbolDefine.cs +372 -0
- package/Editor/{AmaGDKManager.cs.meta → Extra/GDKSymbolDefine.cs.meta} +1 -1
- package/Editor/Utils/AmaGDKEditor.ExtractVersion.cs +35 -3
- package/Extra/AmaGDKInstaller.unitypackage +0 -0
- package/Extra/CheckDiskSpace.unitypackage +0 -0
- package/Extra/Consent.unitypackage +0 -0
- package/Extra/{GoogleCMP.unitypackage.meta → Consent.unitypackage.meta} +1 -1
- package/Extra/ForceUpdate.unitypackage +0 -0
- package/Extra/LegacyGDKUpdateHelper.unitypackage +0 -0
- package/Extra/PostProcessor.unitypackage +0 -0
- package/Packages/AmaGDKConfig.unitypackage +0 -0
- package/Packages/AmaGDKExample.unitypackage +0 -0
- package/Packages/AmaGDKTest.unitypackage +0 -0
- package/Packages/AppsFlyerAdapter.PurchaseConnector.unitypackage +0 -0
- package/Packages/AppsFlyerAdapter.unitypackage +0 -0
- package/Packages/FirebaseAnalyticsAdapter.unitypackage +0 -0
- package/Packages/FirebaseRemoteConfigAdapter.unitypackage +0 -0
- package/Packages/IronSourceAdapter.unitypackage +0 -0
- package/Packages/MaxAdNetworkAdapter.unitypackage +0 -0
- package/{Editor/Resources.meta → Packages/MaxAdNetworkAdapter.unitypackage.meta} +1 -2
- package/Packages/RevenueCatAdapter.unitypackage +0 -0
- package/Packages/SqliteAnalyticsAdapter.unitypackage +0 -0
- package/Runtime/Ad/AdExtension.cs +2 -0
- package/Runtime/Ad/AdLogic.cs +79 -69
- package/Runtime/Ad/AdShowContext.cs +1 -0
- package/Runtime/Ad/AmaGDK.Ads.cs +17 -3
- package/Runtime/AmaGDK.Adapters.cs +12 -5
- package/Runtime/AmaGDK.Consent.cs +259 -0
- package/Runtime/AmaGDK.Consent.cs.meta +11 -0
- package/Runtime/AmaGDK.cs +25 -14
- package/Runtime/AudioToolkit/AmaGDK.Audio.Latency.cs +1 -3
- package/Runtime/AudioToolkit/AmaGDK.Audio.cs +56 -24
- package/Runtime/AudioToolkit/Plugins/Android/GDKAudioDeviceDetector.java +1 -1
- package/Runtime/Fps/AmaFPS.cs +0 -1
- package/Runtime/Fps/AmaFPSVisualizer.cs +7 -7
- package/Runtime/Internal/AmaGDK.Internal.AmaGUI.cs +1 -1
- package/Runtime/Internal/GDKGeoLocationcs.cs +3 -1
- package/Runtime/Internal/GDKServerTime.cs +13 -10
- package/package.json +1 -1
- package/Editor/AmaGDKManager.cs +0 -235
- package/Editor/Resources/amasdk-modules.json +0 -31
- package/Editor/Resources/amasdk-modules.json.meta +0 -7
- package/Extra/GoogleCMP.unitypackage +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.69 - 2024-07-26]
|
|
4
|
+
- [Fix] disable Max adapter
|
|
5
|
+
- [Dev] Update OnAdResult callback
|
|
6
|
+
- [Fix] Waiting for ad callback
|
|
7
|
+
- [Feature] AdEventTracking for Max ad network
|
|
8
|
+
- [Fix] Wait until the application regains focus after showing ads
|
|
9
|
+
- [Fix] Add OnAdReward callback for Max adapter
|
|
10
|
+
- [Fix] Wrong coverage report for unity 2021
|
|
11
|
+
- [Dev] Multiple AdAdapters is not supported
|
|
12
|
+
- [Fix] Do not register disabled adapter
|
|
13
|
+
- [Fix] add logic ad isSuccess
|
|
14
|
+
- [Fix] Force-close ad when OnAdClose callback is missing
|
|
15
|
+
- [Feature] Consent module: ATT + CMP
|
|
16
|
+
- [Fix] Warning in RevenueCat Adapter
|
|
17
|
+
- [Dev] Clean up timeout override for adapters
|
|
18
|
+
- [Fix] Do not init disabled Adapters
|
|
19
|
+
- [Dev] Remove AmaGDKManager
|
|
20
|
+
- [Fix] Max Mediation not show up in AmaGDK Inspector
|
|
21
|
+
- [Fix] iOS build process hang
|
|
22
|
+
- [Feature] Add Max Ad Network Adapter
|
|
23
|
+
- [Dev] Add option force clean up
|
|
24
|
+
- [Fix] Warning FPS Module
|
|
25
|
+
- [Dev] Config timeout for each adapter
|
|
26
|
+
- [Fix] GDKSymbolDefine Log methods should not require context object
|
|
27
|
+
- [Fix] Do not automatically reimport adapters in dev mode (for LegacyGDKUpdateHelper)
|
|
28
|
+
- [Dev] Add GDK Symbol Define
|
|
29
|
+
- Also: Option to generate a custom logger
|
|
30
|
+
- [Dev] Improve GDK inspector UI with tooltip & logo
|
|
31
|
+
- [Fix] Warnings for AutoUpdate module in dev mode
|
|
32
|
+
- [Fix] Do not automatically reimport adapters in dev mode
|
|
33
|
+
- [Dev] Display module flags in AmaGDK inspector
|
|
34
|
+
- [Dev] Enable AudioModule by default
|
|
35
|
+
- [Dev] Standardize variable names
|
|
36
|
+
|
|
37
|
+
## [0.2.68 - 2024-07-08]
|
|
38
|
+
- [Dev] Add IronSource setting to pause game during ad
|
|
39
|
+
- [Fix] Support Android API Version 24 and below
|
|
40
|
+
- [Dev] Add Audio Module flag
|
|
41
|
+
|
|
3
42
|
## [0.2.67 - 2024-07-04]
|
|
4
43
|
- [Fix] Do retry immediately when OnAdLoadFailed trigger regardless of reason
|
|
5
44
|
- Also: Update default ad request timeout to 30 secs
|
package/Editor/AmaGDKEditor.cs
CHANGED
|
@@ -51,6 +51,7 @@ namespace Amanotes.Editor
|
|
|
51
51
|
FIREBASE_REMOTE_CONFIG,
|
|
52
52
|
APPSFLYER,
|
|
53
53
|
IRONSOURCE,
|
|
54
|
+
MAX,
|
|
54
55
|
REVENUECAT
|
|
55
56
|
};
|
|
56
57
|
|
|
@@ -235,26 +236,67 @@ namespace Amanotes.Editor
|
|
|
235
236
|
// Debug.Log($"Content of version_info.tsv copied to clipboard!\n\n{tsv}\n\n");
|
|
236
237
|
// }
|
|
237
238
|
|
|
239
|
+
void ShowAmaGDKContext()
|
|
240
|
+
{
|
|
241
|
+
var menu = new GenericMenu();
|
|
242
|
+
menu.AddDisabledItem(new GUIContent("AmaGDK"));
|
|
243
|
+
menu.AddSeparator("");
|
|
244
|
+
menu.AddItem(new GUIContent("Auto Init"), sdk.autoInit, () =>
|
|
245
|
+
{
|
|
246
|
+
sdk.autoInit = !sdk.autoInit;
|
|
247
|
+
EditorUtility.SetDirty(sdk);
|
|
248
|
+
});
|
|
249
|
+
menu.AddItem(new GUIContent("Clear Cache"), false, () =>
|
|
250
|
+
{
|
|
251
|
+
GDKFileUtils.ClearCacheData();
|
|
252
|
+
});
|
|
253
|
+
menu.AddSeparator("");
|
|
254
|
+
menu.AddItem(new GUIContent("Change Log"), false, () =>
|
|
255
|
+
{
|
|
256
|
+
Application.OpenURL("https://amagdk.notion.site/Change-Log-6dfd4b67d64f496bbd9eb04ccb4ef95a");
|
|
257
|
+
});
|
|
258
|
+
menu.AddItem(new GUIContent("Documentation"), false, () =>
|
|
259
|
+
{
|
|
260
|
+
Application.OpenURL("https://amagdk.notion.site/Ama-GDK-a73596617ab247b6a43c8f12a1581415?pvs=4");
|
|
261
|
+
});
|
|
262
|
+
menu.ShowAsContext();
|
|
263
|
+
UnityEvent.current.Use();
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
private static GUIContent hamburgerIcon;
|
|
267
|
+
private static readonly Lazy<Texture2D> logo = new Lazy<Texture2D>(() =>
|
|
268
|
+
{
|
|
269
|
+
const string logoBase64 =
|
|
270
|
+
"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAAHdbkFIAAAAAXNSR0IArs4c6QAAALhlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEyAAIAAAAUAAAAWodpAAQAAAABAAAAbgAAAAAAAABIAAAAAQAAAEgAAAABMjAyNDowNzoxMCAxMjoyOTowMQAABJAEAAIAAAAUAAAApKABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAQAAAAAAyMDI0OjA3OjEwIDEyOjA3OjQ4APsHu7YAAAAJcEhZcwAACxMAAAsTAQCanBgAAAlZaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDI0LTA3LTEwVDEyOjI5OjAxKzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpDcmVhdGVEYXRlPjIwMjQtMDctMTBUMTI6MDc6NDgrMDc6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1ldGFkYXRhRGF0ZT4yMDI0LTA3LTEwVDEyOjI5OjAxKzA3OjAwPC94bXA6TWV0YWRhdGFEYXRlPgogICAgICAgICA8eG1wTU06SGlzdG9yeT4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgMjIuNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyNC0wNy0xMFQxMjoxOTowOCswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpiM2Y2ZDQ5My1iYTI4LTQwZGQtODUxMC0yNzJlYzYyMjM3Nzg8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgMjIuNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyNC0wNy0xMFQxMjoyOTowMSswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDo0ZjFkOWU5NS1hZjdjLTQzZDQtYTczYS1kODZhMTI4MDI3YjE8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6YjNmNmQ0OTMtYmEyOC00MGRkLTg1MTAtMjcyZWM2MjIzNzc4PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6YjNmNmQ0OTMtYmEyOC00MGRkLTg1MTAtMjcyZWM2MjIzNzc4PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjRmMWQ5ZTk1LWFmN2MtNDNkNC1hNzNhLWQ4NmExMjgwMjdiMTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KFOd9IgAAF2JJREFUeAHtOwl0lcXVd+Zb3paXlxASAQElgEDC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";
|
|
271
|
+
var tex = new Texture2D(2, 2, TextureFormat.RGBA32, false, true);
|
|
272
|
+
tex.LoadImage(Convert.FromBase64String(logoBase64), true);
|
|
273
|
+
return tex;
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
[NonSerialized] private static GUIContent bannerTitle;
|
|
277
|
+
|
|
238
278
|
void DrawGUI_AmaGDKBanner()
|
|
239
279
|
{
|
|
240
|
-
|
|
280
|
+
bannerTitle ??= new GUIContent()
|
|
281
|
+
{
|
|
282
|
+
image = logo.Value,
|
|
283
|
+
text = $"<b>AmaGDK</b> <size=12><color=gray>v{AmaGDK.VERSION}</color></size>"
|
|
284
|
+
};
|
|
285
|
+
AmaGUI.SectionLabel(bannerTitle);
|
|
241
286
|
var rect = GUILayoutUtility.GetLastRect();
|
|
242
|
-
|
|
287
|
+
var btnRect = rect;
|
|
288
|
+
|
|
289
|
+
// btnRect.x = 4f;
|
|
290
|
+
// btnRect.width = 24f; //btnRect.xMax -
|
|
291
|
+
// btnRect.yMin = btnRect.yMax - 32f;
|
|
292
|
+
|
|
293
|
+
btnRect.xMin = btnRect.xMax - 24f;
|
|
294
|
+
btnRect.yMin = btnRect.yMax - 32f;
|
|
295
|
+
|
|
296
|
+
if (hamburgerIcon == null) hamburgerIcon = EditorGUIUtility.IconContent("d__Menu@2X");
|
|
297
|
+
if (GUI.Button(btnRect, hamburgerIcon.image, EditorStyles.label))
|
|
243
298
|
{
|
|
244
|
-
|
|
245
|
-
menu.AddDisabledItem(new GUIContent("AmaGDK"));
|
|
246
|
-
menu.AddSeparator("");
|
|
247
|
-
menu.AddItem(new GUIContent("Auto Init"), sdk.autoInit, () =>
|
|
248
|
-
{
|
|
249
|
-
sdk.autoInit = !sdk.autoInit;
|
|
250
|
-
EditorUtility.SetDirty(sdk);
|
|
251
|
-
});
|
|
252
|
-
menu.AddItem(new GUIContent("Clear Cache"), false, () =>
|
|
253
|
-
{
|
|
254
|
-
GDKFileUtils.ClearCacheData();
|
|
255
|
-
});
|
|
256
|
-
menu.ShowAsContext();
|
|
257
|
-
UnityEvent.current.Use();
|
|
299
|
+
ShowAmaGDKContext();
|
|
258
300
|
}
|
|
259
301
|
}
|
|
260
302
|
|
|
@@ -306,8 +348,10 @@ namespace Amanotes.Editor
|
|
|
306
348
|
|
|
307
349
|
configSO = new SerializedObject(configAsset);
|
|
308
350
|
configSO.Update();
|
|
309
|
-
DrawProperty(configSO, "common");
|
|
310
|
-
|
|
351
|
+
DrawProperty(configSO, "common", true);
|
|
352
|
+
DrawProperty(configSO, "enableAudioModule", false);
|
|
353
|
+
DrawProperty(configSO, "enableServerTime", false);
|
|
354
|
+
DrawProperty(configSO, "enableGeoLocation", false);
|
|
311
355
|
GUILayout.Space(8f);
|
|
312
356
|
for (var i = 0; i < allAdapters.Count; i++)
|
|
313
357
|
{
|
|
@@ -318,6 +362,7 @@ namespace Amanotes.Editor
|
|
|
318
362
|
|
|
319
363
|
AmaGUI.Foldout("Adapters", ref showAdapterInstaller, DrawGUI_AdapterList);
|
|
320
364
|
AmaGUI.Foldout("Extras", ref showExtra, DrawGUI_ExtraList);
|
|
365
|
+
EditorGUILayout.ObjectField("Config", configAsset, typeof(ScriptableObject), false);
|
|
321
366
|
Profiler.EndSample();
|
|
322
367
|
}
|
|
323
368
|
|
|
@@ -401,7 +446,7 @@ namespace Amanotes.Editor
|
|
|
401
446
|
|
|
402
447
|
}, () =>
|
|
403
448
|
{
|
|
404
|
-
if (icon != null)
|
|
449
|
+
if (icon != null && adapter != null && adapter.enabled)
|
|
405
450
|
{
|
|
406
451
|
Rect rect = GUILayoutUtility.GetRect(6f, 6f, 16f, 16f);
|
|
407
452
|
rect.xMin -= 10f;
|
|
@@ -487,7 +532,7 @@ namespace Amanotes.Editor
|
|
|
487
532
|
EditorGUI.BeginDisabledGroup(!adapter.enabled);
|
|
488
533
|
EditorGUIUtility.labelWidth += 70;
|
|
489
534
|
{
|
|
490
|
-
DrawProperty(configSO, adapterId);
|
|
535
|
+
DrawProperty(configSO, adapterId, true);
|
|
491
536
|
GUILayout.Space(8f);
|
|
492
537
|
|
|
493
538
|
if (adapterId == IRONSOURCE)
|
|
@@ -515,11 +560,20 @@ namespace Amanotes.Editor
|
|
|
515
560
|
EditorGUI.EndDisabledGroup();
|
|
516
561
|
}
|
|
517
562
|
|
|
518
|
-
private static void DrawProperty(SerializedObject so, string propertyField)
|
|
563
|
+
private static void DrawProperty(SerializedObject so, string propertyField, bool childrenOnly)
|
|
519
564
|
{
|
|
520
565
|
SerializedProperty property = so.FindProperty(propertyField);
|
|
521
|
-
if (property == null)
|
|
566
|
+
if (property == null)
|
|
567
|
+
{
|
|
568
|
+
EditorGUILayout.HelpBox($"Property not found <{propertyField}>!", MessageType.Warning);
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
522
571
|
|
|
572
|
+
if (!childrenOnly)
|
|
573
|
+
{
|
|
574
|
+
EditorGUILayout.PropertyField(property);
|
|
575
|
+
}
|
|
576
|
+
|
|
523
577
|
string basePath = property.propertyPath;
|
|
524
578
|
var first = true;
|
|
525
579
|
while (property.NextVisible(first))
|
package/Editor/AmaGDKExtra.cs
CHANGED
|
@@ -7,20 +7,21 @@ namespace Amanotes.Editor
|
|
|
7
7
|
{
|
|
8
8
|
public static Dictionary<string, object> GetThirdPartyVersions()
|
|
9
9
|
{
|
|
10
|
-
|
|
11
|
-
List<GDKModule> listModule = VersionHelper.LoadLocalModuleInfo();
|
|
12
|
-
foreach (var module in listModule)
|
|
10
|
+
var dicThirdParty = new Dictionary<string, object>
|
|
13
11
|
{
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
["FirebaseAnalytics"] = ExtractVersion.FirebaseAnalytics(),
|
|
13
|
+
["FirebaseRemoteConfig"] = ExtractVersion.FirebaseRemoteConfig(),
|
|
14
|
+
["AppsFlyer"] = ExtractVersion.AppsFlyer(),
|
|
15
|
+
["IronSource"] = ExtractVersion.IronSource(),
|
|
16
|
+
["Max"] = ExtractVersion.Max(),
|
|
17
|
+
["RevenueCat"] = ExtractVersion.RevenueCat(),
|
|
18
|
+
["Firebase"] = AmaGDKExtra.FirebaseVersion(),
|
|
19
|
+
["AmaGDK"] = AmaGDK.VERSION,
|
|
20
|
+
["AdQuality"] = ExtractVersion.IronSourceAdQuality(),
|
|
21
|
+
["AdRevenue"] = ExtractVersion.AppsFlyerAdRevenue(),
|
|
22
|
+
["ACM"] = ExtractVersion.Acm(),
|
|
23
|
+
["FacebookSDK"] = ExtractVersion.Facebook()
|
|
24
|
+
};
|
|
24
25
|
|
|
25
26
|
return dicThirdParty;
|
|
26
27
|
}
|
|
@@ -23,11 +23,23 @@ namespace Amanotes.Editor
|
|
|
23
23
|
// Extra packages
|
|
24
24
|
{ "DiskSpacePopup", $"{Res.EXTRA_PATH}CheckDiskSpace.unitypackage" },
|
|
25
25
|
{ "ForceUpdatePopup", $"{Res.EXTRA_PATH}ForceUpdate.unitypackage" },
|
|
26
|
-
{ "
|
|
26
|
+
{ "Consent.ATTSupport", $"{Res.EXTRA_PATH}Consent.unitypackage" },
|
|
27
|
+
{ "Consent.GoogleCMPSupport", $"{Res.EXTRA_PATH}Consent.unitypackage" },
|
|
27
28
|
{ "AndroidPostProcessor", $"{Res.EXTRA_PATH}PostProcessor.unitypackage" }
|
|
28
29
|
};
|
|
29
30
|
|
|
30
31
|
private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths)
|
|
32
|
+
{
|
|
33
|
+
#if AMAGDK_DEV
|
|
34
|
+
return;
|
|
35
|
+
#endif
|
|
36
|
+
|
|
37
|
+
#pragma warning disable CS0162
|
|
38
|
+
CheckImportedAssets(importedAssets);
|
|
39
|
+
#pragma warning restore CS0162
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private static void CheckImportedAssets(string[] importedAssets)
|
|
31
43
|
{
|
|
32
44
|
if (importedAssets.Length == 0) return;
|
|
33
45
|
// Debug.LogWarning($"importedAssets: {string.Join("\n", importedAssets)}");
|
|
@@ -53,6 +65,7 @@ namespace Amanotes.Editor
|
|
|
53
65
|
continue;
|
|
54
66
|
}
|
|
55
67
|
|
|
68
|
+
if (packages.Contains(kvp.Value)) continue;
|
|
56
69
|
packages.Add(kvp.Value);
|
|
57
70
|
}
|
|
58
71
|
|
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
using System;
|
|
2
|
+
using System.Collections.Generic;
|
|
3
|
+
using System.IO;
|
|
4
|
+
using System.Linq;
|
|
5
|
+
using UnityEngine;
|
|
6
|
+
using UnityEditor;
|
|
7
|
+
using UnityEngine.Serialization;
|
|
8
|
+
using UnityObject = UnityEngine.Object;
|
|
9
|
+
|
|
10
|
+
namespace Amanotes.Core
|
|
11
|
+
{
|
|
12
|
+
[CreateAssetMenu(fileName = "GDKSymbolDefine", menuName = "Ama GDK/GDK Symbol Define", order = 100)]
|
|
13
|
+
internal partial class GDKSymbolDefine : ScriptableObject
|
|
14
|
+
{
|
|
15
|
+
private static readonly string cscRspFilePath = "Assets/csc.rsp";
|
|
16
|
+
public List<SymbolInfo> symbols = new List<SymbolInfo>();
|
|
17
|
+
public LoggerConfig loggerConfig = new LoggerConfig();
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
[ContextMenu("Read")]
|
|
21
|
+
public void Read()
|
|
22
|
+
{
|
|
23
|
+
if (!File.Exists(cscRspFilePath)) return;
|
|
24
|
+
|
|
25
|
+
var enabledSymbols = new HashSet<string>(ReadCSC());
|
|
26
|
+
AddSymbol(enabledSymbols, true);
|
|
27
|
+
SetEnableSymbols(enabledSymbols, true);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private void Write()
|
|
31
|
+
{
|
|
32
|
+
var list = symbols
|
|
33
|
+
.Union(this.loggerConfig.tags)
|
|
34
|
+
.Where(item=>item.enabled)
|
|
35
|
+
.Select(item => item.name)
|
|
36
|
+
.Distinct()
|
|
37
|
+
.ToArray();
|
|
38
|
+
|
|
39
|
+
string content = list.Length > 0 ? $"-define:{string.Join(";", list)}" : string.Empty;
|
|
40
|
+
File.WriteAllText(cscRspFilePath, content);
|
|
41
|
+
AssetDatabase.Refresh();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
[ContextMenu("Apply")]
|
|
45
|
+
public void Apply()
|
|
46
|
+
{
|
|
47
|
+
Write();
|
|
48
|
+
loggerConfig.GenerateLogger();
|
|
49
|
+
|
|
50
|
+
#if UNITY_EDITOR
|
|
51
|
+
EditorUtility.SetDirty((this));
|
|
52
|
+
AssetDatabase.Refresh();
|
|
53
|
+
#endif
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private void SetEnableSymbols(HashSet<string> enabledSymbols, bool enabled)
|
|
57
|
+
{
|
|
58
|
+
for (var i = 0; i < symbols.Count; i++)
|
|
59
|
+
{
|
|
60
|
+
symbols[i].enabled = enabledSymbols.Contains(symbols[i].name);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
for (var i = 0; i < loggerConfig.tags.Count; i++)
|
|
64
|
+
{
|
|
65
|
+
loggerConfig.tags[i].enabled = enabledSymbols.Contains(loggerConfig.tags[i].name);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
private void AddSymbol(IEnumerable<string> newSymbols, bool enabled)
|
|
70
|
+
{
|
|
71
|
+
var dict = symbols
|
|
72
|
+
.Union(loggerConfig.tags)
|
|
73
|
+
.Distinct()
|
|
74
|
+
.ToDictionary(item => item.name);
|
|
75
|
+
|
|
76
|
+
foreach (string symbol in newSymbols)
|
|
77
|
+
{
|
|
78
|
+
if (dict.TryGetValue(symbol, out var info)) continue;
|
|
79
|
+
info = new SymbolInfo() { name = symbol, enabled = enabled };
|
|
80
|
+
symbols.Add(info);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#if UNITY_EDITOR
|
|
84
|
+
EditorUtility.SetDirty(this);
|
|
85
|
+
#endif
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private List<string> ReadCSC()
|
|
89
|
+
{
|
|
90
|
+
var result = new List<string>();
|
|
91
|
+
if (!File.Exists(cscRspFilePath)) return result;
|
|
92
|
+
string[] rspLines = File.ReadAllLines(cscRspFilePath);
|
|
93
|
+
|
|
94
|
+
foreach (string line in rspLines)
|
|
95
|
+
{
|
|
96
|
+
string line2 = line.Trim();
|
|
97
|
+
if (!line2.StartsWith("-define:")) continue;
|
|
98
|
+
|
|
99
|
+
// Extract existing symbols from -define:
|
|
100
|
+
result.AddRange(line2.Substring(8).Split(';'));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
internal partial class GDKSymbolDefine
|
|
108
|
+
{
|
|
109
|
+
[Serializable] internal class SymbolInfo
|
|
110
|
+
{
|
|
111
|
+
[FormerlySerializedAs("symbol")] public string name;
|
|
112
|
+
public bool enabled;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
[Serializable] internal class LoggerConfig
|
|
116
|
+
{
|
|
117
|
+
public bool enabled;
|
|
118
|
+
public bool forceCleanUp;
|
|
119
|
+
public UnityObject codeGenerateFolder;
|
|
120
|
+
public string codeGeneratePath
|
|
121
|
+
{
|
|
122
|
+
get
|
|
123
|
+
{
|
|
124
|
+
string path = AssetDatabase.GetAssetPath(codeGenerateFolder);
|
|
125
|
+
if (AssetDatabase.IsValidFolder(path)) return path;
|
|
126
|
+
|
|
127
|
+
var defaultPath = "Assets/AmaGDK/LogV2";
|
|
128
|
+
var asset = AssetDatabase.LoadAssetAtPath<UnityObject>(defaultPath);
|
|
129
|
+
if (asset != null) codeGenerateFolder = asset;
|
|
130
|
+
return defaultPath;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
public string className = "LogV2";
|
|
134
|
+
|
|
135
|
+
[HideInInspector][SerializeField] private string classTemplate = $@"using Debug = UnityEngine.Debug;
|
|
136
|
+
using UnityObject = UnityEngine.Object;
|
|
137
|
+
|
|
138
|
+
public partial class $$CLASS_NAME$$
|
|
139
|
+
{{
|
|
140
|
+
private static void Log(string tag, string message, UnityObject context)
|
|
141
|
+
{{
|
|
142
|
+
Debug.Log($""[{{tag}}] {{message}}"", context);
|
|
143
|
+
}}
|
|
144
|
+
|
|
145
|
+
private static void LogWarning(string tag, string message, UnityObject context)
|
|
146
|
+
{{
|
|
147
|
+
Debug.LogWarning($""[{{tag}}] {{message}}"", context);
|
|
148
|
+
}}
|
|
149
|
+
|
|
150
|
+
private static void LogError(string tag, string message, UnityObject context)
|
|
151
|
+
{{
|
|
152
|
+
Debug.LogError($""[{{tag}}] {{message}}"", context);
|
|
153
|
+
}}
|
|
154
|
+
}}";
|
|
155
|
+
|
|
156
|
+
public List<SymbolInfo> tags = new List<SymbolInfo>();
|
|
157
|
+
|
|
158
|
+
public void GenerateLogger()
|
|
159
|
+
{
|
|
160
|
+
if (!enabled) return;
|
|
161
|
+
|
|
162
|
+
bool hasFolder = Directory.Exists(codeGeneratePath);
|
|
163
|
+
if (hasFolder)
|
|
164
|
+
{
|
|
165
|
+
if (forceCleanUp)
|
|
166
|
+
{
|
|
167
|
+
Directory.Delete(codeGeneratePath, true);
|
|
168
|
+
hasFolder = false;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (!hasFolder) Directory.CreateDirectory(codeGeneratePath);
|
|
173
|
+
|
|
174
|
+
// Generate main logger class
|
|
175
|
+
string filePath = Path.Combine(codeGeneratePath, $"{className}.cs");
|
|
176
|
+
string classContent;
|
|
177
|
+
|
|
178
|
+
if (!File.Exists(filePath))
|
|
179
|
+
{
|
|
180
|
+
classContent = classTemplate.Replace("$$CLASS_NAME$$", className);
|
|
181
|
+
File.WriteAllText(filePath, classContent);
|
|
182
|
+
AssetDatabase.ImportAsset(filePath);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Generate derived logger classes
|
|
186
|
+
for (var i = 0; i < tags.Count; i++)
|
|
187
|
+
{
|
|
188
|
+
string tag = tags[i].name;
|
|
189
|
+
classContent = GenerateTagClassContent(tag);
|
|
190
|
+
filePath = Path.Combine(codeGeneratePath, $"{className}.{tag}.cs");
|
|
191
|
+
File.WriteAllText(filePath, classContent);
|
|
192
|
+
AssetDatabase.ImportAsset(filePath);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private string GenerateTagClassContent(string tag)
|
|
197
|
+
{
|
|
198
|
+
return $@"using System.Diagnostics;
|
|
199
|
+
using UnityObject = UnityEngine.Object;
|
|
200
|
+
|
|
201
|
+
public partial class {className}
|
|
202
|
+
{{
|
|
203
|
+
public static class {tag}
|
|
204
|
+
{{
|
|
205
|
+
[Conditional(nameof({tag}))]
|
|
206
|
+
public static void Log(string message, UnityObject context = null) => {className}.Log(nameof({tag}), message, context);
|
|
207
|
+
|
|
208
|
+
[Conditional(nameof({tag}))]
|
|
209
|
+
public static void LogWarning(string message, UnityObject context = null) => {className}.LogWarning(nameof({tag}),message, context);
|
|
210
|
+
|
|
211
|
+
[Conditional(nameof({tag}))]
|
|
212
|
+
public static void LogError(string message, UnityObject context = null) => {className}.LogError(nameof({tag}), message, context);
|
|
213
|
+
}}
|
|
214
|
+
}}";
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
// INSPECTOR
|
|
221
|
+
|
|
222
|
+
[CustomPropertyDrawer(typeof(GDKSymbolDefine.SymbolInfo))]
|
|
223
|
+
internal class SymbolInfoDrawer : PropertyDrawer
|
|
224
|
+
{
|
|
225
|
+
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
|
226
|
+
{
|
|
227
|
+
// Begin property drawing
|
|
228
|
+
EditorGUI.BeginProperty(position, label, property);
|
|
229
|
+
|
|
230
|
+
// Calculate rects
|
|
231
|
+
var toggleRect = new Rect(position.x, position.y, 20, position.height);
|
|
232
|
+
var labelRect = new Rect(position.x + 25, position.y, position.width - 25, position.height);
|
|
233
|
+
|
|
234
|
+
// Draw fields
|
|
235
|
+
SerializedProperty symbolProperty = property.FindPropertyRelative("name");
|
|
236
|
+
SerializedProperty enabledProperty = property.FindPropertyRelative("enabled");
|
|
237
|
+
|
|
238
|
+
// Draw the enabled toggle
|
|
239
|
+
enabledProperty.boolValue = EditorGUI.Toggle(toggleRect, enabledProperty.boolValue);
|
|
240
|
+
|
|
241
|
+
// Draw the symbol name field
|
|
242
|
+
symbolProperty.stringValue = EditorGUI.TextField(labelRect, symbolProperty.stringValue, EditorStyles.label);
|
|
243
|
+
|
|
244
|
+
// End property drawing
|
|
245
|
+
EditorGUI.EndProperty();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
[CustomEditor(typeof(GDKSymbolDefine))]
|
|
250
|
+
public class GDKSymbolDefineEditor : UnityEditor.Editor
|
|
251
|
+
{
|
|
252
|
+
private SerializedProperty symbolsProp;
|
|
253
|
+
private SerializedProperty loggerConfigProp;
|
|
254
|
+
private int selectedTab = 0;
|
|
255
|
+
private GDKSymbolDefine define;
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
private readonly GUIContent[] tabTitles = new GUIContent[]
|
|
259
|
+
{
|
|
260
|
+
new GUIContent("Symbols"),
|
|
261
|
+
new GUIContent("Logger Config")
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
private void OnEnable()
|
|
265
|
+
{
|
|
266
|
+
define = (GDKSymbolDefine)target;
|
|
267
|
+
symbolsProp = serializedObject.FindProperty("symbols");
|
|
268
|
+
loggerConfigProp = serializedObject.FindProperty("loggerConfig");
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
public override void OnInspectorGUI()
|
|
272
|
+
{
|
|
273
|
+
if (Application.isPlaying || EditorApplication.isPlayingOrWillChangePlaymode)
|
|
274
|
+
{
|
|
275
|
+
EditorGUILayout.HelpBox("Disabled in play mode!", MessageType.Info);
|
|
276
|
+
Repaint();
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
if (EditorApplication.isUpdating)
|
|
281
|
+
{
|
|
282
|
+
EditorGUILayout.HelpBox("Please wait for Unity Editor to finish importing!", MessageType.Info);
|
|
283
|
+
Repaint();
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
if (EditorApplication.isCompiling)
|
|
288
|
+
{
|
|
289
|
+
EditorGUILayout.HelpBox("Please wait for Unity Editor to finish compiling!", MessageType.Info);
|
|
290
|
+
Repaint();
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
if (define == null) return;
|
|
295
|
+
|
|
296
|
+
serializedObject.Update();
|
|
297
|
+
selectedTab = GUILayout.Toolbar(selectedTab, tabTitles, GUILayout.Height(32f));
|
|
298
|
+
|
|
299
|
+
switch (selectedTab)
|
|
300
|
+
{
|
|
301
|
+
case 0:
|
|
302
|
+
DrawSymbolsTab();
|
|
303
|
+
break;
|
|
304
|
+
case 1:
|
|
305
|
+
DrawLoggerConfigTab();
|
|
306
|
+
break;
|
|
307
|
+
default:
|
|
308
|
+
DrawSymbolsTab();
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
GUILayout.Space(24f);
|
|
313
|
+
if (GUILayout.Button("Apply", GUILayout.Height(30f)))
|
|
314
|
+
{
|
|
315
|
+
define.Apply();
|
|
316
|
+
Repaint();
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
serializedObject.ApplyModifiedProperties();
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
private void DrawSymbolsTab()
|
|
323
|
+
{
|
|
324
|
+
EditorGUILayout.PropertyField(symbolsProp, new GUIContent("DEFINE SYMBOLS"), true);
|
|
325
|
+
if (define.loggerConfig.enabled)
|
|
326
|
+
{
|
|
327
|
+
EditorGUILayout.PropertyField(loggerConfigProp.FindPropertyRelative("tags"), new GUIContent("LOGGER TAGS"), true);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
private static bool showTemplate = false;
|
|
332
|
+
private void DrawLoggerConfigTab()
|
|
333
|
+
{
|
|
334
|
+
// EditorGUILayout.PropertyField(loggerConfigProp, GUIContent.none, true);
|
|
335
|
+
DrawProperty(serializedObject, "loggerConfig", true);
|
|
336
|
+
showTemplate = GUILayout.Toggle(showTemplate, "Logger class template", EditorStyles.foldout);
|
|
337
|
+
if (showTemplate)
|
|
338
|
+
{
|
|
339
|
+
var prop = serializedObject
|
|
340
|
+
.FindProperty("loggerConfig")
|
|
341
|
+
.FindPropertyRelative("classTemplate");
|
|
342
|
+
EditorGUILayout.PropertyField(prop, GUIContent.none, false, GUILayout.Height(16 * 20));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
private static void DrawProperty(SerializedObject so, string propertyField, bool childrenOnly)
|
|
347
|
+
{
|
|
348
|
+
SerializedProperty property = so.FindProperty(propertyField);
|
|
349
|
+
if (property == null)
|
|
350
|
+
{
|
|
351
|
+
EditorGUILayout.HelpBox($"Property not found <{propertyField}>!", MessageType.Warning);
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (!childrenOnly)
|
|
356
|
+
{
|
|
357
|
+
EditorGUILayout.PropertyField(property);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
string basePath = property.propertyPath;
|
|
361
|
+
var first = true;
|
|
362
|
+
while (property.NextVisible(first))
|
|
363
|
+
{
|
|
364
|
+
first = false;
|
|
365
|
+
if (!property.propertyPath.Contains(basePath)) break;
|
|
366
|
+
EditorGUILayout.PropertyField(property);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
so.ApplyModifiedProperties();
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|