CrossClassify iOS SDK
CrossClassify for iOS应用的SDK,包含两个集成示例
- FirebaseSwiftUI:一个简单的使用Firebase身份验证和CrossClassify SDK进行登录/注册的SwiftUI应用,通过< strong>Swift包管理器集成的
- FirebaseUIKit:一个简单的使用Firebase身份验证和CrossClassify SDK进行登录/注册的< strong>UIKit应用,使用< strong>CocoaPods集成的
见本地设置示例应用部分以运行完整示例应用,或者转到SDK集成指南部分,以轻松将CrossClassify SDK与您的iOS应用集成。
先决条件
- iOS 13.0(或更高版本)
- Xcode 13.3.1(或更高版本)
- Swift 5.6(或更高版本)
- SwiftPM或CocoaPods 1.10.0(或更高版本)
- SwiftUI或UIKit
- CrossClassify帐户
- Firebase帐户(仅适用于示例应用)
本地设置示例应用
- 克隆或下载项目
- 在项目文件夹上运行终端
pod install
或arch -x86_64 pod install
- 打开.xcworkspace文件
- 将以下路径中的
GoogleService-Info.plist
文件(来自您的Firebase项目)复制到:- ./Example/FirebaseSwiftUI/FirebaseSwiftUI
- ./Example/FirebaseUIKit/FirebaseUIKit
- 在以下位置中的CrossClassify实例中更改
siteId
和apiKey
(来自您的CrossClassify项目):- ./Example/FirebaseSwiftUI/FirebaseSwiftUI/CrossClassifyInstance.swift
- ./Example/FirebaseUIKit/FirebaseUIKit/CrossClassifyInstance.swift
- 编译并运行(FirebaseSwiftUI或FirebaseUIKit目标)。
SDK集成指南
为了帮助您开始使用CrossClassify SDK,以下是下一步要做的列表:
第一步:安装CrossClassify SDK
-
Swift包管理器
要使用
Package.swift
清单而不是Xcode进行集成,可以将CrossClassify添加到包的依赖项数组中dependencies: [ .package(url: "https://github.com/crossclassify/xc-sdk-ios", from: "1.0.1"), // Any other dependencies you have... ],
然后,在任何依赖于CrossClassify SDK的目标中,将其添加到该目标的
dependencies
数组中.target( name: "MyTargetName", dependencies: [ .product(name: "CrossClassify", package: "xc-sdk-ios"), // Any other dependencies you have... ] ),
或通过在Xcode菜单栏中选择
文件
→添加包…
来添加包。 -
CocoaPods
-
打开一个终端窗口,导航到您的项目的根目录。
-
如果您还没有
Podfile
,请通过运行以下命令创建它:pod init
-
在文本编辑器中打开
Podfile
,并添加以下行:pod 'CrossClassify'
-
保存
Podfile
,然后运行以下命令安装CrossClassify SDK:pod install
-
第二步:导入CrossClassify模块
在您要使用CrossClassify SDK的文件中,在顶部添加以下行:
import CrossClassify
第三步:初始化CrossClassify对象
将以下代码添加到您的应用中,用“SITE_ID_HERE”和“API_KEY_HERE”替换您的网站ID和API密钥
extension CrossClassify {
public static let shared: CrossClassify = CrossClassify(siteId: "SITE_ID_HERE", apiKey: "API_KEY_HERE")
}
这创建了一个名为 shared
的静态常量,它是一个初始化了您的网站 ID 和 API 密钥的 CrossClassify
类的实例。
步骤 4: 无表单跟踪页面
对于包含没有表单的每个页面(例如,主页),请执行以下操作。根据您的选择框架,分别查看 SwiftUI 和 UIKit 版本的步骤 4.1 和 4.2。在两个版本中,您必须指定 页面名称。
步骤 4.1: SwiftUI
页面
- 在
view
结构体的body
变量中添加以下函数,将"PAGE_NAME_HERE"
替换为您要跟踪的页面的实际名称.onAppear{CrossClassify.shared.track(pageName: "PAGE_NAME_HERE")} .onDisappear{CrossClassify.shared.stopTrack()}
步骤 4.2: UIKit
页面
- 在
viewDidEnter(_:)
方法中添加以下代码,将"PAGE_NAME_HERE"
替换为您要跟踪的页面的实际名称CrossClassify.shared.track(pageName: "PAGE_NAME_HERE")
- 在
viewDidDisappear(_:)
方法中添加以下代码CrossClassify.shared.stopTrack()
步骤 5: 跟踪包含表单的页面
对于每个包含表单的页面(例如,注册,登录),请执行以下操作。根据您的选择框架,分别查看 SwiftUI 和 UIKit 版本的步骤 5.1 和 5.2。在两个版本中,您必须指定以下信息
- 页面名称(例如
loginPage
、signupPage
和updateProfilePage
) - 表单名称(例如
login
、signUp
和updateProfile
) - 表单中的每个字段
- ID(例如
username
、password
和address
) - 内容跟踪状态(您是否希望发送字段内容)
注意
发送字段内容会增加CrossClassify欺诈检测算法的准确性。因此,强烈建议在所有非机密字段上使用内容跟踪。
- ID(例如
- 提交按钮
步骤 5.1: SwiftUI
页面
-
指定页面名称和表单名称
从
view
结构体的body
变量中调用以下函数.onAppear{CrossClassify.shared.track(pageName: "PAGE_NAME_HERE", formName: "FORM_NAME_HERE")} .onDisappear{CrossClassify.shared.stopTrack()}
将
"PAGE_NAME_HERE"
和"FORM_NAME_HERE"
替换为您要跟踪的页面和表单的实际名称。 -
指定跟踪表单字段
对于文本字段(例如,电子邮件),将
TextField
结构更改为TrackedTextField
。您还必须指定 id 和内容跟踪状态(trackContent
)TrackedTextField("AS_IS", // leave this parameter with no change text: $AS_IS), // leave this parameter with no change id: "FIELD_NAME_HERE", trackContent: false, cc: CrossClassify.shared)
如果文本字段不包含私人信息(例如,密码),则将第二个函数输入更改为
true
。CrossClassify SDK 中支持的 SwiftUI 字段是TextField
、SecureField
、DatePicker
、Picker
、Toggle
、Stepper
和Slider
。对于所有字段类型,只需在字段名称前添加Tracked
前缀即可(例如,TrackedStepper
) -
指定表单提交按钮
将以下代码添加到按钮的
action
参数中CrossClassify.shared.submit()
步骤 5.2: UIKit
页面
-
指定页面名称和表单名称
- 如果页面包含表单,则在
viewDidEnter(_:)
方法中添加以下代码将CrossClassify.shared.track(pageName: "PAGE_NAME_HERE", formName: "FORM_NAME_HERE", view: view)
"PAGE_NAME_HERE"
和"FORM_NAME_HERE"
替换为您要跟踪的页面和表单的实际名称。 - 在
viewDidDisappear(_:)
方法中添加以下代码CrossClassify.shared.stopTrack()
- 如果页面包含表单,则在
-
指定跟踪表单字段
-
对于文本字段(例如,电子邮件),将
UITextField
类更改为TrackedUITextField
并将其模块设置为CrossClassify
。 -
在属性检查器中,添加一个新的用户定义运行时属性,键路径为
id
,并将其值设置为文本字段的 ID(例如password
)。如果文本字段不包含私人信息(例如username
),请添加另一个布尔属性,键路径为includeContent
。
按照这些步骤,您已成功将 TrackedUITextField 添加到您的 ViewController 中,并设置了其 formName 和 id 属性。对于表单中的任何其他字段,重复此过程。CrossClassify SDK 中支持的 UIKit 字段是
UITextField
、UIDatePicker
、UISegmentedControl
、UIPickerView
、UISwitch
和UISlider
。对于所有字段类型,只需在字段名称前添加Tracked
前缀即可(例如,TrackedUIDatePicker
) -
-
指定表单提交按钮
将
UIButton
类更改为TrackedUIButton
,并将其模块更改为CrossClassify
。
欺诈检测服务的要求
账户开启服务
- 有效的
SiteId
和apiKey
(来自CrossClassify账户) - 在
track
函数中,formName
必须包含signup
子串(例如signupFrom
)。 - 在电子邮件字段中,
id
必须包含email
子串。 - 在电子邮件字段中,
trackContent
必须为True
。 - 在注册表单视图中,必须指定表单提交按钮。
账户接管服务
- 有效的
SiteId
和apiKey
(来自CrossClassify账户) - 在
track
函数中,formName
必须包含login
子串(例如loginFrom
)。 - 在电子邮件字段中,
id
必须包含email
子串。 - 在电子邮件字段中,
trackContent
必须为True
。 - 在登录表单视图中,必须指定表单提交按钮。
一个简化的SwiftUI示例
在这个示例中,我们展示了在一个简单的SwiftUI应用中,在应用整合步骤前后所做的更改。《CrossClassifyInstance.swift》是新文件,《LoginView.swift》是现有文件。
CrossClassifyInstance.swift
+ import CrossClassify
+
+ extension CrossClassify {
+ public static let shared = CrossClassify(siteId: "1", apiKey: "GOTOappDOTcrossclassifyDOTcom")
+ }
SignInView.swift
import SwiftUI
+ import CrossClassify
struct SignInView: View {
@State var emailAddress: String = ""
@State var password: String = ""
var body: some View {
VStack {
- TextField(
+ TrackedTextField(
"[email protected]",
text: $emailAddress),
+ id: "email", trackContent: true, cc: CrossClassify.shared
)
- SecureField(
+ TrackedSecureField(
"Enter a password",
text: $password),
+ id: "password", cc: CrossClassify.shared
)
Button("Sign In", action: {
+ CrossClassify.shared.submit()
...
}
)
...
}
+ .onAppear{CrossClassify.shared.track(pageName: "signin", formName: "login")}
+ .onDisappear{CrossClassify.shared.stopTrack()}
}
}
一个简化的UIKit示例
在这个示例中,我们展示了在一个简单的UIKit应用中,在应用整合步骤前后所做的更改。《CrossClassifyInstance.swift》是新文件。《LoginViewController.swift》和《Login.storyboard》是现有文件。
CrossClassifyInstance.swift
+ import CrossClassify
+
+ extension CrossClassify {
+ public static let shared = CrossClassify(siteId: "1", apiKey: "GOTOappDOTcrossclassifyDOTcom")
+ }
LoginViewController.swift
import UIKit
+ import CrossClassify
class LoginViewController: UIViewController {
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
+ CrossClassify.shared.track(pageName: "login", formName: "login", view: view)
...
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
+ CrossClassify.shared.stopTrack()
...
}
}