com.azerion.bluestack 3.1.5 → 3.1.6

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/CHANGELOG.md CHANGED
@@ -1,9 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## [3.1.6] - 2024-07-26
4
+
5
+ ### Changed
6
+ - BlueStack Android SDK version upgraded to 4.4.0
7
+
8
+ ### Added
9
+ - Manage Android mediation networks from the BlueStack Settings
10
+
3
11
  ## [3.1.5] - 2024-07-10
4
12
 
5
13
  ### Added
6
- - Method added to refresh Banner in the editor
14
+ - Method added to refresh Banner in the unity editor
7
15
  - Native ad Close method added to trigger OnNativeAdClosed event in the editor
8
16
 
9
17
  ### Changed
@@ -13,7 +21,7 @@
13
21
  ### Fixed
14
22
  - Fixed the BlueStack Settings null exception issue when no settings exist
15
23
  - Fixed the issue with saving AdMob App ids
16
- - Error handled in Native ads, in case of null or empty image urls.
24
+ - Error handled in Native ads, in case of null or empty image urls
17
25
 
18
26
  ## [3.1.4] - 2024-07-04
19
27
 
@@ -2,6 +2,7 @@ using System;
2
2
  using System.Collections.Generic;
3
3
  using System.IO;
4
4
  using System.Xml;
5
+ using UnityEditor;
5
6
  using UnityEngine;
6
7
 
7
8
  namespace Azerion.BlueStack.Editor.Android
@@ -10,7 +11,64 @@ namespace Azerion.BlueStack.Editor.Android
10
11
  {
11
12
  void IDependencyModifier.modifyDependencies(string xmlFilePath, List<MediationNetworkDependency> dependencies)
12
13
  {
14
+ XmlDocument xmlDoc = new XmlDocument();
13
15
 
16
+ try
17
+ {
18
+ xmlDoc.Load(xmlFilePath);
19
+ }
20
+ catch (IOException e)
21
+ {
22
+ throw new Exception("Unable to load xml, error: " + e.Message);
23
+ }
24
+
25
+ XmlNode androidPackages = xmlDoc.SelectSingleNode($"//dependencies/androidPackages");
26
+ if (androidPackages == null)
27
+ {
28
+ Debug.LogError("No node with the name 'androidPackages' found in the xml");
29
+ return;
30
+ }
31
+
32
+ // Remove all networks from the packages node
33
+ // androidPackages.RemoveAll();
34
+
35
+ // Add/remove networks
36
+ foreach (MediationNetworkDependency dependency in dependencies)
37
+ {
38
+ XmlNode packageNode = androidPackages.SelectSingleNode(
39
+ $"//androidPackage[@spec='{dependency.Package}']");
40
+
41
+ if (packageNode != null)
42
+ {
43
+ // Remove inactive network
44
+ if (!dependency.Active)
45
+ {
46
+ androidPackages.RemoveChild(packageNode);
47
+ }
48
+ // else keep it
49
+ }
50
+ else
51
+ {
52
+ // Add new active network
53
+ if (dependency.Active)
54
+ {
55
+ XmlElement package = xmlDoc.CreateElement("androidPackage");
56
+ package.SetAttribute("spec", dependency.Package);
57
+ if (dependency.Repositories != null)
58
+ {
59
+ XmlNode repositories = xmlDoc.ImportNode(dependency.Repositories, true);
60
+ package.AppendChild(repositories);
61
+ }
62
+ androidPackages.AppendChild(package);
63
+ }
64
+ }
65
+ }
66
+
67
+ // Replace main dependency XML content with the updated XML
68
+ System.IO.File.WriteAllText(xmlFilePath, xmlDoc.OuterXml);
69
+ AssetDatabase.Refresh();
70
+
71
+ // Debug.Log("Mediation Dependencies are updated successfully in Main Dependencies XML.");
14
72
  }
15
73
 
16
74
  void IDependencyModifier.modifyMediationNetworkDependencies(string xmlFilePath,
@@ -20,7 +20,6 @@ namespace Azerion.BlueStack.Editor.Android
20
20
  if (specAttribute == null) continue;
21
21
  dependencies.Add(new AndroidDependency(specAttribute.Value, "", ""));
22
22
  }
23
-
24
23
  return dependencies;
25
24
  }
