quickstart-unity
quickstart-unity copied to clipboard
Able to generate google-services.xml properly if Application Id is changed right before building.
Based on https://github.com/googlesamples/unity-jar-resolver/issues/365
The user request to be able to generate google-services.xml
properly if they try to change application Id right before building.
Ex.
using UnityEditor;
public class Build
{
[MenuItem("Tools/Build/Debug")]
public static void BuildDebug()
{
PlayerSettings.productName = "debug";
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.firebaseExample.debug");
BuildPipeline.BuildPlayer(new[] { "Assets/Scenes/SampleScene.unity" }, "debug.apk", EditorUserBuildSettings.activeBuildTarget, BuildOptions.None);
}
[MenuItem("Tools/Build/Release")]
public static void BuildRelease()
{
PlayerSettings.productName = "release";
PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.firebaseExample2.release");
BuildPipeline.BuildPlayer(new[] { "Assets/Scenes/SampleScene.unity" }, "release.apk", EditorUserBuildSettings.activeBuildTarget, BuildOptions.None);
}
}
Currently GenerateXmlFromGoogleServicesJson.cs
(in Firebase.Editor.dll) relies on PlayServicesResolver.BundleIdChanged
event to change google-services.xml
when application id change. However, the event only triggered in the next update from the main thread.
https://github.com/googlesamples/unity-jar-resolver/blob/825901fa297065d651709fdc34cc5433410c8869/source/AndroidResolver/src/PlayServicesResolver.cs#L1370
@master-lincoln came up with a workaround to utilize reflection to force trigger this event
Type type = Type.GetType("Firebase.Editor.GenerateXmlFromGoogleServicesJson, Firebase.Editor");
var method = type.GetMethod("OnBundleIdChanged", BindingFlags.Public | BindingFlags.NonPublic| BindingFlags.Static);
method.Invoke(null, new[] {
(object)null,
new PlayServicesResolver.BundleIdChangedEventArgs
{
BundleId = newAppId,
PreviousBundleId = oldAppId
}
});
However, there should be a better way to support such case.
I was changing Application Id from the build script and game-services.xml
was not updated properly.
I think I fixed it and my current build script looks like this:
- Change Application Id (it MUST be done before step 4);
- Copy corresponding
google-services.json
andGoogleService-Info.plist
to the Assets folder. - Call
AssetDatabase.Refresh();
(I am not sure if this is really needed); - Call
GenerateXmlFromGoogleServicesJson.ForceJsonUpdate(false)
to regenerategoogle-services.xml