com.azerion.bluestack 2.0.1 → 3.0.0-preview2

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.
Files changed (98) hide show
  1. package/Editor/BlueStackDependencies.xml +1 -1
  2. package/Example/Azerion.BlueStack.Example.asmdef +16 -0
  3. package/Example/Azerion.BlueStack.Example.asmdef.meta +7 -0
  4. package/Example/Prefabs/NativeAd.prefab +908 -0
  5. package/Example/Prefabs/NativeAd.prefab.meta +7 -0
  6. package/Example/Prefabs/SmallNativeAd.prefab +739 -0
  7. package/Example/Prefabs/SmallNativeAd.prefab.meta +7 -0
  8. package/Example/Prefabs.meta +8 -0
  9. package/Example/Scripts/NativeAdManager.cs +208 -0
  10. package/Example/Scripts/NativeAdManager.cs.meta +11 -0
  11. package/Example/Scripts/SmallNativeAdManager.cs +181 -0
  12. package/Example/Scripts/SmallNativeAdManager.cs.meta +11 -0
  13. package/Example/Scripts.meta +8 -0
  14. package/Example.meta +8 -0
  15. package/Plugins/Android/{bluestack-unity-android-bridge-1.0.1.aar → bluestack-unity-android-bridge-2.0.0-preview1.aar} +0 -0
  16. package/Plugins/Android/{bluestack-unity-android-bridge-1.0.1.aar.meta → bluestack-unity-android-bridge-2.0.0-preview1.aar.meta} +1 -1
  17. package/Plugins/iOS/BSUInterface.h +14 -0
  18. package/Plugins/iOS/BSUInterface.m +83 -1
  19. package/Plugins/iOS/BSUNativeAd.h +32 -0
  20. package/Plugins/iOS/BSUNativeAd.h.meta +27 -0
  21. package/Plugins/iOS/BSUNativeAd.m +82 -0
  22. package/Plugins/iOS/BSUNativeAd.m.meta +37 -0
  23. package/Plugins/iOS/BSUTypes.h +12 -0
  24. package/Runtime/API/BlueStackAds.cs +4 -2
  25. package/Runtime/API/NativeAd/NativeAd.cs +182 -0
  26. package/Runtime/API/NativeAd/NativeAd.cs.meta +3 -0
  27. package/Runtime/API/NativeAd/NativeAdEventArgs.cs +14 -0
  28. package/Runtime/API/NativeAd/NativeAdEventArgs.cs.meta +11 -0
  29. package/Runtime/API/NativeAd/NativeAdInteractionHandler.cs +157 -0
  30. package/Runtime/API/NativeAd/NativeAdInteractionHandler.cs.meta +11 -0
  31. package/Runtime/API/NativeAd/NativeAdInteractionUtils.cs +122 -0
  32. package/Runtime/API/NativeAd/NativeAdInteractionUtils.cs.meta +11 -0
  33. package/Runtime/API/NativeAd/NativeAdLoader.cs +57 -0
  34. package/Runtime/API/NativeAd/NativeAdLoader.cs.meta +11 -0
  35. package/Runtime/API/NativeAd/NativeAdObject.cs +520 -0
  36. package/Runtime/API/NativeAd/NativeAdObject.cs.meta +11 -0
  37. package/Runtime/API/NativeAd/NativeAdType.cs +8 -0
  38. package/Runtime/API/NativeAd/NativeAdType.cs.meta +11 -0
  39. package/Runtime/API/NativeAd/NativeAssetID.cs +30 -0
  40. package/Runtime/API/NativeAd/NativeAssetID.cs.meta +11 -0
  41. package/Runtime/API/NativeAd/NativeClientFactoryManager.cs +32 -0
  42. package/Runtime/API/NativeAd/NativeClientFactoryManager.cs.meta +11 -0
  43. package/Runtime/API/NativeAd.meta +8 -0
  44. package/Runtime/Common/NativeAd/AdLoaderClientArgs.cs +16 -0
  45. package/Runtime/Common/NativeAd/AdLoaderClientArgs.cs.meta +11 -0
  46. package/Runtime/Common/NativeAd/AdsEventExecutor.cs +84 -0
  47. package/Runtime/Common/NativeAd/AdsEventExecutor.cs.meta +11 -0
  48. package/Runtime/Common/NativeAd/DummyNativeClient.cs +61 -0
  49. package/Runtime/Common/NativeAd/DummyNativeClient.cs.meta +11 -0
  50. package/Runtime/Common/NativeAd/NativeClientEventArgs.cs +10 -0
  51. package/Runtime/Common/NativeAd/NativeClientEventArgs.cs.meta +11 -0
  52. package/Runtime/Common/NativeAd/NativeUtils.cs +117 -0
  53. package/Runtime/Common/NativeAd/NativeUtils.cs.meta +11 -0
  54. package/Runtime/Internal/IClientsFactory.cs +5 -2
  55. package/Runtime/Internal/NativeAd/IAdLoaderClient.cs +24 -0
  56. package/Runtime/Internal/NativeAd/IAdLoaderClient.cs.meta +11 -0
  57. package/Runtime/Internal/NativeAd/INativeAdClient.cs +25 -0
  58. package/Runtime/Internal/NativeAd/INativeAdClient.cs.meta +3 -0
  59. package/Runtime/Internal/NativeAd/INativeAdInteractionHandlerClient.cs +15 -0
  60. package/Runtime/Internal/NativeAd/INativeAdInteractionHandlerClient.cs.meta +11 -0
  61. package/Runtime/Internal/NativeAd/INativeClientFactory.cs +9 -0
  62. package/Runtime/Internal/NativeAd/INativeClientFactory.cs.meta +11 -0
  63. package/Runtime/Internal/NativeAd.meta +8 -0
  64. package/Runtime/Platforms/Android/AndroidJavaObjectFactory.cs +9 -1
  65. package/Runtime/Platforms/Android/BannerAdClient.cs +1 -1
  66. package/Runtime/Platforms/Android/BlueStackClient.cs +1 -1
  67. package/Runtime/Platforms/Android/BlueStackErrorUtils.cs +1 -1
  68. package/Runtime/Platforms/Android/BlueStackNativeClassNames.cs +4 -1
  69. package/Runtime/Platforms/Android/ClientsFactory.cs +12 -1
  70. package/Runtime/Platforms/Android/InitializationStatusClient.cs +1 -1
  71. package/Runtime/Platforms/Android/InterstitialAdClient.cs +1 -1
  72. package/Runtime/Platforms/Android/NativeAdClient.cs +108 -0
  73. package/Runtime/Platforms/Android/NativeAdClient.cs.meta +3 -0
  74. package/Runtime/Platforms/Android/PreferenceClient.cs +1 -1
  75. package/Runtime/Platforms/Android/RewardedVideoAdClient.cs +1 -1
  76. package/Runtime/Platforms/Unity/BannerAdClient.cs +1 -0
  77. package/Runtime/Platforms/Unity/ClientsFactory.cs +6 -1
  78. package/Runtime/Platforms/Unity/NativeAdClient.cs +101 -0
  79. package/Runtime/Platforms/Unity/NativeAdClient.cs.meta +3 -0
  80. package/Runtime/Platforms/Unity/RewardedTimer.cs +2 -2
  81. package/Runtime/Platforms/Unity/Utils.cs +73 -0
  82. package/Runtime/Platforms/Unity/Utils.cs.meta +11 -0
  83. package/Runtime/Platforms/iOS/BannerAdClient.cs +1 -1
  84. package/Runtime/Platforms/iOS/BlueStackClient.cs +1 -1
  85. package/Runtime/Platforms/iOS/BlueStackErrorUtils.cs +1 -1
  86. package/Runtime/Platforms/iOS/ClientsFactory.cs +13 -1
  87. package/Runtime/Platforms/iOS/Externs.cs +49 -1
  88. package/Runtime/Platforms/iOS/InitializationStatusClient.cs +1 -1
  89. package/Runtime/Platforms/iOS/InterstitialAdClient.cs +1 -1
  90. package/Runtime/Platforms/iOS/NativeAdClient.cs +156 -0
  91. package/Runtime/Platforms/iOS/NativeAdClient.cs.meta +3 -0
  92. package/Runtime/Platforms/iOS/PreferenceClient.cs +1 -1
  93. package/Runtime/Platforms/iOS/RewardedVideoAdClient.cs +1 -1
  94. package/Runtime/Platforms/iOS/Utils.cs +1 -1
  95. package/Runtime/Utilities/MiniJSON.cs +581 -0
  96. package/Runtime/Utilities/MiniJSON.cs.meta +11 -0
  97. package/Runtime/Utilities.meta +8 -0
  98. package/package.json +1 -1