26
25
 
@@ -37,15 +36,17 @@ namespace Azerion.BlueStack.Editor.Android
37
36
  var nameAttribute = androidPackageNode.Attributes?["name"];
38
37
  var packageAttribute = androidPackageNode.Attributes?["package"];
39
38
  var activeAttribute = androidPackageNode.Attributes?["active"];
39
+ var repositoriesNode = androidPackageNode.SelectSingleNode("repositories");
40
40
  if (nameAttribute == null || packageAttribute == null) continue;
41
41
 
42
42
  var name = nameAttribute.Value;
43
43
  var package = packageAttribute.Value;
44
- var active = bool.Parse(activeAttribute.Value);
44
+ var active = activeAttribute != null && bool.Parse(activeAttribute.Value);
45
45
 
46
- dependencies.Add(new MediationNetworkDependency(name, package, active));
46
+ dependencies.Add(repositoriesNode != null
47
+ ? new MediationNetworkDependency(name, package, active, repositoriesNode)
48
+ : new MediationNetworkDependency(name, package, active));
47
49
  }
48
-
49
50
  return dependencies;
50
51
  }
51
52
  }
@@ -5,7 +5,7 @@ apply plugin: 'com.android.library'
5
5
 
6
6
  dependencies {
7
7
  implementation fileTree(dir: 'libs', include: ['*.jar'])
8
- implementation 'com.madvertise:bluestack-core-sdk:4.2.0'
8
+ implementation 'com.madvertise:bluestack-core-sdk:4.4.0'
9
9
  **DEPS**}
10
10
 
11
11
  android {
@@ -40,7 +40,7 @@ namespace Azerion.BlueStack.Editor.Android
40
40
  }
41
41
  catch (IOException e)
42
42
  {
43
- StopBuildWithMessage(MANIFEST_FILE_MISSING);
43
+ StopBuildWithMessage(MANIFEST_FILE_MISSING +" : " + e.Message );
44
44
  }
45
45
 
46
46
  XElement elemManifest = manifest.Element("manifest");
@@ -1,6 +1,10 @@
1
1
  <dependencies>
2
2
  <androidPackages>
3
- <androidPackage spec="com.azerion:bluestack-sdk-core:4.3.2"/>
3
+ <androidPackage spec="com.azerion:bluestack-sdk-core:4.4.0">
4
+ <repositories>
5
+ <repository>https://packagecloud.io/smartadserver/android/maven2</repository>
6
+ </repositories>
7
+ </androidPackage>
4
8
  </androidPackages>
5
9
  <iosPods>
6
10
  <iosPod name="BlueStack-SDK" version="4.4.6" bitcodeEnabled="false" addToAllTargets="false" subspecs="[]"/>
@@ -0,0 +1,31 @@
1
+ <networkList>
2
+ <androidNetworks>
3
+ <network name="Criteo In-App Bidding" package="com.azerion:bluestack-mediation-criteo:4.4.0.0" active="true"/>
4
+ <network name="AdColony" package="com.azerion:bluestack-mediation-adcolony:4.4.0.0" active="true"/>
5
+ <network name="Huawei" package="com.azerion:bluestack-mediation-huawei:4.4.0.0" active="true">
6
+ <repositories>
7
+ <repository>https://developer.huawei.com/repo/</repository>
8
+ </repositories>
9
+ </network>
10
+ <network name="GAM / AdMob" package="com.azerion:bluestack-mediation-gma:4.4.0.0" active="true"/>
11
+ <network name="In-App Bidding" package="com.azerion:bluestack-mediation-bidding:4.4.0.0" active="true">
12
+ <repositories>
13
+ <repository>https://packagecloud.io/smartadserver/android/maven2</repository>
14
+ </repositories>
15
+ </network>
16
+ <network name="Smart Display / Equativ" package="com.azerion:bluestack-mediation-smartadserver:4.4.0.0" active="true">
17
+ <repositories>
18
+ <repository>https://packagecloud.io/smartadserver/android/maven2</repository>
19
+ </repositories>
20
+ </network>
21
+ <network name="Ogury" package="com.azerion:bluestack-mediation-ogury:4.4.0.0" active="true">
22
+ <repositories>
23
+ <repository>https://maven.ogury.co/</repository>
24
+ </repositories>
25
+ </network>
26
+ </androidNetworks>
27
+ <iosNetworks>
28
+ <network name="AdMob" package="Google-Mobile-Ads-SDK" active="true"/>
29
+ <network name="Smart Display" package="Smart-Display-SDK" active="true"/>
30
+ </iosNetworks>
31
+ </networkList>
@@ -31,6 +31,13 @@ namespace Azerion.BlueStack.Editor
31
31
  get => Instance.iOSMediationNetworks ?? new List<MediationNetworkDependency>();
