fixes, improvements. firebase

This commit is contained in:
Savya Bikram Shah
2026-06-01 13:15:40 +05:45
parent 384176fdcc
commit 6f79bcd018
180 changed files with 25324 additions and 9393 deletions

View File

@@ -151,7 +151,7 @@ namespace Darkmatter.Features.Artbook
{
if (!entry.HasValue || entry.Value.Thumbnail == null) return;
var ct = _cts?.Token ?? CancellationToken.None;
await _gallery.SaveImageAsync(entry.Value.Thumbnail, entry.Value.Id, ct);
await _gallery.SaveImageAsync(entry.Value.Thumbnail, entry.Value.Name, ct);
}
private void HandleLeftEditClicked() => OpenForEdit(GetLeftEntry());

View File

@@ -1,8 +1,9 @@
using System;
using System.Threading;
using Cysharp.Threading.Tasks;
using Darkmatter.Core.Contracts.Features.Capture;
using Darkmatter.Core.Contracts.Features.DrawingCatalog;
using Darkmatter.Core.Contracts.Features.GameplayFlow;
using Darkmatter.Core.Contracts.Features.Progression;
using Darkmatter.Core.Contracts.Services.Capture;
using Darkmatter.Core.Contracts.Services.Gallery;
using Darkmatter.Core.Data.Signals.Features.Capture;
@@ -18,19 +19,25 @@ namespace Darkmatter.Features.Capture
private readonly IGameplaySceneRefs _refs;
private readonly IEventBus _bus;
private readonly CaptureConfig _config;
private readonly IProgressionSystem _progression;
private readonly IDrawingTemplateCatalog _catalog;
public CaptureSystem(
ICaptureService captureService,
IGalleryService galleryService,
IGameplaySceneRefs refs,
IEventBus bus,
CaptureConfig config)
CaptureConfig config,
IProgressionSystem progression,
IDrawingTemplateCatalog catalog)
{
_captureService = captureService;
_galleryService = galleryService;
_refs = refs;
_bus = bus;
_config = config;
_progression = progression;
_catalog = catalog;
}
public async UniTask<byte[]> CapturePngAsync(bool saveToGallery = false, CancellationToken ct = default)
@@ -44,9 +51,9 @@ namespace Darkmatter.Features.Capture
{
if (tex.LoadImage(png))
{
var fileName = await BuildFileNameAsync();
_bus.Publish(new GallerySaveStartedSignal());
await _galleryService.SaveImageAsync(tex,
$"colorbook_{DateTime.UtcNow:yyyyMMdd_HHmmss}.png", ct);
await _galleryService.SaveImageAsync(tex, fileName, ct);
success = true;
}
}
@@ -57,5 +64,20 @@ namespace Darkmatter.Features.Capture
}
return png;
}
private async UniTask<string> BuildFileNameAsync()
{
var id = _progression.LastOpenedTemplateId;
if (string.IsNullOrEmpty(id)) return null;
try
{
var template = await _catalog.LoadAsync(id);
return template?.DisplayName;
}
catch
{
return null;
}
}
}
}

View File

@@ -2,12 +2,9 @@ using System;
using System.Collections.Generic;
using System.Threading;
using Cysharp.Threading.Tasks;
using Darkmatter.Core;
using Darkmatter.Core.Contracts.Features.DrawingCatalog;
using Darkmatter.Core.Contracts.Features.Progression;
using Darkmatter.Core.Data.Signals.Features.Drawing;
using Darkmatter.Libs.Observer;
using ZLinq;
namespace Darkmatter.Features.DrawingCatalog.Systems;
@@ -15,7 +12,6 @@ public sealed class DrawingCatalogController : IDrawingCatalogController
{
private readonly IDrawingTemplateCatalog _catalog;
private readonly IEventBus _bus;
private readonly IProgressionSystem _progression;
private readonly List<string> _visible = new();
public IReadOnlyList<string> VisibleIds => _visible;
@@ -23,11 +19,9 @@ public sealed class DrawingCatalogController : IDrawingCatalogController
public DrawingCatalogController(
IDrawingTemplateCatalog catalog,
IProgressionSystem progression,
IEventBus bus)
{
_catalog = catalog;
_progression = progression;
_bus = bus;
}
@@ -45,13 +39,8 @@ public sealed class DrawingCatalogController : IDrawingCatalogController
private void Refresh()
{
_visible.Clear();
var all = _catalog.AllTemplateIds;
foreach (var id in all)
if (!_progression.CompletedTemplateIds.AsValueEnumerable().Contains(id))
_visible.Add(id);
foreach (var id in all)
if (_progression.CompletedTemplateIds.AsValueEnumerable().Contains(id))
_visible.Add(id);
_visible.AddRange(_catalog.AllTemplateIds);
_visible.Sort(StringComparer.OrdinalIgnoreCase);
ListChanged?.Invoke();
}
}

View File

@@ -0,0 +1,19 @@
using System.IO;
using UnityEditor;
using UnityEngine;
namespace Darkmatter.Libs.UnityUtils.Editor
{
public static class OpenEditorGalleryMenu
{
private const string MenuPath = "Tools/Colorbook/Open Editor Gallery";
[MenuItem(MenuPath)]
private static void Open()
{
var dir = Path.Combine(Application.persistentDataPath, "Colorbook-Gallery");
Directory.CreateDirectory(dir);
EditorUtility.RevealInFinder(dir);
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 55aad6d59cbf04999877c8c4b2f55836

View File

@@ -21,6 +21,8 @@ namespace Darkmatter.Services.Ads
[SerializeField] private bool autoReload = true;
[Tooltip("Seconds between auto-reload retries on failure.")]
[SerializeField, Min(1f)] private float reloadDelaySeconds = 5f;
[Tooltip("Max reload attempts before giving up.")]
[SerializeField, Min(1)] private int reloadMaxAttempts = 6;
public bool IsInitialized => _initialized;
public event Action<AdFormat, AdLoadState> LoadStateChanged;
@@ -495,8 +497,14 @@ namespace Darkmatter.Services.Ads
{
try
{
await UniTask.Delay(TimeSpan.FromSeconds(reloadDelaySeconds), cancellationToken: cancellationToken);
await LoadAsync(format, cancellationToken);
for (int attempt = 0; attempt < reloadMaxAttempts; attempt++)
{
await UniTask.Delay(TimeSpan.FromSeconds(reloadDelaySeconds), cancellationToken: cancellationToken);
if (cancellationToken.IsCancellationRequested) return;
if (IsReady(format)) return;
if (await LoadAsync(format, cancellationToken)) return;
}
Debug.LogWarning($"[AdMobAdService] {format} reload gave up after {reloadMaxAttempts} attempts.");
}
catch (OperationCanceledException) { }
}

View File

@@ -9,9 +9,7 @@ namespace Darkmatter.Services.Analytics
{
public void Register(IContainerBuilder builder)
{
#if FIREBASE_ANALYTICS_PRESENT
builder.RegisterEntryPoint<FirebaseAnalyticsSystem>();
#endif
}
}
}

View File

@@ -1,4 +1,3 @@
#if FIREBASE_ANALYTICS
using System.Threading;
using Cysharp.Threading.Tasks;
using Firebase.Crashlytics;
@@ -10,7 +9,6 @@ namespace Darkmatter.Services.Analytics
{
public async UniTask StartAsync(CancellationToken cancellation = new CancellationToken())
{
#if !UNITY_EDITOR
await Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task =>
{
var dependencyStatus = task.Result;
@@ -39,8 +37,6 @@ namespace Darkmatter.Services.Analytics
// Firebase Unity SDK is not safe to use here.
}
}, cancellation);
#endif
}
}
}
#endif

View File

