Skip to content

Commit ec7db63

Browse files
authored
Merge pull request #87 from MetaMask/analytics
Analytics
2 parents a496a75 + 70e8bac commit ec7db63

File tree

6 files changed

+48
-4
lines changed

6 files changed

+48
-4
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ To add MetaMask iOS SDK as an SPM package to your project, in Xcode select: `Fil
2424
dependencies: [
2525
.package(
2626
url: "https://github.com/MetaMask/metamask-ios-sdk",
27-
from: "0.2.1"
27+
from: "0.2.2"
2828
)
2929
]
3030
```

Sources/metamask-ios-sdk/Classes/Analytics/Event.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
public enum Event: String {
66
case connectionRequest = "sdk_connect_request_started"
77
case connected = "sdk_connection_established"
8+
case connectionAuthorised = "sdk_connection_authorized"
9+
case connectionRejected = "sdk_connection_rejected"
810
case disconnected = "sdk_disconnected"
911

1012
var name: String {

Sources/metamask-ios-sdk/Classes/Communication/SocketClient.swift

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ protocol CommunicationClient: AnyObject {
1414
var clientName: String { get }
1515
var dapp: Dapp? { get set }
1616
var deeplinkUrl: String { get }
17+
var useDeeplinks: Bool { get set }
1718
var isConnected: Bool { get set }
1819
var serverUrl: String { get set }
1920
var hasValidSession: Bool { get }
@@ -27,6 +28,7 @@ protocol CommunicationClient: AnyObject {
2728
func connect()
2829
func disconnect()
2930
func clearSession()
31+
func trackEvent(_ event: Event)
3032
func enableTracking(_ enable: Bool)
3133
func addRequest(_ job: @escaping RequestJob)
3234
func sendMessage<T: CodableData>(_ message: T, encrypt: Bool)
@@ -76,9 +78,15 @@ class SocketClient: CommunicationClient {
7678
var receiveResponse: ((String, [String: Any]) -> Void)?
7779

7880
var requestJobs: [RequestJob] = []
81+
82+
var useDeeplinks: Bool = false
83+
84+
private var _deeplinkUrl: String {
85+
useDeeplinks ? "metamask:/" : "https://metamask.app.link"
86+
}
7987

8088
var deeplinkUrl: String {
81-
"https://metamask.app.link/connect?channelId="
89+
"\(_deeplinkUrl)/connect?channelId="
8290
+ channelId
8391
+ "&comm=socket"
8492
+ "&pubkey="
@@ -460,7 +468,10 @@ extension SocketClient {
460468
var parameters: [String: Any] = ["id": id]
461469

462470
switch event {
463-
case .connected, .disconnected:
471+
case .connected,
472+
.disconnected,
473+
.connectionAuthorised,
474+
.connectionRejected:
464475
break
465476
case .connectionRequest:
466477
let additionalParams: [String: Any] = [

Sources/metamask-ios-sdk/Classes/Ethereum/Ethereum.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ public class Ethereum: ObservableObject {
2929
delegate?.enableDebug = newValue
3030
}
3131
}
32+
33+
public var useDeeplinks: Bool {
34+
get {
35+
delegate?.useDeeplinks ?? false
36+
} set {
37+
delegate?.useDeeplinks = newValue
38+
}
39+
}
3240

3341
/// Set and use a custom network url. Currently fully supported
3442
public var networkUrl: String {
@@ -79,6 +87,7 @@ public extension Ethereum {
7987
}
8088

8189
func terminateConnection() {
90+
delegate?.trackEvent(.connectionRejected)
8291
let error = RequestError(from: ["message": "The connection request has been rejected"])
8392
submittedRequests.forEach { key, value in
8493
submittedRequests[key]?.error(error)
@@ -210,6 +219,13 @@ extension Ethereum {
210219

211220
if let error = data["error"] as? [String: Any] {
212221
let requestError = RequestError(from: error)
222+
let method = EthereumMethod(rawValue: request.method)
223+
if
224+
method == .ethRequestAccounts,
225+
requestError.codeType == .userRejectedRequest
226+
{
227+
delegate?.trackEvent(.connectionRejected)
228+
}
213229
sendError(requestError, id: id)
214230
return
215231
}
@@ -242,6 +258,7 @@ extension Ethereum {
242258
case .ethRequestAccounts:
243259
let result: [String] = data["result"] as? [String] ?? []
244260
if let account = result.first {
261+
delegate?.trackEvent(.connectionAuthorised)
245262
updateAccount(account)
246263
sendResult(account, id: id)
247264
} else {

Sources/metamask-ios-sdk/Classes/SDK/MetaMaskSDK.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ protocol SDKDelegate: AnyObject {
99
var dapp: Dapp? { get set }
1010
var deeplinkUrl: String { get }
1111
var enableDebug: Bool { get set }
12+
var useDeeplinks: Bool { get set }
1213
var networkUrl: String { get set }
1314
func connect()
1415
func disconnect()
1516
func clearSession()
17+
func trackEvent(_ event: Event)
1618
func addRequest(_ job: @escaping RequestJob)
1719
func sendMessage<T: CodableData>(_ message: T, encrypt: Bool)
1820
}
@@ -32,6 +34,12 @@ public class MetaMaskSDK: ObservableObject, SDKDelegate {
3234
client.enableTracking(enableDebug)
3335
}
3436
}
37+
38+
public var useDeeplinks: Bool = false {
39+
didSet {
40+
client.useDeeplinks = useDeeplinks
41+
}
42+
}
3543

3644
public var isConnected: Bool {
3745
client.isConnected
@@ -136,3 +144,9 @@ extension MetaMaskSDK {
136144
client.sendMessage(message, encrypt: encrypt)
137145
}
138146
}
147+
148+
extension MetaMaskSDK {
149+
func trackEvent(_ event: Event) {
150+
client.trackEvent(event)
151+
}
152+
}

metamask-ios-sdk.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'metamask-ios-sdk'
3-
s.version = '0.2.1'
3+
s.version = '0.2.2'
44
s.summary = 'Enable users to easily connect with their MetaMask Mobile wallet.'
55
s.swift_version = '5.0'
66

0 commit comments

Comments
 (0)