Commit a41fa39d55b905909c0ff14b694e00bb5f21798b
1 parent
74458f1735
Exists in
master
Update package name, bump version to 0.0.3
Showing 50 changed files with 2714 additions and 2712 deletions Side-by-side Diff
- AFInAppEvents.cs
- AFInAppEvents.cs.meta
- AFMiniJSON.cs
- AFMiniJSON.cs.meta
- AppsFlyer.asmdef
- AppsFlyer.asmdef.meta
- AppsFlyer.cs
- AppsFlyer.cs.meta
- AppsFlyerAndroid.cs
- AppsFlyerAndroid.cs.meta
- AppsFlyerObject.prefab
- AppsFlyerObject.prefab.meta
- AppsFlyerObjectScript.cs
- AppsFlyerObjectScript.cs.meta
- AppsFlyeriOS.cs
- AppsFlyeriOS.cs.meta
- Editor/AppsFlyer.Editor.asmdef
- Editor/AppsFlyer.Editor.asmdef.meta
- Editor/Unity.AppsFlyer.Editor.asmdef
- Editor/Unity.AppsFlyer.Editor.asmdef.meta
- IAppsFlyerConversionData.cs
- IAppsFlyerConversionData.cs.meta
- IAppsFlyerUserInvite.cs
- IAppsFlyerUserInvite.cs.meta
- IAppsFlyerValidateReceipt.cs
- IAppsFlyerValidateReceipt.cs.meta
- Runtime.meta
- Runtime/AFInAppEvents.cs
- Runtime/AFInAppEvents.cs.meta
- Runtime/AFMiniJSON.cs
- Runtime/AFMiniJSON.cs.meta
- Runtime/AppsFlyer.cs
- Runtime/AppsFlyer.cs.meta
- Runtime/AppsFlyerAndroid.cs
- Runtime/AppsFlyerAndroid.cs.meta
- Runtime/AppsFlyerObject.prefab
- Runtime/AppsFlyerObject.prefab.meta
- Runtime/AppsFlyerObjectScript.cs
- Runtime/AppsFlyerObjectScript.cs.meta
- Runtime/AppsFlyeriOS.cs
- Runtime/AppsFlyeriOS.cs.meta
- Runtime/IAppsFlyerConversionData.cs
- Runtime/IAppsFlyerConversionData.cs.meta
- Runtime/IAppsFlyerUserInvite.cs
- Runtime/IAppsFlyerUserInvite.cs.meta
- Runtime/IAppsFlyerValidateReceipt.cs
- Runtime/IAppsFlyerValidateReceipt.cs.meta
- Runtime/Unity.AppsFlyer.asmdef
- Runtime/Unity.AppsFlyer.asmdef.meta
- package.json
AFInAppEvents.cs
1 | +using UnityEngine; | |
2 | +using System.Collections; | |
3 | + | |
4 | +public class AFInAppEvents { | |
5 | + /** | |
6 | + * Event Type | |
7 | + * */ | |
8 | + public const string LEVEL_ACHIEVED = "af_level_achieved"; | |
9 | + public const string ADD_PAYMENT_INFO = "af_add_payment_info"; | |
10 | + public const string ADD_TO_CART = "af_add_to_cart"; | |
11 | + public const string ADD_TO_WISH_LIST = "af_add_to_wishlist"; | |
12 | + public const string COMPLETE_REGISTRATION = "af_complete_registration"; | |
13 | + public const string TUTORIAL_COMPLETION = "af_tutorial_completion"; | |
14 | + public const string INITIATED_CHECKOUT = "af_initiated_checkout"; | |
15 | + public const string PURCHASE = "af_purchase"; | |
16 | + public const string RATE = "af_rate"; | |
17 | + public const string SEARCH = "af_search"; | |
18 | + public const string SPENT_CREDIT = "af_spent_credits"; | |
19 | + public const string ACHIEVEMENT_UNLOCKED = "af_achievement_unlocked"; | |
20 | + public const string CONTENT_VIEW = "af_content_view"; | |
21 | + public const string TRAVEL_BOOKING = "af_travel_booking"; | |
22 | + public const string SHARE = "af_share"; | |
23 | + public const string INVITE = "af_invite"; | |
24 | + public const string LOGIN = "af_login"; | |
25 | + public const string RE_ENGAGE = "af_re_engage"; | |
26 | + public const string UPDATE = "af_update"; | |
27 | + public const string OPENED_FROM_PUSH_NOTIFICATION = "af_opened_from_push_notification"; | |
28 | + public const string LOCATION_CHANGED = "af_location_changed"; | |
29 | + public const string LOCATION_COORDINATES = "af_location_coordinates"; | |
30 | + public const string ORDER_ID = "af_order_id"; | |
31 | + /** | |
32 | + * Event Parameter Name | |
33 | + * **/ | |
34 | + public const string LEVEL = "af_level"; | |
35 | + public const string SCORE = "af_score"; | |
36 | + public const string SUCCESS = "af_success"; | |
37 | + public const string PRICE = "af_price"; | |
38 | + public const string CONTENT_TYPE = "af_content_type"; | |
39 | + public const string CONTENT_ID = "af_content_id"; | |
40 | + public const string CONTENT_LIST = "af_content_list"; | |
41 | + public const string CURRENCY = "af_currency"; | |
42 | + public const string QUANTITY = "af_quantity"; | |
43 | + public const string REGSITRATION_METHOD = "af_registration_method"; | |
44 | + public const string PAYMENT_INFO_AVAILIBLE = "af_payment_info_available"; | |
45 | + public const string MAX_RATING_VALUE = "af_max_rating_value"; | |
46 | + public const string RATING_VALUE = "af_rating_value"; | |
47 | + public const string SEARCH_STRING = "af_search_string"; | |
48 | + public const string DATE_A = "af_date_a"; | |
49 | + public const string DATE_B = "af_date_b"; | |
50 | + public const string DESTINATION_A = "af_destination_a"; | |
51 | + public const string DESTINATION_B = "af_destination_b"; | |
52 | + public const string DESCRIPTION = "af_description"; | |
53 | + public const string CLASS = "af_class"; | |
54 | + public const string EVENT_START = "af_event_start"; | |
55 | + public const string EVENT_END = "af_event_end"; | |
56 | + public const string LATITUDE = "af_lat"; | |
57 | + public const string LONGTITUDE = "af_long"; | |
58 | + public const string CUSTOMER_USER_ID = "af_customer_user_id"; | |
59 | + public const string VALIDATED = "af_validated"; | |
60 | + public const string REVENUE = "af_revenue"; | |
61 | + public const string RECEIPT_ID = "af_receipt_id"; | |
62 | + public const string PARAM_1 = "af_param_1"; | |
63 | + public const string PARAM_2 = "af_param_2"; | |
64 | + public const string PARAM_3 = "af_param_3"; | |
65 | + public const string PARAM_4 = "af_param_4"; | |
66 | + public const string PARAM_5 = "af_param_5"; | |
67 | + public const string PARAM_6 = "af_param_6"; | |
68 | + public const string PARAM_7 = "af_param_7"; | |
69 | + public const string PARAM_8 = "af_param_8"; | |
70 | + public const string PARAM_9 = "af_param_9"; | |
71 | + public const string PARAM_10 = "af_param_10"; | |
72 | +} |
AFInAppEvents.cs.meta
AFMiniJSON.cs
1 | +/* | |
2 | + * Copyright (c) 2013 Calvin Rien | |
3 | + * | |
4 | + * Based on the JSON parser by Patrick van Bergen | |
5 | + * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html | |
6 | + * | |
7 | + * Simplified it so that it doesn't throw exceptions | |
8 | + * and can be used in Unity iPhone with maximum code stripping. | |
9 | + * | |
10 | + * Permission is hereby granted, free of charge, to any person obtaining | |
11 | + * a copy of this software and associated documentation files (the | |
12 | + * "Software"), to deal in the Software without restriction, including | |
13 | + * without limitation the rights to use, copy, modify, merge, publish, | |
14 | + * distribute, sublicense, and/or sell copies of the Software, and to | |
15 | + * permit persons to whom the Software is furnished to do so, subject to | |
16 | + * the following conditions: | |
17 | + * | |
18 | + * The above copyright notice and this permission notice shall be | |
19 | + * included in all copies or substantial portions of the Software. | |
20 | + * | |
21 | + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
22 | + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
23 | + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
24 | + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
25 | + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
26 | + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
27 | + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
28 | + */ | |
29 | +using System; | |
30 | +using System.Collections; | |
31 | +using System.Collections.Generic; | |
32 | +using System.IO; | |
33 | +using System.Text; | |
34 | + | |
35 | +namespace AFMiniJSON { | |
36 | + // Example usage: | |
37 | + // | |
38 | + // using UnityEngine; | |
39 | + // using System.Collections; | |
40 | + // using System.Collections.Generic; | |
41 | + // using MiniJSON; | |
42 | + // | |
43 | + // public class MiniJSONTest : MonoBehaviour { | |
44 | + // void Start () { | |
45 | + // var jsonString = "{ \"array\": [1.44,2,3], " + | |
46 | + // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + | |
47 | + // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + | |
48 | + // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + | |
49 | + // "\"int\": 65536, " + | |
50 | + // "\"float\": 3.1415926, " + | |
51 | + // "\"bool\": true, " + | |
52 | + // "\"null\": null }"; | |
53 | + // | |
54 | + // var dict = Json.Deserialize(jsonString) as Dictionary<string,object>; | |
55 | + // | |
56 | + // Debug.Log("deserialized: " + dict.GetType()); | |
57 | + // Debug.Log("dict['array'][0]: " + ((List<object>) dict["array"])[0]); | |
58 | + // Debug.Log("dict['string']: " + (string) dict["string"]); | |
59 | + // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles | |
60 | + // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs | |
61 | + // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); | |
62 | + // | |
63 | + // var str = Json.Serialize(dict); | |
64 | + // | |
65 | + // Debug.Log("serialized: " + str); | |
66 | + // } | |
67 | + // } | |
68 | + | |
69 | + /// <summary> | |
70 | + /// This class encodes and decodes JSON strings. | |
71 | + /// Spec. details, see http://www.json.org/ | |
72 | + /// | |
73 | + /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. | |
74 | + /// All numbers are parsed to doubles. | |
75 | + /// </summary> | |
76 | + public static class Json { | |
77 | + /// <summary> | |
78 | + /// Parses the string json into a value | |
79 | + /// </summary> | |
80 | + /// <param name="json">A JSON string.</param> | |
81 | + /// <returns>An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false</returns> | |
82 | + public static object Deserialize(string json) { | |
83 | + // save the string for debug information | |
84 | + if (json == null) { | |
85 | + return null; | |
86 | + } | |
87 | + | |
88 | + return Parser.Parse(json); | |
89 | + } | |
90 | + | |
91 | + sealed class Parser : IDisposable { | |
92 | + const string WORD_BREAK = "{}[],:\""; | |
93 | + | |
94 | + public static bool IsWordBreak(char c) { | |
95 | + return Char.IsWhiteSpace(c) || WORD_BREAK.IndexOf(c) != -1; | |
96 | + } | |
97 | + | |
98 | + enum TOKEN { | |
99 | + NONE, | |
100 | + CURLY_OPEN, | |
101 | + CURLY_CLOSE, | |
102 | + SQUARED_OPEN, | |
103 | + SQUARED_CLOSE, | |
104 | + COLON, | |
105 | + COMMA, | |
106 | + STRING, | |
107 | + NUMBER, | |
108 | + TRUE, | |
109 | + FALSE, | |
110 | + NULL | |
111 | + }; | |
112 | + | |
113 | + StringReader json; | |
114 | + | |
115 | + Parser(string jsonString) { | |
116 | + json = new StringReader(jsonString); | |
117 | + } | |
118 | + | |
119 | + public static object Parse(string jsonString) { | |
120 | + using (var instance = new Parser(jsonString)) { | |
121 | + return instance.ParseValue(); | |
122 | + } | |
123 | + } | |
124 | + | |
125 | + public void Dispose() { | |
126 | + json.Dispose(); | |
127 | + json = null; | |
128 | + } | |
129 | + | |
130 | + Dictionary<string, object> ParseObject() { | |
131 | + Dictionary<string, object> table = new Dictionary<string, object>(); | |
132 | + | |
133 | + // ditch opening brace | |
134 | + json.Read(); | |
135 | + | |
136 | + // { | |
137 | + while (true) { | |
138 | + switch (NextToken) { | |
139 | + case TOKEN.NONE: | |
140 | + return null; | |
141 | + case TOKEN.COMMA: | |
142 | + continue; | |
143 | + case TOKEN.CURLY_CLOSE: | |
144 | + return table; | |
145 | + default: | |
146 | + // name | |
147 | + string name = ParseString(); | |
148 | + if (name == null) { | |
149 | + return null; | |
150 | + } | |
151 | + | |
152 | + // : | |
153 | + if (NextToken != TOKEN.COLON) { | |
154 | + return null; | |
155 | + } | |
156 | + // ditch the colon | |
157 | + json.Read(); | |
158 | + | |
159 | + // value | |
160 | + table[name] = ParseValue(); | |
161 | + break; | |
162 | + } | |
163 | + } | |
164 | + } | |
165 | + | |
166 | + List<object> ParseArray() { | |
167 | + List<object> array = new List<object>(); | |
168 | + | |
169 | + // ditch opening bracket | |
170 | + json.Read(); | |
171 | + | |
172 | + // [ | |
173 | + var parsing = true; | |
174 | + while (parsing) { | |
175 | + TOKEN nextToken = NextToken; | |
176 | + | |
177 | + switch (nextToken) { | |
178 | + case TOKEN.NONE: | |
179 | + return null; | |
180 | + case TOKEN.COMMA: | |
181 | + continue; | |
182 | + case TOKEN.SQUARED_CLOSE: | |
183 | + parsing = false; | |
184 | + break; | |
185 | + default: | |
186 | + object value = ParseByToken(nextToken); | |
187 | + | |
188 | + array.Add(value); | |
189 | + break; | |
190 | + } | |
191 | + } | |
192 | + | |
193 | + return array; | |
194 | + } | |
195 | + | |
196 | + object ParseValue() { | |
197 | + TOKEN nextToken = NextToken; | |
198 | + return ParseByToken(nextToken); | |
199 | + } | |
200 | + | |
201 | + object ParseByToken(TOKEN token) { | |
202 | + switch (token) { | |
203 | + case TOKEN.STRING: | |
204 | + return ParseString(); | |
205 | + case TOKEN.NUMBER: | |
206 | + return ParseNumber(); | |
207 | + case TOKEN.CURLY_OPEN: | |
208 | + return ParseObject(); | |
209 | + case TOKEN.SQUARED_OPEN: | |
210 | + return ParseArray(); | |
211 | + case TOKEN.TRUE: | |
212 | + return true; | |
213 | + case TOKEN.FALSE: | |
214 | + return false; | |
215 | + case TOKEN.NULL: | |
216 | + return null; | |
217 | + default: | |
218 | + return null; | |
219 | + } | |
220 | + } | |
221 | + | |
222 | + string ParseString() { | |
223 | + StringBuilder s = new StringBuilder(); | |
224 | + char c; | |
225 | + | |
226 | + // ditch opening quote | |
227 | + json.Read(); | |
228 | + | |
229 | + bool parsing = true; | |
230 | + while (parsing) { | |
231 | + | |
232 | + if (json.Peek() == -1) { | |
233 | + parsing = false; | |
234 | + break; | |
235 | + } | |
236 | + | |
237 | + c = NextChar; | |
238 | + switch (c) { | |
239 | + case '"': | |
240 | + parsing = false; | |
241 | + break; | |
242 | + case '\\': | |
243 | + if (json.Peek() == -1) { | |
244 | + parsing = false; | |
245 | + break; | |
246 | + } | |
247 | + | |
248 | + c = NextChar; | |
249 | + switch (c) { | |
250 | + case '"': | |
251 | + case '\\': | |
252 | + case '/': | |
253 | + s.Append(c); | |
254 | + break; | |
255 | + case 'b': | |
256 | + s.Append('\b'); | |
257 | + break; | |
258 | + case 'f': | |
259 | + s.Append('\f'); | |
260 | + break; | |
261 | + case 'n': | |
262 | + s.Append('\n'); | |
263 | + break; | |
264 | + case 'r': | |
265 | + s.Append('\r'); | |
266 | + break; | |
267 | + case 't': | |
268 | + s.Append('\t'); | |
269 | + break; | |
270 | + case 'u': | |
271 | + var hex = new char[4]; | |
272 | + | |
273 | + for (int i=0; i< 4; i++) { | |
274 | + hex[i] = NextChar; | |
275 | + } | |
276 | + | |
277 | + s.Append((char) Convert.ToInt32(new string(hex), 16)); | |
278 | + break; | |
279 | + } | |
280 | + break; | |
281 | + default: | |
282 | + s.Append(c); | |
283 | + break; | |
284 | + } | |
285 | + } | |
286 | + | |
287 | + return s.ToString(); | |
288 | + } | |
289 | + | |
290 | + object ParseNumber() { | |
291 | + string number = NextWord; | |
292 | + | |
293 | + if (number.IndexOf('.') == -1) { | |
294 | + long parsedInt; | |
295 | + Int64.TryParse(number, out parsedInt); | |
296 | + return parsedInt; | |
297 | + } | |
298 | + | |
299 | + double parsedDouble; | |
300 | + Double.TryParse(number, out parsedDouble); | |
301 | + return parsedDouble; | |
302 | + } | |
303 | + | |
304 | + void EatWhitespace() { | |
305 | + while (Char.IsWhiteSpace(PeekChar)) { | |
306 | + json.Read(); | |
307 | + | |
308 | + if (json.Peek() == -1) { | |
309 | + break; | |
310 | + } | |
311 | + } | |
312 | + } | |
313 | + | |
314 | + char PeekChar { | |
315 | + get { | |
316 | + return Convert.ToChar(json.Peek()); | |
317 | + } | |
318 | + } | |
319 | + | |
320 | + char NextChar { | |
321 | + get { | |
322 | + return Convert.ToChar(json.Read()); | |
323 | + } | |
324 | + } | |
325 | + | |
326 | + string NextWord { | |
327 | + get { | |
328 | + StringBuilder word = new StringBuilder(); | |
329 | + | |
330 | + while (!IsWordBreak(PeekChar)) { | |
331 | + word.Append(NextChar); | |
332 | + | |
333 | + if (json.Peek() == -1) { | |
334 | + break; | |
335 | + } | |
336 | + } | |
337 | + | |
338 | + return word.ToString(); | |
339 | + } | |
340 | + } | |
341 | + | |
342 | + TOKEN NextToken { | |
343 | + get { | |
344 | + EatWhitespace(); | |
345 | + | |
346 | + if (json.Peek() == -1) { | |
347 | + return TOKEN.NONE; | |
348 | + } | |
349 | + | |
350 | + switch (PeekChar) { | |
351 | + case '{': | |
352 | + return TOKEN.CURLY_OPEN; | |
353 | + case '}': | |
354 | + json.Read(); | |
355 | + return TOKEN.CURLY_CLOSE; | |
356 | + case '[': | |
357 | + return TOKEN.SQUARED_OPEN; | |
358 | + case ']': | |
359 | + json.Read(); | |
360 | + return TOKEN.SQUARED_CLOSE; | |
361 | + case ',': | |
362 | + json.Read(); | |
363 | + return TOKEN.COMMA; | |
364 | + case '"': | |
365 | + return TOKEN.STRING; | |
366 | + case ':': | |
367 | + return TOKEN.COLON; | |
368 | + case '0': | |
369 | + case '1': | |
370 | + case '2': | |
371 | + case '3': | |
372 | + case '4': | |
373 | + case '5': | |
374 | + case '6': | |
375 | + case '7': | |
376 | + case '8': | |
377 | + case '9': | |
378 | + case '-': | |
379 | + return TOKEN.NUMBER; | |
380 | + } | |
381 | + | |
382 | + switch (NextWord) { | |
383 | + case "false": | |
384 | + return TOKEN.FALSE; | |
385 | + case "true": | |
386 | + return TOKEN.TRUE; | |
387 | + case "null": | |
388 | + return TOKEN.NULL; | |
389 | + } | |
390 | + | |
391 | + return TOKEN.NONE; | |
392 | + } | |
393 | + } | |
394 | + } | |
395 | + | |
396 | + /// <summary> | |
397 | + /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string | |
398 | + /// </summary> | |
399 | + /// <param name="json">A Dictionary<string, object> / List<object></param> | |
400 | + /// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns> | |
401 | + public static string Serialize(object obj) { | |
402 | + return Serializer.Serialize(obj); | |
403 | + } | |
404 | + | |
405 | + sealed class Serializer { | |
406 | + StringBuilder builder; | |
407 | + | |
408 | + Serializer() { | |
409 | + builder = new StringBuilder(); | |
410 | + } | |
411 | + | |
412 | + public static string Serialize(object obj) { | |
413 | + var instance = new Serializer(); | |
414 | + | |
415 | + instance.SerializeValue(obj); | |
416 | + | |
417 | + return instance.builder.ToString(); | |
418 | + } | |
419 | + | |
420 | + void SerializeValue(object value) { | |
421 | + IList asList; | |
422 | + IDictionary asDict; | |
423 | + string asStr; | |
424 | + | |
425 | + if (value == null) { | |
426 | + builder.Append("null"); | |
427 | + } else if ((asStr = value as string) != null) { | |
428 | + SerializeString(asStr); | |
429 | + } else if (value is bool) { | |
430 | + builder.Append((bool) value ? "true" : "false"); | |
431 | + } else if ((asList = value as IList) != null) { | |
432 | + SerializeArray(asList); | |
433 | + } else if ((asDict = value as IDictionary) != null) { | |
434 | + SerializeObject(asDict); | |
435 | + } else if (value is char) { | |
436 | + SerializeString(new string((char) value, 1)); | |
437 | + } else { | |
438 | + SerializeOther(value); | |
439 | + } | |
440 | + } | |
441 | + | |
442 | + void SerializeObject(IDictionary obj) { | |
443 | + bool first = true; | |
444 | + | |
445 | + builder.Append('{'); | |
446 | + | |
447 | + foreach (object e in obj.Keys) { | |
448 | + if (!first) { | |
449 | + builder.Append(','); | |
450 | + } | |
451 | + | |
452 | + SerializeString(e.ToString()); | |
453 | + builder.Append(':'); | |
454 | + | |
455 | + SerializeValue(obj[e]); | |
456 | + | |
457 | + first = false; | |
458 | + } | |
459 | + | |
460 | + builder.Append('}'); | |
461 | + } | |
462 | + | |
463 | + void SerializeArray(IList anArray) { | |
464 | + builder.Append('['); | |
465 | + | |
466 | + bool first = true; | |
467 | + | |
468 | + foreach (object obj in anArray) { | |
469 | + if (!first) { | |
470 | + builder.Append(','); | |
471 | + } | |
472 | + | |
473 | + SerializeValue(obj); | |
474 | + | |
475 | + first = false; | |
476 | + } | |
477 | + | |
478 | + builder.Append(']'); | |
479 | + } | |
480 | + | |
481 | + void SerializeString(string str) { | |
482 | + builder.Append('\"'); | |
483 | + | |
484 | + char[] charArray = str.ToCharArray(); | |
485 | + foreach (var c in charArray) { | |
486 | + switch (c) { | |
487 | + case '"': | |
488 | + builder.Append("\\\""); | |
489 | + break; | |
490 | + case '\\': | |
491 | + builder.Append("\\\\"); | |
492 | + break; | |
493 | + case '\b': | |
494 | + builder.Append("\\b"); | |
495 | + break; | |
496 | + case '\f': | |
497 | + builder.Append("\\f"); | |
498 | + break; | |
499 | + case '\n': | |
500 | + builder.Append("\\n"); | |
501 | + break; | |
502 | + case '\r': | |
503 | + builder.Append("\\r"); | |
504 | + break; | |
505 | + case '\t': | |
506 | + builder.Append("\\t"); | |
507 | + break; | |
508 | + default: | |
509 | + int codepoint = Convert.ToInt32(c); | |
510 | + if ((codepoint >= 32) && (codepoint <= 126)) { | |
511 | + builder.Append(c); | |
512 | + } else { | |
513 | + builder.Append("\\u"); | |
514 | + builder.Append(codepoint.ToString("x4")); | |
515 | + } | |
516 | + break; | |
517 | + } | |
518 | + } | |
519 | + | |
520 | + builder.Append('\"'); | |
521 | + } | |
522 | + | |
523 | + void SerializeOther(object value) { | |
524 | + // NOTE: decimals lose precision during serialization. | |
525 | + // They always have, I'm just letting you know. | |
526 | + // Previously floats and doubles lost precision too. | |
527 | + if (value is float) { | |
528 | + builder.Append(((float) value).ToString("R")); | |
529 | + } else if (value is int | |
530 | + || value is uint | |
531 | + || value is long | |
532 | + || value is sbyte | |
533 | + || value is byte | |
534 | + || value is short | |
535 | + || value is ushort | |
536 | + || value is ulong) { | |
537 | + builder.Append(value); | |
538 | + } else if (value is double | |
539 | + || value is decimal) { | |
540 | + builder.Append(Convert.ToDouble(value).ToString("R")); | |
541 | + } else { | |
542 | + SerializeString(value.ToString()); | |
543 | + } | |
544 | + } | |
545 | + } | |
546 | + } | |
547 | +} |
AFMiniJSON.cs.meta
AppsFlyer.asmdef
1 | +{ | |
2 | + "name": "AppsFlyer", | |
3 | + "references": [], | |
4 | + "includePlatforms": [], | |
5 | + "excludePlatforms": [], | |
6 | + "allowUnsafeCode": false, | |
7 | + "overrideReferences": false, | |
8 | + "precompiledReferences": [], | |
9 | + "autoReferenced": true, | |
10 | + "defineConstraints": [], | |
11 | + "versionDefines": [], | |
12 | + "noEngineReferences": false | |
13 | +} |
AppsFlyer.asmdef.meta
AppsFlyer.cs
1 | +using System.Collections.Generic; | |
2 | +using UnityEngine; | |
3 | + | |
4 | +namespace AppsFlyerSDK | |
5 | +{ | |
6 | + public class AppsFlyer : MonoBehaviour | |
7 | + { | |
8 | + | |
9 | + public static readonly string kAppsFlyerPluginVersion = "5.4.2"; | |
10 | + | |
11 | + | |
12 | + /// <summary> | |
13 | + /// Initialize the AppsFlyer SDK with your devKey and appID. | |
14 | + /// The dev key is required on all platforms, and the appID is required for iOS. | |
15 | + /// If you app is for Android only pass null for the appID. | |
16 | + /// </summary> | |
17 | + /// <param name="devKey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
18 | + /// <param name="appID">Your app's Apple ID.</param> | |
19 | + /// <example> | |
20 | + /// <code> | |
21 | + /// AppsFlyer.initSDK("K2***********99", "41*****44""); | |
22 | + /// </code> | |
23 | + /// </example> | |
24 | + public static void initSDK(string devKey, string appID) | |
25 | + { | |
26 | + initSDK(devKey, appID, null); | |
27 | + } | |
28 | + | |
29 | + /// <summary> | |
30 | + /// Initialize the AppsFlyer SDK with your devKey and appID. | |
31 | + /// The dev key is required on all platforms, and the appID is required for iOS. | |
32 | + /// If you app is for Android only pass null for the appID. | |
33 | + /// </summary> | |
34 | + /// <param name="devKey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
35 | + /// <param name="appID">Your app's Apple ID.</param> | |
36 | + /// <param name="gameObject">pass the script of the game object being used.</param> | |
37 | + /// <example> | |
38 | + /// <code> | |
39 | + /// AppsFlyer.initSDK("K2***********99", 41*****44, this); | |
40 | + /// </code> | |
41 | + /// </example> | |
42 | + public static void initSDK(string devKey, string appID, MonoBehaviour gameObject) | |
43 | + { | |
44 | +#if UNITY_IOS && !UNITY_EDITOR | |
45 | + AppsFlyeriOS.setAppsFlyerDevKey(devKey); | |
46 | + AppsFlyeriOS.setAppleAppID(appID); | |
47 | + if(gameObject != null) | |
48 | + { | |
49 | + AppsFlyeriOS.getConversionData(gameObject.name); | |
50 | + } | |
51 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
52 | + AppsFlyerAndroid.initSDK(devKey, gameObject); | |
53 | +#else | |
54 | + | |
55 | +#endif | |
56 | + } | |
57 | + | |
58 | + | |
59 | + /// <summary> | |
60 | + /// Once this API is invoked, our SDK will start. | |
61 | + /// Once the API is called a sessions will be immediately sent, and all background forground transitions will send a session. | |
62 | + /// </summary> | |
63 | + public static void startSDK() | |
64 | + { | |
65 | +#if UNITY_IOS && !UNITY_EDITOR | |
66 | + AppsFlyeriOS.startSDK(); | |
67 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
68 | + AppsFlyerAndroid.startSDK(); | |
69 | +#else | |
70 | + | |
71 | +#endif | |
72 | + } | |
73 | + | |
74 | + /// <summary> | |
75 | + /// Send an In-App Event. | |
76 | + /// In-App Events provide insight on what is happening in your app. | |
77 | + /// </summary> | |
78 | + /// <param name="eventName">Event Name as String.</param> | |
79 | + /// <param name="eventValues">Event Values as Dictionary.</param> | |
80 | + public static void sendEvent(string eventName, Dictionary<string, string> eventValues) | |
81 | + { | |
82 | +#if UNITY_IOS && !UNITY_EDITOR | |
83 | + AppsFlyeriOS.sendEvent(eventName, eventValues); | |
84 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
85 | + AppsFlyerAndroid.sendEvent(eventName, eventValues); | |
86 | +#else | |
87 | + | |
88 | +#endif | |
89 | + } | |
90 | + | |
91 | + /// <summary> | |
92 | + /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. | |
93 | + /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. | |
94 | + /// This can be achieved with the stopSDK API. | |
95 | + /// </summary> | |
96 | + /// <param name="isSDKStopped"> should sdk be stopped.</param> | |
97 | + public static void stopSDK(bool isSDKStopped) | |
98 | + { | |
99 | +#if UNITY_IOS && !UNITY_EDITOR | |
100 | + AppsFlyeriOS.stopSDK(isSDKStopped); | |
101 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
102 | + AppsFlyerAndroid.stopSDK(isSDKStopped); | |
103 | +#else | |
104 | + | |
105 | +#endif | |
106 | + } | |
107 | + | |
108 | + // <summary> | |
109 | + /// Was the stopSDK(boolean) API set to true. | |
110 | + /// </summary> | |
111 | + /// <returns>boolean isSDKStopped.</returns> | |
112 | + public static bool isSDKStopped() | |
113 | + { | |
114 | +#if UNITY_IOS && !UNITY_EDITOR | |
115 | + return AppsFlyeriOS.isSDKStopped(); | |
116 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
117 | + return AppsFlyerAndroid.isSDKStopped(); | |
118 | +#else | |
119 | + return false; | |
120 | +#endif | |
121 | + } | |
122 | + | |
123 | + /// <summary> | |
124 | + /// Get the AppsFlyer SDK version used in app. | |
125 | + /// </summary> | |
126 | + /// <returns>The current SDK version.</returns> | |
127 | + public static string getSdkVersion() | |
128 | + { | |
129 | +#if UNITY_IOS && !UNITY_EDITOR | |
130 | + return AppsFlyeriOS.getSDKVersion(); | |
131 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
132 | + return AppsFlyerAndroid.getSdkVersion(); | |
133 | +#else | |
134 | + return ""; | |
135 | +#endif | |
136 | + | |
137 | + } | |
138 | + | |
139 | + /// <summary> | |
140 | + /// Enables Debug logs for the AppsFlyer SDK. | |
141 | + /// Should only be set to true in development / debug. | |
142 | + /// </summary> | |
143 | + /// <param name="shouldEnable">shouldEnable boolean.</param> | |
144 | + public static void setIsDebug(bool shouldEnable) | |
145 | + { | |
146 | +#if UNITY_IOS && !UNITY_EDITOR | |
147 | + AppsFlyeriOS.setIsDebug(shouldEnable); | |
148 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
149 | + AppsFlyerAndroid.setIsDebug(shouldEnable); | |
150 | +#else | |
151 | + | |
152 | +#endif | |
153 | + } | |
154 | + | |
155 | + /// <summary> | |
156 | + /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. | |
157 | + /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. | |
158 | + /// </summary> | |
159 | + /// <param name="id">Customer ID for client.</param> | |
160 | + public static void setCustomerUserId(string id) | |
161 | + { | |
162 | +#if UNITY_IOS && !UNITY_EDITOR | |
163 | + AppsFlyeriOS.setCustomerUserID(id); | |
164 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
165 | + AppsFlyerAndroid.setCustomerUserId(id); | |
166 | +#else | |
167 | + | |
168 | +#endif | |
169 | + } | |
170 | + | |
171 | + /// <summary> | |
172 | + /// Set the OneLink ID that should be used for User-Invite-API. | |
173 | + /// The link that is generated for the user invite will use this OneLink as the base link. | |
174 | + /// </summary> | |
175 | + /// <param name="oneLinkId">OneLink ID obtained from the AppsFlyer Dashboard.</param> | |
176 | + public static void setAppInviteOneLinkID(string oneLinkId) | |
177 | + { | |
178 | +#if UNITY_IOS && !UNITY_EDITOR | |
179 | + AppsFlyeriOS.setAppInviteOneLinkID(oneLinkId); | |
180 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
181 | + AppsFlyerAndroid.setAppInviteOneLinkID(oneLinkId); | |
182 | +#else | |
183 | + | |
184 | +#endif | |
185 | + } | |
186 | + | |
187 | + /// <summary> | |
188 | + /// Set additional data to be sent to AppsFlyer. | |
189 | + /// </summary> | |
190 | + /// <param name="customData">additional data Dictionary.</param> | |
191 | + public static void setAdditionalData(Dictionary<string, string> customData) | |
192 | + { | |
193 | +#if UNITY_IOS && !UNITY_EDITOR | |
194 | + AppsFlyeriOS.setAdditionalData(customData); | |
195 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
196 | + AppsFlyerAndroid.setAdditionalData(customData); | |
197 | +#else | |
198 | + | |
199 | +#endif | |
200 | + } | |
201 | + | |
202 | + /// <summary> | |
203 | + /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. | |
204 | + /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. | |
205 | + /// </summary> | |
206 | + /// <param name="urls">Array of urls.</param> | |
207 | + public static void setResolveDeepLinkURLs(params string[] urls) | |
208 | + { | |
209 | +#if UNITY_IOS && !UNITY_EDITOR | |
210 | + AppsFlyeriOS.setResolveDeepLinkURLs(urls); | |
211 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
212 | + AppsFlyerAndroid.setResolveDeepLinkURLs(urls); | |
213 | +#else | |
214 | + | |
215 | +#endif | |
216 | + } | |
217 | + | |
218 | + | |
219 | + /// <summary> | |
220 | + /// Advertisers can use this method to set vanity onelink domains. | |
221 | + /// </summary> | |
222 | + /// <param name="domains">Array of domains.</param> | |
223 | + public static void setOneLinkCustomDomain(params string[] domains) | |
224 | + { | |
225 | +#if UNITY_IOS && !UNITY_EDITOR | |
226 | + AppsFlyeriOS.setOneLinkCustomDomains(domains); | |
227 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
228 | + AppsFlyerAndroid.setOneLinkCustomDomain(domains); | |
229 | +#else | |
230 | + | |
231 | +#endif | |
232 | + } | |
233 | + | |
234 | + /// <summary> | |
235 | + /// Setting user local currency code for in-app purchases. | |
236 | + /// The currency code should be a 3 character ISO 4217 code. (default is USD). | |
237 | + /// You can set the currency code for all events by calling the following method. | |
238 | + /// </summary> | |
239 | + /// <param name="currencyCode">3 character ISO 4217 code.</param> | |
240 | + public static void setCurrencyCode(string currencyCode) | |
241 | + { | |
242 | +#if UNITY_IOS && !UNITY_EDITOR | |
243 | + AppsFlyeriOS.setCurrencyCode(currencyCode); | |
244 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
245 | + AppsFlyerAndroid.setCurrencyCode(currencyCode); | |
246 | +#else | |
247 | + | |
248 | +#endif | |
249 | + } | |
250 | + | |
251 | + /// <summary> | |
252 | + /// Manually record the location of the user. | |
253 | + /// </summary> | |
254 | + /// <param name="latitude">latitude as double.</param> | |
255 | + /// <param name="longitude">longitude as double.</param> | |
256 | + public static void recordLocation(double latitude, double longitude) | |
257 | + { | |
258 | +#if UNITY_IOS && !UNITY_EDITOR | |
259 | + AppsFlyeriOS.recordLocation(latitude, longitude); | |
260 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
261 | + AppsFlyerAndroid.recordLocation(latitude, longitude); | |
262 | +#else | |
263 | + | |
264 | +#endif | |
265 | + } | |
266 | + | |
267 | + /// <summary> | |
268 | + /// Anonymize user Data. | |
269 | + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. | |
270 | + /// Default is false. | |
271 | + /// </summary> | |
272 | + /// <param name = "shouldAnonymizeUser" >shouldAnonymizeUser boolean.</param> | |
273 | + public static void anonymizeUser(bool shouldAnonymizeUser) | |
274 | + { | |
275 | +#if UNITY_IOS && !UNITY_EDITOR | |
276 | + AppsFlyeriOS.anonymizeUser(shouldAnonymizeUser); | |
277 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
278 | + AppsFlyerAndroid.anonymizeUser(shouldAnonymizeUser); | |
279 | +#else | |
280 | + | |
281 | +#endif | |
282 | + } | |
283 | + | |
284 | + /// <summary> | |
285 | + /// Get AppsFlyer's unique device ID which is created for every new install of an app. | |
286 | + /// </summary> | |
287 | + /// <returns>AppsFlyer's unique device ID.</returns> | |
288 | + public static string getAppsFlyerId() | |
289 | + { | |
290 | +#if UNITY_IOS && !UNITY_EDITOR | |
291 | + return AppsFlyeriOS.getAppsFlyerId(); | |
292 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
293 | + return AppsFlyerAndroid.getAppsFlyerId(); | |
294 | +#else | |
295 | + return ""; | |
296 | +#endif | |
297 | + | |
298 | + } | |
299 | + | |
300 | + /// <summary> | |
301 | + /// Set a custom value for the minimum required time between sessions. | |
302 | + /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. | |
303 | + /// </summary> | |
304 | + /// <param name="seconds">minimum time between 2 separate sessions in seconds.</param> | |
305 | + public static void setMinTimeBetweenSessions(int seconds) | |
306 | + { | |
307 | +#if UNITY_IOS && !UNITY_EDITOR | |
308 | + AppsFlyeriOS.setMinTimeBetweenSessions(seconds); | |
309 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
310 | + AppsFlyerAndroid.setMinTimeBetweenSessions(seconds); | |
311 | +#else | |
312 | + | |
313 | +#endif | |
314 | + } | |
315 | + | |
316 | + /// <summary> | |
317 | + /// Set a custom host. | |
318 | + /// </summary> | |
319 | + /// <param name="hostPrefixName">Host prefix.</param> | |
320 | + /// <param name="hostName">Host name.</param> | |
321 | + public static void setHost(string hostPrefixName, string hostName) | |
322 | + { | |
323 | +#if UNITY_IOS && !UNITY_EDITOR | |
324 | + AppsFlyeriOS.setHost(hostName, hostPrefixName); | |
325 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
326 | + AppsFlyerAndroid.setHost(hostPrefixName, hostName); | |
327 | +#else | |
328 | + | |
329 | +#endif | |
330 | + } | |
331 | + | |
332 | + /// <summary> | |
333 | + /// Set the user emails and encrypt them. | |
334 | + /// cryptMethod Encryption method: | |
335 | + /// EmailCryptType.EmailCryptTypeMD5 | |
336 | + /// EmailCryptType.EmailCryptTypeSHA1 | |
337 | + /// EmailCryptType.EmailCryptTypeSHA256 | |
338 | + /// EmailCryptType.EmailCryptTypeNone | |
339 | + /// </summary> | |
340 | + /// <param name="cryptMethod">Encryption method.</param> | |
341 | + /// <param name="emails">User emails.</param> | |
342 | + public static void setUserEmails(EmailCryptType cryptMethod, params string[] emails) | |
343 | + { | |
344 | +#if UNITY_IOS && !UNITY_EDITOR | |
345 | + AppsFlyeriOS.setUserEmails(cryptMethod, emails.Length, emails); | |
346 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
347 | + AppsFlyerAndroid.setUserEmails(cryptMethod, emails); | |
348 | +#else | |
349 | + | |
350 | +#endif | |
351 | + } | |
352 | + | |
353 | + /// <summary> | |
354 | + /// Set the user phone number. | |
355 | + /// </summary> | |
356 | + /// <param name="phoneNumber">phoneNumber string</param> | |
357 | + public static void setPhoneNumber(string phoneNumber) | |
358 | + { | |
359 | +#if UNITY_IOS && !UNITY_EDITOR | |
360 | + AppsFlyeriOS.setPhoneNumber(phoneNumber); | |
361 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
362 | + AppsFlyerAndroid.setPhoneNumber(phoneNumber); | |
363 | +#else | |
364 | + | |
365 | +#endif | |
366 | + } | |
367 | + | |
368 | + /// <summary> | |
369 | + /// Used by advertisers to exclude all networks/integrated partners from getting data. | |
370 | + /// </summary> | |
371 | + public static void setSharingFilterForAllPartners() | |
372 | + { | |
373 | +#if UNITY_IOS && !UNITY_EDITOR | |
374 | + AppsFlyeriOS.setSharingFilterForAllPartners(); | |
375 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
376 | + AppsFlyerAndroid.setSharingFilterForAllPartners(); | |
377 | +#else | |
378 | + | |
379 | +#endif | |
380 | + } | |
381 | + | |
382 | + /// <summary> | |
383 | + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. | |
384 | + /// </summary> | |
385 | + /// <param name="partners">partners to exclude from getting data</param> | |
386 | + public static void setSharingFilter(params string[] partners) | |
387 | + { | |
388 | +#if UNITY_IOS && !UNITY_EDITOR | |
389 | + AppsFlyeriOS.setSharingFilter(partners); | |
390 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
391 | + AppsFlyerAndroid.setSharingFilter(partners); | |
392 | +#else | |
393 | + | |
394 | +#endif | |
395 | + } | |
396 | + | |
397 | + /// <summary> | |
398 | + /// Register a Conversion Data Listener. | |
399 | + /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. | |
400 | + /// By doing this you can serve users with personalized content or send them to specific activities within the app, | |
401 | + /// which can greatly enhance their engagement with your app. | |
402 | + /// </summary> | |
403 | + /// <example> | |
404 | + /// <code> | |
405 | + /// AppsFlyer.getConversionData(this.name); | |
406 | + /// </code> | |
407 | + /// </example> | |
408 | + public static void getConversionData(string objectName) | |
409 | + { | |
410 | +#if UNITY_IOS && !UNITY_EDITOR | |
411 | + AppsFlyeriOS.getConversionData(objectName); | |
412 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
413 | + AppsFlyerAndroid.getConversionData(objectName); | |
414 | +#else | |
415 | + | |
416 | +#endif | |
417 | + } | |
418 | + | |
419 | + | |
420 | + /// <summary> | |
421 | + /// Use the following API to attribute the click and launch the app store's app page. | |
422 | + /// </summary> | |
423 | + /// <param name="appID">promoted App ID</param> | |
424 | + /// <param name="campaign">cross promotion campaign</param> | |
425 | + /// <param name="userParams">additional user params</param> | |
426 | + /// <example> | |
427 | + /// <code> | |
428 | + /// Dictionary<string, string> parameters = new Dictionary<string, string>(); | |
429 | + /// parameters.Add("af_sub1", "val"); | |
430 | + /// parameters.Add("custom_param", "val2"); | |
431 | + /// AppsFlyer.attributeAndOpenStore("123456789", "test campaign", parameters, this); | |
432 | + /// </code> | |
433 | + /// </example> | |
434 | + public static void attributeAndOpenStore(string appID, string campaign, Dictionary<string, string> userParams, MonoBehaviour gameObject) | |
435 | + { | |
436 | +#if UNITY_IOS && !UNITY_EDITOR | |
437 | + AppsFlyeriOS.attributeAndOpenStore(appID, campaign, userParams, gameObject); | |
438 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
439 | + AppsFlyerAndroid.attributeAndOpenStore(appID, campaign, userParams); | |
440 | +#else | |
441 | + | |
442 | +#endif | |
443 | + } | |
444 | + | |
445 | + /// <summary> | |
446 | + /// To attribute an impression use the following API call. | |
447 | + /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. | |
448 | + /// </summary> | |
449 | + /// <param name="appID">promoted App ID.</param> | |
450 | + /// <param name="campaign">cross promotion campaign.</param> | |
451 | + /// <param name="parameters">parameters Dictionary.</param> | |
452 | + public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary<string, string> parameters) | |
453 | + { | |
454 | +#if UNITY_IOS && !UNITY_EDITOR | |
455 | + AppsFlyeriOS.recordCrossPromoteImpression(appID, campaign, parameters); | |
456 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
457 | + AppsFlyerAndroid.recordCrossPromoteImpression(appID, campaign, parameters); | |
458 | +#else | |
459 | + | |
460 | +#endif | |
461 | + } | |
462 | + | |
463 | + /// <summary> | |
464 | + /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. | |
465 | + /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- | |
466 | + /// </summary> | |
467 | + /// <param name="parameters">parameters Dictionary.</param> | |
468 | + public static void generateUserInviteLink(Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
469 | + { | |
470 | +#if UNITY_IOS && !UNITY_EDITOR | |
471 | + AppsFlyeriOS.generateUserInviteLink(parameters, gameObject); | |
472 | +#elif UNITY_ANDROID && !UNITY_EDITOR | |
473 | + AppsFlyerAndroid.generateUserInviteLink(parameters, gameObject); | |
474 | +#else | |
475 | + | |
476 | +#endif | |
477 | + } | |
478 | + | |
479 | + /// <summary> | |
480 | + /// Helper method to convert json strings to dictionary. | |
481 | + /// </summary> | |
482 | + /// <param name="str">json string</param> | |
483 | + /// <returns>dictionary representing the input json string.</returns> | |
484 | + public static Dictionary<string, object> CallbackStringToDictionary(string str) | |
485 | + { | |
486 | + return AFMiniJSON.Json.Deserialize(str) as Dictionary<string, object>; | |
487 | + } | |
488 | + | |
489 | + /// <summary> | |
490 | + /// Helper method to log AppsFlyer events and callbacks. | |
491 | + /// </summary> | |
492 | + /// <param name="methodName">method name</param> | |
493 | + /// <param name="str">message to log</param> | |
494 | + public static void AFLog(string methodName, string str) | |
495 | + { | |
496 | + Debug.Log(string.Format("AppsFlyer_Unity_v{0} {1} called with {2}", kAppsFlyerPluginVersion, methodName, str)); | |
497 | + } | |
498 | + } | |
499 | + | |
500 | + public enum EmailCryptType | |
501 | + { | |
502 | + // None | |
503 | + EmailCryptTypeNone = 0, | |
504 | + // SHA256 | |
505 | + EmailCryptTypeSHA256 = 1, | |
506 | + } | |
507 | + | |
508 | +} |
AppsFlyer.cs.meta
AppsFlyerAndroid.cs
1 | +using System; | |
2 | +using System.Collections.Generic; | |
3 | +using UnityEngine; | |
4 | + | |
5 | +namespace AppsFlyerSDK | |
6 | +{ | |
7 | + | |
8 | +#if UNITY_ANDROID | |
9 | + public class AppsFlyerAndroid | |
10 | + { | |
11 | + | |
12 | + private static AndroidJavaClass appsFlyerAndroid = new AndroidJavaClass("com.appsflyer.unity.AppsFlyerAndroidWrapper"); | |
13 | + | |
14 | + | |
15 | + /// <summary> | |
16 | + /// Use this method to init the sdk for the application. | |
17 | + /// Call this method before startSDK. | |
18 | + /// </summary> | |
19 | + /// <param name="devkey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
20 | + /// <param name="gameObject">The current game object. This is used to get the conversion data callbacks. Pass null if you do not need the callbacks.</param> | |
21 | + public static void initSDK(string devkey, MonoBehaviour gameObject) | |
22 | + { | |
23 | +#if !UNITY_EDITOR | |
24 | + appsFlyerAndroid.CallStatic("initSDK", devkey, gameObject ? gameObject.name : null); | |
25 | +#endif | |
26 | + } | |
27 | + | |
28 | + /// <summary> | |
29 | + /// Use this method to start the sdk for the application. | |
30 | + /// The AppsFlyer's Dev-Key must be provided. | |
31 | + /// </summary> | |
32 | + /// <param name="devkey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
33 | + public static void startSDK() | |
34 | + { | |
35 | +#if !UNITY_EDITOR | |
36 | + appsFlyerAndroid.CallStatic("startTracking"); | |
37 | +#endif | |
38 | + } | |
39 | + | |
40 | + /// <summary> | |
41 | + /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. | |
42 | + /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. | |
43 | + /// This can be achieved with the stopSDK API. | |
44 | + /// </summary> | |
45 | + /// <param name="isSDKStopped">boolean should SDK be stopped.</param> | |
46 | + public static void stopSDK(bool isSDKStopped) | |
47 | + { | |
48 | +#if !UNITY_EDITOR | |
49 | + appsFlyerAndroid.CallStatic("stopTracking", isSDKStopped); | |
50 | +#endif | |
51 | + } | |
52 | + | |
53 | + /// <summary> | |
54 | + /// Get the AppsFlyer SDK version used in app. | |
55 | + /// </summary> | |
56 | + /// <returns>AppsFlyer SDK version.</returns> | |
57 | + public static string getSdkVersion() | |
58 | + { | |
59 | +#if !UNITY_EDITOR | |
60 | + return appsFlyerAndroid.CallStatic<string>("getSdkVersion"); | |
61 | +#else | |
62 | + return ""; | |
63 | +#endif | |
64 | + } | |
65 | + | |
66 | + /// <summary> | |
67 | + /// Manually pass the Firebase / GCM Device Token for Uninstall measurement. | |
68 | + /// </summary> | |
69 | + /// <param name="token">Firebase Device Token.</param> | |
70 | + public static void updateServerUninstallToken(string token) | |
71 | + { | |
72 | +#if !UNITY_EDITOR | |
73 | + appsFlyerAndroid.CallStatic("updateServerUninstallToken", token); | |
74 | +#endif | |
75 | + } | |
76 | + | |
77 | + /// <summary> | |
78 | + /// Enables Debug logs for the AppsFlyer SDK. | |
79 | + /// Should only be set to true in development / debug. | |
80 | + /// </summary> | |
81 | + /// <param name="shouldEnable">shouldEnable boolean.</param> | |
82 | + public static void setIsDebug(bool shouldEnable) | |
83 | + { | |
84 | +#if !UNITY_EDITOR | |
85 | + appsFlyerAndroid.CallStatic("setIsDebug", shouldEnable); | |
86 | +#endif | |
87 | + } | |
88 | + | |
89 | + /// <summary> | |
90 | + /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat (4.4) | |
91 | + /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). | |
92 | + /// Use this API to explicitly send IMEI to AppsFlyer. | |
93 | + /// </summary> | |
94 | + /// <param name="aImei">device's IMEI.</param> | |
95 | + public static void setImeiData(string aImei) | |
96 | + { | |
97 | +#if !UNITY_EDITOR | |
98 | + appsFlyerAndroid.CallStatic("setImeiData", aImei); | |
99 | +#endif | |
100 | + } | |
101 | + | |
102 | + /// <summary> | |
103 | + /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat(4.4) | |
104 | + /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). | |
105 | + /// Use this API to explicitly send Android ID to AppsFlyer. | |
106 | + /// </summary> | |
107 | + /// <param name="aAndroidId">device's Android ID.</param> | |
108 | + public static void setAndroidIdData(string aAndroidId) | |
109 | + { | |
110 | +#if !UNITY_EDITOR | |
111 | + appsFlyerAndroid.CallStatic("setAndroidIdData", aAndroidId); | |
112 | +#endif | |
113 | + } | |
114 | + | |
115 | + /// <summary> | |
116 | + /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. | |
117 | + /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. | |
118 | + /// </summary> | |
119 | + /// <param name="id">Customer ID for client.</param> | |
120 | + public static void setCustomerUserId(string id) | |
121 | + { | |
122 | +#if !UNITY_EDITOR | |
123 | + appsFlyerAndroid.CallStatic("setCustomerUserId", id); | |
124 | +#endif | |
125 | + } | |
126 | + | |
127 | + /// <summary> | |
128 | + /// It is possible to delay the SDK Initialization until the customerUserID is set. | |
129 | + /// This feature makes sure that the SDK doesn't begin functioning until the customerUserID is provided. | |
130 | + /// If this API is used, all in-app events and any other SDK API calls are discarded, until the customerUserID is provided. | |
131 | + /// </summary> | |
132 | + /// <param name="wait">wait boolean.</param> | |
133 | + public static void waitForCustomerUserId(bool wait) | |
134 | + { | |
135 | +#if !UNITY_EDITOR | |
136 | + appsFlyerAndroid.CallStatic("waitForCustomerUserId", wait); | |
137 | +#endif | |
138 | + } | |
139 | + | |
140 | + /// <summary> | |
141 | + /// Use this API to provide the SDK with the relevant customer user id and trigger the SDK to begin its normal activity. | |
142 | + /// </summary> | |
143 | + /// <param name="id">Customer ID for client.</param> | |
144 | + public static void setCustomerIdAndStartSDK(string id) | |
145 | + { | |
146 | +#if !UNITY_EDITOR | |
147 | + appsFlyerAndroid.CallStatic("setCustomerIdAndTrack", id); | |
148 | +#endif | |
149 | + } | |
150 | + | |
151 | + /// <summary> | |
152 | + /// Get the current AF_STORE value. | |
153 | + /// </summary> | |
154 | + /// <returns>AF_Store value.</returns> | |
155 | + public static string getOutOfStore() | |
156 | + { | |
157 | +#if !UNITY_EDITOR | |
158 | + return appsFlyerAndroid.CallStatic<string>("getOutOfStore"); | |
159 | +#else | |
160 | + return ""; | |
161 | +#endif | |
162 | + } | |
163 | + | |
164 | + /// <summary> | |
165 | + /// Manually set the AF_STORE value. | |
166 | + /// </summary> | |
167 | + /// <param name="sourceName">value to be set.</param> | |
168 | + public static void setOutOfStore(string sourceName) | |
169 | + { | |
170 | +#if !UNITY_EDITOR | |
171 | + appsFlyerAndroid.CallStatic("setOutOfStore", sourceName); | |
172 | +#endif | |
173 | + } | |
174 | + | |
175 | + /// <summary> | |
176 | + /// Set the OneLink ID that should be used for User-Invites. | |
177 | + /// The link that is generated for the user invite will use this OneLink as the base link. | |
178 | + /// </summary> | |
179 | + /// <param name="oneLinkId">OneLink ID obtained from the AppsFlyer Dashboard.</param> | |
180 | + public static void setAppInviteOneLinkID(string oneLinkId) | |
181 | + { | |
182 | +#if !UNITY_EDITOR | |
183 | + appsFlyerAndroid.CallStatic("setAppInviteOneLinkID", oneLinkId); | |
184 | +#endif | |
185 | + } | |
186 | + | |
187 | + /// <summary> | |
188 | + /// Set additional data to be sent to AppsFlyer. | |
189 | + /// </summary> | |
190 | + /// <param name="customData">additional data Dictionary.</param> | |
191 | + public static void setAdditionalData(Dictionary<string, string> customData) | |
192 | + { | |
193 | +#if !UNITY_EDITOR | |
194 | + appsFlyerAndroid.CallStatic("setAdditionalData", convertDictionaryToJavaMap(customData)); | |
195 | +#endif | |
196 | + } | |
197 | + | |
198 | + /// <summary> | |
199 | + /// Set the user emails. | |
200 | + /// </summary> | |
201 | + /// <param name="emails">User emails.</param> | |
202 | + public static void setUserEmails(params string[] emails) | |
203 | + { | |
204 | +#if !UNITY_EDITOR | |
205 | + appsFlyerAndroid.CallStatic("setUserEmails", (object)emails); | |
206 | +#endif | |
207 | + } | |
208 | + | |
209 | + | |
210 | + /// <summary> | |
211 | + /// Set the user phone number. | |
212 | + /// </summary> | |
213 | + /// <param name="phoneNumber">User phoneNumber.</param> | |
214 | + public static void setPhoneNumber(string phoneNumber){ | |
215 | +#if !UNITY_EDITOR | |
216 | + appsFlyerAndroid.CallStatic("setPhoneNumber", phoneNumber); | |
217 | +#endif | |
218 | + } | |
219 | + | |
220 | + /// <summary> | |
221 | + /// Set the user emails and encrypt them. | |
222 | + /// cryptMethod Encryption method: | |
223 | + /// EmailCryptType.EmailCryptTypeMD5 | |
224 | + /// EmailCryptType.EmailCryptTypeSHA1 | |
225 | + /// EmailCryptType.EmailCryptTypeSHA256 | |
226 | + /// EmailCryptType.EmailCryptTypeNone | |
227 | + /// </summary> | |
228 | + /// <param name="cryptMethod">Encryption method.</param> | |
229 | + /// <param name="emails">User emails.</param> | |
230 | + public static void setUserEmails(EmailCryptType cryptMethod, params string[] emails) | |
231 | + { | |
232 | +#if !UNITY_EDITOR | |
233 | + appsFlyerAndroid.CallStatic("setUserEmails", getEmailType(cryptMethod), (object)emails); | |
234 | +#endif | |
235 | + } | |
236 | + | |
237 | + /// <summary> | |
238 | + /// Opt-out of collection of Android ID. | |
239 | + /// If the app does NOT contain Google Play Services, Android ID is collected by the SDK. | |
240 | + /// However, apps with Google play services should avoid Android ID collection as this is in violation of the Google Play policy. | |
241 | + /// </summary> | |
242 | + /// <param name="isCollect">boolean, false to opt-out.</param> | |
243 | + public static void setCollectAndroidID(bool isCollect) | |
244 | + { | |
245 | +#if !UNITY_EDITOR | |
246 | + appsFlyerAndroid.CallStatic("setCollectAndroidID", isCollect); | |
247 | +#endif | |
248 | + } | |
249 | + | |
250 | + /// <summary> | |
251 | + /// Opt-out of collection of IMEI. | |
252 | + /// If the app does NOT contain Google Play Services, device IMEI is collected by the SDK. | |
253 | + /// However, apps with Google play services should avoid IMEI collection as this is in violation of the Google Play policy. | |
254 | + /// </summary> | |
255 | + /// <param name="isCollect">boolean, false to opt-out.</param> | |
256 | + public static void setCollectIMEI(bool isCollect) | |
257 | + { | |
258 | +#if !UNITY_EDITOR | |
259 | + appsFlyerAndroid.CallStatic("setCollectIMEI", isCollect); | |
260 | +#endif | |
261 | + } | |
262 | + | |
263 | + /// <summary> | |
264 | + /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. | |
265 | + /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. | |
266 | + /// </summary> | |
267 | + /// <param name="urls">Array of urls.</param> | |
268 | + public static void setResolveDeepLinkURLs(params string[] urls) | |
269 | + { | |
270 | +#if !UNITY_EDITOR | |
271 | + appsFlyerAndroid.CallStatic("setResolveDeepLinkURLs", (object)urls); | |
272 | +#endif | |
273 | + } | |
274 | + | |
275 | + | |
276 | + /// <summary> | |
277 | + /// Advertisers can use this method to set vanity onelink domains. | |
278 | + /// </summary> | |
279 | + /// <param name="domains">Array of domains.</param> | |
280 | + public static void setOneLinkCustomDomain(params string[] domains) | |
281 | + { | |
282 | +#if !UNITY_EDITOR | |
283 | + appsFlyerAndroid.CallStatic("setOneLinkCustomDomain", (object)domains); | |
284 | +#endif | |
285 | + } | |
286 | + | |
287 | + /// <summary> | |
288 | + /// Manually set that the application was updated. | |
289 | + /// </summary> | |
290 | + /// <param name="isUpdate">isUpdate boolean value.</param> | |
291 | + public static void setIsUpdate(bool isUpdate) | |
292 | + { | |
293 | +#if !UNITY_EDITOR | |
294 | + appsFlyerAndroid.CallStatic("setIsUpdate", isUpdate); | |
295 | +#endif | |
296 | + } | |
297 | + | |
298 | + /// <summary> | |
299 | + /// Setting user local currency code for in-app purchases. | |
300 | + /// The currency code should be a 3 character ISO 4217 code. (default is USD). | |
301 | + /// You can set the currency code for all events by calling the following method. | |
302 | + /// </summary> | |
303 | + /// <param name="currencyCode">3 character ISO 4217 code.</param> | |
304 | + public static void setCurrencyCode(string currencyCode) | |
305 | + { | |
306 | +#if !UNITY_EDITOR | |
307 | + appsFlyerAndroid.CallStatic("setCurrencyCode", currencyCode); | |
308 | +#endif | |
309 | + } | |
310 | + | |
311 | + /// <summary> | |
312 | + /// Manually record the location of the user. | |
313 | + /// </summary> | |
314 | + /// <param name="latitude">latitude as double.</param> | |
315 | + /// <param name="longitude">longitude as double.</param> | |
316 | + public static void recordLocation(double latitude, double longitude) | |
317 | + { | |
318 | +#if !UNITY_EDITOR | |
319 | + appsFlyerAndroid.CallStatic("trackLocation", latitude, longitude); | |
320 | +#endif | |
321 | + } | |
322 | + | |
323 | + /// <summary> | |
324 | + /// Send an In-App Event. | |
325 | + /// In-App Events provide insight on what is happening in your app. | |
326 | + /// </summary> | |
327 | + /// <param name="eventName">Event Name as String.</param> | |
328 | + /// <param name="eventValues">Event Values as Dictionary.</param> | |
329 | + public static void sendEvent(string eventName, Dictionary<string, string> eventValues) | |
330 | + { | |
331 | +#if !UNITY_EDITOR | |
332 | + appsFlyerAndroid.CallStatic("trackEvent", eventName, convertDictionaryToJavaMap(eventValues)); | |
333 | +#endif | |
334 | + } | |
335 | + | |
336 | + /// <summary> | |
337 | + /// Anonymize user Data. | |
338 | + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. | |
339 | + /// Default is false. | |
340 | + /// </summary> | |
341 | + /// <param name="isDisabled">isDisabled boolean.</param> | |
342 | + public static void anonymizeUser(bool isDisabled) | |
343 | + { | |
344 | +#if !UNITY_EDITOR | |
345 | + appsFlyerAndroid.CallStatic("setDeviceTrackingDisabled", isDisabled); | |
346 | +#endif | |
347 | + } | |
348 | + | |
349 | + /// <summary> | |
350 | + /// Enable the collection of Facebook Deferred AppLinks. | |
351 | + /// Requires Facebook SDK and Facebook app on target/client device. | |
352 | + /// This API must be invoked prior to initializing the AppsFlyer SDK in order to function properly. | |
353 | + /// </summary> | |
354 | + /// <param name="isEnabled">should Facebook's deferred app links be processed by the AppsFlyer SDK.</param> | |
355 | + public static void enableFacebookDeferredApplinks(bool isEnabled) | |
356 | + { | |
357 | +#if !UNITY_EDITOR | |
358 | + appsFlyerAndroid.CallStatic("enableFacebookDeferredApplinks", isEnabled); | |
359 | +#endif | |
360 | + } | |
361 | + | |
362 | + | |
363 | + /// <summary> | |
364 | + /// Restrict reengagement via deep-link to once per each unique deep-link. | |
365 | + /// Otherwise deep re-occurring deep-links will be permitted for non-singleTask Activities and deep-linking via AppsFlyer deep-links. | |
366 | + /// The default value is false. | |
367 | + /// </summary> | |
368 | + /// <param name="doConsume">doConsume boolean.</param> | |
369 | + public static void setConsumeAFDeepLinks(bool doConsume) | |
370 | + { | |
371 | +#if !UNITY_EDITOR | |
372 | + appsFlyerAndroid.CallStatic("setConsumeAFDeepLinks", doConsume); | |
373 | +#endif | |
374 | + } | |
375 | + | |
376 | + /// <summary> | |
377 | + /// Specify the manufacturer or media source name to which the preinstall is attributed. | |
378 | + /// </summary> | |
379 | + /// <param name="mediaSource">Manufacturer or media source name for preinstall attribution.</param> | |
380 | + /// <param name="campaign">Campaign name for preinstall attribution.</param> | |
381 | + /// <param name="siteId">Site ID for preinstall attribution.</param> | |
382 | + public static void setPreinstallAttribution(string mediaSource, string campaign, string siteId) | |
383 | + { | |
384 | +#if !UNITY_EDITOR | |
385 | + appsFlyerAndroid.CallStatic("setPreinstallAttribution", mediaSource, campaign, siteId); | |
386 | +#endif | |
387 | + } | |
388 | + | |
389 | + /// <summary> | |
390 | + /// Boolean indicator for preinstall by Manufacturer. | |
391 | + /// </summary> | |
392 | + /// <returns>boolean isPreInstalledApp.</returns> | |
393 | + public static bool isPreInstalledApp() | |
394 | + { | |
395 | +#if !UNITY_EDITOR | |
396 | + return appsFlyerAndroid.CallStatic<bool>("isPreInstalledApp"); | |
397 | +#else | |
398 | + return false; | |
399 | +#endif | |
400 | + } | |
401 | + | |
402 | + /// <summary> | |
403 | + /// Get the Facebook attribution ID, if one exists. | |
404 | + /// </summary> | |
405 | + /// <returns>string Facebook attribution ID.</returns> | |
406 | + public static string getAttributionId() | |
407 | + { | |
408 | +#if !UNITY_EDITOR | |
409 | + return appsFlyerAndroid.CallStatic<string>("getAttributionId"); | |
410 | +#else | |
411 | + return ""; | |
412 | +#endif | |
413 | + } | |
414 | + | |
415 | + /// <summary> | |
416 | + /// Get AppsFlyer's unique device ID is created for every new install of an app. | |
417 | + /// </summary> | |
418 | + /// <returns>AppsFlyer's unique device ID.</returns> | |
419 | + public static string getAppsFlyerId() | |
420 | + { | |
421 | +#if !UNITY_EDITOR | |
422 | + return appsFlyerAndroid.CallStatic<string>("getAppsFlyerId"); | |
423 | +#else | |
424 | + return ""; | |
425 | +#endif | |
426 | + } | |
427 | + | |
428 | + /// <summary> | |
429 | + /// API for server verification of in-app purchases. | |
430 | + /// An af_purchase event with the relevant values will be automatically sent if the validation is successful. | |
431 | + /// </summary> | |
432 | + /// <param name="publicKey">License Key obtained from the Google Play Console.</param> | |
433 | + /// <param name="signature"><code>data.INAPP_DATA_SIGNATURE</code> from <code>onActivityResult(int requestCode, int resultCode, Intent data)</code></param> | |
434 | + /// <param name="purchaseData"><code>data.INAPP_PURCHASE_DATA</code> from <code>onActivityResult(int requestCode, int resultCode, Intent data)</code></param> | |
435 | + /// <param name="price">Purchase price, should be derived from <code>skuDetails.getStringArrayList("DETAILS_LIST")</code></param> | |
436 | + /// <param name="currency">Purchase currency, should be derived from <code>skuDetails.getStringArrayList("DETAILS_LIST")</code></param> | |
437 | + /// <param name="additionalParameters">additionalParameters Freehand parameters to be sent with the purchase (if validated).</param> | |
438 | + public static void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary<string, string> additionalParameters, MonoBehaviour gameObject) | |
439 | + { | |
440 | +#if !UNITY_EDITOR | |
441 | + appsFlyerAndroid.CallStatic("validateAndTrackInAppPurchase", publicKey, signature, purchaseData, price, currency, convertDictionaryToJavaMap(additionalParameters), gameObject ? gameObject.name : null); | |
442 | +#endif | |
443 | + } | |
444 | + | |
445 | + /// <summary> | |
446 | + /// Was the stopSDK(boolean) API set to true. | |
447 | + /// </summary> | |
448 | + /// <returns>boolean isSDKStopped.</returns> | |
449 | + public static bool isSDKStopped() | |
450 | + { | |
451 | +#if !UNITY_EDITOR | |
452 | + return appsFlyerAndroid.CallStatic<bool>("isTrackingStopped"); | |
453 | +#else | |
454 | + return false; | |
455 | +#endif | |
456 | + } | |
457 | + | |
458 | + /// <summary> | |
459 | + /// Set a custom value for the minimum required time between sessions. | |
460 | + /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. | |
461 | + /// </summary> | |
462 | + /// <param name="seconds">minimum time between 2 separate sessions in seconds.</param> | |
463 | + public static void setMinTimeBetweenSessions(int seconds) | |
464 | + { | |
465 | +#if !UNITY_EDITOR | |
466 | + appsFlyerAndroid.CallStatic("setMinTimeBetweenSessions", seconds); | |
467 | +#endif | |
468 | + } | |
469 | + | |
470 | + /// <summary> | |
471 | + /// Set a custom host. | |
472 | + /// </summary> | |
473 | + /// <param name="hostPrefixName">Host prefix.</param> | |
474 | + /// <param name="hostName">Host name.</param> | |
475 | + public static void setHost(string hostPrefixName, string hostName) | |
476 | + { | |
477 | +#if !UNITY_EDITOR | |
478 | + appsFlyerAndroid.CallStatic("setHost", hostPrefixName, hostName); | |
479 | +#endif | |
480 | + } | |
481 | + | |
482 | + /// <summary> | |
483 | + /// Get the host name. | |
484 | + /// Default value is "appsflyer.com". | |
485 | + /// </summary> | |
486 | + /// <returns>Host name.</returns> | |
487 | + public static string getHostName() | |
488 | + { | |
489 | +#if !UNITY_EDITOR | |
490 | + return appsFlyerAndroid.CallStatic<string>("getHostName"); | |
491 | +#else | |
492 | + return ""; | |
493 | +#endif | |
494 | + } | |
495 | + | |
496 | + /// <summary> | |
497 | + /// Get the custom host prefix. | |
498 | + /// </summary> | |
499 | + /// <returns>Host prefix.</returns> | |
500 | + public static string getHostPrefix() | |
501 | + { | |
502 | +#if !UNITY_EDITOR | |
503 | + return appsFlyerAndroid.CallStatic<string>("getHostPrefix"); | |
504 | +#else | |
505 | + return ""; | |
506 | +#endif | |
507 | + } | |
508 | + | |
509 | + /// <summary> | |
510 | + /// Used by advertisers to exclude all networks/integrated partners from getting data. | |
511 | + /// </summary> | |
512 | + public static void setSharingFilterForAllPartners() | |
513 | + { | |
514 | +#if !UNITY_EDITOR | |
515 | + appsFlyerAndroid.CallStatic("setSharingFilterForAllPartners"); | |
516 | +#endif | |
517 | + } | |
518 | + | |
519 | + /// <summary> | |
520 | + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. | |
521 | + /// </summary> | |
522 | + /// <param name="partners">partners to exclude from getting data</param> | |
523 | + public static void setSharingFilter(params string[] partners) | |
524 | + { | |
525 | +#if !UNITY_EDITOR | |
526 | + appsFlyerAndroid.CallStatic("setSharingFilter", (object)partners); | |
527 | +#endif | |
528 | + } | |
529 | + | |
530 | + /// <summary> | |
531 | + /// Register a Conversion Data Listener. | |
532 | + /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. | |
533 | + /// By doing this you can serve users with personalized content or send them to specific activities within the app, | |
534 | + /// which can greatly enhance their engagement with your app. | |
535 | + /// </summary> | |
536 | + public static void getConversionData(string objectName) | |
537 | + { | |
538 | +#if !UNITY_EDITOR | |
539 | + appsFlyerAndroid.CallStatic("getConversionData", objectName); | |
540 | +#endif | |
541 | + } | |
542 | + | |
543 | + /// <summary> | |
544 | + /// Register a validation listener for the validateAndSendInAppPurchase API. | |
545 | + /// </summary> | |
546 | + public static void initInAppPurchaseValidatorListener(MonoBehaviour gameObject) | |
547 | + { | |
548 | +#if !UNITY_EDITOR | |
549 | + appsFlyerAndroid.CallStatic("initInAppPurchaseValidatorListener", gameObject ? gameObject.name : null); | |
550 | +#endif | |
551 | + } | |
552 | + | |
553 | + /// <summary> | |
554 | + /// setCollectOaid | |
555 | + /// You must include the appsflyer oaid library for this api to work. | |
556 | + /// </summary> | |
557 | + /// <param name="isCollect">isCollect oaid - set fasle to opt out</param> | |
558 | + public static void setCollectOaid(bool isCollect) | |
559 | + { | |
560 | +#if !UNITY_EDITOR | |
561 | + appsFlyerAndroid.CallStatic("setCollectOaid", isCollect); | |
562 | +#endif | |
563 | + } | |
564 | + | |
565 | + /// <summary> | |
566 | + /// Use the following API to attribute the click and launch the app store's app page. | |
567 | + /// </summary> | |
568 | + /// <param name="promoted_app_id">promoted App ID</param> | |
569 | + /// <param name="campaign">cross promotion campaign</param> | |
570 | + /// <param name="userParams">additional user params</param> | |
571 | + public static void attributeAndOpenStore(string promoted_app_id, string campaign, Dictionary<string, string> userParams) | |
572 | + { | |
573 | +#if !UNITY_EDITOR | |
574 | + appsFlyerAndroid.CallStatic("attributeAndOpenStore", promoted_app_id, campaign, convertDictionaryToJavaMap(userParams)); | |
575 | +#endif | |
576 | + } | |
577 | + | |
578 | + /// <summary> | |
579 | + /// To attribute an impression use the following API call. | |
580 | + /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. | |
581 | + /// </summary> | |
582 | + /// <param name="appID">promoted App ID.</param> | |
583 | + /// <param name="campaign">cross promotion campaign.</param> | |
584 | + /// <param name="parameters">parameters Dictionary.</param> | |
585 | + public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary<string, string> parameters) | |
586 | + { | |
587 | +#if !UNITY_EDITOR | |
588 | + appsFlyerAndroid.CallStatic("recordCrossPromoteImpression", appID, campaign, convertDictionaryToJavaMap(parameters)); | |
589 | +#endif | |
590 | + } | |
591 | + | |
592 | + /// <summary> | |
593 | + /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. | |
594 | + /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- | |
595 | + /// </summary> | |
596 | + /// <param name="parameters">parameters Dictionary.</param> | |
597 | + public static void generateUserInviteLink(Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
598 | + { | |
599 | +#if !UNITY_EDITOR | |
600 | + appsFlyerAndroid.CallStatic("createOneLinkInviteListener", convertDictionaryToJavaMap(parameters), gameObject ? gameObject.name : null); | |
601 | +#endif | |
602 | + } | |
603 | + | |
604 | + /// <summary> | |
605 | + /// To measure push notifications as part of a retargeting campaign. | |
606 | + /// </summary> | |
607 | + public static void handlePushNotifications(){ | |
608 | +#if !UNITY_EDITOR | |
609 | + appsFlyerAndroid.CallStatic("handlePushNotifications"); | |
610 | +#endif | |
611 | + } | |
612 | + | |
613 | + /// <summary> | |
614 | + /// Internal Helper Method. | |
615 | + /// </summary> | |
616 | + private static AndroidJavaObject getEmailType(EmailCryptType cryptType) | |
617 | + { | |
618 | + AndroidJavaClass emailsCryptTypeEnum = new AndroidJavaClass("com.appsflyer.AppsFlyerProperties$EmailsCryptType"); | |
619 | + AndroidJavaObject emailsCryptType; | |
620 | + | |
621 | + switch (cryptType) | |
622 | + { | |
623 | + case EmailCryptType.EmailCryptTypeSHA256: | |
624 | + emailsCryptType = emailsCryptTypeEnum.GetStatic<AndroidJavaObject>("SHA256"); | |
625 | + break; | |
626 | + default: | |
627 | + emailsCryptType = emailsCryptTypeEnum.GetStatic<AndroidJavaObject>("NONE"); | |
628 | + break; | |
629 | + } | |
630 | + | |
631 | + return emailsCryptType; | |
632 | + } | |
633 | + | |
634 | + /// <summary> | |
635 | + /// Internal Helper Method. | |
636 | + /// </summary> | |
637 | + private static AndroidJavaObject convertDictionaryToJavaMap(Dictionary<string, string> dictionary) | |
638 | + { | |
639 | + AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap"); | |
640 | + IntPtr putMethod = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); | |
641 | + if (dictionary != null) | |
642 | + { | |
643 | + foreach (var entry in dictionary) | |
644 | + { | |
645 | + AndroidJNI.CallObjectMethod(map.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(new object[] { entry.Key, entry.Value })); | |
646 | + } | |
647 | + } | |
648 | + | |
649 | + return map; | |
650 | + } | |
651 | + } | |
652 | + | |
653 | +#endif | |
654 | + | |
655 | + | |
656 | + | |
657 | +} |
AppsFlyerAndroid.cs.meta
AppsFlyerObject.prefab
1 | +%YAML 1.1 | |
2 | +%TAG !u! tag:unity3d.com,2011: | |
3 | +--- !u!1001 &100100000 | |
4 | +Prefab: | |
5 | + m_ObjectHideFlags: 1 | |
6 | + serializedVersion: 2 | |
7 | + m_Modification: | |
8 | + m_TransformParent: {fileID: 0} | |
9 | + m_Modifications: [] | |
10 | + m_RemovedComponents: [] | |
11 | + m_SourcePrefab: {fileID: 0} | |
12 | + m_RootGameObject: {fileID: 1562408896289314} | |
13 | + m_IsPrefabAsset: 1 | |
14 | +--- !u!1 &1562408896289314 | |
15 | +GameObject: | |
16 | + m_ObjectHideFlags: 0 | |
17 | + m_CorrespondingSourceObject: {fileID: 0} | |
18 | + m_PrefabInternal: {fileID: 100100000} | |
19 | + serializedVersion: 6 | |
20 | + m_Component: | |
21 | + - component: {fileID: 4294345628247858} | |
22 | + - component: {fileID: 114092076686766906} | |
23 | + m_Layer: 0 | |
24 | + m_Name: AppsFlyerObject | |
25 | + m_TagString: Untagged | |
26 | + m_Icon: {fileID: 0} | |
27 | + m_NavMeshLayer: 0 | |
28 | + m_StaticEditorFlags: 0 | |
29 | + m_IsActive: 1 | |
30 | +--- !u!4 &4294345628247858 | |
31 | +Transform: | |
32 | + m_ObjectHideFlags: 1 | |
33 | + m_CorrespondingSourceObject: {fileID: 0} | |
34 | + m_PrefabInternal: {fileID: 100100000} | |
35 | + m_GameObject: {fileID: 1562408896289314} | |
36 | + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | |
37 | + m_LocalPosition: {x: 0, y: 0, z: 0} | |
38 | + m_LocalScale: {x: 1, y: 1, z: 1} | |
39 | + m_Children: [] | |
40 | + m_Father: {fileID: 0} | |
41 | + m_RootOrder: 0 | |
42 | + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | |
43 | +--- !u!114 &114092076686766906 | |
44 | +MonoBehaviour: | |
45 | + m_ObjectHideFlags: 1 | |
46 | + m_CorrespondingSourceObject: {fileID: 0} | |
47 | + m_PrefabInternal: {fileID: 100100000} | |
48 | + m_GameObject: {fileID: 1562408896289314} | |
49 | + m_Enabled: 1 | |
50 | + m_EditorHideFlags: 0 | |
51 | + m_Script: {fileID: 11500000, guid: 2caf6a738ac024a48bd358f4cc91662a, type: 3} | |
52 | + m_Name: | |
53 | + m_EditorClassIdentifier: | |
54 | + devKey: | |
55 | + appID: | |
56 | + isDebug: 0 | |
57 | + getConversionData: 0 |
AppsFlyerObject.prefab.meta
AppsFlyerObjectScript.cs
1 | +using System.Collections; | |
2 | +using System.Collections.Generic; | |
3 | +using UnityEngine; | |
4 | +using AppsFlyerSDK; | |
5 | + | |
6 | +// This class is intended to be used the the AppsFlyerObject.prefab | |
7 | + | |
8 | +public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData | |
9 | +{ | |
10 | + | |
11 | + // These fields are set from the editor so do not modify! | |
12 | + //******************************// | |
13 | + public string devKey; | |
14 | + public string appID; | |
15 | + public bool isDebug; | |
16 | + public bool getConversionData; | |
17 | + //******************************// | |
18 | + | |
19 | + void Start() | |
20 | + { | |
21 | + // These fields are set from the editor so do not modify! | |
22 | + //******************************// | |
23 | + AppsFlyer.setIsDebug(isDebug); | |
24 | + AppsFlyer.initSDK(devKey, appID, getConversionData ? this : null); | |
25 | + //******************************// | |
26 | + | |
27 | + AppsFlyer.startSDK(); | |
28 | + } | |
29 | + | |
30 | + void Update() | |
31 | + { | |
32 | + | |
33 | + } | |
34 | + | |
35 | + // Mark AppsFlyer CallBacks | |
36 | + public void onConversionDataSuccess(string conversionData) | |
37 | + { | |
38 | + AppsFlyer.AFLog("didReceiveConversionData", conversionData); | |
39 | + Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData); | |
40 | + // add deferred deeplink logic here | |
41 | + } | |
42 | + | |
43 | + public void onConversionDataFail(string error) | |
44 | + { | |
45 | + AppsFlyer.AFLog("didReceiveConversionDataWithError", error); | |
46 | + } | |
47 | + | |
48 | + public void onAppOpenAttribution(string attributionData) | |
49 | + { | |
50 | + AppsFlyer.AFLog("onAppOpenAttribution", attributionData); | |
51 | + Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData); | |
52 | + // add direct deeplink logic here | |
53 | + } | |
54 | + | |
55 | + public void onAppOpenAttributionFailure(string error) | |
56 | + { | |
57 | + AppsFlyer.AFLog("onAppOpenAttributionFailure", error); | |
58 | + } | |
59 | +} |
AppsFlyerObjectScript.cs.meta
AppsFlyeriOS.cs
1 | +using System.Collections.Generic; | |
2 | +using System.Runtime.InteropServices; | |
3 | +using UnityEngine; | |
4 | + | |
5 | +namespace AppsFlyerSDK | |
6 | +{ | |
7 | +#if UNITY_IOS | |
8 | + | |
9 | + public class AppsFlyeriOS | |
10 | + { | |
11 | + | |
12 | + /// <summary> | |
13 | + /// Start Session. | |
14 | + /// This will record a session and then record all background forground sessions during the lifecycle of the app. | |
15 | + /// </summary> | |
16 | + public static void startSDK() | |
17 | + { | |
18 | +#if !UNITY_EDITOR | |
19 | + _startSDK(); | |
20 | +#endif | |
21 | + } | |
22 | + | |
23 | + /// <summary> | |
24 | + /// Send an In-App Event. | |
25 | + /// In-App Events provide insight on what is happening in your app. | |
26 | + /// </summary> | |
27 | + /// <param name="eventName">Name of event.</param> | |
28 | + /// <param name="eventValues">Contains dictionary of values for handling by backend.</param> | |
29 | + public static void sendEvent(string eventName, Dictionary<string, string> eventValues) | |
30 | + { | |
31 | +#if !UNITY_EDITOR | |
32 | + _afSendEvent(eventName, AFMiniJSON.Json.Serialize(eventValues)); | |
33 | +#endif | |
34 | + } | |
35 | + | |
36 | + /// <summary> | |
37 | + /// Get the conversion data. | |
38 | + /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. | |
39 | + /// By doing this you can serve users with personalized content or send them to specific activities within the app, | |
40 | + /// which can greatly enhance their engagement with your app. | |
41 | + /// </summary> | |
42 | + public static void getConversionData(string objectName) | |
43 | + { | |
44 | +#if !UNITY_EDITOR | |
45 | + _getConversionData(objectName); | |
46 | +#endif | |
47 | + } | |
48 | + | |
49 | + /// <summary> | |
50 | + /// In case you use your own user ID in your app, you can set this property to that ID. | |
51 | + /// Enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. | |
52 | + /// </summary> | |
53 | + /// <param name="customerUserID">Customer ID for client.</param> | |
54 | + public static void setCustomerUserID(string customerUserID) | |
55 | + { | |
56 | +#if !UNITY_EDITOR | |
57 | + _setCustomerUserID(customerUserID); | |
58 | +#endif | |
59 | + } | |
60 | + | |
61 | + /// <summary> | |
62 | + /// In case you use custom data and you want to receive it in the raw reports. | |
63 | + /// see [Setting additional custom data] (https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS#setting-additional-custom-data) for more information. | |
64 | + /// </summary> | |
65 | + /// <param name="customData">additional data Dictionary.</param> | |
66 | + public static void setAdditionalData(Dictionary<string, string> customData) | |
67 | + { | |
68 | +#if !UNITY_EDITOR | |
69 | + _setAdditionalData(AFMiniJSON.Json.Serialize(customData)); | |
70 | +#endif | |
71 | + } | |
72 | + | |
73 | + /// <summary> | |
74 | + /// Use this method to set your AppsFlyer's dev key. | |
75 | + /// </summary> | |
76 | + /// <param name="appsFlyerDevKey">AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
77 | + public static void setAppsFlyerDevKey(string appsFlyerDevKey) | |
78 | + { | |
79 | +#if !UNITY_EDITOR | |
80 | + _setAppsFlyerDevKey(appsFlyerDevKey); | |
81 | +#endif | |
82 | + } | |
83 | + | |
84 | + /// <summary> | |
85 | + /// Use this method to set your app's Apple ID(taken from the app's page on iTunes Connect). | |
86 | + /// </summary> | |
87 | + /// <param name="appleAppID">your app's Apple ID.</param> | |
88 | + public static void setAppleAppID(string appleAppID) | |
89 | + { | |
90 | +#if !UNITY_EDITOR | |
91 | + _setAppleAppID(appleAppID); | |
92 | +#endif | |
93 | + } | |
94 | + | |
95 | + /// <summary> | |
96 | + /// Setting user local currency code for in-app purchases. | |
97 | + /// The currency code should be a 3 character ISO 4217 code. (default is USD). | |
98 | + /// You can set the currency code for all events by calling the following method. | |
99 | + /// </summary> | |
100 | + /// <param name="currencyCode">3 character ISO 4217 code.</param> | |
101 | + public static void setCurrencyCode(string currencyCode) | |
102 | + { | |
103 | +#if !UNITY_EDITOR | |
104 | + _setCurrencyCode(currencyCode); | |
105 | +#endif | |
106 | + } | |
107 | + | |
108 | + /// <summary> | |
109 | + /// AppsFlyer SDK collect Apple's `advertisingIdentifier` if the `AdSupport.framework` included in the SDK. | |
110 | + /// You can disable this behavior by setting the following property to true. | |
111 | + /// </summary> | |
112 | + /// <param name="disableCollectAppleAdSupport">boolean to disableCollectAppleAdSupport</param> | |
113 | + public static void setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport) | |
114 | + { | |
115 | +#if !UNITY_EDITOR | |
116 | + _setDisableCollectAppleAdSupport(disableCollectAppleAdSupport); | |
117 | +#endif | |
118 | + } | |
119 | + | |
120 | + /// <summary> | |
121 | + /// Enables Debug logs for the AppsFlyer SDK. | |
122 | + /// Should only be set to true in development / debug. | |
123 | + /// The default value is false. | |
124 | + /// </summary> | |
125 | + /// <param name="isDebug">shouldEnable boolean..</param> | |
126 | + public static void setIsDebug(bool isDebug) | |
127 | + { | |
128 | +#if !UNITY_EDITOR | |
129 | + _setIsDebug(isDebug); | |
130 | +#endif | |
131 | + } | |
132 | + | |
133 | + /// <summary> | |
134 | + /// Set this flag to true, to collect the current device name(e.g. "My iPhone"). Default value is false. | |
135 | + /// </summary> | |
136 | + /// <param name="shouldCollectDeviceName">boolean shouldCollectDeviceName.</param> | |
137 | + public static void setShouldCollectDeviceName(bool shouldCollectDeviceName) | |
138 | + { | |
139 | +#if !UNITY_EDITOR | |
140 | + _setShouldCollectDeviceName(shouldCollectDeviceName); | |
141 | +#endif | |
142 | + } | |
143 | + | |
144 | + /// <summary> | |
145 | + /// Set the OneLink ID that should be used for User-Invites. | |
146 | + /// The link that is generated for the user invite will use this OneLink as the base link. | |
147 | + /// </summary> | |
148 | + /// <param name="appInviteOneLinkID">OneLink ID obtained from the AppsFlyer Dashboard.</param> | |
149 | + public static void setAppInviteOneLinkID(string appInviteOneLinkID) | |
150 | + { | |
151 | +#if !UNITY_EDITOR | |
152 | + _setAppInviteOneLinkID(appInviteOneLinkID); | |
153 | +#endif | |
154 | + } | |
155 | + | |
156 | + /// <summary> | |
157 | + /// Anonymize user Data. | |
158 | + /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. | |
159 | + /// Default is false | |
160 | + /// </summary> | |
161 | + /// <param name="shouldAnonymizeUser">boolean shouldAnonymizeUser.</param> | |
162 | + public static void anonymizeUser(bool shouldAnonymizeUser) | |
163 | + { | |
164 | +#if !UNITY_EDITOR | |
165 | + _anonymizeUser(shouldAnonymizeUser); | |
166 | +#endif | |
167 | + } | |
168 | + | |
169 | + /// <summary> | |
170 | + /// Opt-out for Apple Search Ads attributions. | |
171 | + /// </summary> | |
172 | + /// <param name="disableCollectIAd">boolean disableCollectIAd.</param> | |
173 | + public static void setDisableCollectIAd(bool disableCollectIAd) | |
174 | + { | |
175 | +#if !UNITY_EDITOR | |
176 | + _setDisableCollectIAd(disableCollectIAd); | |
177 | +#endif | |
178 | + } | |
179 | + | |
180 | + /// <summary> | |
181 | + /// In app purchase receipt validation Apple environment(production or sandbox). The default value is false. | |
182 | + /// </summary> | |
183 | + /// <param name="useReceiptValidationSandbox">boolean useReceiptValidationSandbox.</param> | |
184 | + public static void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox) | |
185 | + { | |
186 | +#if !UNITY_EDITOR | |
187 | + _setUseReceiptValidationSandbox(useReceiptValidationSandbox); | |
188 | +#endif | |
189 | + } | |
190 | + | |
191 | + /// <summary> | |
192 | + /// Set this flag to test uninstall on Apple environment(production or sandbox). The default value is false. | |
193 | + /// </summary> | |
194 | + /// <param name="useUninstallSandbox">boolean useUninstallSandbox.</param> | |
195 | + public static void setUseUninstallSandbox(bool useUninstallSandbox) | |
196 | + { | |
197 | +#if !UNITY_EDITOR | |
198 | + _setUseUninstallSandbox(useUninstallSandbox); | |
199 | +#endif | |
200 | + } | |
201 | + | |
202 | + /// <summary> | |
203 | + /// For advertisers who wrap OneLink within another Universal Link. | |
204 | + /// An advertiser will be able to deeplink from a OneLink wrapped within another Universal Link and also record this retargeting conversion. | |
205 | + /// </summary> | |
206 | + /// <param name="resolveDeepLinkURLs">Array of urls.</param> | |
207 | + public static void setResolveDeepLinkURLs(params string[] resolveDeepLinkURLs) | |
208 | + { | |
209 | +#if !UNITY_EDITOR | |
210 | + _setResolveDeepLinkURLs(resolveDeepLinkURLs.Length,resolveDeepLinkURLs); | |
211 | +#endif | |
212 | + } | |
213 | + | |
214 | + /// <summary> | |
215 | + /// For advertisers who use vanity OneLinks. | |
216 | + /// </summary> | |
217 | + /// <param name="oneLinkCustomDomains">Array of domains.</param> | |
218 | + public static void setOneLinkCustomDomains(params string[] oneLinkCustomDomains) | |
219 | + { | |
220 | +#if !UNITY_EDITOR | |
221 | + _setOneLinkCustomDomains(oneLinkCustomDomains.Length, oneLinkCustomDomains); | |
222 | +#endif | |
223 | + } | |
224 | + | |
225 | + /// <summary> | |
226 | + /// Set the user emails and encrypt them. | |
227 | + /// cryptMethod Encryption method: | |
228 | + /// EmailCryptType.EmailCryptTypeMD5 | |
229 | + /// EmailCryptType.EmailCryptTypeSHA1 | |
230 | + /// EmailCryptType.EmailCryptTypeSHA256 | |
231 | + /// EmailCryptType.EmailCryptTypeNone | |
232 | + /// </summary> | |
233 | + /// <param name="cryptType">type Hash algoritm.</param> | |
234 | + /// <param name="length">length of userEmails array.</param> | |
235 | + /// <param name="userEmails">userEmails The list of strings that hold mails.</param> | |
236 | + public static void setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails) | |
237 | + { | |
238 | +#if !UNITY_EDITOR | |
239 | + _setUserEmails(cryptType, length, userEmails); | |
240 | +#endif | |
241 | + } | |
242 | + | |
243 | + /// <summary> | |
244 | + /// Set the user phone number. | |
245 | + /// </summary> | |
246 | + /// <param name="phoneNumber">User phoneNumber.</param> | |
247 | + public static void setPhoneNumber(string phoneNumber){ | |
248 | +#if !UNITY_EDITOR | |
249 | + _setPhoneNumber(phoneNumber); | |
250 | +#endif | |
251 | + } | |
252 | + | |
253 | + /// <summary> | |
254 | + /// To send and validate in app purchases you can call this method from the processPurchase method. | |
255 | + /// </summary> | |
256 | + /// <param name="productIdentifier">The product identifier.</param> | |
257 | + /// <param name="price">The product price.</param> | |
258 | + /// <param name="currency">The product currency.</param> | |
259 | + /// <param name="tranactionId">The purchase transaction Id.</param> | |
260 | + /// <param name="additionalParameters">The additional param, which you want to receive it in the raw reports.</param> | |
261 | + public static void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, Dictionary<string, string> additionalParameters, MonoBehaviour gameObject) | |
262 | + { | |
263 | +#if !UNITY_EDITOR | |
264 | + _validateAndSendInAppPurchase(productIdentifier, price, currency, tranactionId, AFMiniJSON.Json.Serialize(additionalParameters), gameObject ? gameObject.name : null); | |
265 | +#endif | |
266 | + } | |
267 | + | |
268 | + /// <summary> | |
269 | + /// To record location for geo-fencing. Does the same as code below. | |
270 | + /// </summary> | |
271 | + /// <param name="longitude">The location longitude.</param> | |
272 | + /// <param name="latitude">The location latitude.</param> | |
273 | + public static void recordLocation(double longitude, double latitude) | |
274 | + { | |
275 | +#if !UNITY_EDITOR | |
276 | + _recordLocation(longitude, latitude); | |
277 | +#endif | |
278 | + } | |
279 | + | |
280 | + /// <summary> | |
281 | + /// Get AppsFlyer's unique device ID, which is created for every new install of an app. | |
282 | + /// </summary> | |
283 | + public static string getAppsFlyerId() | |
284 | + { | |
285 | +#if !UNITY_EDITOR | |
286 | + return _getAppsFlyerId(); | |
287 | +#else | |
288 | + return ""; | |
289 | +#endif | |
290 | + } | |
291 | + | |
292 | + /// <summary> | |
293 | + /// Register uninstall - you should register for remote notification and provide AppsFlyer the push device token. | |
294 | + /// </summary> | |
295 | + /// <param name="deviceToken">deviceToken The `deviceToken` from `-application:didRegisterForRemoteNotificationsWithDeviceToken:`.</param> | |
296 | + public static void registerUninstall(byte[] deviceToken) | |
297 | + { | |
298 | +#if !UNITY_EDITOR | |
299 | + _registerUninstall(deviceToken); | |
300 | +#endif | |
301 | + } | |
302 | + | |
303 | + /// <summary> | |
304 | + /// Enable AppsFlyer to handle a push notification. | |
305 | + /// </summary> | |
306 | + /// <param name="pushPayload">pushPayload The `userInfo` from received remote notification. One of root keys should be @"af"..</param> | |
307 | + public static void handlePushNotification(Dictionary<string, string> pushPayload) | |
308 | + { | |
309 | +#if !UNITY_EDITOR | |
310 | + _handlePushNotification(AFMiniJSON.Json.Serialize(pushPayload)); | |
311 | +#endif | |
312 | + } | |
313 | + | |
314 | + /// <summary> | |
315 | + /// Get SDK version. | |
316 | + /// </summary> | |
317 | + public static string getSDKVersion() | |
318 | + { | |
319 | +#if !UNITY_EDITOR | |
320 | + return _getSDKVersion(); | |
321 | +#else | |
322 | + return ""; | |
323 | +#endif | |
324 | + } | |
325 | + | |
326 | + /// <summary> | |
327 | + /// This property accepts a string value representing the host name for all endpoints. | |
328 | + /// Can be used to Zero rate your application’s data usage.Contact your CSM for more information. | |
329 | + /// </summary> | |
330 | + /// <param name="host">Host Name.</param> | |
331 | + /// <param name="host">Host prefix.</param> | |
332 | + public static void setHost(string host, string hostPrefix) | |
333 | + { | |
334 | +#if !UNITY_EDITOR | |
335 | + _setHost(host, hostPrefix); | |
336 | +#endif | |
337 | + } | |
338 | + | |
339 | + /// <summary> | |
340 | + /// This property is responsible for timeout between sessions in seconds. | |
341 | + /// Default value is 5 seconds. | |
342 | + /// </summary> | |
343 | + /// <param name="minTimeBetweenSessions">minimum time between 2 separate sessions in seconds.</param> | |
344 | + public static void setMinTimeBetweenSessions(int minTimeBetweenSessions) | |
345 | + { | |
346 | +#if !UNITY_EDITOR | |
347 | + _setMinTimeBetweenSessions(minTimeBetweenSessions); | |
348 | +#endif | |
349 | + } | |
350 | + | |
351 | + /// <summary> | |
352 | + /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. | |
353 | + /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. | |
354 | + /// This can be achieved with the stopSDK API. | |
355 | + /// </summary> | |
356 | + /// <param name="isSDKStopped">boolean isSDKStopped.</param> | |
357 | + public static void stopSDK(bool isSDKStopped) | |
358 | + { | |
359 | +#if !UNITY_EDITOR | |
360 | + _stopSDK(isSDKStopped); | |
361 | +#endif | |
362 | + } | |
363 | + | |
364 | + // <summary> | |
365 | + /// Was the stopSDK(boolean) API set to true. | |
366 | + /// </summary> | |
367 | + /// <returns>boolean isSDKStopped.</returns> | |
368 | + public static bool isSDKStopped() | |
369 | + { | |
370 | +#if !UNITY_EDITOR | |
371 | + return _isSDKStopped(); | |
372 | +#else | |
373 | + return false; | |
374 | +#endif | |
375 | + } | |
376 | + | |
377 | + /// <summary> | |
378 | + /// In case you want to track deep linking manually call handleOpenUrl. | |
379 | + /// The continueUserActivity and onOpenURL are implemented in the AppsFlyerAppController.mm class, so | |
380 | + /// only use this method if the other methods do not cover your apps deeplinking needs. | |
381 | + /// </summary> | |
382 | + /// <param name="url">The URL to be passed to your AppDelegate.</param> | |
383 | + /// <param name="sourceApplication">The sourceApplication to be passed to your AppDelegate.</param> | |
384 | + /// <param name="annotation">The annotation to be passed to your app delegate.</param> | |
385 | + public static void handleOpenUrl(string url, string sourceApplication, string annotation) | |
386 | + { | |
387 | +#if !UNITY_EDITOR | |
388 | + _handleOpenUrl(url, sourceApplication, annotation); | |
389 | +#endif | |
390 | + } | |
391 | + | |
392 | + /// <summary> | |
393 | + /// Used by advertisers to exclude all networks/integrated partners from getting data. | |
394 | + /// </summary> | |
395 | + public static void setSharingFilterForAllPartners() | |
396 | + { | |
397 | +#if !UNITY_EDITOR | |
398 | + _setSharingFilterForAllPartners(); | |
399 | +#endif | |
400 | + } | |
401 | + | |
402 | + /// <summary> | |
403 | + /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. | |
404 | + /// </summary> | |
405 | + /// <param name="partners">partners to exclude from getting data</param> | |
406 | + public static void setSharingFilter(params string[] partners) | |
407 | + { | |
408 | +#if !UNITY_EDITOR | |
409 | + _setSharingFilter(partners.Length, partners); | |
410 | +#endif | |
411 | + } | |
412 | + | |
413 | + /// <summary> | |
414 | + /// To record an impression use the following API call. | |
415 | + /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. | |
416 | + /// </summary> | |
417 | + /// <param name="appID">promoted App ID.</param> | |
418 | + /// <param name="campaign">cross promotion campaign.</param> | |
419 | + /// <param name="parameters">parameters Dictionary.</param> | |
420 | + public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary<string, string> parameters) | |
421 | + { | |
422 | +#if !UNITY_EDITOR | |
423 | + _recordCrossPromoteImpression(appID, campaign, AFMiniJSON.Json.Serialize(parameters)); | |
424 | +#endif | |
425 | + } | |
426 | + | |
427 | + /// <summary> | |
428 | + /// Use the following API to attribute the click and launch the app store's app page. | |
429 | + /// </summary> | |
430 | + /// <param name="appID">promoted App ID</param> | |
431 | + /// <param name="campaign">cross promotion campaign</param> | |
432 | + /// <param name="parameters">additional user params</param> | |
433 | + public static void attributeAndOpenStore(string appID, string campaign, Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
434 | + { | |
435 | +#if !UNITY_EDITOR | |
436 | + _attributeAndOpenStore(appID, campaign, AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); | |
437 | +#endif | |
438 | + } | |
439 | + | |
440 | + /// <summary> | |
441 | + /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. | |
442 | + /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- | |
443 | + /// </summary> | |
444 | + /// <param name="parameters">parameters Dictionary.</param> | |
445 | + public static void generateUserInviteLink(Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
446 | + { | |
447 | +#if !UNITY_EDITOR | |
448 | + _generateUserInviteLink(AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); | |
449 | +#endif | |
450 | + } | |
451 | + | |
452 | + /// <summary> | |
453 | + /// It is recommended to generate an in-app event after the invite is sent to record the invites from the senders' perspective. | |
454 | + /// This enables you to find the users that tend most to invite friends, and the media sources that get you these users. | |
455 | + /// </summary> | |
456 | + /// <param name="channel">channel string.</param> | |
457 | + /// <param name="parameters">parameters Dictionary..</param> | |
458 | + public static void recordInvite(string channel, Dictionary<string, string> parameters) | |
459 | + { | |
460 | +#if !UNITY_EDITOR | |
461 | + _recordInvite(channel, AFMiniJSON.Json.Serialize(parameters)); | |
462 | +#endif | |
463 | + } | |
464 | + | |
465 | + | |
466 | + /* | |
467 | + * AppsFlyer ios method mapping | |
468 | + */ | |
469 | + | |
470 | + [DllImport("__Internal")] | |
471 | + private static extern void _startSDK(); | |
472 | + | |
473 | + [DllImport("__Internal")] | |
474 | + private static extern void _getConversionData(string objectName); | |
475 | + | |
476 | + [DllImport("__Internal")] | |
477 | + private static extern void _setCustomerUserID(string customerUserID); | |
478 | + | |
479 | + [DllImport("__Internal")] | |
480 | + private static extern void _setAdditionalData(string customData); | |
481 | + | |
482 | + [DllImport("__Internal")] | |
483 | + private static extern void _setAppsFlyerDevKey(string appsFlyerDevKey); | |
484 | + | |
485 | + [DllImport("__Internal")] | |
486 | + private static extern void _setAppleAppID(string appleAppID); | |
487 | + | |
488 | + [DllImport("__Internal")] | |
489 | + private static extern void _setCurrencyCode(string currencyCode); | |
490 | + | |
491 | + [DllImport("__Internal")] | |
492 | + private static extern void _setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport); | |
493 | + | |
494 | + [DllImport("__Internal")] | |
495 | + private static extern void _setIsDebug(bool isDebug); | |
496 | + | |
497 | + [DllImport("__Internal")] | |
498 | + private static extern void _setShouldCollectDeviceName(bool shouldCollectDeviceName); | |
499 | + | |
500 | + [DllImport("__Internal")] | |
501 | + private static extern void _setAppInviteOneLinkID(string appInviteOneLinkID); | |
502 | + | |
503 | + [DllImport("__Internal")] | |
504 | + private static extern void _anonymizeUser(bool shouldAnonymizeUser); | |
505 | + | |
506 | + [DllImport("__Internal")] | |
507 | + private static extern void _setDisableCollectIAd(bool disableCollectIAd); | |
508 | + | |
509 | + [DllImport("__Internal")] | |
510 | + private static extern void _setUseReceiptValidationSandbox(bool useReceiptValidationSandbox); | |
511 | + | |
512 | + [DllImport("__Internal")] | |
513 | + private static extern void _setUseUninstallSandbox(bool useUninstallSandbox); | |
514 | + | |
515 | + [DllImport("__Internal")] | |
516 | + private static extern void _setResolveDeepLinkURLs(int length, params string[] resolveDeepLinkURLs); | |
517 | + | |
518 | + [DllImport("__Internal")] | |
519 | + private static extern void _setOneLinkCustomDomains(int length, params string[] oneLinkCustomDomains); | |
520 | + | |
521 | + [DllImport("__Internal")] | |
522 | + private static extern void _setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails); | |
523 | + | |
524 | + [DllImport("__Internal")] | |
525 | + private static extern void _setPhoneNumber(string phoneNumber); | |
526 | + | |
527 | + [DllImport("__Internal")] | |
528 | + private static extern void _afSendEvent(string eventName, string eventValues); | |
529 | + | |
530 | + [DllImport("__Internal")] | |
531 | + private static extern void _validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, string additionalParameters, string objectName); | |
532 | + | |
533 | + [DllImport("__Internal")] | |
534 | + private static extern void _recordLocation(double longitude, double latitude); | |
535 | + | |
536 | + [DllImport("__Internal")] | |
537 | + private static extern string _getAppsFlyerId(); | |
538 | + | |
539 | + [DllImport("__Internal")] | |
540 | + private static extern void _registerUninstall(byte[] deviceToken); | |
541 | + | |
542 | + [DllImport("__Internal")] | |
543 | + private static extern void _handlePushNotification(string pushPayload); | |
544 | + | |
545 | + [DllImport("__Internal")] | |
546 | + private static extern string _getSDKVersion(); | |
547 | + | |
548 | + [DllImport("__Internal")] | |
549 | + private static extern void _setHost(string host, string hostPrefix); | |
550 | + | |
551 | + [DllImport("__Internal")] | |
552 | + private static extern void _setMinTimeBetweenSessions(int minTimeBetweenSessions); | |
553 | + | |
554 | + [DllImport("__Internal")] | |
555 | + private static extern void _stopSDK(bool isStopSDK); | |
556 | + | |
557 | + [DllImport("__Internal")] | |
558 | + private static extern bool _isSDKStopped(); | |
559 | + | |
560 | + [DllImport("__Internal")] | |
561 | + private static extern void _handleOpenUrl(string url, string sourceApplication, string annotation); | |
562 | + | |
563 | + [DllImport("__Internal")] | |
564 | + private static extern void _setSharingFilterForAllPartners(); | |
565 | + | |
566 | + [DllImport("__Internal")] | |
567 | + private static extern void _setSharingFilter(int length, params string[] partners); | |
568 | + | |
569 | + [DllImport("__Internal")] | |
570 | + private static extern void _recordCrossPromoteImpression(string appID, string campaign, string parameters); | |
571 | + | |
572 | + [DllImport("__Internal")] | |
573 | + private static extern void _attributeAndOpenStore(string appID, string campaign, string parameters, string gameObject); | |
574 | + | |
575 | + [DllImport("__Internal")] | |
576 | + private static extern void _generateUserInviteLink(string parameters, string gameObject); | |
577 | + | |
578 | + [DllImport("__Internal")] | |
579 | + private static extern void _recordInvite(string channel, string parameters); | |
580 | + | |
581 | + } | |
582 | + | |
583 | +#endif | |
584 | + | |
585 | + | |
586 | +} |
AppsFlyeriOS.cs.meta
Editor/AppsFlyer.Editor.asmdef
1 | +{ | |
2 | + "name": "AppsFlyer.Editor", | |
3 | + "references": [ | |
4 | + "GUID:c3b2ad556d41d1441bfade97a3c348cd" | |
5 | + ], | |
6 | + "includePlatforms": [ | |
7 | + "Editor" | |
8 | + ], | |
9 | + "excludePlatforms": [], | |
10 | + "allowUnsafeCode": false, | |
11 | + "overrideReferences": false, | |
12 | + "precompiledReferences": [], | |
13 | + "autoReferenced": true, | |
14 | + "defineConstraints": [], | |
15 | + "versionDefines": [], | |
16 | + "noEngineReferences": false | |
17 | +} |
Editor/AppsFlyer.Editor.asmdef.meta
Editor/Unity.AppsFlyer.Editor.asmdef
1 | -{ | |
2 | - "name": "AppsFlyer.Editor", | |
3 | - "references": [ | |
4 | - "GUID:c3b2ad556d41d1441bfade97a3c348cd" | |
5 | - ], | |
6 | - "includePlatforms": [ | |
7 | - "Editor" | |
8 | - ], | |
9 | - "excludePlatforms": [], | |
10 | - "allowUnsafeCode": false, | |
11 | - "overrideReferences": false, | |
12 | - "precompiledReferences": [], | |
13 | - "autoReferenced": true, | |
14 | - "defineConstraints": [], | |
15 | - "versionDefines": [], | |
16 | - "noEngineReferences": false | |
17 | -} |
Editor/Unity.AppsFlyer.Editor.asmdef.meta
IAppsFlyerConversionData.cs
1 | +namespace AppsFlyerSDK | |
2 | +{ | |
3 | + public interface IAppsFlyerConversionData | |
4 | + { | |
5 | + /// <summary> | |
6 | + /// `conversionData` contains information about install. Organic/non-organic, etc. | |
7 | + /// <see>https://support.appsflyer.com/hc/en-us/articles/360000726098-Conversion-Data-Scenarios#Introduction</see> | |
8 | + /// </summary> | |
9 | + /// <param name="conversionData">JSON string of the returned conversion data.</param> | |
10 | + void onConversionDataSuccess(string conversionData); | |
11 | + | |
12 | + /// <summary> | |
13 | + /// Any errors that occurred during the conversion request. | |
14 | + /// </summary> | |
15 | + /// <param name="error">A string describing the error.</param> | |
16 | + void onConversionDataFail(string error); | |
17 | + | |
18 | + /// <summary> | |
19 | + /// `attributionData` contains information about OneLink, deeplink. | |
20 | + /// <see>https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-Deep-Linking-Guide#Intro</see> | |
21 | + /// </summary> | |
22 | + /// <param name="attributionData">JSON string of the returned deeplink data.</param> | |
23 | + void onAppOpenAttribution(string attributionData); | |
24 | + | |
25 | + /// <summary> | |
26 | + /// Any errors that occurred during the attribution request. | |
27 | + /// </summary> | |
28 | + /// <param name="error">A string describing the error.</param> | |
29 | + void onAppOpenAttributionFailure(string error); | |
30 | + } | |
31 | +} |
IAppsFlyerConversionData.cs.meta
IAppsFlyerUserInvite.cs
1 | +namespace AppsFlyerSDK | |
2 | +{ | |
3 | + public interface IAppsFlyerUserInvite | |
4 | + { | |
5 | + /// <summary> | |
6 | + /// The success callback for generating OneLink URLs. | |
7 | + /// </summary> | |
8 | + /// <param name="link">A string of the newly created url.</param> | |
9 | + void onInviteLinkGenerated(string link); | |
10 | + | |
11 | + /// <summary> | |
12 | + /// The error callback for generating OneLink URLs | |
13 | + /// </summary> | |
14 | + /// <param name="error">A string describing the error.</param> | |
15 | + void onInviteLinkGeneratedFailure(string error); | |
16 | + | |
17 | + /// <summary> | |
18 | + /// (ios only) iOS allows you to utilize the StoreKit component to open | |
19 | + /// the App Store while remaining in the context of your app. | |
20 | + /// More details at <see>https://support.appsflyer.com/hc/en-us/articles/115004481946-Cross-Promotion-Tracking#tracking-cross-promotion-impressions</see> | |
21 | + /// </summary> | |
22 | + /// <param name="link">openStore callback Contains promoted `clickURL`</param> | |
23 | + void onOpenStoreLinkGenerated(string link); | |
24 | + | |
25 | + } | |
26 | +} |
IAppsFlyerUserInvite.cs.meta
IAppsFlyerValidateReceipt.cs
1 | +namespace AppsFlyerSDK | |
2 | +{ | |
3 | + public interface IAppsFlyerValidateReceipt | |
4 | + { | |
5 | + /// <summary> | |
6 | + /// The success callback for validateAndSendInAppPurchase API. | |
7 | + /// For Android : the callback will return "Validate success". | |
8 | + /// For iOS : the callback will return a JSON string from apples verifyReceipt API. | |
9 | + /// </summary> | |
10 | + /// <param name="result"></param> | |
11 | + void didFinishValidateReceipt(string result); | |
12 | + | |
13 | + /// <summary> | |
14 | + /// The error callback for validateAndSendInAppPurchase API. | |
15 | + /// </summary> | |
16 | + /// <param name="error">A string describing the error.</param> | |
17 | + void didFinishValidateReceiptWithError(string error); | |
18 | + } | |
19 | +} |
IAppsFlyerValidateReceipt.cs.meta
Runtime.meta
Runtime/AFInAppEvents.cs
1 | -using UnityEngine; | |
2 | -using System.Collections; | |
3 | - | |
4 | -public class AFInAppEvents { | |
5 | - /** | |
6 | - * Event Type | |
7 | - * */ | |
8 | - public const string LEVEL_ACHIEVED = "af_level_achieved"; | |
9 | - public const string ADD_PAYMENT_INFO = "af_add_payment_info"; | |
10 | - public const string ADD_TO_CART = "af_add_to_cart"; | |
11 | - public const string ADD_TO_WISH_LIST = "af_add_to_wishlist"; | |
12 | - public const string COMPLETE_REGISTRATION = "af_complete_registration"; | |
13 | - public const string TUTORIAL_COMPLETION = "af_tutorial_completion"; | |
14 | - public const string INITIATED_CHECKOUT = "af_initiated_checkout"; | |
15 | - public const string PURCHASE = "af_purchase"; | |
16 | - public const string RATE = "af_rate"; | |
17 | - public const string SEARCH = "af_search"; | |
18 | - public const string SPENT_CREDIT = "af_spent_credits"; | |
19 | - public const string ACHIEVEMENT_UNLOCKED = "af_achievement_unlocked"; | |
20 | - public const string CONTENT_VIEW = "af_content_view"; | |
21 | - public const string TRAVEL_BOOKING = "af_travel_booking"; | |
22 | - public const string SHARE = "af_share"; | |
23 | - public const string INVITE = "af_invite"; | |
24 | - public const string LOGIN = "af_login"; | |
25 | - public const string RE_ENGAGE = "af_re_engage"; | |
26 | - public const string UPDATE = "af_update"; | |
27 | - public const string OPENED_FROM_PUSH_NOTIFICATION = "af_opened_from_push_notification"; | |
28 | - public const string LOCATION_CHANGED = "af_location_changed"; | |
29 | - public const string LOCATION_COORDINATES = "af_location_coordinates"; | |
30 | - public const string ORDER_ID = "af_order_id"; | |
31 | - /** | |
32 | - * Event Parameter Name | |
33 | - * **/ | |
34 | - public const string LEVEL = "af_level"; | |
35 | - public const string SCORE = "af_score"; | |
36 | - public const string SUCCESS = "af_success"; | |
37 | - public const string PRICE = "af_price"; | |
38 | - public const string CONTENT_TYPE = "af_content_type"; | |
39 | - public const string CONTENT_ID = "af_content_id"; | |
40 | - public const string CONTENT_LIST = "af_content_list"; | |
41 | - public const string CURRENCY = "af_currency"; | |
42 | - public const string QUANTITY = "af_quantity"; | |
43 | - public const string REGSITRATION_METHOD = "af_registration_method"; | |
44 | - public const string PAYMENT_INFO_AVAILIBLE = "af_payment_info_available"; | |
45 | - public const string MAX_RATING_VALUE = "af_max_rating_value"; | |
46 | - public const string RATING_VALUE = "af_rating_value"; | |
47 | - public const string SEARCH_STRING = "af_search_string"; | |
48 | - public const string DATE_A = "af_date_a"; | |
49 | - public const string DATE_B = "af_date_b"; | |
50 | - public const string DESTINATION_A = "af_destination_a"; | |
51 | - public const string DESTINATION_B = "af_destination_b"; | |
52 | - public const string DESCRIPTION = "af_description"; | |
53 | - public const string CLASS = "af_class"; | |
54 | - public const string EVENT_START = "af_event_start"; | |
55 | - public const string EVENT_END = "af_event_end"; | |
56 | - public const string LATITUDE = "af_lat"; | |
57 | - public const string LONGTITUDE = "af_long"; | |
58 | - public const string CUSTOMER_USER_ID = "af_customer_user_id"; | |
59 | - public const string VALIDATED = "af_validated"; | |
60 | - public const string REVENUE = "af_revenue"; | |
61 | - public const string RECEIPT_ID = "af_receipt_id"; | |
62 | - public const string PARAM_1 = "af_param_1"; | |
63 | - public const string PARAM_2 = "af_param_2"; | |
64 | - public const string PARAM_3 = "af_param_3"; | |
65 | - public const string PARAM_4 = "af_param_4"; | |
66 | - public const string PARAM_5 = "af_param_5"; | |
67 | - public const string PARAM_6 = "af_param_6"; | |
68 | - public const string PARAM_7 = "af_param_7"; | |
69 | - public const string PARAM_8 = "af_param_8"; | |
70 | - public const string PARAM_9 = "af_param_9"; | |
71 | - public const string PARAM_10 = "af_param_10"; | |
72 | -} |
Runtime/AFInAppEvents.cs.meta
Runtime/AFMiniJSON.cs
1 | -/* | |
2 | - * Copyright (c) 2013 Calvin Rien | |
3 | - * | |
4 | - * Based on the JSON parser by Patrick van Bergen | |
5 | - * http://techblog.procurios.nl/k/618/news/view/14605/14863/How-do-I-write-my-own-parser-for-JSON.html | |
6 | - * | |
7 | - * Simplified it so that it doesn't throw exceptions | |
8 | - * and can be used in Unity iPhone with maximum code stripping. | |
9 | - * | |
10 | - * Permission is hereby granted, free of charge, to any person obtaining | |
11 | - * a copy of this software and associated documentation files (the | |
12 | - * "Software"), to deal in the Software without restriction, including | |
13 | - * without limitation the rights to use, copy, modify, merge, publish, | |
14 | - * distribute, sublicense, and/or sell copies of the Software, and to | |
15 | - * permit persons to whom the Software is furnished to do so, subject to | |
16 | - * the following conditions: | |
17 | - * | |
18 | - * The above copyright notice and this permission notice shall be | |
19 | - * included in all copies or substantial portions of the Software. | |
20 | - * | |
21 | - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
22 | - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
23 | - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
24 | - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
25 | - * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
26 | - * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
27 | - * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
28 | - */ | |
29 | -using System; | |
30 | -using System.Collections; | |
31 | -using System.Collections.Generic; | |
32 | -using System.IO; | |
33 | -using System.Text; | |
34 | - | |
35 | -namespace AFMiniJSON { | |
36 | - // Example usage: | |
37 | - // | |
38 | - // using UnityEngine; | |
39 | - // using System.Collections; | |
40 | - // using System.Collections.Generic; | |
41 | - // using MiniJSON; | |
42 | - // | |
43 | - // public class MiniJSONTest : MonoBehaviour { | |
44 | - // void Start () { | |
45 | - // var jsonString = "{ \"array\": [1.44,2,3], " + | |
46 | - // "\"object\": {\"key1\":\"value1\", \"key2\":256}, " + | |
47 | - // "\"string\": \"The quick brown fox \\\"jumps\\\" over the lazy dog \", " + | |
48 | - // "\"unicode\": \"\\u3041 Men\u00fa sesi\u00f3n\", " + | |
49 | - // "\"int\": 65536, " + | |
50 | - // "\"float\": 3.1415926, " + | |
51 | - // "\"bool\": true, " + | |
52 | - // "\"null\": null }"; | |
53 | - // | |
54 | - // var dict = Json.Deserialize(jsonString) as Dictionary<string,object>; | |
55 | - // | |
56 | - // Debug.Log("deserialized: " + dict.GetType()); | |
57 | - // Debug.Log("dict['array'][0]: " + ((List<object>) dict["array"])[0]); | |
58 | - // Debug.Log("dict['string']: " + (string) dict["string"]); | |
59 | - // Debug.Log("dict['float']: " + (double) dict["float"]); // floats come out as doubles | |
60 | - // Debug.Log("dict['int']: " + (long) dict["int"]); // ints come out as longs | |
61 | - // Debug.Log("dict['unicode']: " + (string) dict["unicode"]); | |
62 | - // | |
63 | - // var str = Json.Serialize(dict); | |
64 | - // | |
65 | - // Debug.Log("serialized: " + str); | |
66 | - // } | |
67 | - // } | |
68 | - | |
69 | - /// <summary> | |
70 | - /// This class encodes and decodes JSON strings. | |
71 | - /// Spec. details, see http://www.json.org/ | |
72 | - /// | |
73 | - /// JSON uses Arrays and Objects. These correspond here to the datatypes IList and IDictionary. | |
74 | - /// All numbers are parsed to doubles. | |
75 | - /// </summary> | |
76 | - public static class Json { | |
77 | - /// <summary> | |
78 | - /// Parses the string json into a value | |
79 | - /// </summary> | |
80 | - /// <param name="json">A JSON string.</param> | |
81 | - /// <returns>An List<object>, a Dictionary<string, object>, a double, an integer,a string, null, true, or false</returns> | |
82 | - public static object Deserialize(string json) { | |
83 | - // save the string for debug information | |
84 | - if (json == null) { | |
85 | - return null; | |
86 | - } | |
87 | - | |
88 | - return Parser.Parse(json); | |
89 | - } | |
90 | - | |
91 | - sealed class Parser : IDisposable { | |
92 | - const string WORD_BREAK = "{}[],:\""; | |
93 | - | |
94 | - public static bool IsWordBreak(char c) { | |
95 | - return Char.IsWhiteSpace(c) || WORD_BREAK.IndexOf(c) != -1; | |
96 | - } | |
97 | - | |
98 | - enum TOKEN { | |
99 | - NONE, | |
100 | - CURLY_OPEN, | |
101 | - CURLY_CLOSE, | |
102 | - SQUARED_OPEN, | |
103 | - SQUARED_CLOSE, | |
104 | - COLON, | |
105 | - COMMA, | |
106 | - STRING, | |
107 | - NUMBER, | |
108 | - TRUE, | |
109 | - FALSE, | |
110 | - NULL | |
111 | - }; | |
112 | - | |
113 | - StringReader json; | |
114 | - | |
115 | - Parser(string jsonString) { | |
116 | - json = new StringReader(jsonString); | |
117 | - } | |
118 | - | |
119 | - public static object Parse(string jsonString) { | |
120 | - using (var instance = new Parser(jsonString)) { | |
121 | - return instance.ParseValue(); | |
122 | - } | |
123 | - } | |
124 | - | |
125 | - public void Dispose() { | |
126 | - json.Dispose(); | |
127 | - json = null; | |
128 | - } | |
129 | - | |
130 | - Dictionary<string, object> ParseObject() { | |
131 | - Dictionary<string, object> table = new Dictionary<string, object>(); | |
132 | - | |
133 | - // ditch opening brace | |
134 | - json.Read(); | |
135 | - | |
136 | - // { | |
137 | - while (true) { | |
138 | - switch (NextToken) { | |
139 | - case TOKEN.NONE: | |
140 | - return null; | |
141 | - case TOKEN.COMMA: | |
142 | - continue; | |
143 | - case TOKEN.CURLY_CLOSE: | |
144 | - return table; | |
145 | - default: | |
146 | - // name | |
147 | - string name = ParseString(); | |
148 | - if (name == null) { | |
149 | - return null; | |
150 | - } | |
151 | - | |
152 | - // : | |
153 | - if (NextToken != TOKEN.COLON) { | |
154 | - return null; | |
155 | - } | |
156 | - // ditch the colon | |
157 | - json.Read(); | |
158 | - | |
159 | - // value | |
160 | - table[name] = ParseValue(); | |
161 | - break; | |
162 | - } | |
163 | - } | |
164 | - } | |
165 | - | |
166 | - List<object> ParseArray() { | |
167 | - List<object> array = new List<object>(); | |
168 | - | |
169 | - // ditch opening bracket | |
170 | - json.Read(); | |
171 | - | |
172 | - // [ | |
173 | - var parsing = true; | |
174 | - while (parsing) { | |
175 | - TOKEN nextToken = NextToken; | |
176 | - | |
177 | - switch (nextToken) { | |
178 | - case TOKEN.NONE: | |
179 | - return null; | |
180 | - case TOKEN.COMMA: | |
181 | - continue; | |
182 | - case TOKEN.SQUARED_CLOSE: | |
183 | - parsing = false; | |
184 | - break; | |
185 | - default: | |
186 | - object value = ParseByToken(nextToken); | |
187 | - | |
188 | - array.Add(value); | |
189 | - break; | |
190 | - } | |
191 | - } | |
192 | - | |
193 | - return array; | |
194 | - } | |
195 | - | |
196 | - object ParseValue() { | |
197 | - TOKEN nextToken = NextToken; | |
198 | - return ParseByToken(nextToken); | |
199 | - } | |
200 | - | |
201 | - object ParseByToken(TOKEN token) { | |
202 | - switch (token) { | |
203 | - case TOKEN.STRING: | |
204 | - return ParseString(); | |
205 | - case TOKEN.NUMBER: | |
206 | - return ParseNumber(); | |
207 | - case TOKEN.CURLY_OPEN: | |
208 | - return ParseObject(); | |
209 | - case TOKEN.SQUARED_OPEN: | |
210 | - return ParseArray(); | |
211 | - case TOKEN.TRUE: | |
212 | - return true; | |
213 | - case TOKEN.FALSE: | |
214 | - return false; | |
215 | - case TOKEN.NULL: | |
216 | - return null; | |
217 | - default: | |
218 | - return null; | |
219 | - } | |
220 | - } | |
221 | - | |
222 | - string ParseString() { | |
223 | - StringBuilder s = new StringBuilder(); | |
224 | - char c; | |
225 | - | |
226 | - // ditch opening quote | |
227 | - json.Read(); | |
228 | - | |
229 | - bool parsing = true; | |
230 | - while (parsing) { | |
231 | - | |
232 | - if (json.Peek() == -1) { | |
233 | - parsing = false; | |
234 | - break; | |
235 | - } | |
236 | - | |
237 | - c = NextChar; | |
238 | - switch (c) { | |
239 | - case '"': | |
240 | - parsing = false; | |
241 | - break; | |
242 | - case '\\': | |
243 | - if (json.Peek() == -1) { | |
244 | - parsing = false; | |
245 | - break; | |
246 | - } | |
247 | - | |
248 | - c = NextChar; | |
249 | - switch (c) { | |
250 | - case '"': | |
251 | - case '\\': | |
252 | - case '/': | |
253 | - s.Append(c); | |
254 | - break; | |
255 | - case 'b': | |
256 | - s.Append('\b'); | |
257 | - break; | |
258 | - case 'f': | |
259 | - s.Append('\f'); | |
260 | - break; | |
261 | - case 'n': | |
262 | - s.Append('\n'); | |
263 | - break; | |
264 | - case 'r': | |
265 | - s.Append('\r'); | |
266 | - break; | |
267 | - case 't': | |
268 | - s.Append('\t'); | |
269 | - break; | |
270 | - case 'u': | |
271 | - var hex = new char[4]; | |
272 | - | |
273 | - for (int i=0; i< 4; i++) { | |
274 | - hex[i] = NextChar; | |
275 | - } | |
276 | - | |
277 | - s.Append((char) Convert.ToInt32(new string(hex), 16)); | |
278 | - break; | |
279 | - } | |
280 | - break; | |
281 | - default: | |
282 | - s.Append(c); | |
283 | - break; | |
284 | - } | |
285 | - } | |
286 | - | |
287 | - return s.ToString(); | |
288 | - } | |
289 | - | |
290 | - object ParseNumber() { | |
291 | - string number = NextWord; | |
292 | - | |
293 | - if (number.IndexOf('.') == -1) { | |
294 | - long parsedInt; | |
295 | - Int64.TryParse(number, out parsedInt); | |
296 | - return parsedInt; | |
297 | - } | |
298 | - | |
299 | - double parsedDouble; | |
300 | - Double.TryParse(number, out parsedDouble); | |
301 | - return parsedDouble; | |
302 | - } | |
303 | - | |
304 | - void EatWhitespace() { | |
305 | - while (Char.IsWhiteSpace(PeekChar)) { | |
306 | - json.Read(); | |
307 | - | |
308 | - if (json.Peek() == -1) { | |
309 | - break; | |
310 | - } | |
311 | - } | |
312 | - } | |
313 | - | |
314 | - char PeekChar { | |
315 | - get { | |
316 | - return Convert.ToChar(json.Peek()); | |
317 | - } | |
318 | - } | |
319 | - | |
320 | - char NextChar { | |
321 | - get { | |
322 | - return Convert.ToChar(json.Read()); | |
323 | - } | |
324 | - } | |
325 | - | |
326 | - string NextWord { | |
327 | - get { | |
328 | - StringBuilder word = new StringBuilder(); | |
329 | - | |
330 | - while (!IsWordBreak(PeekChar)) { | |
331 | - word.Append(NextChar); | |
332 | - | |
333 | - if (json.Peek() == -1) { | |
334 | - break; | |
335 | - } | |
336 | - } | |
337 | - | |
338 | - return word.ToString(); | |
339 | - } | |
340 | - } | |
341 | - | |
342 | - TOKEN NextToken { | |
343 | - get { | |
344 | - EatWhitespace(); | |
345 | - | |
346 | - if (json.Peek() == -1) { | |
347 | - return TOKEN.NONE; | |
348 | - } | |
349 | - | |
350 | - switch (PeekChar) { | |
351 | - case '{': | |
352 | - return TOKEN.CURLY_OPEN; | |
353 | - case '}': | |
354 | - json.Read(); | |
355 | - return TOKEN.CURLY_CLOSE; | |
356 | - case '[': | |
357 | - return TOKEN.SQUARED_OPEN; | |
358 | - case ']': | |
359 | - json.Read(); | |
360 | - return TOKEN.SQUARED_CLOSE; | |
361 | - case ',': | |
362 | - json.Read(); | |
363 | - return TOKEN.COMMA; | |
364 | - case '"': | |
365 | - return TOKEN.STRING; | |
366 | - case ':': | |
367 | - return TOKEN.COLON; | |
368 | - case '0': | |
369 | - case '1': | |
370 | - case '2': | |
371 | - case '3': | |
372 | - case '4': | |
373 | - case '5': | |
374 | - case '6': | |
375 | - case '7': | |
376 | - case '8': | |
377 | - case '9': | |
378 | - case '-': | |
379 | - return TOKEN.NUMBER; | |
380 | - } | |
381 | - | |
382 | - switch (NextWord) { | |
383 | - case "false": | |
384 | - return TOKEN.FALSE; | |
385 | - case "true": | |
386 | - return TOKEN.TRUE; | |
387 | - case "null": | |
388 | - return TOKEN.NULL; | |
389 | - } | |
390 | - | |
391 | - return TOKEN.NONE; | |
392 | - } | |
393 | - } | |
394 | - } | |
395 | - | |
396 | - /// <summary> | |
397 | - /// Converts a IDictionary / IList object or a simple type (string, int, etc.) into a JSON string | |
398 | - /// </summary> | |
399 | - /// <param name="json">A Dictionary<string, object> / List<object></param> | |
400 | - /// <returns>A JSON encoded string, or null if object 'json' is not serializable</returns> | |
401 | - public static string Serialize(object obj) { | |
402 | - return Serializer.Serialize(obj); | |
403 | - } | |
404 | - | |
405 | - sealed class Serializer { | |
406 | - StringBuilder builder; | |
407 | - | |
408 | - Serializer() { | |
409 | - builder = new StringBuilder(); | |
410 | - } | |
411 | - | |
412 | - public static string Serialize(object obj) { | |
413 | - var instance = new Serializer(); | |
414 | - | |
415 | - instance.SerializeValue(obj); | |
416 | - | |
417 | - return instance.builder.ToString(); | |
418 | - } | |
419 | - | |
420 | - void SerializeValue(object value) { | |
421 | - IList asList; | |
422 | - IDictionary asDict; | |
423 | - string asStr; | |
424 | - | |
425 | - if (value == null) { | |
426 | - builder.Append("null"); | |
427 | - } else if ((asStr = value as string) != null) { | |
428 | - SerializeString(asStr); | |
429 | - } else if (value is bool) { | |
430 | - builder.Append((bool) value ? "true" : "false"); | |
431 | - } else if ((asList = value as IList) != null) { | |
432 | - SerializeArray(asList); | |
433 | - } else if ((asDict = value as IDictionary) != null) { | |
434 | - SerializeObject(asDict); | |
435 | - } else if (value is char) { | |
436 | - SerializeString(new string((char) value, 1)); | |
437 | - } else { | |
438 | - SerializeOther(value); | |
439 | - } | |
440 | - } | |
441 | - | |
442 | - void SerializeObject(IDictionary obj) { | |
443 | - bool first = true; | |
444 | - | |
445 | - builder.Append('{'); | |
446 | - | |
447 | - foreach (object e in obj.Keys) { | |
448 | - if (!first) { | |
449 | - builder.Append(','); | |
450 | - } | |
451 | - | |
452 | - SerializeString(e.ToString()); | |
453 | - builder.Append(':'); | |
454 | - | |
455 | - SerializeValue(obj[e]); | |
456 | - | |
457 | - first = false; | |
458 | - } | |
459 | - | |
460 | - builder.Append('}'); | |
461 | - } | |
462 | - | |
463 | - void SerializeArray(IList anArray) { | |
464 | - builder.Append('['); | |
465 | - | |
466 | - bool first = true; | |
467 | - | |
468 | - foreach (object obj in anArray) { | |
469 | - if (!first) { | |
470 | - builder.Append(','); | |
471 | - } | |
472 | - | |
473 | - SerializeValue(obj); | |
474 | - | |
475 | - first = false; | |
476 | - } | |
477 | - | |
478 | - builder.Append(']'); | |
479 | - } | |
480 | - | |
481 | - void SerializeString(string str) { | |
482 | - builder.Append('\"'); | |
483 | - | |
484 | - char[] charArray = str.ToCharArray(); | |
485 | - foreach (var c in charArray) { | |
486 | - switch (c) { | |
487 | - case '"': | |
488 | - builder.Append("\\\""); | |
489 | - break; | |
490 | - case '\\': | |
491 | - builder.Append("\\\\"); | |
492 | - break; | |
493 | - case '\b': | |
494 | - builder.Append("\\b"); | |
495 | - break; | |
496 | - case '\f': | |
497 | - builder.Append("\\f"); | |
498 | - break; | |
499 | - case '\n': | |
500 | - builder.Append("\\n"); | |
501 | - break; | |
502 | - case '\r': | |
503 | - builder.Append("\\r"); | |
504 | - break; | |
505 | - case '\t': | |
506 | - builder.Append("\\t"); | |
507 | - break; | |
508 | - default: | |
509 | - int codepoint = Convert.ToInt32(c); | |
510 | - if ((codepoint >= 32) && (codepoint <= 126)) { | |
511 | - builder.Append(c); | |
512 | - } else { | |
513 | - builder.Append("\\u"); | |
514 | - builder.Append(codepoint.ToString("x4")); | |
515 | - } | |
516 | - break; | |
517 | - } | |
518 | - } | |
519 | - | |
520 | - builder.Append('\"'); | |
521 | - } | |
522 | - | |
523 | - void SerializeOther(object value) { | |
524 | - // NOTE: decimals lose precision during serialization. | |
525 | - // They always have, I'm just letting you know. | |
526 | - // Previously floats and doubles lost precision too. | |
527 | - if (value is float) { | |
528 | - builder.Append(((float) value).ToString("R")); | |
529 | - } else if (value is int | |
530 | - || value is uint | |
531 | - || value is long | |
532 | - || value is sbyte | |
533 | - || value is byte | |
534 | - || value is short | |
535 | - || value is ushort | |
536 | - || value is ulong) { | |
537 | - builder.Append(value); | |
538 | - } else if (value is double | |
539 | - || value is decimal) { | |
540 | - builder.Append(Convert.ToDouble(value).ToString("R")); | |
541 | - } else { | |
542 | - SerializeString(value.ToString()); | |
543 | - } | |
544 | - } | |
545 | - } | |
546 | - } | |
547 | -} |
Runtime/AFMiniJSON.cs.meta
Runtime/AppsFlyer.cs
1 | -using System.Collections.Generic; | |
2 | -using UnityEngine; | |
3 | - | |
4 | -namespace AppsFlyerSDK | |
5 | -{ | |
6 | - public class AppsFlyer : MonoBehaviour | |
7 | - { | |
8 | - | |
9 | - public static readonly string kAppsFlyerPluginVersion = "5.4.2"; | |
10 | - | |
11 | - | |
12 | - /// <summary> | |
13 | - /// Initialize the AppsFlyer SDK with your devKey and appID. | |
14 | - /// The dev key is required on all platforms, and the appID is required for iOS. | |
15 | - /// If you app is for Android only pass null for the appID. | |
16 | - /// </summary> | |
17 | - /// <param name="devKey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
18 | - /// <param name="appID">Your app's Apple ID.</param> | |
19 | - /// <example> | |
20 | - /// <code> | |
21 | - /// AppsFlyer.initSDK("K2***********99", "41*****44""); | |
22 | - /// </code> | |
23 | - /// </example> | |
24 | - public static void initSDK(string devKey, string appID) | |
25 | - { | |
26 | - initSDK(devKey, appID, null); | |
27 | - } | |
28 | - | |
29 | - /// <summary> | |
30 | - /// Initialize the AppsFlyer SDK with your devKey and appID. | |
31 | - /// The dev key is required on all platforms, and the appID is required for iOS. | |
32 | - /// If you app is for Android only pass null for the appID. | |
33 | - /// </summary> | |
34 | - /// <param name="devKey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
35 | - /// <param name="appID">Your app's Apple ID.</param> | |
36 | - /// <param name="gameObject">pass the script of the game object being used.</param> | |
37 | - /// <example> | |
38 | - /// <code> | |
39 | - /// AppsFlyer.initSDK("K2***********99", 41*****44, this); | |
40 | - /// </code> | |
41 | - /// </example> | |
42 | - public static void initSDK(string devKey, string appID, MonoBehaviour gameObject) | |
43 | - { | |
44 | -#if UNITY_IOS && !UNITY_EDITOR | |
45 | - AppsFlyeriOS.setAppsFlyerDevKey(devKey); | |
46 | - AppsFlyeriOS.setAppleAppID(appID); | |
47 | - if(gameObject != null) | |
48 | - { | |
49 | - AppsFlyeriOS.getConversionData(gameObject.name); | |
50 | - } | |
51 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
52 | - AppsFlyerAndroid.initSDK(devKey, gameObject); | |
53 | -#else | |
54 | - | |
55 | -#endif | |
56 | - } | |
57 | - | |
58 | - | |
59 | - /// <summary> | |
60 | - /// Once this API is invoked, our SDK will start. | |
61 | - /// Once the API is called a sessions will be immediately sent, and all background forground transitions will send a session. | |
62 | - /// </summary> | |
63 | - public static void startSDK() | |
64 | - { | |
65 | -#if UNITY_IOS && !UNITY_EDITOR | |
66 | - AppsFlyeriOS.startSDK(); | |
67 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
68 | - AppsFlyerAndroid.startSDK(); | |
69 | -#else | |
70 | - | |
71 | -#endif | |
72 | - } | |
73 | - | |
74 | - /// <summary> | |
75 | - /// Send an In-App Event. | |
76 | - /// In-App Events provide insight on what is happening in your app. | |
77 | - /// </summary> | |
78 | - /// <param name="eventName">Event Name as String.</param> | |
79 | - /// <param name="eventValues">Event Values as Dictionary.</param> | |
80 | - public static void sendEvent(string eventName, Dictionary<string, string> eventValues) | |
81 | - { | |
82 | -#if UNITY_IOS && !UNITY_EDITOR | |
83 | - AppsFlyeriOS.sendEvent(eventName, eventValues); | |
84 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
85 | - AppsFlyerAndroid.sendEvent(eventName, eventValues); | |
86 | -#else | |
87 | - | |
88 | -#endif | |
89 | - } | |
90 | - | |
91 | - /// <summary> | |
92 | - /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. | |
93 | - /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. | |
94 | - /// This can be achieved with the stopSDK API. | |
95 | - /// </summary> | |
96 | - /// <param name="isSDKStopped"> should sdk be stopped.</param> | |
97 | - public static void stopSDK(bool isSDKStopped) | |
98 | - { | |
99 | -#if UNITY_IOS && !UNITY_EDITOR | |
100 | - AppsFlyeriOS.stopSDK(isSDKStopped); | |
101 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
102 | - AppsFlyerAndroid.stopSDK(isSDKStopped); | |
103 | -#else | |
104 | - | |
105 | -#endif | |
106 | - } | |
107 | - | |
108 | - // <summary> | |
109 | - /// Was the stopSDK(boolean) API set to true. | |
110 | - /// </summary> | |
111 | - /// <returns>boolean isSDKStopped.</returns> | |
112 | - public static bool isSDKStopped() | |
113 | - { | |
114 | -#if UNITY_IOS && !UNITY_EDITOR | |
115 | - return AppsFlyeriOS.isSDKStopped(); | |
116 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
117 | - return AppsFlyerAndroid.isSDKStopped(); | |
118 | -#else | |
119 | - return false; | |
120 | -#endif | |
121 | - } | |
122 | - | |
123 | - /// <summary> | |
124 | - /// Get the AppsFlyer SDK version used in app. | |
125 | - /// </summary> | |
126 | - /// <returns>The current SDK version.</returns> | |
127 | - public static string getSdkVersion() | |
128 | - { | |
129 | -#if UNITY_IOS && !UNITY_EDITOR | |
130 | - return AppsFlyeriOS.getSDKVersion(); | |
131 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
132 | - return AppsFlyerAndroid.getSdkVersion(); | |
133 | -#else | |
134 | - return ""; | |
135 | -#endif | |
136 | - | |
137 | - } | |
138 | - | |
139 | - /// <summary> | |
140 | - /// Enables Debug logs for the AppsFlyer SDK. | |
141 | - /// Should only be set to true in development / debug. | |
142 | - /// </summary> | |
143 | - /// <param name="shouldEnable">shouldEnable boolean.</param> | |
144 | - public static void setIsDebug(bool shouldEnable) | |
145 | - { | |
146 | -#if UNITY_IOS && !UNITY_EDITOR | |
147 | - AppsFlyeriOS.setIsDebug(shouldEnable); | |
148 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
149 | - AppsFlyerAndroid.setIsDebug(shouldEnable); | |
150 | -#else | |
151 | - | |
152 | -#endif | |
153 | - } | |
154 | - | |
155 | - /// <summary> | |
156 | - /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. | |
157 | - /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. | |
158 | - /// </summary> | |
159 | - /// <param name="id">Customer ID for client.</param> | |
160 | - public static void setCustomerUserId(string id) | |
161 | - { | |
162 | -#if UNITY_IOS && !UNITY_EDITOR | |
163 | - AppsFlyeriOS.setCustomerUserID(id); | |
164 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
165 | - AppsFlyerAndroid.setCustomerUserId(id); | |
166 | -#else | |
167 | - | |
168 | -#endif | |
169 | - } | |
170 | - | |
171 | - /// <summary> | |
172 | - /// Set the OneLink ID that should be used for User-Invite-API. | |
173 | - /// The link that is generated for the user invite will use this OneLink as the base link. | |
174 | - /// </summary> | |
175 | - /// <param name="oneLinkId">OneLink ID obtained from the AppsFlyer Dashboard.</param> | |
176 | - public static void setAppInviteOneLinkID(string oneLinkId) | |
177 | - { | |
178 | -#if UNITY_IOS && !UNITY_EDITOR | |
179 | - AppsFlyeriOS.setAppInviteOneLinkID(oneLinkId); | |
180 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
181 | - AppsFlyerAndroid.setAppInviteOneLinkID(oneLinkId); | |
182 | -#else | |
183 | - | |
184 | -#endif | |
185 | - } | |
186 | - | |
187 | - /// <summary> | |
188 | - /// Set additional data to be sent to AppsFlyer. | |
189 | - /// </summary> | |
190 | - /// <param name="customData">additional data Dictionary.</param> | |
191 | - public static void setAdditionalData(Dictionary<string, string> customData) | |
192 | - { | |
193 | -#if UNITY_IOS && !UNITY_EDITOR | |
194 | - AppsFlyeriOS.setAdditionalData(customData); | |
195 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
196 | - AppsFlyerAndroid.setAdditionalData(customData); | |
197 | -#else | |
198 | - | |
199 | -#endif | |
200 | - } | |
201 | - | |
202 | - /// <summary> | |
203 | - /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. | |
204 | - /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. | |
205 | - /// </summary> | |
206 | - /// <param name="urls">Array of urls.</param> | |
207 | - public static void setResolveDeepLinkURLs(params string[] urls) | |
208 | - { | |
209 | -#if UNITY_IOS && !UNITY_EDITOR | |
210 | - AppsFlyeriOS.setResolveDeepLinkURLs(urls); | |
211 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
212 | - AppsFlyerAndroid.setResolveDeepLinkURLs(urls); | |
213 | -#else | |
214 | - | |
215 | -#endif | |
216 | - } | |
217 | - | |
218 | - | |
219 | - /// <summary> | |
220 | - /// Advertisers can use this method to set vanity onelink domains. | |
221 | - /// </summary> | |
222 | - /// <param name="domains">Array of domains.</param> | |
223 | - public static void setOneLinkCustomDomain(params string[] domains) | |
224 | - { | |
225 | -#if UNITY_IOS && !UNITY_EDITOR | |
226 | - AppsFlyeriOS.setOneLinkCustomDomains(domains); | |
227 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
228 | - AppsFlyerAndroid.setOneLinkCustomDomain(domains); | |
229 | -#else | |
230 | - | |
231 | -#endif | |
232 | - } | |
233 | - | |
234 | - /// <summary> | |
235 | - /// Setting user local currency code for in-app purchases. | |
236 | - /// The currency code should be a 3 character ISO 4217 code. (default is USD). | |
237 | - /// You can set the currency code for all events by calling the following method. | |
238 | - /// </summary> | |
239 | - /// <param name="currencyCode">3 character ISO 4217 code.</param> | |
240 | - public static void setCurrencyCode(string currencyCode) | |
241 | - { | |
242 | -#if UNITY_IOS && !UNITY_EDITOR | |
243 | - AppsFlyeriOS.setCurrencyCode(currencyCode); | |
244 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
245 | - AppsFlyerAndroid.setCurrencyCode(currencyCode); | |
246 | -#else | |
247 | - | |
248 | -#endif | |
249 | - } | |
250 | - | |
251 | - /// <summary> | |
252 | - /// Manually record the location of the user. | |
253 | - /// </summary> | |
254 | - /// <param name="latitude">latitude as double.</param> | |
255 | - /// <param name="longitude">longitude as double.</param> | |
256 | - public static void recordLocation(double latitude, double longitude) | |
257 | - { | |
258 | -#if UNITY_IOS && !UNITY_EDITOR | |
259 | - AppsFlyeriOS.recordLocation(latitude, longitude); | |
260 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
261 | - AppsFlyerAndroid.recordLocation(latitude, longitude); | |
262 | -#else | |
263 | - | |
264 | -#endif | |
265 | - } | |
266 | - | |
267 | - /// <summary> | |
268 | - /// Anonymize user Data. | |
269 | - /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. | |
270 | - /// Default is false. | |
271 | - /// </summary> | |
272 | - /// <param name = "shouldAnonymizeUser" >shouldAnonymizeUser boolean.</param> | |
273 | - public static void anonymizeUser(bool shouldAnonymizeUser) | |
274 | - { | |
275 | -#if UNITY_IOS && !UNITY_EDITOR | |
276 | - AppsFlyeriOS.anonymizeUser(shouldAnonymizeUser); | |
277 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
278 | - AppsFlyerAndroid.anonymizeUser(shouldAnonymizeUser); | |
279 | -#else | |
280 | - | |
281 | -#endif | |
282 | - } | |
283 | - | |
284 | - /// <summary> | |
285 | - /// Get AppsFlyer's unique device ID which is created for every new install of an app. | |
286 | - /// </summary> | |
287 | - /// <returns>AppsFlyer's unique device ID.</returns> | |
288 | - public static string getAppsFlyerId() | |
289 | - { | |
290 | -#if UNITY_IOS && !UNITY_EDITOR | |
291 | - return AppsFlyeriOS.getAppsFlyerId(); | |
292 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
293 | - return AppsFlyerAndroid.getAppsFlyerId(); | |
294 | -#else | |
295 | - return ""; | |
296 | -#endif | |
297 | - | |
298 | - } | |
299 | - | |
300 | - /// <summary> | |
301 | - /// Set a custom value for the minimum required time between sessions. | |
302 | - /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. | |
303 | - /// </summary> | |
304 | - /// <param name="seconds">minimum time between 2 separate sessions in seconds.</param> | |
305 | - public static void setMinTimeBetweenSessions(int seconds) | |
306 | - { | |
307 | -#if UNITY_IOS && !UNITY_EDITOR | |
308 | - AppsFlyeriOS.setMinTimeBetweenSessions(seconds); | |
309 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
310 | - AppsFlyerAndroid.setMinTimeBetweenSessions(seconds); | |
311 | -#else | |
312 | - | |
313 | -#endif | |
314 | - } | |
315 | - | |
316 | - /// <summary> | |
317 | - /// Set a custom host. | |
318 | - /// </summary> | |
319 | - /// <param name="hostPrefixName">Host prefix.</param> | |
320 | - /// <param name="hostName">Host name.</param> | |
321 | - public static void setHost(string hostPrefixName, string hostName) | |
322 | - { | |
323 | -#if UNITY_IOS && !UNITY_EDITOR | |
324 | - AppsFlyeriOS.setHost(hostName, hostPrefixName); | |
325 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
326 | - AppsFlyerAndroid.setHost(hostPrefixName, hostName); | |
327 | -#else | |
328 | - | |
329 | -#endif | |
330 | - } | |
331 | - | |
332 | - /// <summary> | |
333 | - /// Set the user emails and encrypt them. | |
334 | - /// cryptMethod Encryption method: | |
335 | - /// EmailCryptType.EmailCryptTypeMD5 | |
336 | - /// EmailCryptType.EmailCryptTypeSHA1 | |
337 | - /// EmailCryptType.EmailCryptTypeSHA256 | |
338 | - /// EmailCryptType.EmailCryptTypeNone | |
339 | - /// </summary> | |
340 | - /// <param name="cryptMethod">Encryption method.</param> | |
341 | - /// <param name="emails">User emails.</param> | |
342 | - public static void setUserEmails(EmailCryptType cryptMethod, params string[] emails) | |
343 | - { | |
344 | -#if UNITY_IOS && !UNITY_EDITOR | |
345 | - AppsFlyeriOS.setUserEmails(cryptMethod, emails.Length, emails); | |
346 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
347 | - AppsFlyerAndroid.setUserEmails(cryptMethod, emails); | |
348 | -#else | |
349 | - | |
350 | -#endif | |
351 | - } | |
352 | - | |
353 | - /// <summary> | |
354 | - /// Set the user phone number. | |
355 | - /// </summary> | |
356 | - /// <param name="phoneNumber">phoneNumber string</param> | |
357 | - public static void setPhoneNumber(string phoneNumber) | |
358 | - { | |
359 | -#if UNITY_IOS && !UNITY_EDITOR | |
360 | - AppsFlyeriOS.setPhoneNumber(phoneNumber); | |
361 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
362 | - AppsFlyerAndroid.setPhoneNumber(phoneNumber); | |
363 | -#else | |
364 | - | |
365 | -#endif | |
366 | - } | |
367 | - | |
368 | - /// <summary> | |
369 | - /// Used by advertisers to exclude all networks/integrated partners from getting data. | |
370 | - /// </summary> | |
371 | - public static void setSharingFilterForAllPartners() | |
372 | - { | |
373 | -#if UNITY_IOS && !UNITY_EDITOR | |
374 | - AppsFlyeriOS.setSharingFilterForAllPartners(); | |
375 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
376 | - AppsFlyerAndroid.setSharingFilterForAllPartners(); | |
377 | -#else | |
378 | - | |
379 | -#endif | |
380 | - } | |
381 | - | |
382 | - /// <summary> | |
383 | - /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. | |
384 | - /// </summary> | |
385 | - /// <param name="partners">partners to exclude from getting data</param> | |
386 | - public static void setSharingFilter(params string[] partners) | |
387 | - { | |
388 | -#if UNITY_IOS && !UNITY_EDITOR | |
389 | - AppsFlyeriOS.setSharingFilter(partners); | |
390 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
391 | - AppsFlyerAndroid.setSharingFilter(partners); | |
392 | -#else | |
393 | - | |
394 | -#endif | |
395 | - } | |
396 | - | |
397 | - /// <summary> | |
398 | - /// Register a Conversion Data Listener. | |
399 | - /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. | |
400 | - /// By doing this you can serve users with personalized content or send them to specific activities within the app, | |
401 | - /// which can greatly enhance their engagement with your app. | |
402 | - /// </summary> | |
403 | - /// <example> | |
404 | - /// <code> | |
405 | - /// AppsFlyer.getConversionData(this.name); | |
406 | - /// </code> | |
407 | - /// </example> | |
408 | - public static void getConversionData(string objectName) | |
409 | - { | |
410 | -#if UNITY_IOS && !UNITY_EDITOR | |
411 | - AppsFlyeriOS.getConversionData(objectName); | |
412 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
413 | - AppsFlyerAndroid.getConversionData(objectName); | |
414 | -#else | |
415 | - | |
416 | -#endif | |
417 | - } | |
418 | - | |
419 | - | |
420 | - /// <summary> | |
421 | - /// Use the following API to attribute the click and launch the app store's app page. | |
422 | - /// </summary> | |
423 | - /// <param name="appID">promoted App ID</param> | |
424 | - /// <param name="campaign">cross promotion campaign</param> | |
425 | - /// <param name="userParams">additional user params</param> | |
426 | - /// <example> | |
427 | - /// <code> | |
428 | - /// Dictionary<string, string> parameters = new Dictionary<string, string>(); | |
429 | - /// parameters.Add("af_sub1", "val"); | |
430 | - /// parameters.Add("custom_param", "val2"); | |
431 | - /// AppsFlyer.attributeAndOpenStore("123456789", "test campaign", parameters, this); | |
432 | - /// </code> | |
433 | - /// </example> | |
434 | - public static void attributeAndOpenStore(string appID, string campaign, Dictionary<string, string> userParams, MonoBehaviour gameObject) | |
435 | - { | |
436 | -#if UNITY_IOS && !UNITY_EDITOR | |
437 | - AppsFlyeriOS.attributeAndOpenStore(appID, campaign, userParams, gameObject); | |
438 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
439 | - AppsFlyerAndroid.attributeAndOpenStore(appID, campaign, userParams); | |
440 | -#else | |
441 | - | |
442 | -#endif | |
443 | - } | |
444 | - | |
445 | - /// <summary> | |
446 | - /// To attribute an impression use the following API call. | |
447 | - /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. | |
448 | - /// </summary> | |
449 | - /// <param name="appID">promoted App ID.</param> | |
450 | - /// <param name="campaign">cross promotion campaign.</param> | |
451 | - /// <param name="parameters">parameters Dictionary.</param> | |
452 | - public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary<string, string> parameters) | |
453 | - { | |
454 | -#if UNITY_IOS && !UNITY_EDITOR | |
455 | - AppsFlyeriOS.recordCrossPromoteImpression(appID, campaign, parameters); | |
456 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
457 | - AppsFlyerAndroid.recordCrossPromoteImpression(appID, campaign, parameters); | |
458 | -#else | |
459 | - | |
460 | -#endif | |
461 | - } | |
462 | - | |
463 | - /// <summary> | |
464 | - /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. | |
465 | - /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- | |
466 | - /// </summary> | |
467 | - /// <param name="parameters">parameters Dictionary.</param> | |
468 | - public static void generateUserInviteLink(Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
469 | - { | |
470 | -#if UNITY_IOS && !UNITY_EDITOR | |
471 | - AppsFlyeriOS.generateUserInviteLink(parameters, gameObject); | |
472 | -#elif UNITY_ANDROID && !UNITY_EDITOR | |
473 | - AppsFlyerAndroid.generateUserInviteLink(parameters, gameObject); | |
474 | -#else | |
475 | - | |
476 | -#endif | |
477 | - } | |
478 | - | |
479 | - /// <summary> | |
480 | - /// Helper method to convert json strings to dictionary. | |
481 | - /// </summary> | |
482 | - /// <param name="str">json string</param> | |
483 | - /// <returns>dictionary representing the input json string.</returns> | |
484 | - public static Dictionary<string, object> CallbackStringToDictionary(string str) | |
485 | - { | |
486 | - return AFMiniJSON.Json.Deserialize(str) as Dictionary<string, object>; | |
487 | - } | |
488 | - | |
489 | - /// <summary> | |
490 | - /// Helper method to log AppsFlyer events and callbacks. | |
491 | - /// </summary> | |
492 | - /// <param name="methodName">method name</param> | |
493 | - /// <param name="str">message to log</param> | |
494 | - public static void AFLog(string methodName, string str) | |
495 | - { | |
496 | - Debug.Log(string.Format("AppsFlyer_Unity_v{0} {1} called with {2}", kAppsFlyerPluginVersion, methodName, str)); | |
497 | - } | |
498 | - } | |
499 | - | |
500 | - public enum EmailCryptType | |
501 | - { | |
502 | - // None | |
503 | - EmailCryptTypeNone = 0, | |
504 | - // SHA256 | |
505 | - EmailCryptTypeSHA256 = 1, | |
506 | - } | |
507 | - | |
508 | -} |
Runtime/AppsFlyer.cs.meta
Runtime/AppsFlyerAndroid.cs
1 | -using System; | |
2 | -using System.Collections.Generic; | |
3 | -using UnityEngine; | |
4 | - | |
5 | -namespace AppsFlyerSDK | |
6 | -{ | |
7 | - | |
8 | -#if UNITY_ANDROID | |
9 | - public class AppsFlyerAndroid | |
10 | - { | |
11 | - | |
12 | - private static AndroidJavaClass appsFlyerAndroid = new AndroidJavaClass("com.appsflyer.unity.AppsFlyerAndroidWrapper"); | |
13 | - | |
14 | - | |
15 | - /// <summary> | |
16 | - /// Use this method to init the sdk for the application. | |
17 | - /// Call this method before startSDK. | |
18 | - /// </summary> | |
19 | - /// <param name="devkey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
20 | - /// <param name="gameObject">The current game object. This is used to get the conversion data callbacks. Pass null if you do not need the callbacks.</param> | |
21 | - public static void initSDK(string devkey, MonoBehaviour gameObject) | |
22 | - { | |
23 | -#if !UNITY_EDITOR | |
24 | - appsFlyerAndroid.CallStatic("initSDK", devkey, gameObject ? gameObject.name : null); | |
25 | -#endif | |
26 | - } | |
27 | - | |
28 | - /// <summary> | |
29 | - /// Use this method to start the sdk for the application. | |
30 | - /// The AppsFlyer's Dev-Key must be provided. | |
31 | - /// </summary> | |
32 | - /// <param name="devkey"> AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
33 | - public static void startSDK() | |
34 | - { | |
35 | -#if !UNITY_EDITOR | |
36 | - appsFlyerAndroid.CallStatic("startTracking"); | |
37 | -#endif | |
38 | - } | |
39 | - | |
40 | - /// <summary> | |
41 | - /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. | |
42 | - /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. | |
43 | - /// This can be achieved with the stopSDK API. | |
44 | - /// </summary> | |
45 | - /// <param name="isSDKStopped">boolean should SDK be stopped.</param> | |
46 | - public static void stopSDK(bool isSDKStopped) | |
47 | - { | |
48 | -#if !UNITY_EDITOR | |
49 | - appsFlyerAndroid.CallStatic("stopTracking", isSDKStopped); | |
50 | -#endif | |
51 | - } | |
52 | - | |
53 | - /// <summary> | |
54 | - /// Get the AppsFlyer SDK version used in app. | |
55 | - /// </summary> | |
56 | - /// <returns>AppsFlyer SDK version.</returns> | |
57 | - public static string getSdkVersion() | |
58 | - { | |
59 | -#if !UNITY_EDITOR | |
60 | - return appsFlyerAndroid.CallStatic<string>("getSdkVersion"); | |
61 | -#else | |
62 | - return ""; | |
63 | -#endif | |
64 | - } | |
65 | - | |
66 | - /// <summary> | |
67 | - /// Manually pass the Firebase / GCM Device Token for Uninstall measurement. | |
68 | - /// </summary> | |
69 | - /// <param name="token">Firebase Device Token.</param> | |
70 | - public static void updateServerUninstallToken(string token) | |
71 | - { | |
72 | -#if !UNITY_EDITOR | |
73 | - appsFlyerAndroid.CallStatic("updateServerUninstallToken", token); | |
74 | -#endif | |
75 | - } | |
76 | - | |
77 | - /// <summary> | |
78 | - /// Enables Debug logs for the AppsFlyer SDK. | |
79 | - /// Should only be set to true in development / debug. | |
80 | - /// </summary> | |
81 | - /// <param name="shouldEnable">shouldEnable boolean.</param> | |
82 | - public static void setIsDebug(bool shouldEnable) | |
83 | - { | |
84 | -#if !UNITY_EDITOR | |
85 | - appsFlyerAndroid.CallStatic("setIsDebug", shouldEnable); | |
86 | -#endif | |
87 | - } | |
88 | - | |
89 | - /// <summary> | |
90 | - /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat (4.4) | |
91 | - /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). | |
92 | - /// Use this API to explicitly send IMEI to AppsFlyer. | |
93 | - /// </summary> | |
94 | - /// <param name="aImei">device's IMEI.</param> | |
95 | - public static void setImeiData(string aImei) | |
96 | - { | |
97 | -#if !UNITY_EDITOR | |
98 | - appsFlyerAndroid.CallStatic("setImeiData", aImei); | |
99 | -#endif | |
100 | - } | |
101 | - | |
102 | - /// <summary> | |
103 | - /// By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat(4.4) | |
104 | - /// and the device contains Google Play Services(on SDK versions 4.8.8 and below the specific app needed GPS). | |
105 | - /// Use this API to explicitly send Android ID to AppsFlyer. | |
106 | - /// </summary> | |
107 | - /// <param name="aAndroidId">device's Android ID.</param> | |
108 | - public static void setAndroidIdData(string aAndroidId) | |
109 | - { | |
110 | -#if !UNITY_EDITOR | |
111 | - appsFlyerAndroid.CallStatic("setAndroidIdData", aAndroidId); | |
112 | -#endif | |
113 | - } | |
114 | - | |
115 | - /// <summary> | |
116 | - /// Setting your own customer ID enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. | |
117 | - /// This ID is available in AppsFlyer CSV reports along with Postback APIs for cross-referencing with your internal IDs. | |
118 | - /// </summary> | |
119 | - /// <param name="id">Customer ID for client.</param> | |
120 | - public static void setCustomerUserId(string id) | |
121 | - { | |
122 | -#if !UNITY_EDITOR | |
123 | - appsFlyerAndroid.CallStatic("setCustomerUserId", id); | |
124 | -#endif | |
125 | - } | |
126 | - | |
127 | - /// <summary> | |
128 | - /// It is possible to delay the SDK Initialization until the customerUserID is set. | |
129 | - /// This feature makes sure that the SDK doesn't begin functioning until the customerUserID is provided. | |
130 | - /// If this API is used, all in-app events and any other SDK API calls are discarded, until the customerUserID is provided. | |
131 | - /// </summary> | |
132 | - /// <param name="wait">wait boolean.</param> | |
133 | - public static void waitForCustomerUserId(bool wait) | |
134 | - { | |
135 | -#if !UNITY_EDITOR | |
136 | - appsFlyerAndroid.CallStatic("waitForCustomerUserId", wait); | |
137 | -#endif | |
138 | - } | |
139 | - | |
140 | - /// <summary> | |
141 | - /// Use this API to provide the SDK with the relevant customer user id and trigger the SDK to begin its normal activity. | |
142 | - /// </summary> | |
143 | - /// <param name="id">Customer ID for client.</param> | |
144 | - public static void setCustomerIdAndStartSDK(string id) | |
145 | - { | |
146 | -#if !UNITY_EDITOR | |
147 | - appsFlyerAndroid.CallStatic("setCustomerIdAndTrack", id); | |
148 | -#endif | |
149 | - } | |
150 | - | |
151 | - /// <summary> | |
152 | - /// Get the current AF_STORE value. | |
153 | - /// </summary> | |
154 | - /// <returns>AF_Store value.</returns> | |
155 | - public static string getOutOfStore() | |
156 | - { | |
157 | -#if !UNITY_EDITOR | |
158 | - return appsFlyerAndroid.CallStatic<string>("getOutOfStore"); | |
159 | -#else | |
160 | - return ""; | |
161 | -#endif | |
162 | - } | |
163 | - | |
164 | - /// <summary> | |
165 | - /// Manually set the AF_STORE value. | |
166 | - /// </summary> | |
167 | - /// <param name="sourceName">value to be set.</param> | |
168 | - public static void setOutOfStore(string sourceName) | |
169 | - { | |
170 | -#if !UNITY_EDITOR | |
171 | - appsFlyerAndroid.CallStatic("setOutOfStore", sourceName); | |
172 | -#endif | |
173 | - } | |
174 | - | |
175 | - /// <summary> | |
176 | - /// Set the OneLink ID that should be used for User-Invites. | |
177 | - /// The link that is generated for the user invite will use this OneLink as the base link. | |
178 | - /// </summary> | |
179 | - /// <param name="oneLinkId">OneLink ID obtained from the AppsFlyer Dashboard.</param> | |
180 | - public static void setAppInviteOneLinkID(string oneLinkId) | |
181 | - { | |
182 | -#if !UNITY_EDITOR | |
183 | - appsFlyerAndroid.CallStatic("setAppInviteOneLinkID", oneLinkId); | |
184 | -#endif | |
185 | - } | |
186 | - | |
187 | - /// <summary> | |
188 | - /// Set additional data to be sent to AppsFlyer. | |
189 | - /// </summary> | |
190 | - /// <param name="customData">additional data Dictionary.</param> | |
191 | - public static void setAdditionalData(Dictionary<string, string> customData) | |
192 | - { | |
193 | -#if !UNITY_EDITOR | |
194 | - appsFlyerAndroid.CallStatic("setAdditionalData", convertDictionaryToJavaMap(customData)); | |
195 | -#endif | |
196 | - } | |
197 | - | |
198 | - /// <summary> | |
199 | - /// Set the user emails. | |
200 | - /// </summary> | |
201 | - /// <param name="emails">User emails.</param> | |
202 | - public static void setUserEmails(params string[] emails) | |
203 | - { | |
204 | -#if !UNITY_EDITOR | |
205 | - appsFlyerAndroid.CallStatic("setUserEmails", (object)emails); | |
206 | -#endif | |
207 | - } | |
208 | - | |
209 | - | |
210 | - /// <summary> | |
211 | - /// Set the user phone number. | |
212 | - /// </summary> | |
213 | - /// <param name="phoneNumber">User phoneNumber.</param> | |
214 | - public static void setPhoneNumber(string phoneNumber){ | |
215 | -#if !UNITY_EDITOR | |
216 | - appsFlyerAndroid.CallStatic("setPhoneNumber", phoneNumber); | |
217 | -#endif | |
218 | - } | |
219 | - | |
220 | - /// <summary> | |
221 | - /// Set the user emails and encrypt them. | |
222 | - /// cryptMethod Encryption method: | |
223 | - /// EmailCryptType.EmailCryptTypeMD5 | |
224 | - /// EmailCryptType.EmailCryptTypeSHA1 | |
225 | - /// EmailCryptType.EmailCryptTypeSHA256 | |
226 | - /// EmailCryptType.EmailCryptTypeNone | |
227 | - /// </summary> | |
228 | - /// <param name="cryptMethod">Encryption method.</param> | |
229 | - /// <param name="emails">User emails.</param> | |
230 | - public static void setUserEmails(EmailCryptType cryptMethod, params string[] emails) | |
231 | - { | |
232 | -#if !UNITY_EDITOR | |
233 | - appsFlyerAndroid.CallStatic("setUserEmails", getEmailType(cryptMethod), (object)emails); | |
234 | -#endif | |
235 | - } | |
236 | - | |
237 | - /// <summary> | |
238 | - /// Opt-out of collection of Android ID. | |
239 | - /// If the app does NOT contain Google Play Services, Android ID is collected by the SDK. | |
240 | - /// However, apps with Google play services should avoid Android ID collection as this is in violation of the Google Play policy. | |
241 | - /// </summary> | |
242 | - /// <param name="isCollect">boolean, false to opt-out.</param> | |
243 | - public static void setCollectAndroidID(bool isCollect) | |
244 | - { | |
245 | -#if !UNITY_EDITOR | |
246 | - appsFlyerAndroid.CallStatic("setCollectAndroidID", isCollect); | |
247 | -#endif | |
248 | - } | |
249 | - | |
250 | - /// <summary> | |
251 | - /// Opt-out of collection of IMEI. | |
252 | - /// If the app does NOT contain Google Play Services, device IMEI is collected by the SDK. | |
253 | - /// However, apps with Google play services should avoid IMEI collection as this is in violation of the Google Play policy. | |
254 | - /// </summary> | |
255 | - /// <param name="isCollect">boolean, false to opt-out.</param> | |
256 | - public static void setCollectIMEI(bool isCollect) | |
257 | - { | |
258 | -#if !UNITY_EDITOR | |
259 | - appsFlyerAndroid.CallStatic("setCollectIMEI", isCollect); | |
260 | -#endif | |
261 | - } | |
262 | - | |
263 | - /// <summary> | |
264 | - /// Advertisers can wrap AppsFlyer OneLink within another Universal Link. | |
265 | - /// This Universal Link will invoke the app but any deep linking data will not propagate to AppsFlyer. | |
266 | - /// </summary> | |
267 | - /// <param name="urls">Array of urls.</param> | |
268 | - public static void setResolveDeepLinkURLs(params string[] urls) | |
269 | - { | |
270 | -#if !UNITY_EDITOR | |
271 | - appsFlyerAndroid.CallStatic("setResolveDeepLinkURLs", (object)urls); | |
272 | -#endif | |
273 | - } | |
274 | - | |
275 | - | |
276 | - /// <summary> | |
277 | - /// Advertisers can use this method to set vanity onelink domains. | |
278 | - /// </summary> | |
279 | - /// <param name="domains">Array of domains.</param> | |
280 | - public static void setOneLinkCustomDomain(params string[] domains) | |
281 | - { | |
282 | -#if !UNITY_EDITOR | |
283 | - appsFlyerAndroid.CallStatic("setOneLinkCustomDomain", (object)domains); | |
284 | -#endif | |
285 | - } | |
286 | - | |
287 | - /// <summary> | |
288 | - /// Manually set that the application was updated. | |
289 | - /// </summary> | |
290 | - /// <param name="isUpdate">isUpdate boolean value.</param> | |
291 | - public static void setIsUpdate(bool isUpdate) | |
292 | - { | |
293 | -#if !UNITY_EDITOR | |
294 | - appsFlyerAndroid.CallStatic("setIsUpdate", isUpdate); | |
295 | -#endif | |
296 | - } | |
297 | - | |
298 | - /// <summary> | |
299 | - /// Setting user local currency code for in-app purchases. | |
300 | - /// The currency code should be a 3 character ISO 4217 code. (default is USD). | |
301 | - /// You can set the currency code for all events by calling the following method. | |
302 | - /// </summary> | |
303 | - /// <param name="currencyCode">3 character ISO 4217 code.</param> | |
304 | - public static void setCurrencyCode(string currencyCode) | |
305 | - { | |
306 | -#if !UNITY_EDITOR | |
307 | - appsFlyerAndroid.CallStatic("setCurrencyCode", currencyCode); | |
308 | -#endif | |
309 | - } | |
310 | - | |
311 | - /// <summary> | |
312 | - /// Manually record the location of the user. | |
313 | - /// </summary> | |
314 | - /// <param name="latitude">latitude as double.</param> | |
315 | - /// <param name="longitude">longitude as double.</param> | |
316 | - public static void recordLocation(double latitude, double longitude) | |
317 | - { | |
318 | -#if !UNITY_EDITOR | |
319 | - appsFlyerAndroid.CallStatic("trackLocation", latitude, longitude); | |
320 | -#endif | |
321 | - } | |
322 | - | |
323 | - /// <summary> | |
324 | - /// Send an In-App Event. | |
325 | - /// In-App Events provide insight on what is happening in your app. | |
326 | - /// </summary> | |
327 | - /// <param name="eventName">Event Name as String.</param> | |
328 | - /// <param name="eventValues">Event Values as Dictionary.</param> | |
329 | - public static void sendEvent(string eventName, Dictionary<string, string> eventValues) | |
330 | - { | |
331 | -#if !UNITY_EDITOR | |
332 | - appsFlyerAndroid.CallStatic("trackEvent", eventName, convertDictionaryToJavaMap(eventValues)); | |
333 | -#endif | |
334 | - } | |
335 | - | |
336 | - /// <summary> | |
337 | - /// Anonymize user Data. | |
338 | - /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. | |
339 | - /// Default is false. | |
340 | - /// </summary> | |
341 | - /// <param name="isDisabled">isDisabled boolean.</param> | |
342 | - public static void anonymizeUser(bool isDisabled) | |
343 | - { | |
344 | -#if !UNITY_EDITOR | |
345 | - appsFlyerAndroid.CallStatic("setDeviceTrackingDisabled", isDisabled); | |
346 | -#endif | |
347 | - } | |
348 | - | |
349 | - /// <summary> | |
350 | - /// Enable the collection of Facebook Deferred AppLinks. | |
351 | - /// Requires Facebook SDK and Facebook app on target/client device. | |
352 | - /// This API must be invoked prior to initializing the AppsFlyer SDK in order to function properly. | |
353 | - /// </summary> | |
354 | - /// <param name="isEnabled">should Facebook's deferred app links be processed by the AppsFlyer SDK.</param> | |
355 | - public static void enableFacebookDeferredApplinks(bool isEnabled) | |
356 | - { | |
357 | -#if !UNITY_EDITOR | |
358 | - appsFlyerAndroid.CallStatic("enableFacebookDeferredApplinks", isEnabled); | |
359 | -#endif | |
360 | - } | |
361 | - | |
362 | - | |
363 | - /// <summary> | |
364 | - /// Restrict reengagement via deep-link to once per each unique deep-link. | |
365 | - /// Otherwise deep re-occurring deep-links will be permitted for non-singleTask Activities and deep-linking via AppsFlyer deep-links. | |
366 | - /// The default value is false. | |
367 | - /// </summary> | |
368 | - /// <param name="doConsume">doConsume boolean.</param> | |
369 | - public static void setConsumeAFDeepLinks(bool doConsume) | |
370 | - { | |
371 | -#if !UNITY_EDITOR | |
372 | - appsFlyerAndroid.CallStatic("setConsumeAFDeepLinks", doConsume); | |
373 | -#endif | |
374 | - } | |
375 | - | |
376 | - /// <summary> | |
377 | - /// Specify the manufacturer or media source name to which the preinstall is attributed. | |
378 | - /// </summary> | |
379 | - /// <param name="mediaSource">Manufacturer or media source name for preinstall attribution.</param> | |
380 | - /// <param name="campaign">Campaign name for preinstall attribution.</param> | |
381 | - /// <param name="siteId">Site ID for preinstall attribution.</param> | |
382 | - public static void setPreinstallAttribution(string mediaSource, string campaign, string siteId) | |
383 | - { | |
384 | -#if !UNITY_EDITOR | |
385 | - appsFlyerAndroid.CallStatic("setPreinstallAttribution", mediaSource, campaign, siteId); | |
386 | -#endif | |
387 | - } | |
388 | - | |
389 | - /// <summary> | |
390 | - /// Boolean indicator for preinstall by Manufacturer. | |
391 | - /// </summary> | |
392 | - /// <returns>boolean isPreInstalledApp.</returns> | |
393 | - public static bool isPreInstalledApp() | |
394 | - { | |
395 | -#if !UNITY_EDITOR | |
396 | - return appsFlyerAndroid.CallStatic<bool>("isPreInstalledApp"); | |
397 | -#else | |
398 | - return false; | |
399 | -#endif | |
400 | - } | |
401 | - | |
402 | - /// <summary> | |
403 | - /// Get the Facebook attribution ID, if one exists. | |
404 | - /// </summary> | |
405 | - /// <returns>string Facebook attribution ID.</returns> | |
406 | - public static string getAttributionId() | |
407 | - { | |
408 | -#if !UNITY_EDITOR | |
409 | - return appsFlyerAndroid.CallStatic<string>("getAttributionId"); | |
410 | -#else | |
411 | - return ""; | |
412 | -#endif | |
413 | - } | |
414 | - | |
415 | - /// <summary> | |
416 | - /// Get AppsFlyer's unique device ID is created for every new install of an app. | |
417 | - /// </summary> | |
418 | - /// <returns>AppsFlyer's unique device ID.</returns> | |
419 | - public static string getAppsFlyerId() | |
420 | - { | |
421 | -#if !UNITY_EDITOR | |
422 | - return appsFlyerAndroid.CallStatic<string>("getAppsFlyerId"); | |
423 | -#else | |
424 | - return ""; | |
425 | -#endif | |
426 | - } | |
427 | - | |
428 | - /// <summary> | |
429 | - /// API for server verification of in-app purchases. | |
430 | - /// An af_purchase event with the relevant values will be automatically sent if the validation is successful. | |
431 | - /// </summary> | |
432 | - /// <param name="publicKey">License Key obtained from the Google Play Console.</param> | |
433 | - /// <param name="signature"><code>data.INAPP_DATA_SIGNATURE</code> from <code>onActivityResult(int requestCode, int resultCode, Intent data)</code></param> | |
434 | - /// <param name="purchaseData"><code>data.INAPP_PURCHASE_DATA</code> from <code>onActivityResult(int requestCode, int resultCode, Intent data)</code></param> | |
435 | - /// <param name="price">Purchase price, should be derived from <code>skuDetails.getStringArrayList("DETAILS_LIST")</code></param> | |
436 | - /// <param name="currency">Purchase currency, should be derived from <code>skuDetails.getStringArrayList("DETAILS_LIST")</code></param> | |
437 | - /// <param name="additionalParameters">additionalParameters Freehand parameters to be sent with the purchase (if validated).</param> | |
438 | - public static void validateAndSendInAppPurchase(string publicKey, string signature, string purchaseData, string price, string currency, Dictionary<string, string> additionalParameters, MonoBehaviour gameObject) | |
439 | - { | |
440 | -#if !UNITY_EDITOR | |
441 | - appsFlyerAndroid.CallStatic("validateAndTrackInAppPurchase", publicKey, signature, purchaseData, price, currency, convertDictionaryToJavaMap(additionalParameters), gameObject ? gameObject.name : null); | |
442 | -#endif | |
443 | - } | |
444 | - | |
445 | - /// <summary> | |
446 | - /// Was the stopSDK(boolean) API set to true. | |
447 | - /// </summary> | |
448 | - /// <returns>boolean isSDKStopped.</returns> | |
449 | - public static bool isSDKStopped() | |
450 | - { | |
451 | -#if !UNITY_EDITOR | |
452 | - return appsFlyerAndroid.CallStatic<bool>("isTrackingStopped"); | |
453 | -#else | |
454 | - return false; | |
455 | -#endif | |
456 | - } | |
457 | - | |
458 | - /// <summary> | |
459 | - /// Set a custom value for the minimum required time between sessions. | |
460 | - /// By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions. | |
461 | - /// </summary> | |
462 | - /// <param name="seconds">minimum time between 2 separate sessions in seconds.</param> | |
463 | - public static void setMinTimeBetweenSessions(int seconds) | |
464 | - { | |
465 | -#if !UNITY_EDITOR | |
466 | - appsFlyerAndroid.CallStatic("setMinTimeBetweenSessions", seconds); | |
467 | -#endif | |
468 | - } | |
469 | - | |
470 | - /// <summary> | |
471 | - /// Set a custom host. | |
472 | - /// </summary> | |
473 | - /// <param name="hostPrefixName">Host prefix.</param> | |
474 | - /// <param name="hostName">Host name.</param> | |
475 | - public static void setHost(string hostPrefixName, string hostName) | |
476 | - { | |
477 | -#if !UNITY_EDITOR | |
478 | - appsFlyerAndroid.CallStatic("setHost", hostPrefixName, hostName); | |
479 | -#endif | |
480 | - } | |
481 | - | |
482 | - /// <summary> | |
483 | - /// Get the host name. | |
484 | - /// Default value is "appsflyer.com". | |
485 | - /// </summary> | |
486 | - /// <returns>Host name.</returns> | |
487 | - public static string getHostName() | |
488 | - { | |
489 | -#if !UNITY_EDITOR | |
490 | - return appsFlyerAndroid.CallStatic<string>("getHostName"); | |
491 | -#else | |
492 | - return ""; | |
493 | -#endif | |
494 | - } | |
495 | - | |
496 | - /// <summary> | |
497 | - /// Get the custom host prefix. | |
498 | - /// </summary> | |
499 | - /// <returns>Host prefix.</returns> | |
500 | - public static string getHostPrefix() | |
501 | - { | |
502 | -#if !UNITY_EDITOR | |
503 | - return appsFlyerAndroid.CallStatic<string>("getHostPrefix"); | |
504 | -#else | |
505 | - return ""; | |
506 | -#endif | |
507 | - } | |
508 | - | |
509 | - /// <summary> | |
510 | - /// Used by advertisers to exclude all networks/integrated partners from getting data. | |
511 | - /// </summary> | |
512 | - public static void setSharingFilterForAllPartners() | |
513 | - { | |
514 | -#if !UNITY_EDITOR | |
515 | - appsFlyerAndroid.CallStatic("setSharingFilterForAllPartners"); | |
516 | -#endif | |
517 | - } | |
518 | - | |
519 | - /// <summary> | |
520 | - /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. | |
521 | - /// </summary> | |
522 | - /// <param name="partners">partners to exclude from getting data</param> | |
523 | - public static void setSharingFilter(params string[] partners) | |
524 | - { | |
525 | -#if !UNITY_EDITOR | |
526 | - appsFlyerAndroid.CallStatic("setSharingFilter", (object)partners); | |
527 | -#endif | |
528 | - } | |
529 | - | |
530 | - /// <summary> | |
531 | - /// Register a Conversion Data Listener. | |
532 | - /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. | |
533 | - /// By doing this you can serve users with personalized content or send them to specific activities within the app, | |
534 | - /// which can greatly enhance their engagement with your app. | |
535 | - /// </summary> | |
536 | - public static void getConversionData(string objectName) | |
537 | - { | |
538 | -#if !UNITY_EDITOR | |
539 | - appsFlyerAndroid.CallStatic("getConversionData", objectName); | |
540 | -#endif | |
541 | - } | |
542 | - | |
543 | - /// <summary> | |
544 | - /// Register a validation listener for the validateAndSendInAppPurchase API. | |
545 | - /// </summary> | |
546 | - public static void initInAppPurchaseValidatorListener(MonoBehaviour gameObject) | |
547 | - { | |
548 | -#if !UNITY_EDITOR | |
549 | - appsFlyerAndroid.CallStatic("initInAppPurchaseValidatorListener", gameObject ? gameObject.name : null); | |
550 | -#endif | |
551 | - } | |
552 | - | |
553 | - /// <summary> | |
554 | - /// setCollectOaid | |
555 | - /// You must include the appsflyer oaid library for this api to work. | |
556 | - /// </summary> | |
557 | - /// <param name="isCollect">isCollect oaid - set fasle to opt out</param> | |
558 | - public static void setCollectOaid(bool isCollect) | |
559 | - { | |
560 | -#if !UNITY_EDITOR | |
561 | - appsFlyerAndroid.CallStatic("setCollectOaid", isCollect); | |
562 | -#endif | |
563 | - } | |
564 | - | |
565 | - /// <summary> | |
566 | - /// Use the following API to attribute the click and launch the app store's app page. | |
567 | - /// </summary> | |
568 | - /// <param name="promoted_app_id">promoted App ID</param> | |
569 | - /// <param name="campaign">cross promotion campaign</param> | |
570 | - /// <param name="userParams">additional user params</param> | |
571 | - public static void attributeAndOpenStore(string promoted_app_id, string campaign, Dictionary<string, string> userParams) | |
572 | - { | |
573 | -#if !UNITY_EDITOR | |
574 | - appsFlyerAndroid.CallStatic("attributeAndOpenStore", promoted_app_id, campaign, convertDictionaryToJavaMap(userParams)); | |
575 | -#endif | |
576 | - } | |
577 | - | |
578 | - /// <summary> | |
579 | - /// To attribute an impression use the following API call. | |
580 | - /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. | |
581 | - /// </summary> | |
582 | - /// <param name="appID">promoted App ID.</param> | |
583 | - /// <param name="campaign">cross promotion campaign.</param> | |
584 | - /// <param name="parameters">parameters Dictionary.</param> | |
585 | - public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary<string, string> parameters) | |
586 | - { | |
587 | -#if !UNITY_EDITOR | |
588 | - appsFlyerAndroid.CallStatic("recordCrossPromoteImpression", appID, campaign, convertDictionaryToJavaMap(parameters)); | |
589 | -#endif | |
590 | - } | |
591 | - | |
592 | - /// <summary> | |
593 | - /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. | |
594 | - /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- | |
595 | - /// </summary> | |
596 | - /// <param name="parameters">parameters Dictionary.</param> | |
597 | - public static void generateUserInviteLink(Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
598 | - { | |
599 | -#if !UNITY_EDITOR | |
600 | - appsFlyerAndroid.CallStatic("createOneLinkInviteListener", convertDictionaryToJavaMap(parameters), gameObject ? gameObject.name : null); | |
601 | -#endif | |
602 | - } | |
603 | - | |
604 | - /// <summary> | |
605 | - /// To measure push notifications as part of a retargeting campaign. | |
606 | - /// </summary> | |
607 | - public static void handlePushNotifications(){ | |
608 | -#if !UNITY_EDITOR | |
609 | - appsFlyerAndroid.CallStatic("handlePushNotifications"); | |
610 | -#endif | |
611 | - } | |
612 | - | |
613 | - /// <summary> | |
614 | - /// Internal Helper Method. | |
615 | - /// </summary> | |
616 | - private static AndroidJavaObject getEmailType(EmailCryptType cryptType) | |
617 | - { | |
618 | - AndroidJavaClass emailsCryptTypeEnum = new AndroidJavaClass("com.appsflyer.AppsFlyerProperties$EmailsCryptType"); | |
619 | - AndroidJavaObject emailsCryptType; | |
620 | - | |
621 | - switch (cryptType) | |
622 | - { | |
623 | - case EmailCryptType.EmailCryptTypeSHA256: | |
624 | - emailsCryptType = emailsCryptTypeEnum.GetStatic<AndroidJavaObject>("SHA256"); | |
625 | - break; | |
626 | - default: | |
627 | - emailsCryptType = emailsCryptTypeEnum.GetStatic<AndroidJavaObject>("NONE"); | |
628 | - break; | |
629 | - } | |
630 | - | |
631 | - return emailsCryptType; | |
632 | - } | |
633 | - | |
634 | - /// <summary> | |
635 | - /// Internal Helper Method. | |
636 | - /// </summary> | |
637 | - private static AndroidJavaObject convertDictionaryToJavaMap(Dictionary<string, string> dictionary) | |
638 | - { | |
639 | - AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap"); | |
640 | - IntPtr putMethod = AndroidJNIHelper.GetMethodID(map.GetRawClass(), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); | |
641 | - if (dictionary != null) | |
642 | - { | |
643 | - foreach (var entry in dictionary) | |
644 | - { | |
645 | - AndroidJNI.CallObjectMethod(map.GetRawObject(), putMethod, AndroidJNIHelper.CreateJNIArgArray(new object[] { entry.Key, entry.Value })); | |
646 | - } | |
647 | - } | |
648 | - | |
649 | - return map; | |
650 | - } | |
651 | - } | |
652 | - | |
653 | -#endif | |
654 | - | |
655 | - | |
656 | - | |
657 | -} |
Runtime/AppsFlyerAndroid.cs.meta
Runtime/AppsFlyerObject.prefab
1 | -%YAML 1.1 | |
2 | -%TAG !u! tag:unity3d.com,2011: | |
3 | ---- !u!1001 &100100000 | |
4 | -Prefab: | |
5 | - m_ObjectHideFlags: 1 | |
6 | - serializedVersion: 2 | |
7 | - m_Modification: | |
8 | - m_TransformParent: {fileID: 0} | |
9 | - m_Modifications: [] | |
10 | - m_RemovedComponents: [] | |
11 | - m_SourcePrefab: {fileID: 0} | |
12 | - m_RootGameObject: {fileID: 1562408896289314} | |
13 | - m_IsPrefabAsset: 1 | |
14 | ---- !u!1 &1562408896289314 | |
15 | -GameObject: | |
16 | - m_ObjectHideFlags: 0 | |
17 | - m_CorrespondingSourceObject: {fileID: 0} | |
18 | - m_PrefabInternal: {fileID: 100100000} | |
19 | - serializedVersion: 6 | |
20 | - m_Component: | |
21 | - - component: {fileID: 4294345628247858} | |
22 | - - component: {fileID: 114092076686766906} | |
23 | - m_Layer: 0 | |
24 | - m_Name: AppsFlyerObject | |
25 | - m_TagString: Untagged | |
26 | - m_Icon: {fileID: 0} | |
27 | - m_NavMeshLayer: 0 | |
28 | - m_StaticEditorFlags: 0 | |
29 | - m_IsActive: 1 | |
30 | ---- !u!4 &4294345628247858 | |
31 | -Transform: | |
32 | - m_ObjectHideFlags: 1 | |
33 | - m_CorrespondingSourceObject: {fileID: 0} | |
34 | - m_PrefabInternal: {fileID: 100100000} | |
35 | - m_GameObject: {fileID: 1562408896289314} | |
36 | - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | |
37 | - m_LocalPosition: {x: 0, y: 0, z: 0} | |
38 | - m_LocalScale: {x: 1, y: 1, z: 1} | |
39 | - m_Children: [] | |
40 | - m_Father: {fileID: 0} | |
41 | - m_RootOrder: 0 | |
42 | - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | |
43 | ---- !u!114 &114092076686766906 | |
44 | -MonoBehaviour: | |
45 | - m_ObjectHideFlags: 1 | |
46 | - m_CorrespondingSourceObject: {fileID: 0} | |
47 | - m_PrefabInternal: {fileID: 100100000} | |
48 | - m_GameObject: {fileID: 1562408896289314} | |
49 | - m_Enabled: 1 | |
50 | - m_EditorHideFlags: 0 | |
51 | - m_Script: {fileID: 11500000, guid: 2caf6a738ac024a48bd358f4cc91662a, type: 3} | |
52 | - m_Name: | |
53 | - m_EditorClassIdentifier: | |
54 | - devKey: | |
55 | - appID: | |
56 | - isDebug: 0 | |
57 | - getConversionData: 0 |
Runtime/AppsFlyerObject.prefab.meta
Runtime/AppsFlyerObjectScript.cs
1 | -using System.Collections; | |
2 | -using System.Collections.Generic; | |
3 | -using UnityEngine; | |
4 | -using AppsFlyerSDK; | |
5 | - | |
6 | -// This class is intended to be used the the AppsFlyerObject.prefab | |
7 | - | |
8 | -public class AppsFlyerObjectScript : MonoBehaviour , IAppsFlyerConversionData | |
9 | -{ | |
10 | - | |
11 | - // These fields are set from the editor so do not modify! | |
12 | - //******************************// | |
13 | - public string devKey; | |
14 | - public string appID; | |
15 | - public bool isDebug; | |
16 | - public bool getConversionData; | |
17 | - //******************************// | |
18 | - | |
19 | - void Start() | |
20 | - { | |
21 | - // These fields are set from the editor so do not modify! | |
22 | - //******************************// | |
23 | - AppsFlyer.setIsDebug(isDebug); | |
24 | - AppsFlyer.initSDK(devKey, appID, getConversionData ? this : null); | |
25 | - //******************************// | |
26 | - | |
27 | - AppsFlyer.startSDK(); | |
28 | - } | |
29 | - | |
30 | - void Update() | |
31 | - { | |
32 | - | |
33 | - } | |
34 | - | |
35 | - // Mark AppsFlyer CallBacks | |
36 | - public void onConversionDataSuccess(string conversionData) | |
37 | - { | |
38 | - AppsFlyer.AFLog("didReceiveConversionData", conversionData); | |
39 | - Dictionary<string, object> conversionDataDictionary = AppsFlyer.CallbackStringToDictionary(conversionData); | |
40 | - // add deferred deeplink logic here | |
41 | - } | |
42 | - | |
43 | - public void onConversionDataFail(string error) | |
44 | - { | |
45 | - AppsFlyer.AFLog("didReceiveConversionDataWithError", error); | |
46 | - } | |
47 | - | |
48 | - public void onAppOpenAttribution(string attributionData) | |
49 | - { | |
50 | - AppsFlyer.AFLog("onAppOpenAttribution", attributionData); | |
51 | - Dictionary<string, object> attributionDataDictionary = AppsFlyer.CallbackStringToDictionary(attributionData); | |
52 | - // add direct deeplink logic here | |
53 | - } | |
54 | - | |
55 | - public void onAppOpenAttributionFailure(string error) | |
56 | - { | |
57 | - AppsFlyer.AFLog("onAppOpenAttributionFailure", error); | |
58 | - } | |
59 | -} |
Runtime/AppsFlyerObjectScript.cs.meta
Runtime/AppsFlyeriOS.cs
1 | -using System.Collections.Generic; | |
2 | -using System.Runtime.InteropServices; | |
3 | -using UnityEngine; | |
4 | - | |
5 | -namespace AppsFlyerSDK | |
6 | -{ | |
7 | -#if UNITY_IOS | |
8 | - | |
9 | - public class AppsFlyeriOS | |
10 | - { | |
11 | - | |
12 | - /// <summary> | |
13 | - /// Start Session. | |
14 | - /// This will record a session and then record all background forground sessions during the lifecycle of the app. | |
15 | - /// </summary> | |
16 | - public static void startSDK() | |
17 | - { | |
18 | -#if !UNITY_EDITOR | |
19 | - _startSDK(); | |
20 | -#endif | |
21 | - } | |
22 | - | |
23 | - /// <summary> | |
24 | - /// Send an In-App Event. | |
25 | - /// In-App Events provide insight on what is happening in your app. | |
26 | - /// </summary> | |
27 | - /// <param name="eventName">Name of event.</param> | |
28 | - /// <param name="eventValues">Contains dictionary of values for handling by backend.</param> | |
29 | - public static void sendEvent(string eventName, Dictionary<string, string> eventValues) | |
30 | - { | |
31 | -#if !UNITY_EDITOR | |
32 | - _afSendEvent(eventName, AFMiniJSON.Json.Serialize(eventValues)); | |
33 | -#endif | |
34 | - } | |
35 | - | |
36 | - /// <summary> | |
37 | - /// Get the conversion data. | |
38 | - /// Allows the developer to access the user attribution data in real-time for every new install, directly from the SDK level. | |
39 | - /// By doing this you can serve users with personalized content or send them to specific activities within the app, | |
40 | - /// which can greatly enhance their engagement with your app. | |
41 | - /// </summary> | |
42 | - public static void getConversionData(string objectName) | |
43 | - { | |
44 | -#if !UNITY_EDITOR | |
45 | - _getConversionData(objectName); | |
46 | -#endif | |
47 | - } | |
48 | - | |
49 | - /// <summary> | |
50 | - /// In case you use your own user ID in your app, you can set this property to that ID. | |
51 | - /// Enables you to cross-reference your own unique ID with AppsFlyer’s unique ID and the other devices’ IDs. | |
52 | - /// </summary> | |
53 | - /// <param name="customerUserID">Customer ID for client.</param> | |
54 | - public static void setCustomerUserID(string customerUserID) | |
55 | - { | |
56 | -#if !UNITY_EDITOR | |
57 | - _setCustomerUserID(customerUserID); | |
58 | -#endif | |
59 | - } | |
60 | - | |
61 | - /// <summary> | |
62 | - /// In case you use custom data and you want to receive it in the raw reports. | |
63 | - /// see [Setting additional custom data] (https://support.appsflyer.com/hc/en-us/articles/207032066-AppsFlyer-SDK-Integration-iOS#setting-additional-custom-data) for more information. | |
64 | - /// </summary> | |
65 | - /// <param name="customData">additional data Dictionary.</param> | |
66 | - public static void setAdditionalData(Dictionary<string, string> customData) | |
67 | - { | |
68 | -#if !UNITY_EDITOR | |
69 | - _setAdditionalData(AFMiniJSON.Json.Serialize(customData)); | |
70 | -#endif | |
71 | - } | |
72 | - | |
73 | - /// <summary> | |
74 | - /// Use this method to set your AppsFlyer's dev key. | |
75 | - /// </summary> | |
76 | - /// <param name="appsFlyerDevKey">AppsFlyer's Dev-Key, which is accessible from your AppsFlyer account under 'App Settings' in the dashboard.</param> | |
77 | - public static void setAppsFlyerDevKey(string appsFlyerDevKey) | |
78 | - { | |
79 | -#if !UNITY_EDITOR | |
80 | - _setAppsFlyerDevKey(appsFlyerDevKey); | |
81 | -#endif | |
82 | - } | |
83 | - | |
84 | - /// <summary> | |
85 | - /// Use this method to set your app's Apple ID(taken from the app's page on iTunes Connect). | |
86 | - /// </summary> | |
87 | - /// <param name="appleAppID">your app's Apple ID.</param> | |
88 | - public static void setAppleAppID(string appleAppID) | |
89 | - { | |
90 | -#if !UNITY_EDITOR | |
91 | - _setAppleAppID(appleAppID); | |
92 | -#endif | |
93 | - } | |
94 | - | |
95 | - /// <summary> | |
96 | - /// Setting user local currency code for in-app purchases. | |
97 | - /// The currency code should be a 3 character ISO 4217 code. (default is USD). | |
98 | - /// You can set the currency code for all events by calling the following method. | |
99 | - /// </summary> | |
100 | - /// <param name="currencyCode">3 character ISO 4217 code.</param> | |
101 | - public static void setCurrencyCode(string currencyCode) | |
102 | - { | |
103 | -#if !UNITY_EDITOR | |
104 | - _setCurrencyCode(currencyCode); | |
105 | -#endif | |
106 | - } | |
107 | - | |
108 | - /// <summary> | |
109 | - /// AppsFlyer SDK collect Apple's `advertisingIdentifier` if the `AdSupport.framework` included in the SDK. | |
110 | - /// You can disable this behavior by setting the following property to true. | |
111 | - /// </summary> | |
112 | - /// <param name="disableCollectAppleAdSupport">boolean to disableCollectAppleAdSupport</param> | |
113 | - public static void setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport) | |
114 | - { | |
115 | -#if !UNITY_EDITOR | |
116 | - _setDisableCollectAppleAdSupport(disableCollectAppleAdSupport); | |
117 | -#endif | |
118 | - } | |
119 | - | |
120 | - /// <summary> | |
121 | - /// Enables Debug logs for the AppsFlyer SDK. | |
122 | - /// Should only be set to true in development / debug. | |
123 | - /// The default value is false. | |
124 | - /// </summary> | |
125 | - /// <param name="isDebug">shouldEnable boolean..</param> | |
126 | - public static void setIsDebug(bool isDebug) | |
127 | - { | |
128 | -#if !UNITY_EDITOR | |
129 | - _setIsDebug(isDebug); | |
130 | -#endif | |
131 | - } | |
132 | - | |
133 | - /// <summary> | |
134 | - /// Set this flag to true, to collect the current device name(e.g. "My iPhone"). Default value is false. | |
135 | - /// </summary> | |
136 | - /// <param name="shouldCollectDeviceName">boolean shouldCollectDeviceName.</param> | |
137 | - public static void setShouldCollectDeviceName(bool shouldCollectDeviceName) | |
138 | - { | |
139 | -#if !UNITY_EDITOR | |
140 | - _setShouldCollectDeviceName(shouldCollectDeviceName); | |
141 | -#endif | |
142 | - } | |
143 | - | |
144 | - /// <summary> | |
145 | - /// Set the OneLink ID that should be used for User-Invites. | |
146 | - /// The link that is generated for the user invite will use this OneLink as the base link. | |
147 | - /// </summary> | |
148 | - /// <param name="appInviteOneLinkID">OneLink ID obtained from the AppsFlyer Dashboard.</param> | |
149 | - public static void setAppInviteOneLinkID(string appInviteOneLinkID) | |
150 | - { | |
151 | -#if !UNITY_EDITOR | |
152 | - _setAppInviteOneLinkID(appInviteOneLinkID); | |
153 | -#endif | |
154 | - } | |
155 | - | |
156 | - /// <summary> | |
157 | - /// Anonymize user Data. | |
158 | - /// Use this API during the SDK Initialization to explicitly anonymize a user's installs, events and sessions. | |
159 | - /// Default is false | |
160 | - /// </summary> | |
161 | - /// <param name="shouldAnonymizeUser">boolean shouldAnonymizeUser.</param> | |
162 | - public static void anonymizeUser(bool shouldAnonymizeUser) | |
163 | - { | |
164 | -#if !UNITY_EDITOR | |
165 | - _anonymizeUser(shouldAnonymizeUser); | |
166 | -#endif | |
167 | - } | |
168 | - | |
169 | - /// <summary> | |
170 | - /// Opt-out for Apple Search Ads attributions. | |
171 | - /// </summary> | |
172 | - /// <param name="disableCollectIAd">boolean disableCollectIAd.</param> | |
173 | - public static void setDisableCollectIAd(bool disableCollectIAd) | |
174 | - { | |
175 | -#if !UNITY_EDITOR | |
176 | - _setDisableCollectIAd(disableCollectIAd); | |
177 | -#endif | |
178 | - } | |
179 | - | |
180 | - /// <summary> | |
181 | - /// In app purchase receipt validation Apple environment(production or sandbox). The default value is false. | |
182 | - /// </summary> | |
183 | - /// <param name="useReceiptValidationSandbox">boolean useReceiptValidationSandbox.</param> | |
184 | - public static void setUseReceiptValidationSandbox(bool useReceiptValidationSandbox) | |
185 | - { | |
186 | -#if !UNITY_EDITOR | |
187 | - _setUseReceiptValidationSandbox(useReceiptValidationSandbox); | |
188 | -#endif | |
189 | - } | |
190 | - | |
191 | - /// <summary> | |
192 | - /// Set this flag to test uninstall on Apple environment(production or sandbox). The default value is false. | |
193 | - /// </summary> | |
194 | - /// <param name="useUninstallSandbox">boolean useUninstallSandbox.</param> | |
195 | - public static void setUseUninstallSandbox(bool useUninstallSandbox) | |
196 | - { | |
197 | -#if !UNITY_EDITOR | |
198 | - _setUseUninstallSandbox(useUninstallSandbox); | |
199 | -#endif | |
200 | - } | |
201 | - | |
202 | - /// <summary> | |
203 | - /// For advertisers who wrap OneLink within another Universal Link. | |
204 | - /// An advertiser will be able to deeplink from a OneLink wrapped within another Universal Link and also record this retargeting conversion. | |
205 | - /// </summary> | |
206 | - /// <param name="resolveDeepLinkURLs">Array of urls.</param> | |
207 | - public static void setResolveDeepLinkURLs(params string[] resolveDeepLinkURLs) | |
208 | - { | |
209 | -#if !UNITY_EDITOR | |
210 | - _setResolveDeepLinkURLs(resolveDeepLinkURLs.Length,resolveDeepLinkURLs); | |
211 | -#endif | |
212 | - } | |
213 | - | |
214 | - /// <summary> | |
215 | - /// For advertisers who use vanity OneLinks. | |
216 | - /// </summary> | |
217 | - /// <param name="oneLinkCustomDomains">Array of domains.</param> | |
218 | - public static void setOneLinkCustomDomains(params string[] oneLinkCustomDomains) | |
219 | - { | |
220 | -#if !UNITY_EDITOR | |
221 | - _setOneLinkCustomDomains(oneLinkCustomDomains.Length, oneLinkCustomDomains); | |
222 | -#endif | |
223 | - } | |
224 | - | |
225 | - /// <summary> | |
226 | - /// Set the user emails and encrypt them. | |
227 | - /// cryptMethod Encryption method: | |
228 | - /// EmailCryptType.EmailCryptTypeMD5 | |
229 | - /// EmailCryptType.EmailCryptTypeSHA1 | |
230 | - /// EmailCryptType.EmailCryptTypeSHA256 | |
231 | - /// EmailCryptType.EmailCryptTypeNone | |
232 | - /// </summary> | |
233 | - /// <param name="cryptType">type Hash algoritm.</param> | |
234 | - /// <param name="length">length of userEmails array.</param> | |
235 | - /// <param name="userEmails">userEmails The list of strings that hold mails.</param> | |
236 | - public static void setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails) | |
237 | - { | |
238 | -#if !UNITY_EDITOR | |
239 | - _setUserEmails(cryptType, length, userEmails); | |
240 | -#endif | |
241 | - } | |
242 | - | |
243 | - /// <summary> | |
244 | - /// Set the user phone number. | |
245 | - /// </summary> | |
246 | - /// <param name="phoneNumber">User phoneNumber.</param> | |
247 | - public static void setPhoneNumber(string phoneNumber){ | |
248 | -#if !UNITY_EDITOR | |
249 | - _setPhoneNumber(phoneNumber); | |
250 | -#endif | |
251 | - } | |
252 | - | |
253 | - /// <summary> | |
254 | - /// To send and validate in app purchases you can call this method from the processPurchase method. | |
255 | - /// </summary> | |
256 | - /// <param name="productIdentifier">The product identifier.</param> | |
257 | - /// <param name="price">The product price.</param> | |
258 | - /// <param name="currency">The product currency.</param> | |
259 | - /// <param name="tranactionId">The purchase transaction Id.</param> | |
260 | - /// <param name="additionalParameters">The additional param, which you want to receive it in the raw reports.</param> | |
261 | - public static void validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, Dictionary<string, string> additionalParameters, MonoBehaviour gameObject) | |
262 | - { | |
263 | -#if !UNITY_EDITOR | |
264 | - _validateAndSendInAppPurchase(productIdentifier, price, currency, tranactionId, AFMiniJSON.Json.Serialize(additionalParameters), gameObject ? gameObject.name : null); | |
265 | -#endif | |
266 | - } | |
267 | - | |
268 | - /// <summary> | |
269 | - /// To record location for geo-fencing. Does the same as code below. | |
270 | - /// </summary> | |
271 | - /// <param name="longitude">The location longitude.</param> | |
272 | - /// <param name="latitude">The location latitude.</param> | |
273 | - public static void recordLocation(double longitude, double latitude) | |
274 | - { | |
275 | -#if !UNITY_EDITOR | |
276 | - _recordLocation(longitude, latitude); | |
277 | -#endif | |
278 | - } | |
279 | - | |
280 | - /// <summary> | |
281 | - /// Get AppsFlyer's unique device ID, which is created for every new install of an app. | |
282 | - /// </summary> | |
283 | - public static string getAppsFlyerId() | |
284 | - { | |
285 | -#if !UNITY_EDITOR | |
286 | - return _getAppsFlyerId(); | |
287 | -#else | |
288 | - return ""; | |
289 | -#endif | |
290 | - } | |
291 | - | |
292 | - /// <summary> | |
293 | - /// Register uninstall - you should register for remote notification and provide AppsFlyer the push device token. | |
294 | - /// </summary> | |
295 | - /// <param name="deviceToken">deviceToken The `deviceToken` from `-application:didRegisterForRemoteNotificationsWithDeviceToken:`.</param> | |
296 | - public static void registerUninstall(byte[] deviceToken) | |
297 | - { | |
298 | -#if !UNITY_EDITOR | |
299 | - _registerUninstall(deviceToken); | |
300 | -#endif | |
301 | - } | |
302 | - | |
303 | - /// <summary> | |
304 | - /// Enable AppsFlyer to handle a push notification. | |
305 | - /// </summary> | |
306 | - /// <param name="pushPayload">pushPayload The `userInfo` from received remote notification. One of root keys should be @"af"..</param> | |
307 | - public static void handlePushNotification(Dictionary<string, string> pushPayload) | |
308 | - { | |
309 | -#if !UNITY_EDITOR | |
310 | - _handlePushNotification(AFMiniJSON.Json.Serialize(pushPayload)); | |
311 | -#endif | |
312 | - } | |
313 | - | |
314 | - /// <summary> | |
315 | - /// Get SDK version. | |
316 | - /// </summary> | |
317 | - public static string getSDKVersion() | |
318 | - { | |
319 | -#if !UNITY_EDITOR | |
320 | - return _getSDKVersion(); | |
321 | -#else | |
322 | - return ""; | |
323 | -#endif | |
324 | - } | |
325 | - | |
326 | - /// <summary> | |
327 | - /// This property accepts a string value representing the host name for all endpoints. | |
328 | - /// Can be used to Zero rate your application’s data usage.Contact your CSM for more information. | |
329 | - /// </summary> | |
330 | - /// <param name="host">Host Name.</param> | |
331 | - /// <param name="host">Host prefix.</param> | |
332 | - public static void setHost(string host, string hostPrefix) | |
333 | - { | |
334 | -#if !UNITY_EDITOR | |
335 | - _setHost(host, hostPrefix); | |
336 | -#endif | |
337 | - } | |
338 | - | |
339 | - /// <summary> | |
340 | - /// This property is responsible for timeout between sessions in seconds. | |
341 | - /// Default value is 5 seconds. | |
342 | - /// </summary> | |
343 | - /// <param name="minTimeBetweenSessions">minimum time between 2 separate sessions in seconds.</param> | |
344 | - public static void setMinTimeBetweenSessions(int minTimeBetweenSessions) | |
345 | - { | |
346 | -#if !UNITY_EDITOR | |
347 | - _setMinTimeBetweenSessions(minTimeBetweenSessions); | |
348 | -#endif | |
349 | - } | |
350 | - | |
351 | - /// <summary> | |
352 | - /// Once this API is invoked, our SDK no longer communicates with our servers and stops functioning. | |
353 | - /// In some extreme cases you might want to shut down all SDK activity due to legal and privacy compliance. | |
354 | - /// This can be achieved with the stopSDK API. | |
355 | - /// </summary> | |
356 | - /// <param name="isSDKStopped">boolean isSDKStopped.</param> | |
357 | - public static void stopSDK(bool isSDKStopped) | |
358 | - { | |
359 | -#if !UNITY_EDITOR | |
360 | - _stopSDK(isSDKStopped); | |
361 | -#endif | |
362 | - } | |
363 | - | |
364 | - // <summary> | |
365 | - /// Was the stopSDK(boolean) API set to true. | |
366 | - /// </summary> | |
367 | - /// <returns>boolean isSDKStopped.</returns> | |
368 | - public static bool isSDKStopped() | |
369 | - { | |
370 | -#if !UNITY_EDITOR | |
371 | - return _isSDKStopped(); | |
372 | -#else | |
373 | - return false; | |
374 | -#endif | |
375 | - } | |
376 | - | |
377 | - /// <summary> | |
378 | - /// In case you want to track deep linking manually call handleOpenUrl. | |
379 | - /// The continueUserActivity and onOpenURL are implemented in the AppsFlyerAppController.mm class, so | |
380 | - /// only use this method if the other methods do not cover your apps deeplinking needs. | |
381 | - /// </summary> | |
382 | - /// <param name="url">The URL to be passed to your AppDelegate.</param> | |
383 | - /// <param name="sourceApplication">The sourceApplication to be passed to your AppDelegate.</param> | |
384 | - /// <param name="annotation">The annotation to be passed to your app delegate.</param> | |
385 | - public static void handleOpenUrl(string url, string sourceApplication, string annotation) | |
386 | - { | |
387 | -#if !UNITY_EDITOR | |
388 | - _handleOpenUrl(url, sourceApplication, annotation); | |
389 | -#endif | |
390 | - } | |
391 | - | |
392 | - /// <summary> | |
393 | - /// Used by advertisers to exclude all networks/integrated partners from getting data. | |
394 | - /// </summary> | |
395 | - public static void setSharingFilterForAllPartners() | |
396 | - { | |
397 | -#if !UNITY_EDITOR | |
398 | - _setSharingFilterForAllPartners(); | |
399 | -#endif | |
400 | - } | |
401 | - | |
402 | - /// <summary> | |
403 | - /// Used by advertisers to set some (one or more) networks/integrated partners to exclude from getting data. | |
404 | - /// </summary> | |
405 | - /// <param name="partners">partners to exclude from getting data</param> | |
406 | - public static void setSharingFilter(params string[] partners) | |
407 | - { | |
408 | -#if !UNITY_EDITOR | |
409 | - _setSharingFilter(partners.Length, partners); | |
410 | -#endif | |
411 | - } | |
412 | - | |
413 | - /// <summary> | |
414 | - /// To record an impression use the following API call. | |
415 | - /// Make sure to use the promoted App ID as it appears within the AppsFlyer dashboard. | |
416 | - /// </summary> | |
417 | - /// <param name="appID">promoted App ID.</param> | |
418 | - /// <param name="campaign">cross promotion campaign.</param> | |
419 | - /// <param name="parameters">parameters Dictionary.</param> | |
420 | - public static void recordCrossPromoteImpression(string appID, string campaign, Dictionary<string, string> parameters) | |
421 | - { | |
422 | -#if !UNITY_EDITOR | |
423 | - _recordCrossPromoteImpression(appID, campaign, AFMiniJSON.Json.Serialize(parameters)); | |
424 | -#endif | |
425 | - } | |
426 | - | |
427 | - /// <summary> | |
428 | - /// Use the following API to attribute the click and launch the app store's app page. | |
429 | - /// </summary> | |
430 | - /// <param name="appID">promoted App ID</param> | |
431 | - /// <param name="campaign">cross promotion campaign</param> | |
432 | - /// <param name="parameters">additional user params</param> | |
433 | - public static void attributeAndOpenStore(string appID, string campaign, Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
434 | - { | |
435 | -#if !UNITY_EDITOR | |
436 | - _attributeAndOpenStore(appID, campaign, AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); | |
437 | -#endif | |
438 | - } | |
439 | - | |
440 | - /// <summary> | |
441 | - /// The LinkGenerator class builds the invite URL according to various setter methods which allow passing on additional information on the click. | |
442 | - /// See - https://support.appsflyer.com/hc/en-us/articles/115004480866-User-invite-attribution- | |
443 | - /// </summary> | |
444 | - /// <param name="parameters">parameters Dictionary.</param> | |
445 | - public static void generateUserInviteLink(Dictionary<string, string> parameters, MonoBehaviour gameObject) | |
446 | - { | |
447 | -#if !UNITY_EDITOR | |
448 | - _generateUserInviteLink(AFMiniJSON.Json.Serialize(parameters), gameObject ? gameObject.name : null); | |
449 | -#endif | |
450 | - } | |
451 | - | |
452 | - /// <summary> | |
453 | - /// It is recommended to generate an in-app event after the invite is sent to record the invites from the senders' perspective. | |
454 | - /// This enables you to find the users that tend most to invite friends, and the media sources that get you these users. | |
455 | - /// </summary> | |
456 | - /// <param name="channel">channel string.</param> | |
457 | - /// <param name="parameters">parameters Dictionary..</param> | |
458 | - public static void recordInvite(string channel, Dictionary<string, string> parameters) | |
459 | - { | |
460 | -#if !UNITY_EDITOR | |
461 | - _recordInvite(channel, AFMiniJSON.Json.Serialize(parameters)); | |
462 | -#endif | |
463 | - } | |
464 | - | |
465 | - | |
466 | - /* | |
467 | - * AppsFlyer ios method mapping | |
468 | - */ | |
469 | - | |
470 | - [DllImport("__Internal")] | |
471 | - private static extern void _startSDK(); | |
472 | - | |
473 | - [DllImport("__Internal")] | |
474 | - private static extern void _getConversionData(string objectName); | |
475 | - | |
476 | - [DllImport("__Internal")] | |
477 | - private static extern void _setCustomerUserID(string customerUserID); | |
478 | - | |
479 | - [DllImport("__Internal")] | |
480 | - private static extern void _setAdditionalData(string customData); | |
481 | - | |
482 | - [DllImport("__Internal")] | |
483 | - private static extern void _setAppsFlyerDevKey(string appsFlyerDevKey); | |
484 | - | |
485 | - [DllImport("__Internal")] | |
486 | - private static extern void _setAppleAppID(string appleAppID); | |
487 | - | |
488 | - [DllImport("__Internal")] | |
489 | - private static extern void _setCurrencyCode(string currencyCode); | |
490 | - | |
491 | - [DllImport("__Internal")] | |
492 | - private static extern void _setDisableCollectAppleAdSupport(bool disableCollectAppleAdSupport); | |
493 | - | |
494 | - [DllImport("__Internal")] | |
495 | - private static extern void _setIsDebug(bool isDebug); | |
496 | - | |
497 | - [DllImport("__Internal")] | |
498 | - private static extern void _setShouldCollectDeviceName(bool shouldCollectDeviceName); | |
499 | - | |
500 | - [DllImport("__Internal")] | |
501 | - private static extern void _setAppInviteOneLinkID(string appInviteOneLinkID); | |
502 | - | |
503 | - [DllImport("__Internal")] | |
504 | - private static extern void _anonymizeUser(bool shouldAnonymizeUser); | |
505 | - | |
506 | - [DllImport("__Internal")] | |
507 | - private static extern void _setDisableCollectIAd(bool disableCollectIAd); | |
508 | - | |
509 | - [DllImport("__Internal")] | |
510 | - private static extern void _setUseReceiptValidationSandbox(bool useReceiptValidationSandbox); | |
511 | - | |
512 | - [DllImport("__Internal")] | |
513 | - private static extern void _setUseUninstallSandbox(bool useUninstallSandbox); | |
514 | - | |
515 | - [DllImport("__Internal")] | |
516 | - private static extern void _setResolveDeepLinkURLs(int length, params string[] resolveDeepLinkURLs); | |
517 | - | |
518 | - [DllImport("__Internal")] | |
519 | - private static extern void _setOneLinkCustomDomains(int length, params string[] oneLinkCustomDomains); | |
520 | - | |
521 | - [DllImport("__Internal")] | |
522 | - private static extern void _setUserEmails(EmailCryptType cryptType, int length, params string[] userEmails); | |
523 | - | |
524 | - [DllImport("__Internal")] | |
525 | - private static extern void _setPhoneNumber(string phoneNumber); | |
526 | - | |
527 | - [DllImport("__Internal")] | |
528 | - private static extern void _afSendEvent(string eventName, string eventValues); | |
529 | - | |
530 | - [DllImport("__Internal")] | |
531 | - private static extern void _validateAndSendInAppPurchase(string productIdentifier, string price, string currency, string tranactionId, string additionalParameters, string objectName); | |
532 | - | |
533 | - [DllImport("__Internal")] | |
534 | - private static extern void _recordLocation(double longitude, double latitude); | |
535 | - | |
536 | - [DllImport("__Internal")] | |
537 | - private static extern string _getAppsFlyerId(); | |
538 | - | |
539 | - [DllImport("__Internal")] | |
540 | - private static extern void _registerUninstall(byte[] deviceToken); | |
541 | - | |
542 | - [DllImport("__Internal")] | |
543 | - private static extern void _handlePushNotification(string pushPayload); | |
544 | - | |
545 | - [DllImport("__Internal")] | |
546 | - private static extern string _getSDKVersion(); | |
547 | - | |
548 | - [DllImport("__Internal")] | |
549 | - private static extern void _setHost(string host, string hostPrefix); | |
550 | - | |
551 | - [DllImport("__Internal")] | |
552 | - private static extern void _setMinTimeBetweenSessions(int minTimeBetweenSessions); | |
553 | - | |
554 | - [DllImport("__Internal")] | |
555 | - private static extern void _stopSDK(bool isStopSDK); | |
556 | - | |
557 | - [DllImport("__Internal")] | |
558 | - private static extern bool _isSDKStopped(); | |
559 | - | |
560 | - [DllImport("__Internal")] | |
561 | - private static extern void _handleOpenUrl(string url, string sourceApplication, string annotation); | |
562 | - | |
563 | - [DllImport("__Internal")] | |
564 | - private static extern void _setSharingFilterForAllPartners(); | |
565 | - | |
566 | - [DllImport("__Internal")] | |
567 | - private static extern void _setSharingFilter(int length, params string[] partners); | |
568 | - | |
569 | - [DllImport("__Internal")] | |
570 | - private static extern void _recordCrossPromoteImpression(string appID, string campaign, string parameters); | |
571 | - | |
572 | - [DllImport("__Internal")] | |
573 | - private static extern void _attributeAndOpenStore(string appID, string campaign, string parameters, string gameObject); | |
574 | - | |
575 | - [DllImport("__Internal")] | |
576 | - private static extern void _generateUserInviteLink(string parameters, string gameObject); | |
577 | - | |
578 | - [DllImport("__Internal")] | |
579 | - private static extern void _recordInvite(string channel, string parameters); | |
580 | - | |
581 | - } | |
582 | - | |
583 | -#endif | |
584 | - | |
585 | - | |
586 | -} |
Runtime/AppsFlyeriOS.cs.meta
Runtime/IAppsFlyerConversionData.cs
1 | -namespace AppsFlyerSDK | |
2 | -{ | |
3 | - public interface IAppsFlyerConversionData | |
4 | - { | |
5 | - /// <summary> | |
6 | - /// `conversionData` contains information about install. Organic/non-organic, etc. | |
7 | - /// <see>https://support.appsflyer.com/hc/en-us/articles/360000726098-Conversion-Data-Scenarios#Introduction</see> | |
8 | - /// </summary> | |
9 | - /// <param name="conversionData">JSON string of the returned conversion data.</param> | |
10 | - void onConversionDataSuccess(string conversionData); | |
11 | - | |
12 | - /// <summary> | |
13 | - /// Any errors that occurred during the conversion request. | |
14 | - /// </summary> | |
15 | - /// <param name="error">A string describing the error.</param> | |
16 | - void onConversionDataFail(string error); | |
17 | - | |
18 | - /// <summary> | |
19 | - /// `attributionData` contains information about OneLink, deeplink. | |
20 | - /// <see>https://support.appsflyer.com/hc/en-us/articles/208874366-OneLink-Deep-Linking-Guide#Intro</see> | |
21 | - /// </summary> | |
22 | - /// <param name="attributionData">JSON string of the returned deeplink data.</param> | |
23 | - void onAppOpenAttribution(string attributionData); | |
24 | - | |
25 | - /// <summary> | |
26 | - /// Any errors that occurred during the attribution request. | |
27 | - /// </summary> | |
28 | - /// <param name="error">A string describing the error.</param> | |
29 | - void onAppOpenAttributionFailure(string error); | |
30 | - } | |
31 | -} |
Runtime/IAppsFlyerConversionData.cs.meta
Runtime/IAppsFlyerUserInvite.cs
1 | -namespace AppsFlyerSDK | |
2 | -{ | |
3 | - public interface IAppsFlyerUserInvite | |
4 | - { | |
5 | - /// <summary> | |
6 | - /// The success callback for generating OneLink URLs. | |
7 | - /// </summary> | |
8 | - /// <param name="link">A string of the newly created url.</param> | |
9 | - void onInviteLinkGenerated(string link); | |
10 | - | |
11 | - /// <summary> | |
12 | - /// The error callback for generating OneLink URLs | |
13 | - /// </summary> | |
14 | - /// <param name="error">A string describing the error.</param> | |
15 | - void onInviteLinkGeneratedFailure(string error); | |
16 | - | |
17 | - /// <summary> | |
18 | - /// (ios only) iOS allows you to utilize the StoreKit component to open | |
19 | - /// the App Store while remaining in the context of your app. | |
20 | - /// More details at <see>https://support.appsflyer.com/hc/en-us/articles/115004481946-Cross-Promotion-Tracking#tracking-cross-promotion-impressions</see> | |
21 | - /// </summary> | |
22 | - /// <param name="link">openStore callback Contains promoted `clickURL`</param> | |
23 | - void onOpenStoreLinkGenerated(string link); | |
24 | - | |
25 | - } | |
26 | -} |
Runtime/IAppsFlyerUserInvite.cs.meta
Runtime/IAppsFlyerValidateReceipt.cs
1 | -namespace AppsFlyerSDK | |
2 | -{ | |
3 | - public interface IAppsFlyerValidateReceipt | |
4 | - { | |
5 | - /// <summary> | |
6 | - /// The success callback for validateAndSendInAppPurchase API. | |
7 | - /// For Android : the callback will return "Validate success". | |
8 | - /// For iOS : the callback will return a JSON string from apples verifyReceipt API. | |
9 | - /// </summary> | |
10 | - /// <param name="result"></param> | |
11 | - void didFinishValidateReceipt(string result); | |
12 | - | |
13 | - /// <summary> | |
14 | - /// The error callback for validateAndSendInAppPurchase API. | |
15 | - /// </summary> | |
16 | - /// <param name="error">A string describing the error.</param> | |
17 | - void didFinishValidateReceiptWithError(string error); | |
18 | - } | |
19 | -} |
Runtime/IAppsFlyerValidateReceipt.cs.meta
Runtime/Unity.AppsFlyer.asmdef
Runtime/Unity.AppsFlyer.asmdef.meta
package.json