Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
chkuang-g opened this issue Sep 3, 2020 · 1 comment

Comments

@chkuang-g
Copy link
Contributor

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.

@AntonPetrov83
Copy link

AntonPetrov83 commented May 1, 2021

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:

  1. Change Application Id (it MUST be done before step 4);
  2. Copy corresponding google-services.json and GoogleService-Info.plist to the Assets folder.
  3. Call AssetDatabase.Refresh(); (I am not sure if this is really needed);
  4. Call GenerateXmlFromGoogleServicesJson.ForceJsonUpdate(false) to regenerate google-services.xml

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants