-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathApphudSdkEvents.swift
141 lines (120 loc) · 3.6 KB
/
ApphudSdkEvents.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import Foundation
import React
import ApphudSDK
import StoreKit
enum ApphudSdkDelegateEvents: String, CaseIterable {
case paywallsDidFullyLoad
case apphudDidLoadStoreProducts
case apphudDidChangeUserID
case apphudSubscriptionsUpdated
case apphudNonRenewingPurchasesUpdated
case apphudProductIdentifiers
case apphudScreenDidAppear
case apphudDidPurchase
case apphudWillPurchase
case apphudDidFailPurchase
case apphudDidSelectSurveyAnswer
}
@objc(ApphudSdkEvents)
class ApphudSdkEvents: RCTEventEmitter {
var productIdentifiers:[String] = [];
override init() {
super.init();
Apphud.setDelegate(self);
Apphud.setUIDelegate(self);
}
@objc(setApphudProductIdentifiers:withResolve:withReject:)
public func setApphudProductIdentifiers(ids: NSArray, resolve: RCTPromiseResolveBlock, reject: RCTPromiseRejectBlock) -> Void {
self.productIdentifiers = ids as? [String] ?? []
resolve(self.productIdentifiers);
}
override func supportedEvents() -> [String]! {
ApphudSdkDelegateEvents.allCases.map { $0.rawValue }
}
}
extension ApphudSdkEvents: ApphudDelegate {
func sendEvent(_ event: ApphudSdkDelegateEvents, body: Any!) {
self.sendEvent(withName: event.rawValue, body: body)
}
func apphudDidFetchStoreKitProducts(_ products: [SKProduct]) {
let result:[NSDictionary] = products.map{ (product) -> NSDictionary in
return product.toMap();
}
self.sendEvent(.apphudDidLoadStoreProducts, body: result);
}
func apphudDidChangeUserID(_ userID: String) {
self.sendEvent(.apphudDidChangeUserID, body: userID);
}
func apphudSubscriptionsUpdated(_ subscriptions: [ApphudSubscription]) {
let result:[NSDictionary] = subscriptions.map{ (
subscription
) -> NSDictionary in
return subscription.toMap();
}
self.sendEvent(.apphudSubscriptionsUpdated, body: result);
}
func apphudNonRenewingPurchasesUpdated(
_ purchases: [ApphudNonRenewingPurchase]
) {
let result = purchases.map{ $0.toMap() }
self.sendEvent(.apphudNonRenewingPurchasesUpdated, body: result);
}
func apphudProductIdentifiers() -> [String] {
return self.productIdentifiers;
}
func paywallsDidFullyLoad(paywalls: [ApphudPaywall]) {
let result = paywalls.map { $0.toMap() }
self.sendEvent(.paywallsDidFullyLoad, body: result);
}
}
extension ApphudSdkEvents: ApphudUIDelegate {
func apphudDidPurchase(
product: SKProduct,
offerID: String?,
screenName: String
) {
self.sendEvent(.apphudDidPurchase, body: [
"product": product.toMap(),
"offerId": offerID as Any,
"screenName": screenName
]);
}
func apphudWillPurchase(
product: SKProduct,
offerID: String?,
screenName: String
) {
self.sendEvent(.apphudWillPurchase, body: [
"product": product.toMap(),
"offerId": offerID as Any,
"screenName": screenName
]);
}
func apphudScreenDidAppear(screenName: String) {
self.sendEvent(.apphudScreenDidAppear, body: ["screenName": screenName])
}
func apphudDidFailPurchase(
product: SKProduct,
offerID: String?,
errorCode: SKError.Code,
screenName: String
) {
self.sendEvent(.apphudDidFailPurchase, body: [
"product": product.toMap(),
"offerId": offerID as Any,
"screenName": screenName,
"errorCode": errorCode.rawValue
]);
}
func apphudDidSelectSurveyAnswer(
question: String,
answer: String,
screenName: String
) {
self.sendEvent(.apphudDidSelectSurveyAnswer, body: [
"question": question,
"answer": answer,
"screenName": screenName
])
}
}