32
32
  set => Instance.iOSMediationNetworks = value;
33
33
  }
34
+
35
+ [SerializeField] private List<MediationNetworkDependency> androidMediationNetworks;
36
+ public List<MediationNetworkDependency> AndroidMediationNetworks
37
+ {
38
+ get => Instance.androidMediationNetworks ?? new List<MediationNetworkDependency>();
39
+ set => Instance.androidMediationNetworks = value;
40
+ }
34
41
 
35
42
  public static BlueStackSettings Instance
36
43
  {
@@ -16,9 +16,7 @@ namespace Azerion.BlueStack.Editor
16
16
  private const string BlueStackSettingsResDir = "Assets/Resources";
17
17
  private const string BlueStackSettingsFile = "BlueStackSettings";
18
18
  private const string BlueStackSettingsFileExtension = ".asset";
19
-
20
- private List<bool> iOSMediationNetworkList = new List<bool>();
21
- private List<bool> AndroidMediationNetworkList = new List<bool>();
19
+
22
20
  SerializedProperty iOSMediationNetworkListProperty;
23
21
  SerializedProperty androidMediationNetworkListProperty;
24
22
 
@@ -26,7 +24,8 @@ namespace Azerion.BlueStack.Editor
26
24
  SerializedProperty androidAdmobAppIdProperty;
27
25
 
28
26
  public static event EventHandler<List<MediationNetworkDependency>> onIOSMediationNetworksUpdateEvent;
29
- public static int someint = 12;
27
+ public static event EventHandler<List<MediationNetworkDependency>> onAndroidMediationNetworksUpdateEvent;
28
+
30
29
  [MenuItem("Azerion/BlueStack/Settings")]
31
30
  public static void OpenInspector()
32
31
  {
@@ -41,7 +40,7 @@ namespace Azerion.BlueStack.Editor
41
40
  {
42
41
  if (BlueStackSettings.Instance == null)
43
42
  {
44
- try
43
+ try
45
44
  {
46
45
  Directory.CreateDirectory(BlueStackSettingsResDir);
47
46
  BlueStackSettings.Instance = ScriptableObject.CreateInstance<BlueStackSettings>();
@@ -49,8 +48,8 @@ namespace Azerion.BlueStack.Editor
49
48
  string assetPath = Path.Combine(BlueStackSettingsResDir, BlueStackSettingsFile);
50
49
  string assetPathWithExtension = Path.ChangeExtension(assetPath, BlueStackSettingsFileExtension);
51
50
  AssetDatabase.CreateAsset(BlueStackSettings.Instance, assetPathWithExtension);
52
- AssetDatabase.SaveAssets();
53
-
51
+ AssetDatabase.SaveAssets();
52
+
54
53
  return true;
55
54
  }
56
55
  catch (Exception e)
@@ -83,25 +82,29 @@ namespace Azerion.BlueStack.Editor
83
82
 
84
83
  static void Initialize()
85
84
  {
85
+ Debug.LogWarning("BlueStackSettings Initialize");
86
+
86
87
  if (!DoesBlueStackSettingsExist()) return;
87
88
 
88
89
  BlueStackSettings.Instance.IOSMediationNetworks.Clear();
89
-
90
- // Sync/Copy base mediation dependency xml file from Package to Assets directory
91
- DependencyProvider.SyncMediationDependencies();
90
+ BlueStackSettings.Instance.AndroidMediationNetworks.Clear();
92
91
 
93
- var iOSMediationNetworkDependencies = DependencyProvider.GetAllMediationNetworkDependencies(new IOSDependencyParser());
92
+ // Sync/Copy base mediation dependency xml file from Package to Assets directory
93
+ DependencyProvider.SyncDependenciesXMLs();
94
94
 
95
- // BlueStackSettings.Instance.IOSMediationNetworks = BlueStackSettings.Instance.IOSMediationNetworks
96
- // .Where(x => iOSMediationNetworkDependencies.All(l2 => l2.Name != x.Name)).ToList();
95
+ var iOSMediationNetworkDependencies = DependencyProvider.GetMediationNetworkDependenciesFromAsset(new IOSDependencyParser());
96
+ var androidMediationNetworkDependencies = DependencyProvider.GetMediationNetworkDependenciesFromAsset(new AndroidDependencyParser());
97
97
 
98
- BlueStackSettings.Instance.IOSMediationNetworks =
99
- BlueStackSettings.Instance.IOSMediationNetworks.Union(iOSMediationNetworkDependencies).ToList();
98
+ BlueStackSettings.Instance.AndroidMediationNetworks = androidMediationNetworkDependencies;
99
+ BlueStackSettings.Instance.IOSMediationNetworks = iOSMediationNetworkDependencies;
100
100
 
101
+ DependencyProvider.UpdateMediationNetworkDependencies(new AndroidDependencyModifier(),
102
+ BlueStackSettings.Instance.AndroidMediationNetworks);
101
103
  DependencyProvider.UpdateMediationNetworkDependencies(new IOSDependencyModifier(),
102
104
  BlueStackSettings.Instance.IOSMediationNetworks);
105
+
103
106
  }
104
-
107
+
105
108
  public override void OnInspectorGUI()
106
109
  {
107
110
  EditorGUI.BeginChangeCheck();
@@ -109,12 +112,14 @@ namespace Azerion.BlueStack.Editor
109
112
 
110
113
  iOSAdmobAppIdProperty = serializedObject.FindProperty("admobAppIdIOS");
111
114
  androidAdmobAppIdProperty = serializedObject.FindProperty("admobAppIdAndroid");
112
-
115
+
113
116
  EditorGUILayout.PropertyField(iOSAdmobAppIdProperty, new GUIContent("Admob AppId IOS: "));
114
117
  EditorGUILayout.PropertyField(androidAdmobAppIdProperty, new GUIContent("Admob AppId Android: "));
118
+
119
+ // iOS Mediation Networks
115
120
  EditorGUILayout.Separator();
116
121
  EditorGUILayout.LabelField("iOS Mediation Networks: ", EditorStyles.boldLabel);
117
-
122
+
118
123
  foreach (var dependency in BlueStackSettings.Instance.IOSMediationNetworks)
119
124
  {
120
125
  // dependency.Print();
@@ -124,17 +129,35 @@ namespace Azerion.BlueStack.Editor
124
129
  dependency.Active = newAutomaticConfigurationFilesUpdate;
125
130
  }
126
131
  }
127
-
132
+
133
+ // Android Mediation Networks
134
+ EditorGUILayout.Separator();
135
+ EditorGUILayout.LabelField("Android Mediation Networks: ", EditorStyles.boldLabel);
136
+
137
+ foreach (var dependency in BlueStackSettings.Instance.AndroidMediationNetworks)
138
+ {
139
+ // dependency.Print();
140
+ bool newAutomaticConfigurationFilesUpdate = GUILayout.Toggle(dependency.Active, dependency.Name);
141
+ if (newAutomaticConfigurationFilesUpdate != dependency.Active)
142
+ {
143
+ dependency.Active = newAutomaticConfigurationFilesUpdate;
144
+ }
145
+ }
146
+
128
147
  if (EditorGUI.EndChangeCheck())
129
148
  {
130
- Debug.LogWarning("EditorGUI Changed");
149
+ // TODO: Before triggering the event check if any change occured in the list
131
150
  onIOSMediationNetworksUpdateEvent?.Invoke(this, BlueStackSettings.Instance.IOSMediationNetworks);
132
-
151
+ onAndroidMediationNetworksUpdateEvent?.Invoke(this, BlueStackSettings.Instance.AndroidMediationNetworks);
152
+
133
153
  DependencyProvider.UpdateMediationNetworkDependencies(new IOSDependencyModifier(),
134
154
  BlueStackSettings.Instance.IOSMediationNetworks);
155
+ DependencyProvider.UpdateMediationNetworkDependencies(new AndroidDependencyModifier(),
156
+ BlueStackSettings.Instance.AndroidMediationNetworks);
157
+
135
158
  serializedObject.ApplyModifiedProperties();
136
159
  }
137
-
160
+
138
161
  }
139
162
  }
140
163
  }
@@ -12,13 +12,13 @@ namespace Azerion.BlueStack.Editor
12
12
  "Packages/com.azerion.bluestack/Editor/" + "BlueStackDependencies.xml";
13
13
 
14
14
  private static readonly string _mediationDependencyPathInPackage =
15
- "Packages/com.azerion.bluestack/Editor/" + "BlueStackMediationDependencies.xml";
15
+ "Packages/com.azerion.bluestack/Editor/" + "BlueStackMediationNetworks.xml";
16
16
 
17
17
  private static readonly string _editorPathInAssets = "Assets/Editor/";
18
18
  private static readonly string _dependencyPathInAssets = _editorPathInAssets + "BlueStackDependencies.xml";
19
19
 
20
20
  private static readonly string _mediationDependencyPathInAssets =
21
- _editorPathInAssets + "BlueStackMediationDependencies.xml";
21
+ _editorPathInAssets + "BlueStackMediationNetworks.xml";
22
22
 
23
23
  public static List<Dependency> GetAllDependencies(IDependencyParser parser)
24
24
  {
@@ -33,23 +33,21 @@ namespace Azerion.BlueStack.Editor
33
33
  }
34
34
  }
