Skip to content

Commit 924d91b

Browse files
authored
chore: update analytics tracking (#191)
1 parent 2981241 commit 924d91b

File tree

8 files changed

+41
-15
lines changed

8 files changed

+41
-15
lines changed

Example/Tests/MockCommClient.swift

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import metamask_ios_sdk
77
import XCTest
88

99
class MockCommClient: CommClient {
10+
var channelId: String = "randomId"
11+
1012
var connectCalled = false
1113
var sendMessageCalled = false
1214
var disConnectCalled = false

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Alternatively, you can add the URL directly in your project's package file:
5454
dependencies: [
5555
.package(
5656
url: "https://github.com/MetaMask/metamask-ios-sdk",
57-
from: "0.8.9"
57+
from: "0.8.10"
5858
)
5959
]
6060
```

Sources/metamask-ios-sdk/Classes/API/Endpoint.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public enum Endpoint {
1212
public var url: String {
1313
switch self {
1414
case .analytics:
15-
return Endpoint.SERVER_URL.appending("debug")
15+
return Endpoint.SERVER_URL.appending("evt")
1616
}
1717
}
1818
}

Sources/metamask-ios-sdk/Classes/CommunicationLayer/CommClient.swift

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Foundation
88
public typealias RequestJob = () -> Void
99

1010
public protocol CommClient {
11+
var channelId: String { get set }
1112
var appMetadata: AppMetadata? { get set }
1213
var sessionDuration: TimeInterval { get set }
1314
var onClientsTerminated: (() -> Void)? { get set }

Sources/metamask-ios-sdk/Classes/CommunicationLayer/DeeplinkCommLayer/DeeplinkClient.swift

+11-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import Foundation
99
public class DeeplinkClient: CommClient {
1010

1111
private let session: SessionManager
12-
var channelId: String = ""
12+
public var channelId: String = ""
1313
let dappScheme: String
1414
let urlOpener: URLOpener
1515

@@ -20,6 +20,7 @@ public class DeeplinkClient: CommClient {
2020

2121
let keyExchange: KeyExchange
2222
let deeplinkManager: DeeplinkManager
23+
private var isConnecting = false
2324

2425
public var sessionDuration: TimeInterval {
2526
get {
@@ -93,13 +94,13 @@ public class DeeplinkClient: CommClient {
9394
let account = options["account"] ?? ""
9495
let chainId = options["chainId"] ?? ""
9596
let message = "mmsdk?scheme=\(dappScheme)&message=\(message)&channelId=\(channelId ?? "")&account=\(account)@\(chainId)"
96-
Logging.log("DeeplinkClient:: Sending message \(message)")
9797
sendMessage(message)
9898
}
9999
}
100100

101101
public func connect(with request: String? = nil) {
102102
track(event: .connectionRequest)
103+
isConnecting = true
103104

104105
sendMessage(.connect(
105106
pubkey: nil,
@@ -111,7 +112,7 @@ public class DeeplinkClient: CommClient {
111112
public func track(event: Event) {
112113
let parameters: [String: Any] = [
113114
"id": channelId,
114-
"commLayer": "socket",
115+
"commLayer": "deeplinking",
115116
"sdkVersion": SDKInfo.version,
116117
"url": appMetadata?.url ?? "",
117118
"dappId": SDKInfo.bundleIdentifier ?? "N/A",
@@ -183,6 +184,13 @@ public class DeeplinkClient: CommClient {
183184
Logging.log("DeeplinkClient:: Ignoring response \(json)")
184185
return
185186
}
187+
if
188+
isConnecting,
189+
data["accounts"] != nil,
190+
data["chainId"] != nil {
191+
isConnecting = false
192+
track(event: .connected)
193+
}
186194
handleResponse?(data)
187195
} catch {
188196
Logging.error("DeeplinkClient:: Could not convert message to json. Message: \(message)\nError: \(error)")

Sources/metamask-ios-sdk/Classes/CommunicationLayer/SocketCommLayer/SocketClient.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class SocketClient: CommClient {
1414
private let channel: SocketChannel
1515
let urlOpener: URLOpener
1616

17-
var channelId: String = ""
17+
public var channelId: String = ""
1818

1919
public var isConnected: Bool {
2020
channel.isConnected
@@ -234,6 +234,7 @@ extension SocketClient {
234234
if isV2Protocol {
235235
isReady = true
236236
Logging.log("SocketClient:: Channel supports protocol v2 communation")
237+
track(event: .connected)
237238
}
238239
}
239240
}

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

+22-8
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,22 @@ public class Ethereum {
122122
return self
123123
}
124124

125-
private func trackEvent(event: Event, parameters: [String: Any]) {
126-
track?(event, parameters)
125+
private func trackEvent(_ event: Event, parameters: [String: Any] = [:]) {
126+
var params: [String: Any] = [
127+
"id": commClient.channelId,
128+
"commLayer": commClient is SocketClient ? "socket" : "deeplinking",
129+
"sdkVersion": SDKInfo.version,
130+
"url": appMetadata?.url ?? "",
131+
"dappId": SDKInfo.bundleIdentifier ?? "N/A",
132+
"title": appMetadata?.name ?? "",
133+
"platform": SDKInfo.platform
134+
]
135+
136+
for (key, value) in parameters {
137+
params[key] = value
138+
}
139+
140+
track?(event, params)
127141
}
128142

129143
func updateMetadata(_ metadata: AppMetadata) {
@@ -465,7 +479,7 @@ public class Ethereum {
465479

466480
func terminateConnection() {
467481
if connected {
468-
track?(.connectionTerminated, [:])
482+
trackEvent(.connectionTerminated)
469483
}
470484

471485
let error = RequestError(from: ["message": "The connection request has been rejected"])
@@ -504,7 +518,7 @@ public class Ethereum {
504518
}
505519
}
506520
} else {
507-
track?(.sdkRpcRequest, [
521+
trackEvent(.sdkRpcRequest, parameters: [
508522
"from": "mobile",
509523
"method": request.method
510524
])
@@ -723,7 +737,7 @@ public class Ethereum {
723737
func receiveResponse(_ data: [String: Any], id: String) {
724738
guard let request = getRequest(id: id) else { return }
725739

726-
track?(.sdkRpcRequestDone, [
740+
trackEvent(.sdkRpcRequestDone, parameters: [
727741
"from": "mobile",
728742
"method": request.method
729743
])
@@ -734,7 +748,7 @@ public class Ethereum {
734748
if
735749
method == .ethRequestAccounts,
736750
requestError.codeType == .userRejectedRequest {
737-
track?(.connectionRejected, [:])
751+
trackEvent(.connectionRejected)
738752
}
739753
sendError(requestError, id: id)
740754

@@ -783,7 +797,7 @@ public class Ethereum {
783797
case .ethRequestAccounts:
784798
let result: [String] = data["result"] as? [String] ?? []
785799
if let account = result.first {
786-
track?(.connectionAuthorised, [:])
800+
trackEvent(.connectionAuthorised)
787801
updateAccount(account)
788802
sendResult(result, id: id)
789803
} else {
@@ -850,7 +864,7 @@ public class Ethereum {
850864
let requestError = RequestError(from: error)
851865

852866
if requestError.codeType == .userRejectedRequest {
853-
track?(.connectionRejected, [:])
867+
trackEvent(.connectionRejected)
854868
}
855869
sendError(requestError, id: Ethereum.CONNECTION_ID)
856870
}

metamask-ios-sdk.podspec

+1-1
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.8.9'
3+
s.version = '0.8.10'
44
s.summary = 'Enable users to easily connect with their MetaMask Mobile wallet.'
55
s.swift_version = '5.5'
66

0 commit comments

Comments
 (0)