WeProovSDK 1.6.1

WeProovSDK 1.6.1

Guillaume Blanchet‘WeProov’Jonathan Vukovich TribouharetVincent Krawczyk 维护。



 
依赖
APAddressBook/Swift>= 0
JTBorderDotAnimation~> 1.0
SignatureView~> 1.1
FLAnimatedImage~> 1.0
JTMaterialSpinner~> 3.0
MBProgressHUD= 1.1
SnapKit~> 4.0
SwiftRichString>= 0
JTTableViewController~> 1.0.10
然后~> 2.7.0
 

  • ProovGroup 提供

WeProovSDK

CI Status Version License Platform

版本 1.6.1

WeProovSDK 1.6.1 版本使用 XCode 13.3 和 Swift 编译器 5.6 构建

更新

位码问题已解决,现在该版本可用。(⚠️要使用此版本,请确保您使用 XCode 12,并在需要时启用位码。如果您使用的是旧版本,请禁用位码,因为其中包含以下问题。⚠️) WPReportManager 初始化已更改,不再包含 enableDamageList:Bool 参数。这是因为此选项对于开发者来说不可用。

🚑纠正

  • 修复了防止图片处理顺畅运行的错误。
  • 上传弹出窗口的更新,包含进度条以确认报告已成功发送到控制器。

示例

要运行示例项目,请首先从仓库克隆,然后在 Example 目录中运行 pod install

要求

从1.4.x迁移到1.5.x

如果你使用的是1.4.x版本并需要更新到1.5.x版本,请联系我们升级你的访问权限。谢谢。

安装

WeProovSDK可以通过CocoaPods获得。要安装它,只需将以下行添加到你的Podfile中

pod 'WeProovSDK', :git => 'https://github.com/ProovGroup/weproov-ios-sdk'

在执行pod install之前,仓库使用git lfs,请确保已安装。请参见https://git-lfs.github.com/

Info.plist

分配给应用后台任务更新的权限

Background Fetch: capabilities -> Background Mode -> Background Fetch

Info.plist中添加访问相机和GPS所需的密钥

<key>NSCameraUsageDescription</key>
<string>Camera is required</string> 
<key>NSContactsUsageDescription</key>
<string>Contacts required</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location required</string>

导入

import WeProovSDK

连接

在1.5.x之前,将SDK连接到WeProov

// permet de s'avoire si le SDK est connecté
WPUser.shared.connected
// permet de se connecter avec un token et un secret
WPUser.shared.connect(token: "<TOKEN>", secret: "<SECRET>")
// pour changer la lang default: "en"
WPUser.shared.lang = "fr"

从1.5.x开始,将SDK连接到WeProov

// permet de s'avoire si le SDK est connecté
WPUser.shared.connected
//Donne les credentials au sdk
WPUser.shared.setAppAuthCredentials(clientID: "<TOKEN>", secret: "<SECRET>")
// permet de se connecter avec un token et un secret
// A partir de > 1.5.1 cette methode ne prendra plus d'arguments
WPUser.shared.connect(token: "<TOKEN>", secret: "<SECRET>")
// pour changer la lang default: "en"
WPUser.shared.lang = "fr"

上传背景

授权应用在后台更新权限
后台获取 功能 -> 后台模式 -> 后台获取 WeProov 使用后台 URLSession 在应用启动时后台上传报告:调用 WPReportUploader.shared.sync()AppDelegate 中处理事件

    func application(_: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
        if WPReportUploader.shared.handleEventsForBackgroundURLSession(identifier: identifier, completionHandler: completionHandler) {
            return
        }
        
        completionHandler()
    }

示例

AppDelegate


	func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        ...
        if !WPUser.shared.connected {
	    WPUser.shared.setAppAuthCredentials(clientID: "<TOKEN>", secret: "<SECRET>")
            WPUser.shared.connect(token: "<TOKEN>", secret: "<SECRET>")
        }
        WPReportUploader.shared.sync()
        ...
        return true
    }


    func application(_: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping () -> Void) {
        if WPReportUploader.shared.handleEventsForBackgroundURLSession(identifier: identifier, completionHandler: completionHandler) {
            return
        }
        
        completionHandler()
    }

WPUserDelegate

    func userDidConnect(user: WPUser){
        print("WeProov Connected")
    }
    
    /// Tells the delegate when the user failed to connect
    func userFailedToConnect(user: WPUser, error: Error?){
        print("WeProov Connect Error \(error!.localizedDescription)")
    }

自定义视图

当视图加载时,我们将在 viewController 中启动一个 proovcode 内容

class CustomViewController: UIViewController {
  // Contiens le proovCode à ouvrir 
  var proovCode:String = ""
  // downloader: permet de télécharger un rapport
  private var downloader = WPReportDownloader()
  // permet d'etre prevenue quand le rapport se termine
  private var manager: WPReportManager?
  
  // Initialise une vue raport qui vas etre imbriquer
  var reportView: WPReportView = WPReportView()
  
  override func viewDidLoad() {
      super.viewDidLoad()
      // ajoute la vue rapport an laissans la marge pour le header des iPhone X
      self.view.addSubview(reportView)
      reportView.snp.makeConstraints{make in
          make.bottom.left.right.equalTo(self.view)
          make.top.equalTo(self.view.snp.topMargin)
      }
      // ajoute comme delegate au downloader cette class
      downloader.delegate = self
  }
  
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // initialise la popup de telechargement
        let controller = WPReportDownloadViewController()
        
        // set la classe actuel comde delegate
        controller.delegate = self
        // presente la page de download
        present(controller, animated: true) { [weak self] in
            guard let sself = self else {
                return
            }
            sself.downloader.load(proovCode: sself.proovCode)
        }
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        // permet de fermer proprement le rapport
        manager?.closeReport()
    }
}

WPReportManagerDelegate

extension CustomViewController: WPReportManagerDelegate {
    // appelé à chaque changement de page
    func reportCurrentSectionDidChange(manager: WPReportManager, section: Int) {
        title = manager.sections[section]
    }

    // appelé quand le rapport est fermé  
    func reportDidClose(manager: WPReportManager, state: WPReportCloseState) {
        dismiss()
    }
}

WPReportDownloadViewControllerDelegate

extension CustomViewController: WPReportDownloadViewControllerDelegate {
    func reportCancelDownload() {
        // Cannot stop downloader, so create a new one
        downloader.delegate = nil
        downloader = WPReportDownloader()
        downloader.delegate = self
    }
}

WPReportDownloaderDelegate

extension CustomViewController: WPReportDownloaderDelegate {
    func reportLoading(downloader _: WPReportDownloader) {}
    
    // appeler lors de la progression du telechargement
    func reportLoadingProgress(downloader _: WPReportDownloader, progress: Float) {
        if let controller = presentedViewController as? WPReportDownloadViewController {
            controller.updateProgression(value: progress)
        }
    }

    // appeler lorsque le rapport est pres a etre afficher
    func reportDidLoad(downloader _: WPReportDownloader, report: WPReport) {
        if let controller = presentedViewController as? WPReportDownloadViewController {
            controller.updateProgression(value: 1)
            controller.dismiss()
        }
        
        var theme = WPTheme()
        // Personalise les couleurs principal du framework
        theme.reportInitialColor = UIColor(hexString: "#67BB0F9")
        theme.reportFinalColor = UIColor(hexString: "#67BB0F9")

        manager = WPReportManager(controller: self, report: report, theme: theme)
        manager?.delegate = self
        manager?.load(reportView: reportView)
    }
    
    // si une erreur survient 
    func reportFailedToLoad(downloader _: WPReportDownloader, error: Error?) {
        if let controller = presentedViewController as? WPReportDownloadViewController {
            controller.dismiss()
        }
        dismiss()
        
        print("reportFailedToLoad", error ?? "unknown error")
    }
    
    // permet de savoir si le la page d'une section dois etre visible ou non
    func reportCanShowSection(downloader _: WPReportDownloader, section: Int) -> Bool {
        return true
    }

    // permet de savoir si la page peremet d'importer depuis son part / profile
    // attention permet de voire tout le carnet d'adresse / parc de bien
    func reportCanShowSectionImport(downloader _: WPReportDownloader, section _: Int) -> Bool {
        return true
    }
}