VerifyKit
VerifyKit 是下一代电话号码验证系统。用户可以轻松验证电话号码,而无需输入电话号码或PIN码。
它是如何工作的?
- 在 https://www.verifykit.com 上注册您的应用程序并获取客户端密钥和服务器密钥。
- 将 VerifyKit SDK 添加到您的应用程序
- 配置并启动 VerifyKit SDK
- 验证完成时,向您的后端服务发送 VerifyKit SDK 给您的
sessionId
- 在您的服务器端,使用
serverKey
和sessionId
从 VerifyKit 服务获取用户的电话号码。您可以查看 后端集成。
安全性
ServerKey
用于从 VerifyKit 服务获取信息。请确保 ServerKey
安全。不要将其包含在客户端代码库中。
要求
- Xcode 12.0+
- iOS 11.0+
安装
CocoaPods
您可以通过 CocoaPods 安装此框架。
pod 'VerifyKit'
配置 Info.plist
为了成功使用此框架,您需要在您的 plist 文件中添加 VerifyKitKey
和 VerifyKitSecret
。这一步是必须的。
要从您的应用中打开第三方消息应用,您需要将其 URL 方案添加到您的 plist 文件中的 LSApplicationQueriesSchemes
键。iOS 14 之后,如果您需要在默认浏览器不是 Safari 的设备上打开关联域 URL,也需要将 https
作为 URL 方案添加。
以源代码方式打开您的 Info.plist 文件,并在最终 </dict>
元素之前插入以下 XML 片段。
<key>VerifyKitKey</key>
<string>{your-verifykit-key}</string>
<key>VerifyKitSecret</key>
<string>{your-verifykit-secret-key}</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>whatsapp</string>
<string>telegram</string>
<string>viber</string>
<string>https</string>
</array>
在通过第三方消息应用成功验证后,用户需要返回主应用。如果您的应用有关联域,我们可以在消息中添加一个深层链接,以便于快速和简单地重定向。
如果您的应用支持关联域,请在 VerifyKit 站点填写带您的域的 深层链接 字段。
如果您的应用不支持关联域,您可以在 深层链接 字段中输入您的应用 URL 方案的自定义链接,例如 yourapp://welcome
。但是,某些消息应用可能不识别 URL 方案为可点击链接,因此在这种情况下快速重定向可能不可用。
使用方法
import VerifyKit
let kit = VerifyKitInstance()
let viewController = kit.viewControllerForLogin()
self.present(viewController, animated: true, completion: nil)
您可以通过VerifyKitDelegate
协议来获取结果。
viewController.kitDelegate = self
extension ViewController: VerifyKitDelegate {
func didSuccess(with sessionCode: String) {
print("VerifyKitDelegate didSuccess with sessionCode:\(sessionCode)")
}
func didFail(with error: VerifyKitError) {
print("VerifyKitDelegate didFail with error:\(error)")
}
}
当调用didSuccess
代理时,VerifyKit会自动关闭viewControllerForLogin()
。为了给用户提供尝试其他验证方法或重新开始的机会,当调用didFail
时不会关闭viewControllerForLogin()
。如果希望在特定错误类型下手动关闭它,可以这样做。
当用户选择第三方 Messaging 应用进行验证,发送消息但未返回主应用并关闭它时,可能会出现一种情况。在这种情况下,该用户已通过VerifyKit进行验证,但主应用尚不知情。
为此,我们提供了一个检查中断会话状态的方法。使用此方法是可选的,由您决定。
即使您未实现此方法,VerifyKit也会处理中断的验证。
VerifyKit.checkInterruptedSession { [weak self] sessionCode in
guard let sessionCode = sessionCode else {
// Start VerifyKit flow or do what your app needs
return
}
// You have an interrupted sessionCode from last time.
// Tell your API.
print("sessionCode \(sessionCode)")
}
配置
let options = VerifyKitOptions(logActive: true)
let kit = VerifyKitInstance(options: options)
VerifyKitOptions 结构体
您可以更改VerifyKitOptions
结构体中声明的设置。
public struct VerifyKitOptions {
var environment: VerifyKitEnvironment = .debug // default
var logActive: Bool = true // default
var deviceID: String? // optional
}
public enum VerifyKitEnvironment {
/// Stage environment for debug
case debug
/// Production environment for distribution
case release
}
依赖
此产品包含由 Marcin Krzyzanowski 开发的软件(CyrptoSwift)。
其他说明
在您应用发布前,请将VerifyKitEnvironment更改为'release'而不是'debug'。
后端集成
根据您后端服务使用的语言,您可以使用以下选项之一。
您可以使用我们的php-sdk,例如;
$vfk = new \VerifyKit\VerifyKit($serverKey);
/** @var \VerifyKit\Entity\Response $result */
$result = $vfk->getResult($sessionId);
if ($result->isSuccess()) {
echo "Phone number : " . $result->getPhoneNumber() .
", Validation Type : " . $result->getValidationType() .
", Validation Date : " . $result->getValidationDate()->format('Y-m-d H:i:s') . PHP_EOL;
} else {
echo "Error message : " . $result->getErrorMessage() . ", error code : " . $result->getErrorCode() . PHP_EOL;
}
您可以使用我们的python-sdk,例如;
from VerifyKit import Verify
verify = Verify(server_key="{SERVER-KEY}")
verify.validation(session_id='{SESSION-ID}')
if verify.is_valid:
#Validation success.
print(verify.response())
elif verify.is_valid == False:
#Validation fail.
print(verify.response())
或者您可以使用如下curl请求;
curl --location --request POST 'https://api.verifykit.com/v1.0/result' \
--header 'X-Vfk-Server-Key:{SERVER-KEY}' \
--header 'Content-Type: application/json' \
--form 'sessionId={{SESSION-ID}}’
支持
如果您有任何问题或请求,请随意创建一个问题。
作者
VerifyKit 由 VerifyKit DevTeam 拥有和维护。
许可协议
MIT 许可协议
版权所有 © 2019 VerifyKit. http://verifykit.com
任何人可以在不收取任何费用的情况下,获得此软件及其相关文档文件(以下简称“软件”)的副本,并在不受限制的情况下使用该软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,以及允许向软件提供者提供该软件的人这样做,前提是遵守以下条件
上述版权声明和本许可协议应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何形式的明示或暗示保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者对因合同、侵权或其他行为而产生的任何索赔、损害或其它责任,无论是直接、间接、附带、特殊、衍生还是后果性赔偿,概不负责,即使被告知可能有此类赔偿风险。