项目作者: verifykit

项目描述 :
VerifyKit SDK for iOS
高级语言: C
项目地址: git://github.com/verifykit/verifykit-sdk-ios.git
创建时间: 2019-11-07T07:09:07Z
项目社区:https://github.com/verifykit/verifykit-sdk-ios

开源协议:MIT License

下载


VerifyKit

Platform
Status License

Swift support
CocoaPods Compatible
Carthage compatible

VerifyKit is the next gen phone number validation system. Users can easily verify their phone numbers without the need of entering phone number or a pin code.

How It Works?

  1. Register your app at https://www.verifykit.com and get your client keys and server key.
  2. Add VerifyKit SDK to your app
  3. Configure and start VerifyKit SDK
  4. When verification is complete, send sessionId which VeriyfKit SDK gives you to your backend service
  5. At your server side, get user’s phone number from VerifyKit service wtih serverKey and sessionId. You can check Backend Integration

VerifyKit Flow

Security

ServerKey is used for getting info from VerifyKit service.
Please keep ServerKey safe. Do not include it in your client’s code base.

Requirements

  • Xcode 12.0+
  • iOS 11.0+

Installation

CocoaPods

You can install framework via CocoaPods.

  1. pod 'VerifyKit'

Configure Info.plist

To successfully use the framework, you need to add VerifyKitKey and VerifyKitSecret to your plist file. This step is mandatory.

To open a third party messaging app from your application, you need to add their url schemes to LSApplicationQueriesSchemes key in your plist file. After iOS14, to open Associated Domain URLS in a device which uses a different default browser then Safari, you also need to add https as url scheme.

Open your Info.plist as source code and insert the following XML snippet into the body of your file just before the final </dict> element.

  1. <key>VerifyKitKey</key>
  2. <string>{your-verifykit-key}</string>
  3. <key>VerifyKitSecret</key>
  4. <string>{your-verifykit-secret-key}</string>
  5. <key>LSApplicationQueriesSchemes</key>
  6. <array>
  7. <string>whatsapp</string>
  8. <string>telegram</string>
  9. <string>viber</string>
  10. <string>https</string>
  11. </array>

#

After a successful validation with a third party messaging app, the user needs to return to main app. If your application has an Associated Domain, we can add a deeplink to our message for easy and quick redirect.

If you support Associated Domains, please fill out Deeplink field at VerifyKit portal with your domain.

If you don’t support Associated Domains, you can enter a custom link with your application’s url scheme to Deeplink field, like yourapp://welcome. However, some messaging apps doesn’t recognize url schemes as clickable links, so quick redirect may not work in this scenario.

Usage

  1. import VerifyKit
  2. let kit = VerifyKitInstance()
  3. let viewController = kit.viewControllerForLogin()
  4. self.present(viewController, animated: true, completion: nil)

You can get the result via VerifyKitDelegate protocol.

  1. viewController.kitDelegate = self
  2. extension ViewController: VerifyKitDelegate {
  3. func didSuccess(with sessionCode: String) {
  4. print("VerifyKitDelegate didSuccess with sessionCode:\(sessionCode)")
  5. }
  6. func didFail(with error: VerifyKitError) {
  7. print("VerifyKitDelegate didFail with error:\(error)")
  8. }
  9. }

VerifyKit only dismisses viewControllerForLogin() automatically when didSuccess delegate is called.
To give user a chance to try other validation methods or to start again, viewControllerForLogin() doesn’t get dismissed on didFail. If you want to dismiss it on some specific error type, you can do that manually.

Objective-C

Starting with version 0.5.9, you can use VerifyKit inside Objective-C projects.

  1. VerifyKitOptions *options = [[VerifyKitOptions alloc] initWithEnvironment: VerifyKitEnvironmentDebug logActive: YES deviceID: nil];
  2. VerifyKitInstance *kit = [[VerifyKitInstance alloc] init];
  3. UIViewController<VerifyKitObjCViewController> *controller = [kit viewControllerForLogin_objC];
  4. [controller setKitObjCDelegate: self];
  5. [self presentViewController:controller animated:YES completion:nil];