@@ -0,0 +1,16 @@
using System;
using UnityEngine;
namespace Darkmatter.Services.Gallery
{
[Serializable]
public struct GalleryConfig
{
public Texture2D Background { get; }
public GalleryConfig(Texture2D background)
{
Background = background;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bf2070de4e452444fa248a03c10928a6

View File

@@ -1,4 +1,6 @@
using System;
using System.IO;
using System.Text;
using System.Threading;
using Cysharp.Threading.Tasks;
using Darkmatter.Core.Contracts.Services.Gallery;
@@ -8,36 +10,123 @@ namespace Darkmatter.Services.Gallery
{
public class GalleryService : IGalleryService
{
private readonly GalleryConfig _config;
public GalleryService(GalleryConfig config) => _config = config;
public async UniTask SaveImageAsync(Texture2D image, string fileName, CancellationToken cancellationToken)
{
var permission = await NativeGallery.RequestPermissionAsync(NativeGallery.PermissionType.Write,
NativeGallery.MediaType.Image);
if (permission != NativeGallery.Permission.Granted)
Texture2D composited = null;
Texture2D toSave = image;
if (_config.Background != null)
{
return;
composited = CompositeOverBackground(image, _config.Background);
toSave = composited;
}
var tcs = new UniTaskCompletionSource();
var registration = cancellationToken.Register(() => tcs.TrySetCanceled(cancellationToken));
var resolvedName = BuildUniqueFileName(fileName);
NativeGallery.SaveImageToGallery(image, "Colorbook",
filename: $"colorbook_{DateTime.UtcNow:yyyyMMdd_HHmmss}.png", callback: (success, path) =>
try
{
#if UNITY_EDITOR
var bytes = toSave.EncodeToPNG();
var dir = Path.Combine(Application.persistentDataPath, "Colorbook-Gallery");
Directory.CreateDirectory(dir);
var path = Path.Combine(dir, resolvedName);
await File.WriteAllBytesAsync(path, bytes, cancellationToken);
Debug.Log($"[GalleryService] (Editor) Image saved to: {path}");
#else
var permission = await NativeGallery.RequestPermissionAsync(NativeGallery.PermissionType.Write,
NativeGallery.MediaType.Image);
if (permission != NativeGallery.Permission.Granted)
{
registration.Dispose();
if (!success)
{
Debug.LogError("Failed to save image to gallery.");
}
else
{
Debug.Log($"Image saved to gallery at: {path}");
}
return;
}
tcs.TrySetResult();
});
var tcs = new UniTaskCompletionSource();
var registration = cancellationToken.Register(() => tcs.TrySetCanceled(cancellationToken));
await tcs.Task;
NativeGallery.SaveImageToGallery(toSave, "Colorbook",
filename: resolvedName, callback: (success, path) =>
{
registration.Dispose();
if (!success)
{
Debug.LogError("Failed to save image to gallery.");
}
else
{
Debug.Log($"Image saved to gallery at: {path}");
}
tcs.TrySetResult();
});
await tcs.Task;
#endif
}
finally
{
if (composited != null) UnityEngine.Object.Destroy(composited);
}
}
private static string BuildUniqueFileName(string baseName)
{
var prefix = Sanitize(baseName);
if (string.IsNullOrEmpty(prefix)) prefix = "drawing";
return $"{prefix}_{DateTime.UtcNow:yyyyMMdd_HHmmssfff}.png";
}
private static string Sanitize(string s)
{
if (string.IsNullOrEmpty(s)) return null;
var name = Path.GetFileNameWithoutExtension(s).Trim();
var sb = new StringBuilder(name.Length);
foreach (var c in name)
{
if (char.IsLetterOrDigit(c)) sb.Append(c);
else if (c == ' ' || c == '-' || c == '_') sb.Append('_');
}
return sb.Length == 0 ? null : sb.ToString();
}
private static Texture2D CompositeOverBackground(Texture2D captured, Texture2D background)
{
int bgW = background.width;
int bgH = background.height;
int cW = captured.width;
int cH = captured.height;
float fit = Mathf.Min(1f, Mathf.Min((float)bgW / cW, (float)bgH / cH));
int finalW = Mathf.Max(1, Mathf.RoundToInt(cW * fit));
int finalH = Mathf.Max(1, Mathf.RoundToInt(cH * fit));
int offsetX = (bgW - finalW) / 2;
int offsetY = (bgH - finalH) / 2;
var rt = RenderTexture.GetTemporary(bgW, bgH, 0, RenderTextureFormat.ARGB32);
var prev = RenderTexture.active;
try
{
Graphics.Blit(background, rt);
RenderTexture.active = rt;
GL.PushMatrix();
GL.LoadPixelMatrix(0, bgW, bgH, 0);
Graphics.DrawTexture(new Rect(offsetX, offsetY, finalW, finalH), captured);
GL.PopMatrix();
var output = new Texture2D(bgW, bgH, TextureFormat.RGBA32, mipChain: false);
output.ReadPixels(new Rect(0, 0, bgW, bgH), 0, 0);
output.Apply();
return output;
}
finally
{
RenderTexture.active = prev;
RenderTexture.ReleaseTemporary(rt);
}
}
}
}

View File

@@ -7,8 +7,11 @@ namespace Darkmatter.Services.Gallery
{
public class GalleryModule : MonoBehaviour,IModule
{
[SerializeField] private Texture2D saveBackground;
public void Register(IContainerBuilder builder)
{
builder.RegisterInstance(new GalleryConfig(saveBackground));
builder.Register<IGalleryService,GalleryService>(Lifetime.Singleton);
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -64,7 +64,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -432,7 +432,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -631,7 +631,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -750,7 +750,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -1328,7 +1328,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -1522,7 +1522,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -1912,7 +1912,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -2123,7 +2123,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -2298,7 +2298,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -2894,7 +2894,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -2969,7 +2969,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
@@ -3109,7 +3109,7 @@ MonoBehaviour:
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_Maskable: 0
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 948 KiB

View File

@@ -37,8 +37,8 @@ TextureImporter:
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapU: 0
wrapV: 0
wrapW: 0
nPOTScale: 0
lightmap: 0
@@ -52,9 +52,9 @@ TextureImporter:
spriteBorder: {x: 869, y: 876, z: 282, w: 277}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 8
textureType: 0
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
@@ -67,7 +67,7 @@ TextureImporter:
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
@@ -80,7 +80,7 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
@@ -93,7 +93,7 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
@@ -106,7 +106,7 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
@@ -119,10 +119,24 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
customData:
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
@@ -132,6 +146,8 @@ TextureImporter:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -151,9 +151,9 @@ RectTransform:
m_Children: []
m_Father: {fileID: 1424266587}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: -31.709412, y: -501}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: -39, y: 37}
m_SizeDelta: {x: 1124.7546, y: 50}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &17632382
@@ -679,6 +679,50 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: e14e6746c7bb4b57808b4d3020dc7bbb, type: 3}
m_Name:
m_EditorClassIdentifier: Services.Capture::Darkmatter.Services.Capture.Installers.CaptureServiceModule
--- !u!1 &164240469
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 164240470}
- component: {fileID: 164240471}
m_Layer: 0
m_Name: AnalyticsServiceModule
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &164240470
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 164240469}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1050564725}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &164240471
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 164240469}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e89fdd4696924b7facccda23a94a978, type: 3}
m_Name:
m_EditorClassIdentifier: Services.Analytics::Darkmatter.Services.Analytics.AnalyticsModule
--- !u!1 &196669901
GameObject:
m_ObjectHideFlags: 0
@@ -1583,6 +1627,7 @@ Transform:
- {fileID: 978572232}
- {fileID: 361052051}
- {fileID: 1707278033}
- {fileID: 164240470}
m_Father: {fileID: 1798580248}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1156238479
@@ -1632,6 +1677,7 @@ MonoBehaviour:
catalog: {fileID: 11400000, guid: 6e2d0c78aa02e4411948adcca14299a5, type: 2}
autoReload: 1
reloadDelaySeconds: 5
reloadMaxAttempts: 6
--- !u!1 &1239449674
GameObject:
m_ObjectHideFlags: 0
@@ -1676,6 +1722,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: f03c84255756e497f96c3baa7f6abe16, type: 3}
m_Name:
m_EditorClassIdentifier: Services.Gallery::Darkmatter.Services.Gallery.GalleryServiceModule
saveBackground: {fileID: 2800000, guid: 0c8e208e83531f84cb2b842025cdd232, type: 3}
--- !u!1 &1315655361
GameObject:
m_ObjectHideFlags: 0
@@ -1889,12 +1936,12 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler
m_UiScaleMode: 0
m_UiScaleMode: 1
m_ReferencePixelsPerUnit: 100
m_ScaleFactor: 1
m_ReferenceResolution: {x: 800, y: 600}
m_ReferenceResolution: {x: 1920, y: 1080}
m_ScreenMatchMode: 0
m_MatchWidthOrHeight: 0
m_MatchWidthOrHeight: 0.5
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
@@ -1919,7 +1966,7 @@ Canvas:
m_SortingBucketNormalizedSize: 0
m_VertexColorAlwaysGammaSpace: 1
m_UseReflectionProbes: 0
m_AdditionalShaderChannelsFlag: 1
m_AdditionalShaderChannelsFlag: 25
m_UpdateRectTransformForStandalone: 0
m_SortingLayerID: 0
m_SortingOrder: 800
@@ -2163,6 +2210,7 @@ MonoBehaviour:
- {fileID: 978572233}
- {fileID: 361052052}
- {fileID: 1707278034}
- {fileID: 164240471}
--- !u!1 &1890425864
GameObject:
m_ObjectHideFlags: 0

View File