35
35
 
36
- public static List<MediationNetworkDependency> GetAllMediationNetworkDependencies(IDependencyParser parser)
36
+ public static List<MediationNetworkDependency> GetMediationNetworkDependenciesFromAsset(IDependencyParser parser)
37
37
  {
38
38
  if (File.Exists(_mediationDependencyPathInAssets))
39
39
  {
40
40
  return parser.parseMediationNetworkDependencies(_mediationDependencyPathInAssets);
41
41
  }
42
- else
43
- {
44
- Debug.LogError("Dependencies file not found at: " + _mediationDependencyPathInAssets);
45
- return new List<MediationNetworkDependency>();
46
- }
42
+
43
+ Debug.LogError("Dependencies file not found at: " + _mediationDependencyPathInAssets);
44
+ return new List<MediationNetworkDependency>();
47
45
  }
48
46
 
49
47
  public static void UpdateMediationNetworkDependencies(IDependencyModifier modifier,
50
48
  List<MediationNetworkDependency> dependencies)
51
49
  {
52
- // Update Mediation Network Dependencies in BlueStackMediationDependencies.xml
50
+ // Update Mediation Network Dependencies in BlueStackMediationNetworks.xml
53
51
  if (File.Exists(_mediationDependencyPathInAssets))
54
52
  {
55
53
  modifier.modifyMediationNetworkDependencies(_mediationDependencyPathInAssets, dependencies);
@@ -70,7 +68,7 @@ namespace Azerion.BlueStack.Editor
70
68
  }
71
69
  }
72
70
 
73
- public static void SyncMediationDependencies()
71
+ public static void SyncDependenciesXMLs()
74
72
  {
75
73
  // Copy from the source
76
74
  CopyDependenciesXMLFileToAssets();
@@ -159,7 +157,7 @@ namespace Azerion.BlueStack.Editor
159
157
 
160
158
  // Save the modified XML
161
159
  SaveMainXMLFile(mainDependencyXML.OuterXml);
162
-
160
+
163
161
  Debug.Log("Mediation Dependency XML files merged and updated successfully.");
164
162
  }
165
163
 
@@ -190,6 +188,7 @@ namespace Azerion.BlueStack.Editor
190
188
 
191
189
  private static void CopyDependenciesXMLFileToAssets()
192
190
  {
191
+ Debug.LogWarning("CopyDependenciesXMLFileToAssets - ");
193
192
  Directory.CreateDirectory(_editorPathInAssets);
194
193
  FileUtil.ReplaceFile(_dependencyPathInPackage, _dependencyPathInAssets);
195
194
  AssetDatabase.Refresh();
@@ -197,6 +196,13 @@ namespace Azerion.BlueStack.Editor
197
196
 
198
197
  private static bool CopyMediationDependenciesXMLFileToAssets()
199
198
  {
199
+ // Delete previous BlueStackMediationDependencies.xml file - TODO: remove in future
200
+ if (File.Exists(_editorPathInAssets + "BlueStackMediationDependencies.xml"))
201
+ {
202
+ FileUtil.DeleteFileOrDirectory(_editorPathInAssets + "BlueStackMediationDependencies.xml");
203
+ AssetDatabase.Refresh();
204
+ }
205
+
200
206
  if (!File.Exists(_mediationDependencyPathInAssets))
201
207
  {
202
208
  Directory.CreateDirectory(_editorPathInAssets);
@@ -1,4 +1,5 @@
1
1
  using System;
2
+ using System.Xml;
2
3
  using UnityEngine;
3
4
 
4
5
  namespace Azerion.BlueStack.Editor
@@ -6,20 +7,22 @@ namespace Azerion.BlueStack.Editor
6
7
  [Serializable]
7
8
  public class MediationNetworkDependency
8
9
  {
9
- public MediationNetworkDependency(string name, string package, bool active)
10
+ public MediationNetworkDependency(string name, string package, bool active, XmlNode repositories = null)
10
11
  {
11
12
  Name = name;
12
13
  Package = package;
13
14
  Active = active;
15
+ Repositories = repositories;
14
16
  }
15
17
 
16
18
  public string Name { get; set; }
17
19
  public string Package { get; set; }
18
20
  public bool Active { get; set; }
21
+ public XmlNode Repositories { get; set; }
19
22
 
20
23
  public void Print()
21
24
  {
22
- Debug.Log("Name: " + Name + "Package: " + Package + "Active: " + Active);
25
+ Debug.Log("Name: " + Name + "Package: " + Package + "Active: " + Active + "\nRepositories: " + Repositories.ToString());
23
26
  }
24
27
  }
25
28
  }
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "com.azerion.bluestack",
3
- "version": "3.1.5",
3
+ "version": "3.1.6",
4
4
  "displayName": "BlueStack",
5
5
  "description": "BlueStack SDK has been designed to give developers options for showing Ads from different ad networks.",
6
6
  "unity": "2020.3",
7
7
  "documentationUrl": "https://developers.bluestack.app/unity",
8
8
  "changelogUrl": "https://developers.bluestack.app/unity/changelog",
9
9
  "dependencies": {
10
- "com.google.external-dependency-manager": "1.2.178"
10
+ "com.google.external-dependency-manager": "1.2.181"
11
11
  },
12
12
  "author": {
13
13
  "name": "BlueStack",
@@ -1,8 +0,0 @@
1
- <networkList>
2
- <androidNetworks>
3
- </androidNetworks>
4
- <iosNetworks>
5
- <network name="AdMob" package="Google-Mobile-Ads-SDK" active="true"/>
6
- <network name="Smart Display" package="Smart-Display-SDK" active="true"/>
7
- </iosNetworks>
8
- </networkList>