#

There may be a case when user chooses a third party messaging app for validation, sends a message, but doesn’t return to main app and kills it. In that case, that user is verified with VerifyKit but the main app doesn’t know it yet.

To fix this, we have a method to check interrupted session status.
Using this method is optional and up to you.

VerifyKit will handle the interrupted verification even if you don’t implement this method.

  1. VerifyKit.checkInterruptedSession { [weak self] sessionCode in
  2. guard let sessionCode = sessionCode else {
  3. // Start VerifyKit flow or do what your app needs
  4. return
  5. }
  6. // You have an interrupted sessionCode from last time.
  7. // Tell your API.
  8. print("sessionCode \(sessionCode)")
  9. }
  1. [VerifyKitInstance checkInterruptedSessionWithCompletion:^(NSString * _Nullable sessionCode) {
  2. if (sessionCode == nil) {
  3. // Start VerifyKit flow or do what your app needs
  4. } else {
  5. // You have an interrupted sessionCode from last time.
  6. // Tell your API.
  7. NSLog(@"sessionCode %@", sessionCode);
  8. }
  9. }];

Configuration

  1. let options = VerifyKitOptions(logActive: true)
  2. let kit = VerifyKitInstance(options: options)

VerifyKitOptions Struct

You can change the settings declared in VerifyKitOptions struct.

  1. public struct VerifyKitOptions {
  2. var environment: VerifyKitEnvironment = .debug // default
  3. var logActive: Bool = true // default
  4. var deviceID: String? // optional
  5. var countryCode: String? // optional ("US")
  6. var phoneCode: String? // optional ("1") or ("+1")
  7. var phoneNumber: String? // optional ("1234567890")
  8. }
  9. public enum VerifyKitEnvironment {
  10. /// Stage environment for debug
  11. case debug
  12. /// Production environment for distribution
  13. case release
  14. }

If the host application wants to let the user input their phone number and then pass it to the SDK, it can be done using the countryCode, phoneCode and phoneNumber parameters.

Dependencies

This product includes software(CyrptoSwift) developed by Marcin Krzyzanowski.

Other Notes

Before your app release, please change the VerifyKitEnvironment to ‘release’ instead of ‘debug’.

Backend Integration

Depending on the language you use in your backend service, you can use one of the following options.

You can use our php-sdk like this;

  1. $vfk = new \VerifyKit\VerifyKit($serverKey);
  2. /** @var \VerifyKit\Entity\Response $result */
  3. $result = $vfk->getResult($sessionId);
  4. if ($result->isSuccess()) {
  5. echo "Phone number : " . $result->getPhoneNumber() .
  6. ", Validation Type : " . $result->getValidationType() .
  7. ", Validation Date : " . $result->getValidationDate()->format('Y-m-d H:i:s') . PHP_EOL;
  8. } else {
  9. echo "Error message : " . $result->getErrorMessage() . ", error code : " . $result->getErrorCode() . PHP_EOL;
  10. }

You can use our python-sdk like this;

  1. from VerifyKit import Verify
  2. verify = Verify(server_key="{SERVER-KEY}")
  3. verify.validation(session_id='{SESSION-ID}')
  4. if verify.is_valid:
  5. #Validation success.
  6. print(verify.response())
  7. elif verify.is_valid == False:
  8. #Validation fail.
  9. print(verify.response())

Or you can use curl request like this;

  1. curl --location --request POST 'https://api.verifykit.com/v1.0/result' \
  2. --header 'X-Vfk-Server-Key:{SERVER-KEY}' \
  3. --header 'Content-Type: application/json' \
  4. --form 'sessionId={{SESSION-ID}}’

Support

If you have any questions or requests, feel free to create an issue.

Author

VerifyKit is owned and maintained by VerifyKit DevTeam.

License

The MIT License

Copyright (c) 2019 VerifyKit. http://verifykit.com

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the “Software”), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.