【问题标题】:Swiftui Verify with TwilioSwiftui 使用 Twilio 进行验证
【发布时间】:2021-12-14 16:00:40
【问题描述】:

我想通过电话号码验证我的应用项目。Twilio 文档包括 UIKit 但不包括 swiftui 示例,我尝试使用 Swiftui 框架但无法创建按钮操作。

import UIKit

class StartVerificationViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

@IBOutlet weak var countryCodeField: UITextField!
@IBOutlet weak var phoneNumberField: UITextField!
@IBAction func sendVerification(_ sender: Any) {
    
    // send verification SMS
    if let phoneNumber = phoneNumberField.text, let countryCode = countryCodeField.text {
        VerifyAPI.sendVerificationCode(countryCode, phoneNumber)
    }
  }
}

*** VerifyApi 来了

import Foundation
 import SwiftUI

struct VerifyAPI {

static func sendVerificationCode(_ countryCode: String,
                                 _ phoneNumber: String) {
    let parameters = [
        "via": "sms",
        "country_code": countryCode,
        "phone_number": phoneNumber
    ]
    
    RequestHelper.createRequest("start", parameters) {
        json in
        return .success(DataResult(data: json))
       }
     }
   }

【问题讨论】:

    标签: swift xcode swiftui twilio verify


    【解决方案1】:

    您可以直接使用UIViewController 到swiftUI。

    示例:

    Struct VerifyKitVW: UIViewControllerRepresentable {
        func makeUIViewController(context: UIViewControllerRepresentableContext<VerifyKitVW>) -> StartVerificationViewController {
            let verifyController = StartVerificationViewController()
            verifyController.view.backgroundColor = UIColor.yellow
            return verifyController
        }
    
        func updateUIViewController(_ uiViewController: StartVerificationViewController, context: UIViewControllerRepresentableContext<VerifyKitVW>) {
            uiViewController.sendVerification(UIButton())
        }
        
    }
    

    【讨论】:

      【解决方案2】:

      这是我遵循的。

       import SwiftUI
       import Alamofire
      
       struct MobileNumberView: View {
        @State var text = ""
        @State var CountryCode = "+44"
        @State var isEditing: Bool = false
        @State var pushActive = false
        @State private var showsAlert = false
        @State var isSearching = false
        @State var Changedtext = ""
        @StateObject var profileViewGlobals : ProfileViewGlobals
        @State var comingPath:String
      
      var body: some View {
          
          NavigationView{
              
              GeometryReader { geometry in
                  
                  VStack(spacing: 0){
                      Color("Green")
                          .edgesIgnoringSafeArea(.top)
                      
                      ZStack {
                          Color("Green")
                          
                          VStack {
                              
                              Text("Enter your phone number\nto continue")
                                  .font(.title)
                                  .fontWeight(.bold)
                                  .foregroundColor(Color.white)
                              
                          }
                          .padding(.top , -geometry.size.height/6)
                      }
                      .frame(height: geometry.size.height/2.5)
                      
                      ZStack{
                          RoundedRectangle(cornerRadius: 25).foregroundColor(.white)
                              .frame(width: geometry.size.width)
                              .frame(height: geometry.size.height/1.1)
                          
                          VStack {
                              TextField("", text: $text)
                                  .padding(.leading, geometry.size.width/4)
                                  .keyboardType(.decimalPad)
                                  .font(.system(size: 30, weight: .thin, design: .default))
                                  .padding()
                                  .background(Color(.systemGray5))
                                  .accentColor(Color("Green"))
                                  .foregroundColor(Color("Grey"))
                                  .background(Color("Phone"))
                                  .cornerRadius(8)
                                  .padding(.horizontal)
                                  .shadow(radius:10)
                                  .overlay(
                                      HStack {
                                          Image("UK")
                                              .resizable()
                                              .frame(width: geometry.size.width/10 , height: geometry.size.height/16 )
                                          Text("+44")
                                              .font(.system(size: 20, weight: .thin, design: .default))
                                          Spacer()
      
                                      }.padding(.horizontal, 30)
                                      .foregroundColor(.gray)
                                  )
                                  
                              
      
                          }
                          .padding(.bottom , geometry.size.height/1.6)
                          VStack {
                              Button(action: { if text != "" {
                                  
                                  if text.prefix(1) != "0" {
                                      Changedtext = text
                                      RegisterMobile(Telephone_Number: CountryCode + text)
                                  }
                                  else{
                                      Changedtext = text
                                      Changedtext.remove(at: Changedtext.startIndex)
                                      print("\(Changedtext)")
                                      RegisterMobile(Telephone_Number: CountryCode + Changedtext)
                                      
                                  }
                                  
                              } }) {
                                  
                                  Image(systemName: "arrow.forward.circle.fill")
                                      .resizable()
                                      .aspectRatio(contentMode: .fit)
                                      .foregroundColor(Color("Green"))
                                      .frame(width: geometry.size.width/5.9)
                              }
                          }
                          .frame(maxWidth: .infinity)
                          .padding(.bottom , geometry.size.height/4)
                      }.frame(width: geometry.size.width, height: geometry.size.height/1.5)
                      
                  }
                  NavigationLink(destination: VerificationCodeView(Telephone_Number: CountryCode + Changedtext,profileViewGlobals:profileViewGlobals,comingPath:comingPath), isActive: self.$pushActive) {
                      Text("")
                  }.hidden()
                  .alert(isPresented: self.$showsAlert) {
                      Alert(title: Text("Your number seems to be wrong!"), message: Text("Please check your number and try again."), dismissButton: .default(Text("Got it!")))
                  }
                  
              }.ignoresSafeArea(.keyboard)
          }
          .navigationViewStyle(StackNavigationViewStyle())
          
      }
      
      func RegisterMobile(Telephone_Number : String) -> Void {
          
          let deviceData : Parameters = [
              "mobileNumber": Telephone_Number
          ]
          
          APIClient.RegisterMobile(deviceParameters: deviceData, completion:{(result) in
              switch(result){
              
              case .success(let RegisterData):
                  
                  print(RegisterData)
                  
                  if (RegisterData.meta.statusCode == 200) {
                      
                      self.pushActive = true
                      print("Successful")
                  }
                  else{
                      
                      print("Fail")
                      self.showsAlert = true
                  }
                  
              case .failure(let error):
                  print("ERROR",error)
                  self.showsAlert = true
              }
          })
      }
      }
      

      【讨论】:

      • @Mesut Aygun 这有帮助吗?如果您有任何问题,请告诉我
      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 2021-10-03
      • 2018-10-30
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      相关资源
      最近更新 更多