@@ -0,0 +1,82 @@
1
+ #import "BSUNativeAd.h"
2
+ #import "BSUPluginUtil.h"
3
+ #import <CoreGraphics/CoreGraphics.h>
4
+ #import <UIKit/UIKit.h>
5
+ #import <BlueStackSDK/BlueStackSDK.h>
6
+
7
+ @interface BSUNativeAd()<MNGAdsAdapterNativeDelegate, MNGClickDelegate>
8
+
9
+ @property(nonatomic, strong) MNGAdsSDKFactory *nativeAdsFactory;
10
+
11
+ @end
12
+
13
+ @implementation BSUNativeAd
14
+
15
+ - (instancetype)initWithNativeAdClientReference:(BSUTypeNativeAdClientRef *)nativeAdClient placementId:(NSString *_Nullable)placementId {
16
+ self = [super init];
17
+ if (self) {
18
+ self.nativeAdClient = nativeAdClient;
19
+ self.nativeAdsFactory = [[MNGAdsSDKFactory alloc] init];
20
+ self.nativeAdsFactory.nativeDelegate = self;
21
+ self.nativeAdsFactory.placementId = placementId;
22
+ self.nativeAdsFactory.clickDelegate = self;
23
+ self.nativeAdsFactory.viewController = [BSUPluginUtil unityGLViewController];
24
+ }
25
+ return self;
26
+ }
27
+
28
+ - (void)loadAd {
29
+ if (self.nativeAdsFactory) {
30
+ [self.nativeAdsFactory loadNative];
31
+ }
32
+ }
33
+
34
+ - (void)loadAdWithPreference:(BSUTypePreferenceRef)preferenceRef {
35
+ MNGPreference *preference = (__bridge MNGPreference *)preferenceRef;
36
+ if (self.nativeAdsFactory) {
37
+ [self.nativeAdsFactory loadNativeWithPreferences:preference withCover:NO];
38
+ }
39
+ }
40
+
41
+ - (void)destroy {
42
+ if (self.nativeAdsFactory) {
43
+ [self.nativeAdsFactory releaseMemory];
44
+ self.nativeAdsFactory = nil;
45
+ }
46
+ }
47
+
48
+ #pragma mark MNGAdsAdapterNativeDelegate
49
+
50
+ // - (void)nativeObjectDidLoad:(MNGAdsAdapter *)adsAdapter {
51
+ // if (self.onDidLoadCallback != nil) {
52
+ // self.onDidLoadCallback(self.nativeAdClient);
53
+ // }
54
+ // }
55
+
56
+ -(void)adsAdapter:(MNGAdsAdapter *)adsAdapter nativeObjectDidLoad:(MNGNAtiveObject *)nativeObject{
57
+ NSLog(@"adsAdapterNativeObjectDidLoad:");
58
+ if (self.onDidLoadCallback != nil) {
59
+ self.title = nativeObject.title;
60
+ self.body = nativeObject.body;
61
+ self.badge = @"Ad"; //nativeObject.badge;
62
+ self.callToAction = nativeObject.callToAction;
63
+ self.clickUrl = @"https://developers.bluestack.app/"; //nativeObject.clickUrl;
64
+ self.iconUrl = @"https://creative.mng-ads.com/10/10394-15539.jpg"; //nativeObject.iconUrl;
65
+ self.coverImageUrl = @"https://creative.mng-ads.com/10/10394-15540.jpg"; //nativeObject.coverImageUrl;
66
+
67
+ self.onDidLoadCallback(self.nativeAdClient);
68
+ }
69
+
70
+ // //possibility to customize the badge title
71
+ // [nativeObject updateBadgeTitle:@"Publicité"];
72
+ // badgeView = nativeObject.badgeView;
73
+ // [_nativeObject registerViewForInteraction:self.nativeView withMediaView:self.backgroundImage withIconImageView:self.iconeImage withViewController:[APP_DELEGATE drawerViewController] withClickableView:self.callToActionButton];
74
+ }
75
+
76
+ - (void)adsAdapter:(MNGAdsAdapter *)adsAdapter nativeObjectDidFailWithError:(NSError *)error withCover:(BOOL)cover{
77
+ if (self.onDidFailCallback != nil) {
78
+ self.onDidFailCallback(self.nativeAdClient, (__bridge BSUTypeErrorRef)error);
79
+ }
80
+ }
81
+
82
+ @end
@@ -0,0 +1,37 @@
1
+ fileFormatVersion: 2
2
+ guid: cfa93ef5fe2e245c7b8edf58470f900a
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
+ Any:
16
+ second:
17
+ enabled: 0
18
+ settings: {}
19
+ - first:
20
+ Editor: Editor
21
+ second:
22
+ enabled: 0
23
+ settings:
24
+ DefaultValueInitialized: true
25
+ - first:
26
+ iPhone: iOS
27
+ second:
28
+ enabled: 1
29
+ settings: {}
30
+ - first:
31
+ tvOS: tvOS
32
+ second:
33
+ enabled: 1
34
+ settings: {}
35
+ userData:
36
+ assetBundleName:
37
+ assetBundleVariant:
@@ -85,3 +85,15 @@ typedef void (*BSUOnBannerDidFailToRefreshCallback)(BSUTypeBannerClientRef *bann
85
85
  typedef void (*BSUOnBannerHideCallback)(BSUTypeBannerClientRef *bannerClient);
86
86
 
87
87
  typedef void (*BSUOnBannerDisplayCallback)(BSUTypeBannerClientRef *bannerClient);
88
+
89
+
90
+
91
+
92
+ typedef const void *BSUTypeNativeAdRef;
93
+
94
+ typedef const void *BSUTypeNativeAdClientRef;
95
+
96
+ typedef void (*BSUOnNativeAdDidLoadCallback)(BSUTypeNativeAdClientRef *nativeAdClient);
97
+
98
+ typedef void (*BSUOnNativeAdDidFailCallback)(
99
+ BSUTypeNativeAdClientRef *nativeAdClient, BSUTypeErrorRef error);
@@ -1,5 +1,6 @@
1
1
  using System;
2
2
  using Azerion.BlueStack.Internal;
3
+ using Azerion.BlueStack.Common;
3
4
  using UnityEngine;
4
5
 
5
6
  namespace Azerion.BlueStack.API
@@ -23,6 +24,7 @@ namespace Azerion.BlueStack.API
23
24
  Instance._blueStackClient.Initialize(appId, settings, sdkInitCompleteAction, client => {
24
25
  if (adaptersInitCompleteAction != null) adaptersInitCompleteAction.Invoke(new AdaptersInitializationStatus(client));
25
26
  });
27
+ AdsEventExecutor.Initialize();
26
28
  }
27
29
 
28
30
  internal static IClientsFactory GetClientsFactory()
@@ -44,9 +46,9 @@ namespace Azerion.BlueStack.API
44
46
  else
45
47
  {
46
48
  const string factoryClassName = "Azerion.BlueStack.Platforms.UnityEditor.ClientsFactory";
47
- Debug.Log(factoryClassName);
49
+ // Debug.Log(factoryClassName);
48
50
  Type type = Type.GetType(factoryClassName, true);
49
- Debug.Log("Client Type: " + type.ToString());
51
+ // Debug.Log("Client Type: " + type.ToString());
50
52
  _clientsFactory = (IClientsFactory)Activator.CreateInstance(type);
51
53
  }
52
54
  }
@@ -0,0 +1,182 @@
1
+ using System;
2
+ using Azerion.BlueStack.Internal;
3
+ using Azerion.BlueStack.Common;
4
+ using UnityEngine;
5
+ using UnityEngine.UI;
6
+
7
+ namespace Azerion.BlueStack.API
8
+ {
9
+ public class NativeAd
10
+ {
11
+ private INativeAdClient _nativeAdClient;
12
+
13
+ private Texture2D _iconTexture;
14
+ private Texture2D _imageTexture;
15
+ private bool _isTextureLoaded;
16
+
17
+ public event EventHandler<EventArgs> OnNativeAdDidLoad;
18
+ public event EventHandler<BlueStackError> OnNativeAdDidFail;
19
+ public event EventHandler<EventArgs> OnNativeAdImpression;
20
+ public event EventHandler<EventArgs> OnNativeAdClicked;
21
+ public event EventHandler<EventArgs> OnNativeAdOpening;
22
+ public event EventHandler<EventArgs> OnNativeAdClosed;
23
+
24
+ private NativeAdInteractionHandler _nativeAdInteractionHandler;
25
+
26
+ public NativeAd(string placementId) : this(placementId,
27
+ BlueStackAds.GetClientsFactory().CreateNativeAdClient())
28
+ {
29
+ }
30
+
31
+ internal NativeAd(string placementId, INativeAdClient nativeAdClient)
32
+ {
33
+ // AdsEventExecutor.Initialize();
34
+ _nativeAdClient = nativeAdClient;
35
+ _nativeAdClient.Create(placementId);
36
+ ConfigureEvents();
37
+ InitializeTextures();
38
+ _nativeAdInteractionHandler = new NativeAdInteractionHandler();
39
+ }
40
+
41
+ private void ConfigureEvents()
42
+ {
43
+ _nativeAdClient.OnNativeAdDidLoad += (sender, args) => {
44
+ AdsEventExecutor.ExecuteInUpdate(delegate
45
+ {
46
+ LoadTextures();
47
+ });
48
+ SetClickUrl();
49
+ };
50
+ _nativeAdClient.OnNativeAdDidFail += (sender, args) => { OnNativeAdDidFail?.Invoke(this, args); };
51
+ }
52
+
53
+ public void Load()
54
+ {
55
+ _nativeAdClient.Load();
56
+ }
57
+
58
+ public void Load(Preference preference)
59
+ {
60
+ _nativeAdClient.Load(preference.getIPreferenceClient());
61
+ }
62
+
63
+ private void InitializeTextures()
64
+ {
65
+ this._iconTexture = null;
66
+ this._imageTexture = null;
67
+ }
68
+
69
+ private void LoadTextures()
70
+ {
71
+ // Debug.Log("GetIconUrl: " + _nativeAdClient.GetIconUrl());
72
+ AdsEventExecutor.instance.StartCoroutine(NativeUtils.LoadImage(_nativeAdClient.GetIconUrl(),
73
+ delegate(Texture2D texture)
74
+ {
75
+ this._iconTexture = texture;
76
+ // Debug.Log("texture: " + this._iconTexture.name);
77
+ if (this._imageTexture != null && this._iconTexture != null)
78
+ {
79
+ OnNativeAdDidLoad?.Invoke(this, EventArgs.Empty);
80
+ }
81
+ }
82
+ ));
83
+ // Debug.Log("GetCoverImageUrl: " + _nativeAdClient.GetCoverImageUrl());
84
+ AdsEventExecutor.instance.StartCoroutine(NativeUtils.LoadImage(_nativeAdClient.GetCoverImageUrl(),
85
+ delegate(Texture2D texture)
86
+ {
87
+ this._imageTexture = texture;
88
+ if (this._imageTexture != null && this._iconTexture != null)
89
+ {
90
+ OnNativeAdDidLoad?.Invoke(this, EventArgs.Empty);
91
+ }
92
+ }
93
+ ));
94
+ }
95
+
96
+ public string GetTitle()
97
+ {
98
+ Debug.Log("GetTitle: " + _nativeAdClient.GetTitle());
99
+ // LoadTextures();
100
+ return _nativeAdClient.GetTitle();
101
+ }
102
+
103
+ public string GetBodyText()
104
+ {
105
+ return _nativeAdClient.GetBodyText();
106
+ }
107
+
108
+ public string GetCallToActionText()
109
+ {
110
+ return _nativeAdClient.GetCallToActionText();
111
+ }
112
+
113
+ public byte[] GetBadgeBytes()
114
+ {
115
+ return _nativeAdClient.GetBadgeBytes();
116
+ }
117
+
118
+ public string GetBadge()
119
+ {
120
+ return _nativeAdClient.GetBadge();
121
+ }
122
+
123
+ public Texture2D GetIconTexture()
124
+ {
125
+ return this._iconTexture;
126
+ }
127
+
128
+ public Texture2D GetCoverImageTexture()
129
+ {
130
+ return this._imageTexture;
131
+ }
132
+
133
+ private void SetClickUrl()
134
+ {
135
+ _nativeAdInteractionHandler.SetClickUrl(_nativeAdClient.GetClickUrl());
136
+ }
137
+
138
+ public bool RegisterTitleTextGameObject(GameObject gameObject)
139
+ {
140
+ return _nativeAdInteractionHandler.RegisterHeadlineTextGameObject(gameObject);
141
+ }
142
+
143
+ public bool RegisterBodyTextGameObject(GameObject gameObject)
144
+ {
145
+ return _nativeAdInteractionHandler.RegisterBodyTextGameObject(gameObject);
146
+ }
147
+
148
+ public bool RegisterImageGameObject(GameObject gameObject)
149
+ {
150
+ return _nativeAdInteractionHandler.RegisterImageGameObjects(gameObject);
151
+ }
152
+
153
+ public bool RegisterIconImageGameObject(GameObject gameObject)
154
+ {
155
+ return _nativeAdInteractionHandler.RegisterIconImageGameObject(gameObject);
156
+ }
157
+
158
+ public bool RegisterCallToActionGameObject(GameObject gameObject)
159
+ {
160
+ return _nativeAdInteractionHandler.RegisterCallToActionGameObject(gameObject);
161
+ }
162
+
163
+ public bool RegisterBadgeTextGameObject(GameObject gameObject)
164
+ {
165
+ return _nativeAdInteractionHandler.RegisterAdvertiserTextGameObject(gameObject);
166
+ }
167
+
168
+
169
+ public void Destroy()
170
+ {
171
+ _nativeAdClient.Destroy();
172
+ }
173
+
174
+ ~NativeAd()
175
+ {
176
+ AdsEventExecutor.ExecuteInUpdate(delegate
177
+ {
178
+ Destroy();
179
+ });
180
+ }
181
+ }
182
+ }
@@ -0,0 +1,3 @@
1
+ fileFormatVersion: 2
2
+ guid: 4d9acf1e8abb64d19870dd28810ae444
3
+ timeCreated: 1669635731
@@ -0,0 +1,14 @@
1
+ using System;
2
+
3
+ namespace Azerion.BlueStack.API
4
+ {
5
+ // Event that occurs when a native ad is loaded.
6
+ public class NativeAdEventArgs : EventArgs
7
+ {
8
+ public NativeAd nativeAd
9
+ {
10
+ get;
11
+ set;
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: a1623bac4808843189427eda9b3e1d7e
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,157 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using Azerion.BlueStack.Common;
4
+ using Azerion.BlueStack.Internal;
5
+ using Castle.Components.DictionaryAdapter.Xml;
6
+ using UnityEngine;
7
+
8
+ namespace Azerion.BlueStack.API
9
+ {
10
+ public class NativeAdInteractionHandler
11
+ {
12
+ private List<NativeAdObject> _nativeAdObjects;
13
+
14
+ private INativeAdInteractionHandlerClient _nativeAdInteractionHandlerClient;
15
+
16
+ // public NativeAdInteractionHandler(INativeAdInteractionHandlerClient interactionHandlerClient)
17
+
18
+ private string _clickUrl;
19
+ public NativeAdInteractionHandler()
20
+ {
21
+ // _nativeAdInteractionHandlerClient = interactionHandlerClient;
22
+ _nativeAdObjects = new List<NativeAdObject>();
23
+ }
24
+
25
+ public bool RegisterImageGameObjects(GameObject gameObject)
26
+ {
27
+ return RegisterGameObject(gameObject, NativeAssetID.Image);
28
+ }
29
+
30
+ public bool RegisterIconImageGameObject(GameObject gameObject)
31
+ {
32
+ return RegisterGameObject(gameObject, NativeAssetID.Icon);
33
+ }
34
+
35
+ public bool RegisterAdChoicesLogoGameObject(GameObject gameObject)
36
+ {
37
+ return RegisterGameObject(gameObject, NativeAssetID.AdChoices);
38
+ }
39
+
40
+ public bool RegisterHeadlineTextGameObject(GameObject gameObject)
41
+ {
42
+ return RegisterGameObject(gameObject, NativeAssetID.Headline);
43
+ }
44
+
45
+ public bool RegisterBodyTextGameObject(GameObject gameObject)
46
+ {
47
+ return RegisterGameObject(gameObject, NativeAssetID.Body);
48
+ }
49
+
50
+ public bool RegisterCallToActionGameObject(GameObject gameObject)
51
+ {
52
+ return RegisterGameObject(gameObject, NativeAssetID.CallToAction);
53
+ }
54
+
55
+ public bool RegisterAdvertiserTextGameObject(GameObject gameObject)
56
+ {
57
+ return RegisterGameObject(gameObject, NativeAssetID.Advertiser);
58
+ }
59
+
60
+ public bool RegisterPriceGameObject(GameObject gameObject)
61
+ {
62
+ return RegisterGameObject(gameObject, NativeAssetID.Price);
63
+ }
64
+
65
+ public bool RegisterStoreGameObject(GameObject gameObject)
66
+ {
67
+ return RegisterGameObject(gameObject, NativeAssetID.Store);
68
+ }
69
+
70
+ private bool RegisterGameObject(GameObject adObject, NativeAssetID assetID)
71
+ {
72
+ return Register(adObject, assetID.Value); // replace with GetAssetIDMappings
73
+ }
74
+
75
+ private bool Register(GameObject adObject, string assetID, bool isClickable = false)
76
+ {
77
+ NativeAdObject nativeAdObject = adObject.GetComponent<NativeAdObject>();
78
+ if (nativeAdObject != null)
79
+ {
80
+ UnityEngine.Object.DestroyImmediate(nativeAdObject);
81
+ }
82
+
83
+ nativeAdObject = adObject.AddComponent<NativeAdObject>();
84
+ _nativeAdObjects.Add(nativeAdObject);
85
+ nativeAdObject.OnAdDisplay += RecordImpression;
86
+ nativeAdObject.OnAdClick += RecordClick;
87
+ try
88
+ {
89
+ nativeAdObject.Initialize(assetID, isClickable);
90
+ }
91
+ catch (InvalidOperationException ex)
92
+ {
93
+ // Debug.LogWarning("Failed to Register " + assetID + " :" + ex.Message);
94
+ UnityEngine.Object.Destroy(nativeAdObject);
95
+ _nativeAdObjects.Remove(nativeAdObject);
96
+ return false;
97
+ }
98
+
99
+ return true;
100
+ }
101
+
102
+ private bool impressionComplete = false;
103
+ private bool clickComplete = false;
104
+
105
+ internal void SetClickUrl(string url)
106
+ {
107
+ _clickUrl = url;
108
+ }
109
+
110
+ // Handle Ad Impression - Incomplete
111
+ private void RecordImpression(object sender, EventArgs eventArgs)
112
+ {
113
+ impressionComplete = true;
114
+ Debug.LogWarning("Impression Complete");
115
+
116
+ if (sender is NativeAdObject nativeAdObject)
117
+ {
118
+ if (_nativeAdInteractionHandlerClient.RecordImpression(NativeAdInteractionUtils.CreateImpressionSignal(nativeAdObject, _nativeAdObjects)))
119
+ {
120
+ foreach (NativeAdObject adObject in _nativeAdObjects)
121
+ {
122
+ if(adObject != null)
123
+ adObject.StopImpressionCheck();
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ // Handle Ad Clicked - Incomplete
130
+ private void RecordClick(object sender, ClickEventArgs clickEventArgs)
131
+ {
132
+ // clickComplete = true;
133
+ Debug.Log("Record Click");
134
+
135
+ if (sender is NativeAdObject nativeAdObject)
136
+ {
137
+ Dictionary<string, string> touchEventSignal =
138
+ NativeAdInteractionUtils.CreateTouchEventSignal(clickEventArgs.startClick, clickEventArgs.endClick);
139
+ Dictionary<string, object> clickSignal =
140
+ NativeAdInteractionUtils.CreateClickSignal(nativeAdObject, _nativeAdObjects, clickEventArgs.startClick, clickEventArgs.endClick);
141
+
142
+ // _nativeAdInteractionHandlerClient.ReportTouchEvent(touchEventSignal);
143
+ Debug.LogWarning("InteractionHandlerClient: ReportTouchEvent!");
144
+ // _nativeAdInteractionHandlerClient.PerformClick(clickSignal);
145
+ Debug.LogWarning("InteractionHandlerClient: PerformClick!");
146
+ OpenURL();
147
+ }
148
+ }
149
+
150
+ public void OpenURL()
151
+ {
152
+ Debug.Log("Opened URL");
153
+ Application.OpenURL(_clickUrl);
154
+ }
155
+
156
+ }
157
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 5ca482967ab424379ae70a45b5ab3cbf
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant:
@@ -0,0 +1,122 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Globalization;
4
+ using System.Text;
5
+ using Azerion.BlueStack.Common;
6
+ using Azerion.BlueStack.Internal;
7
+ using Castle.Components.DictionaryAdapter.Xml;
8
+ using UnityEngine;
9
+
10
+ // incomplete
11
+ namespace Azerion.BlueStack.API
12
+ {
13
+ internal static class NativeAdInteractionUtils
14
+ {
15
+ public static Dictionary<string, string> CreateTouchEventSignal(ClickInfo currentPosition,
16
+ ClickInfo previousPosition)
17
+ {
18
+ Dictionary<string, string> signal = new Dictionary<string, string>();
19
+ signal.Add(GetHashedString("PreviousClickPosition.x"),
20
+ NativeUtils.ConvertPxToDp(previousPosition.clickPosition.x)
21
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
22
+ signal.Add(GetHashedString("PreviousClickPosition.y"),
23
+ NativeUtils.ConvertPxToDp(previousPosition.clickPosition.y)
24
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
25
+ signal.Add(GetHashedString("TimeInterval"),
26
+ Mathf.RoundToInt(previousPosition.clickTime - currentPosition.clickTime)
27
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
28
+ return signal;
29
+ }
30
+
31
+ public static Dictionary<string, object> CreateClickSignal(NativeAdObject adComponent,
32
+ List<NativeAdObject> adComponents, ClickInfo currentPosition, ClickInfo previousPosition)
33
+ {
34
+ Dictionary<string, object> signal = new Dictionary<string, object>();
35
+ Dictionary<string, string> positionSignal = new Dictionary<string, string>();
36
+ Dictionary<string, object> clickSignal = new Dictionary<string, object>();
37
+ positionSignal.Add(GetHashedString("CurrentClickPosition.x"),
38
+ NativeUtils.ConvertPxToDp(currentPosition.clickPosition.x)
39
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
40
+ positionSignal.Add(GetHashedString("CurrentClickPosition.y"),
41
+ NativeUtils.ConvertPxToDp(currentPosition.clickPosition.y)
42
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
43
+ positionSignal.Add(GetHashedString("PreviousClickPosition.x"),
44
+ NativeUtils.ConvertPxToDp(previousPosition.clickPosition.x)
45
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
46
+ positionSignal.Add(GetHashedString("PreviousClickPosition.y"),
47
+ NativeUtils.ConvertPxToDp(previousPosition.clickPosition.y)
48
+ .ToString((IFormatProvider)CultureInfo.InvariantCulture));
49
+ clickSignal = CreateImpressionSignal(adComponent, adComponents);
50
+ // positionSignal.Add(GetHashedString(""), GetHashedString(""));
51
+ signal.Add(GetHashedString("PositionSignal"), positionSignal);
52
+ signal.Add(GetHashedString("ObjectTag"), adComponent.ObjectTag);
53
+ clickSignal.Add(GetHashedString("Signal"), signal);
54
+ return clickSignal;
55
+ }
56
+
57
+ public static Dictionary<string, object> CreateImpressionSignal(NativeAdObject adComponent,
58
+ List<NativeAdObject> adComponents)
59
+ {
60
+ Dictionary<string, object> signal = new Dictionary<string, object>();
61
+ Dictionary<string, string> adData = new Dictionary<string, string>();
62
+ string version = BuildVersionString(NativeUtils.Version);
63
+ adData.Add(GetHashedString("Version"), version);
64
+ adData.Add(GetHashedString("InteractionTime"),
65
+ adComponent.InteractionTime.ToString((IFormatProvider)CultureInfo.InvariantCulture));
66
+ signal.Add(GetHashedString("AdData"), adData);
67
+ // signal.Add(GetHashedString(""), CreateAdData(adComponents));
68
+ return signal;
69
+ }
70
+
71
+ private static string GetHashedString(uint hash)
72
+ {
73
+ // Return the string representation of the hash
74
+ return hash.ToString();
75
+ }
76
+
77
+ private static string GetHashedString(string text, string salt = "")
78
+ {
79
+ if (String.IsNullOrEmpty(text))
80
+ {
81
+ return String.Empty;
82
+ }
83
+
84
+ // Uses SHA256 to create the hash
85
+ using (var sha = new System.Security.Cryptography.SHA256Managed())
86
+ {
87
+ // Convert the string to a byte array first, to be processed
88
+ byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(text + salt);
89
+ byte[] hashBytes = sha.ComputeHash(textBytes);
90
+
91
+ // Convert back to a string, removing the '-' that BitConverter adds
92
+ string hash = BitConverter
93
+ .ToString(hashBytes)
94
+ .Replace("-", String.Empty);
95
+
96
+ return hash;
97
+ }
98
+ }
99
+
100
+ private static string Version
101
+ {
102
+ get
103
+ {
104
+ Version version = typeof(NativeAd).Assembly.GetName().Version;
105
+ return string.Format("{0}.{1}.{2}", version.Major, version.Minor, version.Build);
106
+ }
107
+ }
108
+
109
+ internal static string BuildVersionString(string nativePluginVersion = null)
110
+ {
111
+ StringBuilder stringBuilder = new StringBuilder("unity-");
112
+ stringBuilder.Append(Version);
113
+ if (!string.IsNullOrEmpty(nativePluginVersion))
114
+ {
115
+ stringBuilder.Append("-native-");
116
+ stringBuilder.Append(nativePluginVersion);
117
+ }
118
+
119
+ return stringBuilder.ToString();
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,11 @@
1
+ fileFormatVersion: 2
2
+ guid: 97dd1a4fcb7444fe2adc8b5ac4ed21d0
3
+ MonoImporter:
4
+ externalObjects: {}
5
+ serializedVersion: 2
6
+ defaultReferences: []
7
+ executionOrder: 0
8
+ icon: {instanceID: 0}
9
+ userData:
10
+ assetBundleName:
11
+ assetBundleVariant: