Skip to content

Able to generate google-services.xml properly if Application Id is changed right before building. #768

Open
@chkuang-g

Description

@chkuang-g

Based on googlesamples/unity-jar-resolver#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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions