in editor/app/src/GenerateXmlFromGoogleServicesJson.cs [151:238]
private static void UpdateJson(bool ignoreModificationDate,
LogMessage logMessageForNoConfigFiles = null,
LogMessage logMessageForMissingBundleId = null) {
string googleServicesFile = FindGoogleServicesFile(ConfigFileType.Json,
logMessageForNoConfigFiles: LogNoMessage,
logMessageForMissingBundleId: LogNoMessage);
string googleServiceInfoFile = FindGoogleServicesFile(ConfigFileType.Plist,
logMessageForNoConfigFiles: LogNoMessage,
logMessageForMissingBundleId: LogNoMessage);
// Regenerate the XML for Android systems.
// (Will do nothing if we're not targeting Android.)
if (googleServicesFile != null) {
GenerateXmlResources(googleServicesFile, ignoreModificationDate);
}
// Here, the script will attempt to generate a google-services-desktop file,
// based on available package files. If either a google-services.json file,
// or a GoogleService-Info.plist file is available, (and has a bundle ID that
// matches the project) then it will be used to generate the desktop package
// file.
// If the project is set to build for Android, the google-services.json file
// is preferred. If it is set to build for iOS, the GoogleServices-Info.plist
// file is preferred. When set to standalone desktop, it tries to match the
// current bundleid, and if it can't, it takes any plist/json file it can find.
bool foundAtLeastOneFile = googleServicesFile != null || googleServiceInfoFile != null;
if(!foundAtLeastOneFile) {
// If we didn't find any files, and we're running in the editor (which is a given since
// we're in an AssetPreprocessor), then try again, except this time we'll just accept
// anything.
string desktopFile = FindGoogleServicesFile(ConfigFileType.Any,
mode: FindGoogleServicesFileMode.ReturnAll,
logMessageForNoConfigFiles: LogNoMessage,
logMessageForMissingBundleId: LogNoMessage);
if (desktopFile != null) {
foundAtLeastOneFile = true;
if (IsFileOfType(desktopFile, ConfigFileType.Json)) {
googleServicesFile = desktopFile;
} else if (IsFileOfType(desktopFile, ConfigFileType.Plist)) {
googleServiceInfoFile = desktopFile;
}
foundAtLeastOneFile = googleServicesFile != null || googleServiceInfoFile != null;
}
}
if (foundAtLeastOneFile) {
// Regenerate google-services-desktop file.
switch (EditorUserBuildSettings.selectedBuildTargetGroup) {
case BuildTargetGroup.iOS:
// If we're on iOS, generate the desktop file from the plist, if possible.
if (googleServiceInfoFile != null) {
CreateDesktopJsonFromPlist(googleServiceInfoFile);
} else if (googleServicesFile != null) {
CreateDesktopJsonFromJson(googleServicesFile);
}
break;
case BuildTargetGroup.Android:
case BuildTargetGroup.Standalone:
default:
// Anywhere else, favor the Android json.
if (googleServicesFile != null) {
CreateDesktopJsonFromJson(googleServicesFile);
} else if (googleServiceInfoFile != null) {
CreateDesktopJsonFromPlist(googleServiceInfoFile);
}
break;
}
} else {
Debug.LogWarning(DocRef.CouldNotFindPlistOrJson);
if (logMessageForNoConfigFiles != null) {
Measurement.ReportWithBuildTarget("generateconfig/failed/noconfig", null,
"Config File Missing");
}
logMessageForNoConfigFiles = logMessageForNoConfigFiles ?? LogErrorIfEnabled;
logMessageForNoConfigFiles(
String.Format(DocRef.GoogleServicesFileBundleIdMissing,
GetAndroidApplicationId(),
EditorUserBuildSettings.selectedBuildTargetGroup == BuildTargetGroup.iOS ?
"GoogleService-Info.plist" : "google-services.json",
String.Join("\n", BundleIdsFromBundleIdsByConfigFile(
ConfigFileDirectory).ToArray()),
Link.AndroidAddApp));
}
}