com.xd.sdk.oversea 7.3.3 → 7.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Editor/XD.SDK.Oversea.Editor.asmdef +1 -1
- package/Editor/XDOverseaAndroidGradleProcessor.cs +191 -5
- package/Plugins/iOS/XDGlobalWrapper.framework/Headers/XDGlobalWrapper.h +3 -3
- package/Plugins/iOS/XDGlobalWrapper.framework/Info.plist +0 -0
- package/Plugins/iOS/XDGlobalWrapper.framework/Modules/XDGlobalWrapper.swiftmodule/arm64-apple-ios.swiftmodule +0 -0
- package/Plugins/iOS/XDGlobalWrapper.framework/XDGlobalWrapper +0 -0
- package/package.json +3 -3
- package/Plugins/Android/libs/XDGPushGlobal_7.3.3.aar +0 -0
- package/Plugins/Android/libs/XDGPushGlobal_7.3.3.aar.meta +0 -32
- package/Plugins/Android/libs/XDGThirdLogin_7.3.3.aar +0 -0
- package/Plugins/Android/libs/XDGThirdLogin_7.3.3.aar.meta +0 -32
- package/Plugins/Android/libs/XDGThirdTrack_7.3.3.aar +0 -0
- package/Plugins/Android/libs/XDGThirdTrack_7.3.3.aar.meta +0 -32
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
using System;
|
|
1
2
|
using System.Collections.Generic;
|
|
2
3
|
using System.IO;
|
|
4
|
+
using System.Linq;
|
|
5
|
+
using System.Xml.Linq;
|
|
3
6
|
using UnityEditor.Build;
|
|
4
7
|
using UnityEditor.Build.Reporting;
|
|
5
8
|
using UnityEngine;
|
|
@@ -10,6 +13,18 @@ namespace XD.SDK.Oversea.Editor
|
|
|
10
13
|
{
|
|
11
14
|
public class XDOverseaAndroidGradleProcessor : XDAndroidProjectProcessor, IPreprocessBuildWithReport
|
|
12
15
|
{
|
|
16
|
+
private const string RegionTypeGlobal = "global";
|
|
17
|
+
private const string FacebookActivityName = "com.facebook.FacebookActivity";
|
|
18
|
+
private const string FacebookCustomTabActivityName = "com.facebook.CustomTabActivity";
|
|
19
|
+
private const string FacebookContentProviderName = "com.facebook.FacebookContentProvider";
|
|
20
|
+
private const string FacebookContentProviderAuthorityPrefix = "com.facebook.app.FacebookContentProvider";
|
|
21
|
+
private const string FacebookApplicationIdMetaDataName = "com.facebook.sdk.ApplicationId";
|
|
22
|
+
private const string FacebookClientTokenMetaDataName = "com.facebook.sdk.ClientToken";
|
|
23
|
+
private const string AndroidConfigChanges = "keyboard|keyboardHidden|screenLayout|screenSize|orientation";
|
|
24
|
+
private const string AndroidActionView = "android.intent.action.VIEW";
|
|
25
|
+
private const string AndroidCategoryDefault = "android.intent.category.DEFAULT";
|
|
26
|
+
private const string AndroidCategoryBrowsable = "android.intent.category.BROWSABLE";
|
|
27
|
+
private static readonly XNamespace AndroidNs = "http://schemas.android.com/apk/res/android";
|
|
13
28
|
|
|
14
29
|
public new int callbackOrder => 1050;
|
|
15
30
|
|
|
@@ -45,10 +60,7 @@ namespace XD.SDK.Oversea.Editor
|
|
|
45
60
|
{
|
|
46
61
|
var result = new List<AndroidGradleProjectConfig.Dependency>
|
|
47
62
|
{
|
|
48
|
-
|
|
49
|
-
new AndroidGradleProjectConfig.Dependency(group: "com.google.android.gms", module: "play-services-ads-identifier", version: VersionCatalog.GoogleAdsIdentifier),
|
|
50
|
-
new AndroidGradleProjectConfig.Dependency(group: "com.android.billingclient", module: "billing", version: VersionCatalog.BillingClient),
|
|
51
|
-
new AndroidGradleProjectConfig.Dependency(group: "androidx.browser", module: "browser", version: VersionCatalog.CustomTabsBrowser)
|
|
63
|
+
new AndroidGradleProjectConfig.Dependency(group: "com.xd.sdk.android", module: "analytics-global", version: VersionCatalog.XDAndroidSdkVersion),
|
|
52
64
|
};
|
|
53
65
|
|
|
54
66
|
// Firebase依赖
|
|
@@ -108,6 +120,180 @@ namespace XD.SDK.Oversea.Editor
|
|
|
108
120
|
return result;
|
|
109
121
|
}
|
|
110
122
|
|
|
123
|
+
protected override void OnProcessAndroidProject(string path)
|
|
124
|
+
{
|
|
125
|
+
base.OnProcessAndroidProject(path);
|
|
126
|
+
AddFacebookManifestConfig(path);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private void AddFacebookManifestConfig(string path)
|
|
130
|
+
{
|
|
131
|
+
if (!IsGlobalRegion()) return;
|
|
132
|
+
|
|
133
|
+
var facebookAppId = configModel?.facebook?.app_id;
|
|
134
|
+
if (string.IsNullOrWhiteSpace(facebookAppId)) return;
|
|
135
|
+
if (string.IsNullOrWhiteSpace(configModel?.facebook?.client_token))
|
|
136
|
+
{
|
|
137
|
+
Debug.LogWarning("XDConfig.json 中 facebook.client_token 为空,无法自动配置 Facebook ClientToken");
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
var androidManifest = Path.Combine(path, "src", "main", "AndroidManifest.xml");
|
|
141
|
+
if (!File.Exists(androidManifest))
|
|
142
|
+
{
|
|
143
|
+
Debug.LogWarning($"AndroidManifest.xml 文件不存在: {androidManifest}, 无法自动配置 Facebook");
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
var manifest = XDocument.Load(androidManifest);
|
|
148
|
+
var applicationRoot = manifest
|
|
149
|
+
.Element("manifest")
|
|
150
|
+
?.Element("application");
|
|
151
|
+
if (applicationRoot == null)
|
|
152
|
+
{
|
|
153
|
+
Debug.LogWarning("AndroidManifest.xml 文件格式不正确, 无法自动配置 Facebook");
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
AddFacebookManifestConfig(applicationRoot, configModel);
|
|
158
|
+
manifest.Save(androidManifest);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
internal static void AddFacebookManifestConfig(XElement applicationRoot, XDConfigModel configModel)
|
|
162
|
+
{
|
|
163
|
+
var facebookAppId = NormalizeFacebookAppId(configModel?.facebook?.app_id);
|
|
164
|
+
if (applicationRoot == null || string.IsNullOrEmpty(facebookAppId)) return;
|
|
165
|
+
|
|
166
|
+
AddOrUpdateMetaData(applicationRoot, FacebookApplicationIdMetaDataName, $"\\{facebookAppId}");
|
|
167
|
+
AddOrUpdateMetaData(applicationRoot, FacebookClientTokenMetaDataName, configModel?.facebook?.client_token);
|
|
168
|
+
AddOrUpdateFacebookActivity(applicationRoot, configModel?.game_name);
|
|
169
|
+
AddOrUpdateCustomTabActivity(applicationRoot, facebookAppId);
|
|
170
|
+
AddOrUpdateFacebookContentProvider(applicationRoot, facebookAppId);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
private bool IsGlobalRegion()
|
|
174
|
+
{
|
|
175
|
+
return string.Equals(configModel?.region_type?.Trim(), RegionTypeGlobal, StringComparison.OrdinalIgnoreCase);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
private static void AddOrUpdateMetaData(XElement applicationRoot, string name, string value)
|
|
179
|
+
{
|
|
180
|
+
if (string.IsNullOrWhiteSpace(value)) return;
|
|
181
|
+
|
|
182
|
+
var metaData = applicationRoot.Elements("meta-data")
|
|
183
|
+
.FirstOrDefault(element => GetAndroidAttribute(element, "name") == name);
|
|
184
|
+
if (metaData == null)
|
|
185
|
+
{
|
|
186
|
+
metaData = new XElement("meta-data");
|
|
187
|
+
applicationRoot.Add(metaData);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
SetAndroidAttribute(metaData, "name", name);
|
|
191
|
+
SetAndroidAttribute(metaData, "value", value.Trim());
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private static string NormalizeFacebookAppId(string appId)
|
|
195
|
+
{
|
|
196
|
+
return appId?.Trim().TrimStart('\\');
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private static void AddOrUpdateFacebookActivity(XElement applicationRoot, string gameName)
|
|
200
|
+
{
|
|
201
|
+
var activity = FindOrCreateActivity(applicationRoot, FacebookActivityName);
|
|
202
|
+
SetAndroidAttribute(activity, "configChanges", AndroidConfigChanges);
|
|
203
|
+
SetAndroidAttribute(activity, "label",
|
|
204
|
+
string.IsNullOrWhiteSpace(gameName) ? "@string/app_name" : gameName.Trim());
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
private static void AddOrUpdateCustomTabActivity(XElement applicationRoot, string facebookAppId)
|
|
208
|
+
{
|
|
209
|
+
var activity = FindOrCreateActivity(applicationRoot, FacebookCustomTabActivityName);
|
|
210
|
+
SetAndroidAttribute(activity, "configChanges", AndroidConfigChanges);
|
|
211
|
+
SetAndroidAttribute(activity, "exported", "true");
|
|
212
|
+
|
|
213
|
+
var intentFilter = activity.Elements("intent-filter")
|
|
214
|
+
.FirstOrDefault(IsCustomTabIntentFilter);
|
|
215
|
+
if (intentFilter == null)
|
|
216
|
+
{
|
|
217
|
+
intentFilter = new XElement("intent-filter");
|
|
218
|
+
activity.Add(intentFilter);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
AddChildWithAndroidNameIfMissing(intentFilter, "action", AndroidActionView);
|
|
222
|
+
AddChildWithAndroidNameIfMissing(intentFilter, "category", AndroidCategoryDefault);
|
|
223
|
+
AddChildWithAndroidNameIfMissing(intentFilter, "category", AndroidCategoryBrowsable);
|
|
224
|
+
AddOrUpdateDataScheme(intentFilter, $"fb{facebookAppId}");
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
private static void AddOrUpdateFacebookContentProvider(XElement applicationRoot, string facebookAppId)
|
|
228
|
+
{
|
|
229
|
+
var provider = applicationRoot.Elements("provider")
|
|
230
|
+
.FirstOrDefault(element => GetAndroidAttribute(element, "name") == FacebookContentProviderName);
|
|
231
|
+
if (provider == null)
|
|
232
|
+
{
|
|
233
|
+
provider = new XElement("provider");
|
|
234
|
+
applicationRoot.Add(provider);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
SetAndroidAttribute(provider, "name", FacebookContentProviderName);
|
|
238
|
+
SetAndroidAttribute(provider, "authorities", $"{FacebookContentProviderAuthorityPrefix}{facebookAppId}");
|
|
239
|
+
SetAndroidAttribute(provider, "exported", "true");
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private static XElement FindOrCreateActivity(XElement applicationRoot, string activityName)
|
|
243
|
+
{
|
|
244
|
+
var activity = applicationRoot.Elements("activity")
|
|
245
|
+
.FirstOrDefault(element => GetAndroidAttribute(element, "name") == activityName);
|
|
246
|
+
if (activity != null) return activity;
|
|
247
|
+
|
|
248
|
+
activity = new XElement("activity");
|
|
249
|
+
SetAndroidAttribute(activity, "name", activityName);
|
|
250
|
+
applicationRoot.Add(activity);
|
|
251
|
+
return activity;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
private static bool IsCustomTabIntentFilter(XElement intentFilter)
|
|
255
|
+
{
|
|
256
|
+
return HasChildWithAndroidName(intentFilter, "action", AndroidActionView)
|
|
257
|
+
&& HasChildWithAndroidName(intentFilter, "category", AndroidCategoryDefault)
|
|
258
|
+
&& HasChildWithAndroidName(intentFilter, "category", AndroidCategoryBrowsable);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
private static bool HasChildWithAndroidName(XElement root, string childName, string name)
|
|
262
|
+
{
|
|
263
|
+
return root.Elements(childName).Any(element => GetAndroidAttribute(element, "name") == name);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
private static void AddChildWithAndroidNameIfMissing(XElement root, string childName, string name)
|
|
267
|
+
{
|
|
268
|
+
if (HasChildWithAndroidName(root, childName, name)) return;
|
|
269
|
+
|
|
270
|
+
var child = new XElement(childName);
|
|
271
|
+
SetAndroidAttribute(child, "name", name);
|
|
272
|
+
root.Add(child);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
private static void AddOrUpdateDataScheme(XElement intentFilter, string scheme)
|
|
276
|
+
{
|
|
277
|
+
var data = intentFilter.Elements("data").FirstOrDefault();
|
|
278
|
+
if (data == null)
|
|
279
|
+
{
|
|
280
|
+
data = new XElement("data");
|
|
281
|
+
intentFilter.Add(data);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
SetAndroidAttribute(data, "scheme", scheme);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
private static string GetAndroidAttribute(XElement element, string attributeName)
|
|
288
|
+
{
|
|
289
|
+
return (string)element.Attribute(AndroidNs + attributeName);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
private static void SetAndroidAttribute(XElement element, string attributeName, string value)
|
|
293
|
+
{
|
|
294
|
+
element.SetAttributeValue(AndroidNs + attributeName, value);
|
|
295
|
+
}
|
|
296
|
+
|
|
111
297
|
public void OnPreprocessBuild(BuildReport report)
|
|
112
298
|
{
|
|
113
299
|
// 删除旧版本添加的内容
|
|
@@ -118,4 +304,4 @@ namespace XD.SDK.Oversea.Editor
|
|
|
118
304
|
if (File.Exists(targetPath)) File.Delete(targetPath);
|
|
119
305
|
}
|
|
120
306
|
}
|
|
121
|
-
}
|
|
307
|
+
}
|
|
@@ -15,6 +15,6 @@ FOUNDATION_EXPORT const unsigned char XDGlobalWrapperVersionString[];
|
|
|
15
15
|
|
|
16
16
|
// In this header, you should import all the public headers of your framework using statements like #import <XDGlobalWrapper/PublicHeader.h>
|
|
17
17
|
|
|
18
|
-
#define XDGlobal_VERSION @"7.
|
|
19
|
-
#define XDGlobal_VERSION_CODE @"
|
|
20
|
-
// HASH
|
|
18
|
+
#define XDGlobal_VERSION @"7.6.0"
|
|
19
|
+
#define XDGlobal_VERSION_CODE @"7060000"
|
|
20
|
+
// HASH 2fd78d92
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "com.xd.sdk.oversea",
|
|
3
3
|
"displayName": "XDGSDK Oversea",
|
|
4
|
-
"version": "7.
|
|
4
|
+
"version": "7.6.0",
|
|
5
5
|
"description": "XDGSDK",
|
|
6
6
|
"unity": "2019.3",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"dependencies": {
|
|
9
|
-
"com.xd.sdk.common": "7.
|
|
9
|
+
"com.xd.sdk.common": "7.6.0"
|
|
10
10
|
}
|
|
11
|
-
}
|
|
11
|
+
}
|
|
Binary file
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
fileFormatVersion: 2
|
|
2
|
-
guid: 6a5d89219f5a41628820d2c42b95b544
|
|
3
|
-
PluginImporter:
|
|
4
|
-
externalObjects: {}
|
|
5
|
-
serializedVersion: 2
|
|
6
|
-
iconMap: {}
|
|
7
|
-
executionOrder: {}
|
|
8
|
-
defineConstraints: []
|
|
9
|
-
isPreloaded: 0
|
|
10
|
-
isOverridable: 1
|
|
11
|
-
isExplicitlyReferenced: 0
|
|
12
|
-
validateReferences: 1
|
|
13
|
-
platformData:
|
|
14
|
-
- first:
|
|
15
|
-
Android: Android
|
|
16
|
-
second:
|
|
17
|
-
enabled: 1
|
|
18
|
-
settings: {}
|
|
19
|
-
- first:
|
|
20
|
-
Any:
|
|
21
|
-
second:
|
|
22
|
-
enabled: 0
|
|
23
|
-
settings: {}
|
|
24
|
-
- first:
|
|
25
|
-
Editor: Editor
|
|
26
|
-
second:
|
|
27
|
-
enabled: 0
|
|
28
|
-
settings:
|
|
29
|
-
DefaultValueInitialized: true
|
|
30
|
-
userData:
|
|
31
|
-
assetBundleName:
|
|
32
|
-
assetBundleVariant:
|
|
Binary file
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
fileFormatVersion: 2
|
|
2
|
-
guid: 38236b5ea1a9478293ffde1a95ac870d
|
|
3
|
-
PluginImporter:
|
|
4
|
-
externalObjects: {}
|
|
5
|
-
serializedVersion: 2
|
|
6
|
-
iconMap: {}
|
|
7
|
-
executionOrder: {}
|
|
8
|
-
defineConstraints: []
|
|
9
|
-
isPreloaded: 0
|
|
10
|
-
isOverridable: 0
|
|
11
|
-
isExplicitlyReferenced: 0
|
|
12
|
-
validateReferences: 1
|
|
13
|
-
platformData:
|
|
14
|
-
- first:
|
|
15
|
-
Android: Android
|
|
16
|
-
second:
|
|
17
|
-
enabled: 1
|
|
18
|
-
settings: {}
|
|
19
|
-
- first:
|
|
20
|
-
Any:
|
|
21
|
-
second:
|
|
22
|
-
enabled: 0
|
|
23
|
-
settings: {}
|
|
24
|
-
- first:
|
|
25
|
-
Editor: Editor
|
|
26
|
-
second:
|
|
27
|
-
enabled: 0
|
|
28
|
-
settings:
|
|
29
|
-
DefaultValueInitialized: true
|
|
30
|
-
userData:
|
|
31
|
-
assetBundleName:
|
|
32
|
-
assetBundleVariant:
|
|
Binary file
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
fileFormatVersion: 2
|
|
2
|
-
guid: 3c53804fb42c4e468c9d3d29eb75bc33
|
|
3
|
-
PluginImporter:
|
|
4
|
-
externalObjects: {}
|
|
5
|
-
serializedVersion: 2
|
|
6
|
-
iconMap: {}
|
|
7
|
-
executionOrder: {}
|
|
8
|
-
defineConstraints: []
|
|
9
|
-
isPreloaded: 0
|
|
10
|
-
isOverridable: 0
|
|
11
|
-
isExplicitlyReferenced: 0
|
|
12
|
-
validateReferences: 1
|
|
13
|
-
platformData:
|
|
14
|
-
- first:
|
|
15
|
-
Android: Android
|
|
16
|
-
second:
|
|
17
|
-
enabled: 1
|
|
18
|
-
settings: {}
|
|
19
|
-
- first:
|
|
20
|
-
Any:
|
|
21
|
-
second:
|
|
22
|
-
enabled: 0
|
|
23
|
-
settings: {}
|
|
24
|
-
- first:
|
|
25
|
-
Editor: Editor
|
|
26
|
-
second:
|
|
27
|
-
enabled: 0
|
|
28
|
-
settings:
|
|
29
|
-
DefaultValueInitialized: true
|
|
30
|
-
userData:
|
|
31
|
-
assetBundleName:
|
|
32
|
-
assetBundleVariant:
|