@capgo/capacitor-appsflyer 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CapgoCapacitorAppsflyer.podspec +27 -0
- package/LICENSE +21 -0
- package/Package.swift +30 -0
- package/README.md +1257 -0
- package/android/build.gradle +178 -0
- package/android/src/main/AndroidManifest.xml +7 -0
- package/android/src/main/java/capacitor/plugin/appsflyer/sdk/AFHelpers.kt +76 -0
- package/android/src/main/java/capacitor/plugin/appsflyer/sdk/AppsFlyerConstants.kt +76 -0
- package/android/src/main/java/capacitor/plugin/appsflyer/sdk/AppsFlyerPlugin.kt +812 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/dist/docs.json +2145 -0
- package/dist/esm/Appsflyer_constants.d.ts +29 -0
- package/dist/esm/Appsflyer_constants.js +33 -0
- package/dist/esm/Appsflyer_constants.js.map +1 -0
- package/dist/esm/appsflyer_interfaces.d.ts +200 -0
- package/dist/esm/appsflyer_interfaces.js +18 -0
- package/dist/esm/appsflyer_interfaces.js.map +1 -0
- package/dist/esm/definitions.d.ts +219 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/plugin.cjs.js +60 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +63 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Sources/AppsFlyerPlugin/AppsFlyerAttribution.swift +60 -0
- package/ios/Sources/AppsFlyerPlugin/AppsFlyerConstants.swift +86 -0
- package/ios/Sources/AppsFlyerPlugin/AppsFlyerPlugin.swift +1007 -0
- package/ios/Sources/AppsFlyerPlugin/Extensions.swift +78 -0
- package/ios/Tests/AppsFlyerPluginTests/AppsFlyerPluginTests.swift +8 -0
- package/package.json +93 -0
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
var capacitorPrivacyScreen = (function (exports, core) {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
exports.AFConstants = void 0;
|
|
5
|
+
(function (AFConstants) {
|
|
6
|
+
AFConstants["onConversionDataSuccess"] = "onConversionDataSuccess";
|
|
7
|
+
AFConstants["onConversionDataFail"] = "onConversionDataFail";
|
|
8
|
+
AFConstants["onAppOpenAttribution"] = "onAppOpenAttribution";
|
|
9
|
+
AFConstants["onAttributionFailure"] = "onAttributionFailure";
|
|
10
|
+
AFConstants["CONVERSION_CALLBACK"] = "conversion_callback";
|
|
11
|
+
AFConstants["OAOA_CALLBACK"] = "oaoa_callback";
|
|
12
|
+
AFConstants["UDL_CALLBACK"] = "udl_callback";
|
|
13
|
+
})(exports.AFConstants || (exports.AFConstants = {}));
|
|
14
|
+
exports.AFPurchaseType = void 0;
|
|
15
|
+
(function (AFPurchaseType) {
|
|
16
|
+
AFPurchaseType["oneTimePurchase"] = "one_time_purchase";
|
|
17
|
+
AFPurchaseType["subscription"] = "subscription";
|
|
18
|
+
})(exports.AFPurchaseType || (exports.AFPurchaseType = {}));
|
|
19
|
+
exports.MediationNetwork = void 0;
|
|
20
|
+
(function (MediationNetwork) {
|
|
21
|
+
MediationNetwork["IRONSOURCE"] = "ironsource";
|
|
22
|
+
MediationNetwork["APPLOVIN_MAX"] = "applovin_max";
|
|
23
|
+
MediationNetwork["GOOGLE_ADMOB"] = "google_admob";
|
|
24
|
+
MediationNetwork["FYBER"] = "fyber";
|
|
25
|
+
MediationNetwork["APPODEAL"] = "appodeal";
|
|
26
|
+
MediationNetwork["ADMOST"] = "admost";
|
|
27
|
+
MediationNetwork["TOPON"] = "topon";
|
|
28
|
+
MediationNetwork["TRADPLUS"] = "tradplus";
|
|
29
|
+
MediationNetwork["YANDEX"] = "yandex";
|
|
30
|
+
MediationNetwork["CHARTBOOST"] = "chartboost";
|
|
31
|
+
MediationNetwork["UNITY"] = "unity";
|
|
32
|
+
MediationNetwork["TOPON_PTE"] = "topon_pte";
|
|
33
|
+
MediationNetwork["CUSTOM_MEDIATION"] = "custom_mediation";
|
|
34
|
+
MediationNetwork["DIRECT_MONETIZATION_NETWORK"] = "direct_monetization_network";
|
|
35
|
+
})(exports.MediationNetwork || (exports.MediationNetwork = {}));
|
|
36
|
+
|
|
37
|
+
class AppsFlyerConsentClass {
|
|
38
|
+
constructor(isUserSubjectToGDPR, hasConsentForDataUsage, hasConsentForAdsPersonalization) {
|
|
39
|
+
this.isUserSubjectToGDPR = isUserSubjectToGDPR;
|
|
40
|
+
this.hasConsentForDataUsage = hasConsentForDataUsage;
|
|
41
|
+
this.hasConsentForAdsPersonalization = hasConsentForAdsPersonalization;
|
|
42
|
+
}
|
|
43
|
+
static forGDPRUser(hasConsentForDataUsage, hasConsentForAdsPersonalization) {
|
|
44
|
+
return new AppsFlyerConsentClass(true, hasConsentForDataUsage, hasConsentForAdsPersonalization);
|
|
45
|
+
}
|
|
46
|
+
static forNonGDPRUser() {
|
|
47
|
+
return new AppsFlyerConsentClass(false);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const AppsFlyerConsent = {
|
|
51
|
+
forGDPRUser: AppsFlyerConsentClass.forGDPRUser,
|
|
52
|
+
forNonGDPRUser: AppsFlyerConsentClass.forNonGDPRUser,
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const AppsFlyer = core.registerPlugin('AppsFlyerPlugin', {});
|
|
56
|
+
|
|
57
|
+
exports.AppsFlyer = AppsFlyer;
|
|
58
|
+
exports.AppsFlyerConsent = AppsFlyerConsent;
|
|
59
|
+
|
|
60
|
+
return exports;
|
|
61
|
+
|
|
62
|
+
})({}, capacitorExports);
|
|
63
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/Appsflyer_constants.js","esm/appsflyer_interfaces.js","esm/index.js"],"sourcesContent":["export var AFConstants;\n(function (AFConstants) {\n AFConstants[\"onConversionDataSuccess\"] = \"onConversionDataSuccess\";\n AFConstants[\"onConversionDataFail\"] = \"onConversionDataFail\";\n AFConstants[\"onAppOpenAttribution\"] = \"onAppOpenAttribution\";\n AFConstants[\"onAttributionFailure\"] = \"onAttributionFailure\";\n AFConstants[\"CONVERSION_CALLBACK\"] = \"conversion_callback\";\n AFConstants[\"OAOA_CALLBACK\"] = \"oaoa_callback\";\n AFConstants[\"UDL_CALLBACK\"] = \"udl_callback\";\n})(AFConstants || (AFConstants = {}));\nexport var AFPurchaseType;\n(function (AFPurchaseType) {\n AFPurchaseType[\"oneTimePurchase\"] = \"one_time_purchase\";\n AFPurchaseType[\"subscription\"] = \"subscription\";\n})(AFPurchaseType || (AFPurchaseType = {}));\nexport var MediationNetwork;\n(function (MediationNetwork) {\n MediationNetwork[\"IRONSOURCE\"] = \"ironsource\";\n MediationNetwork[\"APPLOVIN_MAX\"] = \"applovin_max\";\n MediationNetwork[\"GOOGLE_ADMOB\"] = \"google_admob\";\n MediationNetwork[\"FYBER\"] = \"fyber\";\n MediationNetwork[\"APPODEAL\"] = \"appodeal\";\n MediationNetwork[\"ADMOST\"] = \"admost\";\n MediationNetwork[\"TOPON\"] = \"topon\";\n MediationNetwork[\"TRADPLUS\"] = \"tradplus\";\n MediationNetwork[\"YANDEX\"] = \"yandex\";\n MediationNetwork[\"CHARTBOOST\"] = \"chartboost\";\n MediationNetwork[\"UNITY\"] = \"unity\";\n MediationNetwork[\"TOPON_PTE\"] = \"topon_pte\";\n MediationNetwork[\"CUSTOM_MEDIATION\"] = \"custom_mediation\";\n MediationNetwork[\"DIRECT_MONETIZATION_NETWORK\"] = \"direct_monetization_network\";\n})(MediationNetwork || (MediationNetwork = {}));\n//# sourceMappingURL=Appsflyer_constants.js.map","class AppsFlyerConsentClass {\n constructor(isUserSubjectToGDPR, hasConsentForDataUsage, hasConsentForAdsPersonalization) {\n this.isUserSubjectToGDPR = isUserSubjectToGDPR;\n this.hasConsentForDataUsage = hasConsentForDataUsage;\n this.hasConsentForAdsPersonalization = hasConsentForAdsPersonalization;\n }\n static forGDPRUser(hasConsentForDataUsage, hasConsentForAdsPersonalization) {\n return new AppsFlyerConsentClass(true, hasConsentForDataUsage, hasConsentForAdsPersonalization);\n }\n static forNonGDPRUser() {\n return new AppsFlyerConsentClass(false);\n }\n}\nexport const AppsFlyerConsent = {\n forGDPRUser: AppsFlyerConsentClass.forGDPRUser,\n forNonGDPRUser: AppsFlyerConsentClass.forNonGDPRUser,\n};\n//# sourceMappingURL=appsflyer_interfaces.js.map","import { registerPlugin } from '@capacitor/core';\nconst AppsFlyer = registerPlugin('AppsFlyerPlugin', {});\nexport * from './definitions';\nexport * from './Appsflyer_constants';\nexport * from './appsflyer_interfaces';\nexport { AppsFlyer };\n//# sourceMappingURL=index.js.map"],"names":["AFConstants","AFPurchaseType","MediationNetwork","registerPlugin"],"mappings":";;;AAAWA;IACX,CAAC,UAAU,WAAW,EAAE;IACxB,IAAI,WAAW,CAAC,yBAAyB,CAAC,GAAG,yBAAyB;IACtE,IAAI,WAAW,CAAC,sBAAsB,CAAC,GAAG,sBAAsB;IAChE,IAAI,WAAW,CAAC,sBAAsB,CAAC,GAAG,sBAAsB;IAChE,IAAI,WAAW,CAAC,sBAAsB,CAAC,GAAG,sBAAsB;IAChE,IAAI,WAAW,CAAC,qBAAqB,CAAC,GAAG,qBAAqB;IAC9D,IAAI,WAAW,CAAC,eAAe,CAAC,GAAG,eAAe;IAClD,IAAI,WAAW,CAAC,cAAc,CAAC,GAAG,cAAc;IAChD,CAAC,EAAEA,mBAAW,KAAKA,mBAAW,GAAG,EAAE,CAAC,CAAC;AAC1BC;IACX,CAAC,UAAU,cAAc,EAAE;IAC3B,IAAI,cAAc,CAAC,iBAAiB,CAAC,GAAG,mBAAmB;IAC3D,IAAI,cAAc,CAAC,cAAc,CAAC,GAAG,cAAc;IACnD,CAAC,EAAEA,sBAAc,KAAKA,sBAAc,GAAG,EAAE,CAAC,CAAC;AAChCC;IACX,CAAC,UAAU,gBAAgB,EAAE;IAC7B,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,YAAY;IACjD,IAAI,gBAAgB,CAAC,cAAc,CAAC,GAAG,cAAc;IACrD,IAAI,gBAAgB,CAAC,cAAc,CAAC,GAAG,cAAc;IACrD,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;IACvC,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,UAAU;IAC7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzC,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;IACvC,IAAI,gBAAgB,CAAC,UAAU,CAAC,GAAG,UAAU;IAC7C,IAAI,gBAAgB,CAAC,QAAQ,CAAC,GAAG,QAAQ;IACzC,IAAI,gBAAgB,CAAC,YAAY,CAAC,GAAG,YAAY;IACjD,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,OAAO;IACvC,IAAI,gBAAgB,CAAC,WAAW,CAAC,GAAG,WAAW;IAC/C,IAAI,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,kBAAkB;IAC7D,IAAI,gBAAgB,CAAC,6BAA6B,CAAC,GAAG,6BAA6B;IACnF,CAAC,EAAEA,wBAAgB,KAAKA,wBAAgB,GAAG,EAAE,CAAC,CAAC;;IC/B/C,MAAM,qBAAqB,CAAC;IAC5B,IAAI,WAAW,CAAC,mBAAmB,EAAE,sBAAsB,EAAE,+BAA+B,EAAE;IAC9F,QAAQ,IAAI,CAAC,mBAAmB,GAAG,mBAAmB;IACtD,QAAQ,IAAI,CAAC,sBAAsB,GAAG,sBAAsB;IAC5D,QAAQ,IAAI,CAAC,+BAA+B,GAAG,+BAA+B;IAC9E,IAAI;IACJ,IAAI,OAAO,WAAW,CAAC,sBAAsB,EAAE,+BAA+B,EAAE;IAChF,QAAQ,OAAO,IAAI,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,EAAE,+BAA+B,CAAC;IACvG,IAAI;IACJ,IAAI,OAAO,cAAc,GAAG;IAC5B,QAAQ,OAAO,IAAI,qBAAqB,CAAC,KAAK,CAAC;IAC/C,IAAI;IACJ;AACY,UAAC,gBAAgB,GAAG;IAChC,IAAI,WAAW,EAAE,qBAAqB,CAAC,WAAW;IAClD,IAAI,cAAc,EAAE,qBAAqB,CAAC,cAAc;IACxD;;ACfK,UAAC,SAAS,GAAGC,mBAAc,CAAC,iBAAiB,EAAE,EAAE;;;;;;;;;;;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// swiftlint:disable all
|
|
2
|
+
//
|
|
3
|
+
// AppsFlyerAttribution.swift
|
|
4
|
+
// Plugin
|
|
5
|
+
//
|
|
6
|
+
// Created by Paz Lavi on 11/07/2021.
|
|
7
|
+
// Copyright © 2021 Max Lynch. All rights reserved.
|
|
8
|
+
//
|
|
9
|
+
|
|
10
|
+
import Foundation
|
|
11
|
+
import UIKit
|
|
12
|
+
import AppsFlyerLib
|
|
13
|
+
class AppsFlyerAttribution: NSObject {
|
|
14
|
+
|
|
15
|
+
static let shared = AppsFlyerAttribution()
|
|
16
|
+
var bridgReady :Bool = false
|
|
17
|
+
private var userActivity :NSUserActivity? = nil
|
|
18
|
+
private var url: URL? = nil
|
|
19
|
+
private var options: [UIApplication.OpenURLOptionsKey: Any]? = nil
|
|
20
|
+
|
|
21
|
+
private override init() {
|
|
22
|
+
super.init()
|
|
23
|
+
NotificationCenter.default.addObserver(self, selector: #selector(self.receiveBridgeReadyNotification),
|
|
24
|
+
name: Notification.Name.appsflyerBridge, object: nil)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
public func continueUserActivity(userActivity:NSUserActivity) {
|
|
30
|
+
if(bridgReady){
|
|
31
|
+
AppsFlyerLib.shared().continue(userActivity, restorationHandler: nil)
|
|
32
|
+
}else{
|
|
33
|
+
self.userActivity = userActivity
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public func handleOpenUrl(open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) {
|
|
39
|
+
if(bridgReady){
|
|
40
|
+
AppsFlyerLib.shared().handleOpen(url, options:options)
|
|
41
|
+
}else{
|
|
42
|
+
self.url = url
|
|
43
|
+
self.options = options
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@objc func receiveBridgeReadyNotification(){
|
|
48
|
+
NSLog ("AppsFlyer [Debug][Capacitor]: handle deep link");
|
|
49
|
+
if(userActivity != nil){
|
|
50
|
+
AppsFlyerLib.shared().continue(userActivity, restorationHandler: nil)
|
|
51
|
+
userActivity = nil
|
|
52
|
+
|
|
53
|
+
}else if(url != nil){
|
|
54
|
+
AppsFlyerLib.shared().handleOpen(url, options:options)
|
|
55
|
+
url = nil
|
|
56
|
+
options = nil
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// swiftlint:disable all
|
|
2
|
+
//
|
|
3
|
+
// AppsFlyerConstants.swift
|
|
4
|
+
// Plugin
|
|
5
|
+
//
|
|
6
|
+
// Created by Paz Lavi on 08/07/2021.
|
|
7
|
+
//
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
class AppsFlyerConstants {
|
|
12
|
+
static let AF_APP_ID = "appID"
|
|
13
|
+
static let AF_DEV_KEY = "devKey"
|
|
14
|
+
static let AF_DEBUG = "isDebug"
|
|
15
|
+
static let AF_CONVERSION_LISTENER = "registerConversionListener"
|
|
16
|
+
static let AF_OAOA = "registerConversionListener"
|
|
17
|
+
static let AF_UDL = "registerOnDeepLink"
|
|
18
|
+
static let AF_ATT = "waitForATTUserAuthorization"
|
|
19
|
+
static let AF_EVENT_NAME = "eventName"
|
|
20
|
+
static let AF_EVENT_VALUE = "eventValue"
|
|
21
|
+
static let CONVERSION_CALLBACK = "conversion_callback"
|
|
22
|
+
static let OAOA_CALLBACK = "oaoa_callback"
|
|
23
|
+
static let UDL_CALLBACK = "udl_callback"
|
|
24
|
+
static let AF_BRIDGE_SET = "bridge is set"
|
|
25
|
+
static let AF_CUID = "cuid"
|
|
26
|
+
static let AF_CURRENCY_CODE = "currencyCode"
|
|
27
|
+
static let AF_TOKEN = "token"
|
|
28
|
+
static let AF_RECEIPT_SANDBOX = "useReceiptValidationSandbox"
|
|
29
|
+
static let AF_SANDBOX = "useUninstallSandbox"
|
|
30
|
+
static let AF_ONELINK_ID = "onelinkID"
|
|
31
|
+
static let AF_ONELINK_DOMAIN = "domains"
|
|
32
|
+
static let AF_DEEPLINK_URLS = "urls"
|
|
33
|
+
static let AF_PATH = "path"
|
|
34
|
+
static let AF_UID = "uid"
|
|
35
|
+
static let AF_ANONYMIZE_USER = "anonymizeUser"
|
|
36
|
+
static let AF_STOP = "stop"
|
|
37
|
+
static let AF_IS_STOP = "isStopped"
|
|
38
|
+
static let AF_FILTERS = "filters"
|
|
39
|
+
static let AF_ADDITIONAL_DATA = "additionalData"
|
|
40
|
+
static let AF_DISABLE_SKAD = "shouldDisable"
|
|
41
|
+
static let AF_HOST_PREFIX = "hostPrefixName"
|
|
42
|
+
static let AF_HOST_POSTFIX = "hostName"
|
|
43
|
+
static let AF_BRAND_DOMAIN = "brandDomain"
|
|
44
|
+
static let AF_CAMPAIGN = "campaign"
|
|
45
|
+
static let AF_CHANNEL = "channel"
|
|
46
|
+
static let AF_REFERRER_NAME = "referrerName"
|
|
47
|
+
static let AF_REFERRER_IMAGE_URL = "referrerImageURL"
|
|
48
|
+
static let AF_ADD_PARAMETERS = "addParameters"
|
|
49
|
+
static let AF_REFERRER_CUSTOMER_ID = "referrerCustomerId"
|
|
50
|
+
static let AF_BASE_DEEPLINK = "baseDeeplink"
|
|
51
|
+
static let AF_LINK_READY = "link"
|
|
52
|
+
static let AF_CURRENCY = "currency"
|
|
53
|
+
static let AF_PRICE = "price"
|
|
54
|
+
static let AF_ADDITIONAL_PARAMETERS = "additionalParameters"
|
|
55
|
+
static let AF_IN_APP_PURCHASE = "inAppPurchase"
|
|
56
|
+
static let AF_TRANSACTION_ID = "transactionId"
|
|
57
|
+
static let AF_FB = "enableFacebookDAL"
|
|
58
|
+
static let AF_PUSH_PAYLOAD = "pushPayload"
|
|
59
|
+
static let AF_MIN_TIME = "minTimeBetweenSessions"
|
|
60
|
+
static let AF_PARAMETERS = "parameters"
|
|
61
|
+
static let AF_CONTAINS = "contains"
|
|
62
|
+
static let AF_LANGUAGE = "language"
|
|
63
|
+
static let AF_EMAILS = "emails"
|
|
64
|
+
static let AF_ENCODE = "encode"
|
|
65
|
+
static let AF_LATITUDE = "latitude"
|
|
66
|
+
static let AF_LONGITUDE = "longitude"
|
|
67
|
+
static let AF_PHONE = "phone"
|
|
68
|
+
static let AF_DEEP_LINK_TIME_OUT = "deepLinkTimeout"
|
|
69
|
+
static let AF_EVENT_PARAMETERS = "eventParameters"
|
|
70
|
+
static let AF_PARTNER_ID = "partnerId"
|
|
71
|
+
static let AF_DATA = "data"
|
|
72
|
+
static let AF_ENABLE_TCF_DATA_COLLECTION = "shouldEnableTCFDataCollection"
|
|
73
|
+
static let AF_MANUAL_START = "manualStart"
|
|
74
|
+
static let AF_IS_SUBJECTED_TO_DGPR = "isUserSubjectToGDPR"
|
|
75
|
+
static let AF_CONSENT_FOR_DATA_USAGE = "hasConsentForDataUsage"
|
|
76
|
+
static let AF_CONSENT_FOR_ADS_PERSONALIZATION = "hasConsentForAdsPersonalization"
|
|
77
|
+
static let AF_CONSENT_FOR_ADS_STORAGE = "hasConsentForAdStorage"
|
|
78
|
+
static let AF_MONETIZATION_NETWORK = "monetizationNetwork"
|
|
79
|
+
static let AF_CURRENCY_ISO4217_CODE = "currencyIso4217Code"
|
|
80
|
+
static let AF_REVENUE = "revenue"
|
|
81
|
+
static let AF_MEDIATION_NETWORK = "mediationNetwork"
|
|
82
|
+
static let AF_PURCHASE_DETAILS = "purchaseDetails"
|
|
83
|
+
static let AF_PURCHASE_TYPE = "purchaseType"
|
|
84
|
+
static let AF_PURCHASE_TOKEN = "purchaseToken"
|
|
85
|
+
static let AF_PRODUCT_ID = "productId"
|
|
86
|
+
}
|