@@ -164,6 +164,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Features.Capture::Darkmatter.Features.Capture.CaptureFeatureModule
captureScale: 1
galleryBackground: {fileID: 2800000, guid: 0c8e208e83531f84cb2b842025cdd232, type: 3}
captureButtonView: {fileID: 376589371}
gallerySaveView: {fileID: 0}
--- !u!1 &64614225
@@ -971,6 +972,82 @@ MonoBehaviour:
m_EditorClassIdentifier: Features.GameplayFlow::Darkmatter.Features.GameplayFlow.SceneRefs.GameplaySceneRefs
paperRoot: {fileID: 1143672390}
confetti: {fileID: 1141121867}
--- !u!1 &565686254
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 565686255}
- component: {fileID: 565686257}
- component: {fileID: 565686256}
m_Layer: 5
m_Name: SavingIndicator
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &565686255
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 565686254}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 993060025}
m_Father: {fileID: 2069155641}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &565686256
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 565686254}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.7607843}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &565686257
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 565686254}
m_CullTransparentMesh: 1
--- !u!1 &600922870
GameObject:
m_ObjectHideFlags: 0
@@ -1395,6 +1472,143 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 892653812}
m_CullTransparentMesh: 1
--- !u!1 &993060024
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 993060025}
- component: {fileID: 993060027}
- component: {fileID: 993060026}
m_Layer: 5
m_Name: Saving
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &993060025
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 993060024}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 565686255}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 897.3912, y: 143.6794}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &993060026
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 993060024}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Saving...
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: dde468a43b0440f4a9d121fb1d8f290e, type: 2}
m_sharedMaterial: {fileID: -1548830327015913602, guid: dde468a43b0440f4a9d121fb1d8f290e, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 124.7
m_fontSizeBase: 124.7
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_characterHorizontalScale: 1
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &993060027
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 993060024}
m_CullTransparentMesh: 1
--- !u!1 &1046038182
GameObject:
m_ObjectHideFlags: 0
@@ -3665,6 +3879,7 @@ RectTransform:
m_Children:
- {fileID: 201822947}
- {fileID: 2022514148}
- {fileID: 565686255}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: dc218b335b1d14cd5ae532f65042d829
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics.png
timeCreated: 1473376337
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 9fe4b3bd3b7d2477dac92fb7429d1d1b
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_analytics_dark.png
timeCreated: 1472679008
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 295 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 394b3ec4d60c24476a12e4ba696d9e5d
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth.png
timeCreated: 1473376335
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 3a9e1ef6287664c389bb09e2ac1b23b7
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_auth_dark.png
timeCreated: 1472679008
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 510 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 837e8e1f35e334e81931d0857680cebf
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging.png
timeCreated: 1473376336
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 20c5b8a1f82cb4aadb77ca20683d2a6e
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
timeCreated: 1472679008
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 415eaec414af14d11955222a282aca08
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_config.png
timeCreated: 1473376335
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 0ad9ef5fff5524355a9670c90a99cbba
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_config_dark.png
timeCreated: 1472679008
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 008a5e76206e49f9b06d8ba144aabb38
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics.png
timeCreated: 1473376335
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 214009068900439da4a9cded17d58090
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_crashlytics_dark.png
timeCreated: 1472679008
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 248 B

View File

@@ -0,0 +1,69 @@
fileFormatVersion: 2
guid: 3eea7b558c67b48e18acf3c278392e3d
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_database.png
timeCreated: 1476203961
licenseType: Free
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: -1
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

View File

@@ -0,0 +1,69 @@
fileFormatVersion: 2
guid: 9f6bfa9d8aefb40dc92461c372c73b0f
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_database_dark.png
timeCreated: 1476203949
licenseType: Free
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 1
linearTexture: 0
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: -1
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 449 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 953367231f9e3e22e70e5d1c91a40fe5
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions.png
timeCreated: 1473376335
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: b5aa3e4f7432e1c5698417cc13f85271
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_functions_dark.png
timeCreated: 1472679008
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 B

View File

@@ -0,0 +1,78 @@
fileFormatVersion: 2
guid: 573eb851c99f948f4bf2de49322bfd53
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage.png
timeCreated: 1481243899
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 B

View File

@@ -0,0 +1,78 @@
fileFormatVersion: 2
guid: 2955864b938094f579ea9902b65ac10c
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/fb_storage_dark.png
timeCreated: 1481243898
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 4
mipmaps:
mipMapMode: 0
enableMipMap: 1
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: -1
mipBias: -1
wrapMode: -1
nPOTScale: 1
lightmap: 0
compressionQuality: 50
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaUsage: 1
alphaIsTransparency: 0
spriteTessellationDetail: -1
textureType: 0
textureShape: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
platformSettings:
- buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: 9f058f25e8e2d47cfb894951d4d7e48a
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup.png
timeCreated: 1473376336
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,68 @@
fileFormatVersion: 2
guid: b93330fc8ea08407dbc514b5101afa14
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Editor Default Resources/Firebase/firebase_lockup_dark.png
timeCreated: 1472601251
licenseType: Pro
TextureImporter:
fileIDToRecycleName: {}
serializedVersion: 2
mipmaps:
mipMapMode: 0
enableMipMap: 0
linearTexture: 1
correctGamma: 0
fadeOut: 0
borderMipMap: 0
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
isReadable: 0
grayScaleToAlpha: 0
generateCubemap: 0
cubemapConvolution: 0
cubemapConvolutionSteps: 7
cubemapConvolutionExponent: 1.5
seamlessCubemap: 0
textureFormat: -1
maxTextureSize: 2048
textureSettings:
filterMode: -1
aniso: 1
mipBias: -1
wrapMode: 1
nPOTScale: 0
lightmap: 0
rGBM: 0
compressionQuality: 50
allowsAlphaSplitting: 0
spriteMode: 0
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot:
x: 0.5
y: 0.5
spriteBorder:
x: 0
y: 0
z: 0
w: 0
spritePixelsToUnits: 100
alphaIsTransparency: 1
textureType: 2
buildTargetSettings: []
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
spritePackingTag:
userData:
assetBundleName:
assetBundleVariant:

8
Assets/Firebase.meta Normal file
View File

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

View File

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

View File

@@ -0,0 +1,23 @@
<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
FirebaseAnalytics iOS and Android Dependencies.
-->
<dependencies>
<remoteSwiftPackage url="https://github.com/firebase/firebase-ios-sdk.git" version="12.13.0">
<swiftPackage name="FirebaseAnalytics" replacesPod="Firebase/Analytics"/>
</remoteSwiftPackage>
<iosPods>
<iosPod name="Firebase/Analytics" version="12.13.0" minTargetSdk="15.0">
</iosPod>
</iosPods>
<androidPackages>
<androidPackage spec="com.google.firebase:firebase-analytics:23.2.0">
</androidPackage>
<androidPackage spec="com.google.firebase:firebase-analytics-unity:13.11.0">
<repositories>
<repository>Assets/Firebase/m2repository</repository>
</repositories>
</androidPackage>
</androidPackages>
</dependencies>

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 1e3c2da79be842cd838a9ddd70d20fa9
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/AnalyticsDependencies.xml
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,27 @@
<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
FirebaseApp iOS and Android Dependencies.
-->
<dependencies>
<remoteSwiftPackage url="https://github.com/firebase/firebase-ios-sdk.git" version="12.13.0">
<swiftPackage name="FirebaseCore" replacesPod="Firebase/Core"/>
</remoteSwiftPackage>
<iosPods>
<iosPod name="Firebase/Core" version="12.13.0" minTargetSdk="15.0">
</iosPod>
</iosPods>
<androidPackages>
<androidPackage spec="com.google.firebase:firebase-common:22.0.1">
</androidPackage>
<androidPackage spec="com.google.firebase:firebase-analytics:23.2.0">
</androidPackage>
<androidPackage spec="com.google.android.gms:play-services-base:18.10.0">
</androidPackage>
<androidPackage spec="com.google.firebase:firebase-app-unity:13.11.0">
<repositories>
<repository>Assets/Firebase/m2repository</repository>
</repositories>
</androidPackage>
</androidPackages>
</dependencies>

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9b63af95d9364af4a3d8ce58738b6223
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/AppDependencies.xml
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,25 @@
<!-- Copyright (C) 2019 Google Inc. All Rights Reserved.
FirebaseCrashlytics iOS and Android Dependencies.
-->
<dependencies>
<remoteSwiftPackage url="https://github.com/firebase/firebase-ios-sdk.git" version="12.13.0">
<swiftPackage name="FirebaseCrashlytics" replacesPod="Firebase/Crashlytics"/>
</remoteSwiftPackage>
<iosPods>
<iosPod name="Firebase/Crashlytics" version="12.13.0" minTargetSdk="15.0">
</iosPod>
</iosPods>
<androidPackages>
<androidPackage spec="com.google.firebase:firebase-crashlytics-ndk:20.0.6">
</androidPackage>
<androidPackage spec="com.google.firebase:firebase-analytics:23.2.0">
</androidPackage>
<androidPackage spec="com.google.firebase:firebase-crashlytics-unity:13.11.0">
<repositories>
<repository>Assets/Firebase/m2repository</repository>
</repositories>
</androidPackage>
</androidPackages>
</dependencies>

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: be690db6bda046a89e38b20ef9bfe06c
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/CrashlyticsDependencies.xml
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,67 @@
fileFormatVersion: 2
guid: 3781f2218eef4d5a823dba406baa434b
labels:
- gvh
- gvh_targets-editor
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/Firebase.Crashlytics.Editor.dll
PluginImporter:
externalObjects: {}
serializedVersion: 3
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 0
platformData:
Android:
enabled: 0
settings:
CPU: AnyCPU
Any:
enabled: 0
settings: {}
Editor:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
Linux64:
enabled: 0
settings:
CPU: None
OSXUniversal:
enabled: 0
settings:
CPU: None
WebGL:
enabled: 0
settings: {}
Win:
enabled: 0
settings:
CPU: None
Win64:
enabled: 0
settings:
CPU: None
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
tvOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,67 @@
fileFormatVersion: 2
guid: 9f2edbf81053418f879076c05f816dc2
labels:
- gvh
- gvh_targets-editor
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/Firebase.Editor.dll
PluginImporter:
externalObjects: {}
serializedVersion: 3
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 0
platformData:
Android:
enabled: 0
settings:
CPU: AnyCPU
Any:
enabled: 0
settings: {}
Editor:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
Linux64:
enabled: 0
settings:
CPU: None
OSXUniversal:
enabled: 0
settings:
CPU: None
WebGL:
enabled: 0
settings: {}
Win:
enabled: 0
settings:
CPU: None
Win64:
enabled: 0
settings:
CPU: None
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
tvOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,72 @@
Assets/Editor Default Resources/Firebase/fb_analytics.png
Assets/Editor Default Resources/Firebase/fb_analytics_dark.png
Assets/Editor Default Resources/Firebase/fb_auth.png
Assets/Editor Default Resources/Firebase/fb_auth_dark.png
Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png
Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
Assets/Editor Default Resources/Firebase/fb_config.png
Assets/Editor Default Resources/Firebase/fb_config_dark.png
Assets/Editor Default Resources/Firebase/fb_crashlytics.png
Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png
Assets/Editor Default Resources/Firebase/fb_database.png
Assets/Editor Default Resources/Firebase/fb_database_dark.png
Assets/Editor Default Resources/Firebase/fb_functions.png
Assets/Editor Default Resources/Firebase/fb_functions_dark.png
Assets/Editor Default Resources/Firebase/fb_storage.png
Assets/Editor Default Resources/Firebase/fb_storage_dark.png
Assets/Editor Default Resources/Firebase/firebase_lockup.png
Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png
Assets/ExternalDependencyManager/Editor/1.2.187/Google.IOSResolver.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.IOSResolver.pdb
Assets/ExternalDependencyManager/Editor/1.2.187/Google.JarResolver.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.JarResolver.pdb
Assets/ExternalDependencyManager/Editor/1.2.187/Google.PackageManagerResolver.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.PackageManagerResolver.pdb
Assets/ExternalDependencyManager/Editor/1.2.187/Google.VersionHandlerImpl.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.VersionHandlerImpl.pdb
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb
Assets/ExternalDependencyManager/Editor/LICENSE
Assets/ExternalDependencyManager/Editor/README.md
Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.187_manifest.txt
Assets/Firebase/Editor/AnalyticsDependencies.xml
Assets/Firebase/Editor/AppDependencies.xml
Assets/Firebase/Editor/Firebase.Editor.dll
Assets/Firebase/Editor/Firebase.Editor.pdb
Assets/Firebase/Editor/generate_xml_from_google_services_json.exe
Assets/Firebase/Editor/generate_xml_from_google_services_json.py
Assets/Firebase/FirebaseApp/Internal/AssemblyInfo.cs
Assets/Firebase/FirebaseApp/Internal/Firebase.App.Internal.asmdef
Assets/Firebase/FirebaseApp/Internal/FirebaseInterops.cs
Assets/Firebase/FirebaseApp/Internal/HttpHelpers.cs
Assets/Firebase/FirebaseApp/Internal/link.xml
Assets/Firebase/Plugins/Firebase.Analytics.dll
Assets/Firebase/Plugins/Firebase.Analytics.pdb
Assets/Firebase/Plugins/Firebase.App.dll
Assets/Firebase/Plugins/Firebase.App.pdb
Assets/Firebase/Plugins/Firebase.Platform.dll
Assets/Firebase/Plugins/Firebase.Platform.pdb
Assets/Firebase/Plugins/Firebase.TaskExtension.dll
Assets/Firebase/Plugins/Firebase.TaskExtension.pdb
Assets/Firebase/Plugins/Google.MiniJson.dll
Assets/Firebase/Plugins/iOS/Firebase.Analytics.dll
Assets/Firebase/Plugins/iOS/Firebase.Analytics.pdb
Assets/Firebase/Plugins/iOS/Firebase.App.dll
Assets/Firebase/Plugins/iOS/Firebase.App.pdb
Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.bundle
Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.dll
Assets/Firebase/Plugins/x86_64/FirebaseCppAnalytics.so
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_11_0.bundle
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_11_0.dll
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_11_0.so
Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/13.11.0/firebase-analytics-unity-13.11.0.pom
Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/13.11.0/firebase-analytics-unity-13.11.0.srcaar
Assets/Firebase/m2repository/com/google/firebase/firebase-analytics-unity/maven-metadata.xml
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/13.11.0/firebase-app-unity-13.11.0.pom
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/13.11.0/firebase-app-unity-13.11.0.srcaar
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml
Assets/Plugins/iOS/Firebase/libFirebaseCppAnalytics.a
Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a
Assets/Plugins/tvOS/Firebase/libFirebaseCppAnalytics.a
Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: a9a3a847307045ea83fa26ebe0fee848
labels:
- gvh
- gvh_manifest
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/FirebaseAnalytics_version-13.11.0_manifest.txt
- gvhp_manifestname-0Google Analytics
- gvhp_manifestname-1FirebaseAnalytics
timeCreated: 0

View File

@@ -0,0 +1,71 @@
Assets/Editor Default Resources/Firebase/fb_analytics.png
Assets/Editor Default Resources/Firebase/fb_analytics_dark.png
Assets/Editor Default Resources/Firebase/fb_auth.png
Assets/Editor Default Resources/Firebase/fb_auth_dark.png
Assets/Editor Default Resources/Firebase/fb_cloud_messaging.png
Assets/Editor Default Resources/Firebase/fb_cloud_messaging_dark.png
Assets/Editor Default Resources/Firebase/fb_config.png
Assets/Editor Default Resources/Firebase/fb_config_dark.png
Assets/Editor Default Resources/Firebase/fb_crashlytics.png
Assets/Editor Default Resources/Firebase/fb_crashlytics_dark.png
Assets/Editor Default Resources/Firebase/fb_database.png
Assets/Editor Default Resources/Firebase/fb_database_dark.png
Assets/Editor Default Resources/Firebase/fb_functions.png
Assets/Editor Default Resources/Firebase/fb_functions_dark.png
Assets/Editor Default Resources/Firebase/fb_storage.png
Assets/Editor Default Resources/Firebase/fb_storage_dark.png
Assets/Editor Default Resources/Firebase/firebase_lockup.png
Assets/Editor Default Resources/Firebase/firebase_lockup_dark.png
Assets/ExternalDependencyManager/Editor/1.2.187/Google.IOSResolver.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.IOSResolver.pdb
Assets/ExternalDependencyManager/Editor/1.2.187/Google.JarResolver.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.JarResolver.pdb
Assets/ExternalDependencyManager/Editor/1.2.187/Google.PackageManagerResolver.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.PackageManagerResolver.pdb
Assets/ExternalDependencyManager/Editor/1.2.187/Google.VersionHandlerImpl.dll
Assets/ExternalDependencyManager/Editor/1.2.187/Google.VersionHandlerImpl.pdb
Assets/ExternalDependencyManager/Editor/CHANGELOG.md
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.dll
Assets/ExternalDependencyManager/Editor/Google.VersionHandler.pdb
Assets/ExternalDependencyManager/Editor/LICENSE
Assets/ExternalDependencyManager/Editor/README.md
Assets/ExternalDependencyManager/Editor/external-dependency-manager_version-1.2.187_manifest.txt
Assets/Firebase/Editor/AppDependencies.xml
Assets/Firebase/Editor/CrashlyticsDependencies.xml
Assets/Firebase/Editor/Firebase.Crashlytics.Editor.dll
Assets/Firebase/Editor/Firebase.Crashlytics.Editor.pdb
Assets/Firebase/Editor/Firebase.Editor.dll
Assets/Firebase/Editor/Firebase.Editor.pdb
Assets/Firebase/Editor/generate_xml_from_google_services_json.exe
Assets/Firebase/Editor/generate_xml_from_google_services_json.py
Assets/Firebase/FirebaseApp/Internal/AssemblyInfo.cs
Assets/Firebase/FirebaseApp/Internal/Firebase.App.Internal.asmdef
Assets/Firebase/FirebaseApp/Internal/FirebaseInterops.cs
Assets/Firebase/FirebaseApp/Internal/HttpHelpers.cs
Assets/Firebase/FirebaseApp/Internal/link.xml
Assets/Firebase/Plugins/Firebase.App.dll
Assets/Firebase/Plugins/Firebase.App.pdb
Assets/Firebase/Plugins/Firebase.Crashlytics.dll
Assets/Firebase/Plugins/Firebase.Crashlytics.pdb
Assets/Firebase/Plugins/Firebase.Platform.dll
Assets/Firebase/Plugins/Firebase.Platform.pdb
Assets/Firebase/Plugins/Firebase.TaskExtension.dll
Assets/Firebase/Plugins/Firebase.TaskExtension.pdb
Assets/Firebase/Plugins/Google.MiniJson.dll
Assets/Firebase/Plugins/iOS/Firebase.App.dll
Assets/Firebase/Plugins/iOS/Firebase.App.pdb
Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.dll
Assets/Firebase/Plugins/iOS/Firebase.Crashlytics.pdb
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_11_0.bundle
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_11_0.dll
Assets/Firebase/Plugins/x86_64/FirebaseCppApp-13_11_0.so
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/13.11.0/firebase-app-unity-13.11.0.pom
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/13.11.0/firebase-app-unity-13.11.0.srcaar
Assets/Firebase/m2repository/com/google/firebase/firebase-app-unity/maven-metadata.xml
Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/13.11.0/firebase-crashlytics-unity-13.11.0.pom
Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/13.11.0/firebase-crashlytics-unity-13.11.0.srcaar
Assets/Firebase/m2repository/com/google/firebase/firebase-crashlytics-unity/maven-metadata.xml
Assets/Plugins/iOS/Firebase/libFirebaseCppApp.a
Assets/Plugins/iOS/Firebase/libFirebaseCppCrashlytics.a
Assets/Plugins/tvOS/Firebase/libFirebaseCppApp.a
Assets/Plugins/tvOS/Firebase/libFirebaseCppCrashlytics.a

View File

@@ -0,0 +1,10 @@
fileFormatVersion: 2
guid: 6e81ab079399484d877f51756833fe48
labels:
- gvh
- gvh_manifest
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/FirebaseCrashlytics_version-13.11.0_manifest.txt
- gvhp_manifestname-0Firebase Crashlytics
- gvhp_manifestname-1FirebaseCrashlytics
timeCreated: 0

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ae88c0972b7448b5b36def1716f1d711
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.exe
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,498 @@
#!/usr/bin/python
# Copyright 2016 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Stand-alone implementation of the Gradle Firebase plugin.
Converts the services json file to xml:
https://googleplex-android.googlesource.com/platform/tools/base/+/studio-master-dev/build-system/google-services/src/main/groovy/com/google/gms/googleservices
"""
__author__ = 'Wouter van Oortmerssen'
import argparse
import ctypes
import json
import os
import platform
import sys
from xml.etree import ElementTree
if platform.system().lower() == 'windows':
import ctypes.wintypes # pylint: disable=g-import-not-at-top
# Map Python 2's unicode method to encode a string as bytes in python 3.
try:
unicode('') # See whether unicode class is available (Python < 3)
except NameError:
unicode = str # pylint: disable=redefined-builtin,invalid-name
# Input filename if it isn't set.
DEFAULT_INPUT_FILENAME = 'app/google-services.json'
# Output filename if it isn't set.
DEFAULT_OUTPUT_FILENAME = 'res/values/googleservices.xml'
# Input filename for .plist files, if it isn't set.
DEFAULT_PLIST_INPUT_FILENAME = 'GoogleService-Info.plist'
# Output filename for .json files, if it isn't set.
DEFAULT_JSON_OUTPUT_FILENAME = 'google-services-desktop.json'
OAUTH_CLIENT_TYPE_ANDROID_APP = 1
OAUTH_CLIENT_TYPE_WEB = 3
def read_xml_value(xml_node):
"""Utility method for reading values from the plist XML.
Args:
xml_node: An ElementTree node, that contains a value.
Returns:
The value of the node, or None, if it could not be read.
"""
if xml_node.tag == 'string':
return xml_node.text
elif xml_node.tag == 'integer':
return int(xml_node.text)
elif xml_node.tag == 'real':
return float(xml_node.text)
elif xml_node.tag == 'false':
return 0
elif xml_node.tag == 'true':
return 1
else:
# other types of input are ignored. (data, dates, arrays, etc.)
return None
def construct_plist_dictionary(xml_root):
"""Constructs a dictionary of values based on the contents of a plist file.
Args:
xml_root: An ElementTree node, that represents the root of the xml file
that is to be parsed. (Which should be a dictionary containing
key-value pairs of the properties that need to be extracted.)
Returns:
A dictionary, containing key-value pairs for all (supported) entries in the
node.
"""
xml_dict = xml_root.find('dict')
if xml_dict is None:
return None
plist_dict = {}
i = 0
while i < len(xml_dict):
if xml_dict[i].tag == 'key':
key = xml_dict[i].text
i += 1
if i < len(xml_dict):
value = read_xml_value(xml_dict[i])
if value is not None:
plist_dict[key] = value
i += 1
return plist_dict
def update_dict_keys(key_map, input_dict):
"""Creates a dict from input_dict with the same values but new keys.
Two dictionaries are passed to this function: the key_map that represents a
mapping of source keys to destination keys, and the input_dict that is the
dictionary that is to be duplicated, replacing any key that matches a source
key with a destination key. Source keys that are not present in the
input_dict will not have their destination key represented in the result.
In other words, if key_map is `{'old': 'new', 'foo': 'bar'}`, and input_dict
is `{'old': 10}`, the result will be `{'new': 10}`.
Args:
key_map (dict): A dictionary of strings to strings that maps source keys to
destination keys.
input_dict (dict): The dictionary of string keys to any value type, which
is to be duplicated, replacing source keys with the corresponding
destination keys from key_map.
Returns:
dict: A new dictionary with updated keys.
"""
return {
new_key: input_dict[old_key]
for (old_key, new_key) in key_map.items()
if old_key in input_dict
}
def construct_google_services_json(xml_dict):
"""Constructs a google services json file from a dictionary.
Args:
xml_dict: A dictionary of all the key/value pairs that are needed for the
output json file.
Returns:
A string representing the output json file.
"""
try:
json_struct = {
'project_info':
update_dict_keys(
{
'GCM_SENDER_ID': 'project_number',
'DATABASE_URL': 'firebase_url',
'PROJECT_ID': 'project_id',
'STORAGE_BUCKET': 'storage_bucket'
}, xml_dict),
'client': [{
'client_info': {
'mobilesdk_app_id': xml_dict['GOOGLE_APP_ID'],
'android_client_info': {
'package_name': xml_dict['BUNDLE_ID']
}
},
'api_key': [{
'current_key': xml_dict['API_KEY']
}],
'services': {
'analytics_service': {
'status': xml_dict['IS_ANALYTICS_ENABLED']
},
'appinvite_service': {
'status': xml_dict['IS_APPINVITE_ENABLED']
}
}
},],
'configuration_version':
'1'
}
# OAuth client is optional, but include it if present.
if 'CLIENT_ID' in xml_dict:
json_struct['client'][0]['oauth_client'] = [{
'client_id': xml_dict['CLIENT_ID'],
}]
return json.dumps(json_struct, indent=2)
except KeyError as e:
sys.stderr.write('Could not find key in plist file: [%s]\n' % (e.args[0]))
return None
def convert_plist_to_json(plist_string, input_filename):
"""Converts an input plist string into a .json file and saves it.
Args:
plist_string: The contents of the loaded plist file.
input_filename: The file name that the plist data was read from.
Returns:
the converted string, or None if there were errors.
"""
try:
root = ElementTree.fromstring(plist_string)
except ElementTree.ParseError:
sys.stderr.write('Error parsing file %s.\n'
'It does not appear to be valid XML.\n' % (input_filename))
return None
plist_dict = construct_plist_dictionary(root)
if plist_dict is None:
sys.stderr.write('In file %s, could not locate a top-level \'dict\' '
'element.\n'
'File format should be plist XML, with a top-level '
'dictionary containing project settings as key-value '
'pairs.\n' % (input_filename))
return None
json_string = construct_google_services_json(plist_dict)
return json_string
def gen_string(parent, name, text):
"""Generate one <string /> element and put into the list of keeps.
Args:
parent: The object that will hold the string.
name: The name to store the string under.
text: The text of the string.
"""
if text:
prev = parent.get('tools:keep', '')
if prev:
prev += ','
parent.set('tools:keep', prev + '@string/' + name)
child = ElementTree.SubElement(parent, 'string', {
'name': name,
'translatable': 'false'
})
child.text = text
def indent(elem, level=0):
"""Recurse through XML tree and add indentation.
Args:
elem: The element to recurse over
level: The current indentation level.
"""
i = '\n' + level*' '
if elem is not None:
if not elem.text or not elem.text.strip():
elem.text = i + ' '
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
indent(elem, level+1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
def argv_as_unicode_win32():
"""Returns unicode command line arguments on windows.
"""
get_command_line_w = ctypes.cdll.kernel32.GetCommandLineW
get_command_line_w.restype = ctypes.wintypes.LPCWSTR
# CommandLineToArgvW parses the Unicode command line
command_line_to_argv_w = ctypes.windll.shell32.CommandLineToArgvW
command_line_to_argv_w.argtypes = [
ctypes.wintypes.LPCWSTR,
ctypes.POINTER(ctypes.c_int)
]
command_line_to_argv_w.restype = ctypes.POINTER(
ctypes.wintypes.LPWSTR)
argc = ctypes.c_int(0)
argv = command_line_to_argv_w(get_command_line_w(), argc)
# Strip the python executable from the arguments if it exists
# (It would be listed as the first argument on the windows command line, but
# not in the arguments to the python script)
sys_argv_len = len(sys.argv)
return [unicode(argv[i]) for i in
range(argc.value - sys_argv_len, argc.value)]
def main():
parser = argparse.ArgumentParser(
description=((
'Converts a Firebase %s into %s similar to the Gradle plugin, or '
'converts a Firebase %s into a %s suitible for use on desktop apps.' %
(DEFAULT_INPUT_FILENAME, DEFAULT_OUTPUT_FILENAME,
DEFAULT_PLIST_INPUT_FILENAME, DEFAULT_JSON_OUTPUT_FILENAME))))
parser.add_argument('-i', help='Override input file name',
metavar='FILE', required=False)
parser.add_argument('-o', help='Override destination file name',
metavar='FILE', required=False)
parser.add_argument('-p', help=('Package ID to select within the set of '
'packages in the input file. If this is '
'not specified, the first package in the '
'input file is selected.'))
parser.add_argument('-l', help=('List all package IDs referenced by the '
'input file. If this is specified, '
'the output file is not created.'),
action='store_true', default=False, required=False)
parser.add_argument('-f', help=('Print project fields from the input file '
'in the form \'name=value\\n\' for each '
'field. If this is specified, the output '
'is not created.'),
action='store_true', default=False, required=False)
parser.add_argument(
'--plist',
help=(
'Specifies a plist file to convert to a JSON configuration file. '
'If this is enabled, the script will expect a .plist file as input, '
'which it will convert into %s file. The output file is '
'*not* suitable for use with Firebase on Android.' %
(DEFAULT_JSON_OUTPUT_FILENAME)),
action='store_true',
default=False,
required=False)
# python 2 on Windows doesn't handle unicode arguments well, so we need to
# pre-process the command line arguments before trying to parse them.
if platform.system() == 'Windows':
sys.argv = argv_as_unicode_win32()
args = parser.parse_args()
if args.plist:
input_filename = DEFAULT_PLIST_INPUT_FILENAME
output_filename = DEFAULT_JSON_OUTPUT_FILENAME
else:
input_filename = DEFAULT_INPUT_FILENAME
output_filename = DEFAULT_OUTPUT_FILENAME
if args.i:
# Encode the input string (type unicode) as a normal string (type str)
# using the 'utf-8' encoding so that it can be worked with the same as
# input names from other sources (like the defaults).
input_filename_raw = args.i.encode('utf-8')
# Decode the filename to a unicode string using the 'utf-8' encoding to
# properly handle filepaths with unicode characters in them.
input_filename = input_filename_raw.decode('utf-8')
if args.o:
output_filename = args.o
with open(input_filename, 'r') as ifile:
file_string = ifile.read()
json_string = None
if args.plist:
json_string = convert_plist_to_json(file_string, input_filename)
if json_string is None:
return 1
jsobj = json.loads(json_string)
else:
jsobj = json.loads(file_string)
root = ElementTree.Element('resources')
root.set('xmlns:tools', 'http://schemas.android.com/tools')
project_info = jsobj.get('project_info')
if project_info:
gen_string(root, 'firebase_database_url', project_info.get('firebase_url'))
gen_string(root, 'gcm_defaultSenderId', project_info.get('project_number'))
gen_string(root, 'google_storage_bucket',
project_info.get('storage_bucket'))
gen_string(root, 'project_id', project_info.get('project_id'))
if args.f:
if not project_info:
sys.stderr.write('No project info found in %s.' % input_filename)
return 1
for field, value in sorted(project_info.items()):
sys.stdout.write('%s=%s\n' % (field, value))
return 0
packages = set()
client_list = jsobj.get('client')
if client_list:
# Search for the user specified package in the file.
selected_package_name = ''
selected_client = client_list[0]
find_package_name = args.p
for client in client_list:
package_name = client.get('client_info', {}).get(
'android_client_info', {}).get('package_name', '')
if not package_name:
package_name = client.get('oauth_client', {}).get(
'android_info', {}).get('package_name', '')
if package_name:
if not selected_package_name:
selected_package_name = package_name
selected_client = client
if package_name == find_package_name:
selected_package_name = package_name
selected_client = client
packages.add(package_name)
if args.p and selected_package_name != find_package_name:
sys.stderr.write('No packages found in %s which match the package '
'name %s\n'
'\n'
'Found the following:\n'
'%s\n' % (input_filename, find_package_name,
'\n'.join(packages)))
return 1
client_api_key = selected_client.get('api_key')
if client_api_key:
client_api_key0 = client_api_key[0]
gen_string(root, 'google_api_key', client_api_key0.get('current_key'))
gen_string(root, 'google_crash_reporting_api_key',
client_api_key0.get('current_key'))
client_info = selected_client.get('client_info')
if client_info:
gen_string(root, 'google_app_id', client_info.get('mobilesdk_app_id'))
# Only include the first matching OAuth client ID per type.
client_id_web_parsed = False
client_id_android_parsed = False
oauth_client_list = selected_client.get('oauth_client')
if oauth_client_list:
for oauth_client in oauth_client_list:
client_type = oauth_client.get('client_type')
client_id = oauth_client.get('client_id')
if not (client_type and client_id): continue
if (client_type == OAUTH_CLIENT_TYPE_WEB and
not client_id_web_parsed):
gen_string(root, 'default_web_client_id', client_id)
client_id_web_parsed = True
if (client_type == OAUTH_CLIENT_TYPE_ANDROID_APP and
not client_id_android_parsed):
gen_string(root, 'default_android_client_id', client_id)
client_id_android_parsed = True
services = selected_client.get('services')
if services:
ads_service = services.get('ads_service')
if ads_service:
gen_string(root, 'test_banner_ad_unit_id',
ads_service.get('test_banner_ad_unit_id'))
gen_string(root, 'test_interstitial_ad_unit_id',
ads_service.get('test_interstitial_ad_unit_id'))
analytics_service = services.get('analytics_service')
if analytics_service:
analytics_property = analytics_service.get('analytics_property')
if analytics_property:
gen_string(root, 'ga_trackingId',
analytics_property.get('tracking_id'))
# enable this once we have an example if this service being present
# in the json data:
maps_service_enabled = False
if maps_service_enabled:
maps_service = services.get('maps_service')
if maps_service:
maps_api_key = maps_service.get('api_key')
if maps_api_key:
for k in range(0, len(maps_api_key)):
# generates potentially multiple of these keys, which is
# the same behavior as the java plugin.
gen_string(root, 'google_maps_key',
maps_api_key[k].get('maps_api_key'))
tree = ElementTree.ElementTree(root)
indent(root)
if args.l:
for package in sorted(packages):
if package:
sys.stdout.write(package + '\n')
else:
path = os.path.dirname(output_filename)
if path and not os.path.exists(path):
os.makedirs(path)
if not args.plist:
tree.write(output_filename, 'utf-8', True)
else:
with open(output_filename, 'w') as ofile:
ofile.write(json_string)
return 0
if __name__ == '__main__':
sys.exit(main())

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8f18ed76c0f04ce0a65736104f913ef8
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Editor/generate_xml_from_google_services_json.py
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

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

View File

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

View File

@@ -0,0 +1,6 @@
using System.Runtime.CompilerServices;
// Grant native C# Unity packages access to Firebase.App's internal helpers
[assembly: InternalsVisibleTo("Firebase.Functions")]
[assembly: InternalsVisibleTo("Firebase.FirebaseAI")]
[assembly: InternalsVisibleTo("Firebase.FirebaseAI.TestApp")]

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d640bc2403824e5599315e0050b99aeb
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/FirebaseApp/Internal/AssemblyInfo.cs
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,17 @@
{
"name": "Firebase.App.Internal",
"rootNamespace": "Firebase.Internal",
"references": [],
"includePlatforms": [],
"excludePlatforms": [],
"allowUnsafeCode": false,
"overrideReferences": true,
"precompiledReferences": [
"Firebase.App.dll",
"Firebase.Platform.dll"
],
"autoReferenced": true,
"defineConstraints": [],
"versionDefines": [],
"noEngineReferences": false
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 9b4ce77d2be44f25af03d4cbf9bee9f9
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/FirebaseApp/Internal/Firebase.App.Internal.asmdef
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,461 @@
/*
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Net.Http;
using System.Net.WebSockets;
using System.Reflection;
using System.Threading.Tasks;
namespace Firebase.Internal
{
// Contains internal helper methods for interacting with other Firebase libraries.
internal static class FirebaseInterops
{
// The cached fields for FirebaseApp reflection.
private static PropertyInfo _dataCollectionProperty = null;
// The various App Check types needed to retrieve the token, cached via reflection on startup.
private static Type _appCheckType;
private static MethodInfo _appCheckGetInstanceMethod;
private static MethodInfo _appCheckGetTokenMethod;
private static MethodInfo _appCheckGetLimitedUseTokenMethod;
private static PropertyInfo _appCheckTokenResultProperty;
private static PropertyInfo _appCheckTokenTokenProperty;
// Used to determine if the App Check reflection initialized successfully, and should work.
private static bool _appCheckReflectionInitialized = false;
// The header used by the AppCheck token.
private const string appCheckHeader = "X-Firebase-AppCheck";
// The various Auth types needed to retrieve the token, cached via reflection on startup.
private static Type _authType;
private static MethodInfo _authGetAuthMethod;
private static PropertyInfo _authCurrentUserProperty;
private static MethodInfo _userTokenAsyncMethod;
private static PropertyInfo _userTokenTaskResultProperty;
// Used to determine if the Auth reflection initialized successfully, and should work.
private static bool _authReflectionInitialized = false;
// The header used by the AppCheck token.
private const string authHeader = "Authorization";
static FirebaseInterops()
{
InitializeAppReflection();
InitializeAppCheckReflection();
InitializeAuthReflection();
}
private static void LogError(string message)
{
#if FIREBASEAI_DEBUG_LOGGING
UnityEngine.Debug.LogError(message);
#endif
}
// Cache the methods needed for FirebaseApp reflection.
private static void InitializeAppReflection()
{
try
{
_dataCollectionProperty = typeof(FirebaseApp).GetProperty(
"IsDataCollectionDefaultEnabled",
BindingFlags.Instance | BindingFlags.NonPublic);
if (_dataCollectionProperty == null)
{
LogError("Could not find FirebaseApp.IsDataCollectionDefaultEnabled property via reflection.");
return;
}
if (_dataCollectionProperty.PropertyType != typeof(bool))
{
LogError("FirebaseApp.IsDataCollectionDefaultEnabled is not a bool, " +
$"but is {_dataCollectionProperty.PropertyType}");
return;
}
}
catch (Exception e)
{
LogError($"Failed to initialize FirebaseApp reflection: {e}");
}
}
// Gets the property FirebaseApp.IsDataCollectionDefaultEnabled.
public static bool GetIsDataCollectionDefaultEnabled(FirebaseApp firebaseApp)
{
if (firebaseApp == null || _dataCollectionProperty == null)
{
return false;
}
try
{
return (bool)_dataCollectionProperty.GetValue(firebaseApp);
}
catch (Exception e)
{
LogError($"Error accessing 'IsDataCollectionDefaultEnabled': {e}");
return false;
}
}
// SDK version to use if unable to find it.
private const string _unknownSdkVersion = "unknown";
private static readonly Lazy<string> _sdkVersionFetcher = new(() =>
{
try
{
// Get the type Firebase.VersionInfo from the assembly that defines FirebaseApp.
Type versionInfoType = typeof(FirebaseApp).Assembly.GetType("Firebase.VersionInfo");
if (versionInfoType == null)
{
LogError("Firebase.VersionInfo type not found via reflection");
return _unknownSdkVersion;
}
// Firebase.VersionInfo.SdkVersion
PropertyInfo sdkVersionProperty = versionInfoType.GetProperty(
"SdkVersion",
BindingFlags.Static | BindingFlags.NonPublic);
if (sdkVersionProperty == null)
{
LogError("Firebase.VersionInfo.SdkVersion property not found via reflection.");
return _unknownSdkVersion;
}
return sdkVersionProperty.GetValue(null) as string ?? _unknownSdkVersion;
}
catch (Exception e)
{
LogError($"Error accessing SdkVersion via reflection: {e}");
return _unknownSdkVersion;
}
});
// Gets the internal property Firebase.VersionInfo.SdkVersion
internal static string GetVersionInfoSdkVersion()
{
return _sdkVersionFetcher.Value;
}
// Cache the various types and methods needed for AppCheck token retrieval.
private static void InitializeAppCheckReflection()
{
const string firebaseAppCheckTypeName = "Firebase.AppCheck.FirebaseAppCheck, Firebase.AppCheck";
const string getAppCheckTokenMethodName = "GetAppCheckTokenAsync";
const string getLimitedUseAppCheckTokenMethodName = "GetLimitedUseAppCheckTokenAsync";
try
{
// Set this to false, to allow easy failing out via return.
_appCheckReflectionInitialized = false;
_appCheckType = Type.GetType(firebaseAppCheckTypeName);
if (_appCheckType == null)
{
return;
}
// Get the static method GetInstance(FirebaseApp app)
_appCheckGetInstanceMethod = _appCheckType.GetMethod(
"GetInstance", BindingFlags.Static | BindingFlags.Public, null,
new Type[] { typeof(FirebaseApp) }, null);
if (_appCheckGetInstanceMethod == null)
{
LogError("Could not find FirebaseAppCheck.GetInstance method via reflection.");
return;
}
// Get the instance method GetAppCheckTokenAsync(bool forceRefresh)
_appCheckGetTokenMethod = _appCheckType.GetMethod(
getAppCheckTokenMethodName, BindingFlags.Instance | BindingFlags.Public, null,
new Type[] { typeof(bool) }, null);
if (_appCheckGetTokenMethod == null)
{
LogError($"Could not find {getAppCheckTokenMethodName} method via reflection.");
return;
}
// Get the instance method GetLimitedUseAppCheckTokenAsync()
_appCheckGetLimitedUseTokenMethod = _appCheckType.GetMethod(
getLimitedUseAppCheckTokenMethodName, BindingFlags.Instance | BindingFlags.Public, null,
Type.EmptyTypes, null);
if (_appCheckGetLimitedUseTokenMethod == null)
{
LogError($"Could not find {getLimitedUseAppCheckTokenMethodName} method via reflection.");
return;
}
// Should be Task<AppCheckToken>
Type appCheckTokenTaskType = _appCheckGetTokenMethod.ReturnType;
// Get the Result property from the Task<AppCheckToken>
_appCheckTokenResultProperty = appCheckTokenTaskType.GetProperty("Result");
if (_appCheckTokenResultProperty == null)
{
LogError("Could not find Result property on App Check token Task.");
return;
}
// Should be AppCheckToken
Type appCheckTokenType = _appCheckTokenResultProperty.PropertyType;
_appCheckTokenTokenProperty = appCheckTokenType.GetProperty("Token");
if (_appCheckTokenTokenProperty == null)
{
LogError($"Could not find Token property on AppCheckToken.");
return;
}
_appCheckReflectionInitialized = true;
}
catch (Exception e)
{
LogError($"Exception during static initialization of FirebaseInterops: {e}");
}
}
// Gets the AppCheck Token, assuming there is one. Otherwise, returns null.
internal static async Task<string> GetAppCheckTokenAsync(FirebaseApp firebaseApp, bool limitedUse = false)
{
// If AppCheck reflection failed for any reason, nothing to do.
if (!_appCheckReflectionInitialized)
{
return null;
}
try
{
// Get the FirebaseAppCheck instance for the current FirebaseApp
object appCheckInstance = _appCheckGetInstanceMethod.Invoke(null, new object[] { firebaseApp });
if (appCheckInstance == null)
{
LogError("Failed to get FirebaseAppCheck instance via reflection.");
return null;
}
object taskObject;
if (limitedUse)
{
taskObject = _appCheckGetLimitedUseTokenMethod.Invoke(appCheckInstance, null);
}
else
{
// Invoke GetAppCheckTokenAsync(false) - returns a Task<AppCheckToken>
taskObject = _appCheckGetTokenMethod.Invoke(appCheckInstance, new object[] { false });
}
if (taskObject is not Task appCheckTokenTask)
{
LogError($"Invoking GetToken did not return a Task.");
return null;
}
// Await the task to get the AppCheckToken result
await appCheckTokenTask;
// Check for exceptions in the task
if (appCheckTokenTask.IsFaulted)
{
LogError($"Error getting App Check token: {appCheckTokenTask.Exception}");
return null;
}
// Get the Result property from the Task<AppCheckToken>
object tokenResult = _appCheckTokenResultProperty.GetValue(appCheckTokenTask); // This is the AppCheckToken struct
if (tokenResult == null)
{
LogError("App Check token result was null.");
return null;
}
// Get the Token property from the AppCheckToken struct
string finalToken = _appCheckTokenTokenProperty.GetValue(tokenResult) as string;
return finalToken;
}
catch (Exception e)
{
// Log any exceptions during the reflection/invocation process
LogError($"An error occurred while trying to fetch App Check token: {e}");
}
return null;
}
// Cache the various types and methods needed for Auth token retrieval.
private static void InitializeAuthReflection()
{
const string firebaseAuthTypeName = "Firebase.Auth.FirebaseAuth, Firebase.Auth";
const string getTokenMethodName = "TokenAsync";
try
{
// Set this to false, to allow easy failing out via return.
_authReflectionInitialized = false;
_authType = Type.GetType(firebaseAuthTypeName);
if (_authType == null)
{
// Auth assembly likely not present, fine to skip
return;
}
// Get the static method GetAuth(FirebaseApp app):
_authGetAuthMethod = _authType.GetMethod(
"GetAuth", BindingFlags.Static | BindingFlags.Public, null,
new Type[] { typeof(FirebaseApp) }, null);
if (_authGetAuthMethod == null)
{
LogError("Could not find FirebaseAuth.GetAuth method via reflection.");
return;
}
// Get the CurrentUser property from FirebaseAuth instance
_authCurrentUserProperty = _authType.GetProperty("CurrentUser", BindingFlags.Instance | BindingFlags.Public);
if (_authCurrentUserProperty == null)
{
LogError("Could not find FirebaseAuth.CurrentUser property via reflection.");
return;
}
// This should be FirebaseUser type
Type userType = _authCurrentUserProperty.PropertyType;
// Get the TokenAsync(bool) method from FirebaseUser
_userTokenAsyncMethod = userType.GetMethod(
getTokenMethodName, BindingFlags.Instance | BindingFlags.Public, null,
new Type[] { typeof(bool) }, null);
if (_userTokenAsyncMethod == null)
{
LogError($"Could not find FirebaseUser.{getTokenMethodName}(bool) method via reflection.");
return;
}
// The return type is Task<string>
Type tokenTaskType = _userTokenAsyncMethod.ReturnType;
// Get the Result property from Task<string>
_userTokenTaskResultProperty = tokenTaskType.GetProperty("Result");
if (_userTokenTaskResultProperty == null)
{
LogError("Could not find Result property on Auth token Task.");
return;
}
// Check if Result property is actually a string
if (_userTokenTaskResultProperty.PropertyType != typeof(string))
{
LogError("Auth token Task's Result property is not a string, " +
$"but is {_userTokenTaskResultProperty.PropertyType}");
return;
}
_authReflectionInitialized = true;
}
catch (Exception e)
{
LogError($"Exception during static initialization of Auth reflection in FirebaseInterops: {e}");
_authReflectionInitialized = false;
}
}
// Gets the Auth Token, assuming there is one. Otherwise, returns null.
internal static async Task<string> GetAuthTokenAsync(FirebaseApp firebaseApp)
{
// If Auth reflection failed for any reason, nothing to do.
if (!_authReflectionInitialized)
{
return null;
}
try
{
// Get the FirebaseAuth instance for the given FirebaseApp.
object authInstance = _authGetAuthMethod.Invoke(null, new object[] { firebaseApp });
if (authInstance == null)
{
LogError("Failed to get FirebaseAuth instance via reflection.");
return null;
}
// Get the CurrentUser property
object currentUser = _authCurrentUserProperty.GetValue(authInstance);
if (currentUser == null)
{
// No user logged in, so no token
return null;
}
// Invoke TokenAsync(false) - returns a Task<string>
object taskObject = _userTokenAsyncMethod.Invoke(currentUser, new object[] { false });
if (taskObject is not Task tokenTask)
{
LogError("Invoking TokenAsync did not return a Task.");
return null;
}
// Await the task to get the token result
await tokenTask;
// Check for exceptions in the task
if (tokenTask.IsFaulted)
{
LogError($"Error getting Auth token: {tokenTask.Exception}");
return null;
}
// Get the Result property (which is the string token)
return _userTokenTaskResultProperty.GetValue(tokenTask) as string;
}
catch (Exception e)
{
// Log any exceptions during the reflection/invocation process
LogError($"An error occurred while trying to fetch Auth token: {e}");
}
return null;
}
// Adds the other Firebase tokens to the HttpRequest, as available.
internal static async Task AddFirebaseTokensAsync(HttpRequestMessage request, FirebaseApp firebaseApp, string authTokenPrefix = "Firebase", bool limitedUseAppCheckTokens = false)
{
string appCheckToken = await GetAppCheckTokenAsync(firebaseApp, limitedUseAppCheckTokens);
if (!string.IsNullOrEmpty(appCheckToken))
{
request.Headers.Add(appCheckHeader, appCheckToken);
}
string authToken = await GetAuthTokenAsync(firebaseApp);
if (!string.IsNullOrEmpty(authToken))
{
request.Headers.Add(authHeader, $"{authTokenPrefix} {authToken}");
}
}
// Adds the other Firebase tokens to the WebSocket, as available.
internal static async Task AddFirebaseTokensAsync(ClientWebSocket socket, FirebaseApp firebaseApp, string authTokenPrefix = "Firebase")
{
string appCheckToken = await GetAppCheckTokenAsync(firebaseApp);
if (!string.IsNullOrEmpty(appCheckToken))
{
socket.Options.SetRequestHeader(appCheckHeader, appCheckToken);
}
string authToken = await GetAuthTokenAsync(firebaseApp);
if (!string.IsNullOrEmpty(authToken))
{
socket.Options.SetRequestHeader(authHeader, $"{authTokenPrefix} {authToken}");
}
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: bc30602676ea492eab91b6ff7cd6ba3b
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/FirebaseApp/Internal/FirebaseInterops.cs
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,89 @@
/*
* Copyright 2025 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
namespace Firebase.Internal
{
// Helper functions to help handling the Http calls.
internal static class HttpHelpers
{
internal static async Task SetRequestHeaders(HttpRequestMessage request, FirebaseApp firebaseApp, string authPrefix = "Firebase", bool limitedUseAppCheckTokens = false)
{
request.Headers.Add("x-goog-api-key", firebaseApp.Options.ApiKey);
string version = FirebaseInterops.GetVersionInfoSdkVersion();
request.Headers.Add("x-goog-api-client", $"gl-csharp/8.0 fire/{version}");
if (FirebaseInterops.GetIsDataCollectionDefaultEnabled(firebaseApp))
{
request.Headers.Add("X-Firebase-AppId", firebaseApp.Options.AppId);
request.Headers.Add("X-Firebase-AppVersion", UnityEngine.Application.version);
}
// Add additional Firebase tokens to the header.
await FirebaseInterops.AddFirebaseTokensAsync(request, firebaseApp, authPrefix, limitedUseAppCheckTokens);
}
// Helper function to throw an exception if the Http Response indicates failure.
// Useful as EnsureSuccessStatusCode can leave out relevant information.
internal static async Task ValidateHttpResponse(HttpResponseMessage response)
{
if (response.IsSuccessStatusCode)
{
return;
}
// Status code indicates failure, try to read the content for more details
string errorContent = "No error content available.";
if (response.Content != null)
{
try
{
errorContent = await response.Content.ReadAsStringAsync();
}
catch (Exception readEx)
{
// Handle being unable to read the content
errorContent = $"Failed to read error content: {readEx.Message}";
}
}
// Construct the exception with as much information as possible.
var ex = new HttpRequestException(
$"HTTP request failed with status code: {(int)response.StatusCode} ({response.ReasonPhrase}).\n" +
$"Error Content: {errorContent}",
null
);
ex.Data["StatusCode"] = response.StatusCode;
throw ex;
}
}
// Extension to get the StatusCode from the exception.
internal static class HttpRequestExceptionExtensions
{
internal static HttpStatusCode? GetStatusCode(this HttpRequestException exception)
{
if (exception.Data.Contains("StatusCode"))
{
return (HttpStatusCode)exception.Data["StatusCode"];
}
return null;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: edaf55a8a9944057852d797b4558bf8a
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/FirebaseApp/Internal/HttpHelpers.cs
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,9 @@
<linker>
<assembly fullname="Firebase.Auth">
<type fullname="Firebase.Auth.FirebaseAuth" preserve="all"/>
<type fullname="Firebase.Auth.FirebaseUser" preserve="all"/>
</assembly>
<assembly fullname="Firebase.AppCheck">
<type fullname="Firebase.AppCheck.FirebaseAppCheck" preserve="all"/>
</assembly>
</linker>

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 178c4b1924574f9c95f7a7f28adfd218
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/FirebaseApp/Internal/link.xml
timeCreated: 1480838400
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

View File

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

Binary file not shown.

View File

@@ -0,0 +1,81 @@
fileFormatVersion: 2
guid: 816270c2a2a348e59cb9b7b096a24f50
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Plugins/Firebase.Analytics.dll
timeCreated: 1480838400
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
platformData:
Android:
enabled: 1
settings:
CPU: AnyCPU
Any:
enabled: 0
settings: {}
Editor:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
Linux:
enabled: 1
settings:
CPU: x86
Linux64:
enabled: 1
settings:
CPU: x86_64
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: x86
OSXIntel64:
enabled: 1
settings:
CPU: x86_64
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Web:
enabled: 0
settings: {}
WebStreamed:
enabled: 0
settings: {}
Win:
enabled: 1
settings:
CPU: x86
Win64:
enabled: 1
settings:
CPU: x86_64
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
tvOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

View File

@@ -0,0 +1,81 @@
fileFormatVersion: 2
guid: 7311924048bd457bac6d713576c952da
labels:
- gvh
- gvh_version-13.11.0
- gvhp_exportpath-Firebase/Plugins/Firebase.App.dll
timeCreated: 1480838400
PluginImporter:
serializedVersion: 1
iconMap: {}
executionOrder: {}
isPreloaded: 0
platformData:
Android:
enabled: 1
settings:
CPU: AnyCPU
Any:
enabled: 0
settings: {}
Editor:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
Linux:
enabled: 1
settings:
CPU: x86
Linux64:
enabled: 1
settings:
CPU: x86_64
LinuxUniversal:
enabled: 1
settings:
CPU: AnyCPU
OSXIntel:
enabled: 1
settings:
CPU: x86
OSXIntel64:
enabled: 1
settings:
CPU: x86_64
OSXUniversal:
enabled: 1
settings:
CPU: AnyCPU
Web:
enabled: 0
settings: {}
WebStreamed:
enabled: 0
settings: {}
Win:
enabled: 1
settings:
CPU: x86
Win64:
enabled: 1
settings:
CPU: x86_64
WindowsStoreApps:
enabled: 0
settings:
CPU: AnyCPU
iOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
tvOS:
enabled: 0
settings:
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

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