使用两个字符串生成和读取二维码
Generate and read QR with two strings
有什么方法可以在我的二维码中添加额外的字符串吗?
我正在尝试传递两个带键的字符串(在我的情况下都需要)。
所以我的 QR 码应该包含用于编辑 Firestore 值的身份验证 ID 和文档 ID,但找不到好的方法。
func generateQR(){
let authId = Auth.auth().currentUser?.uid
if let myString = docID{
let data = myString.data(using: .ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
let ciImage = filter?.outputImage
let transform = CGAffineTransform(scaleX: 10, y: 10)
let transformImage = (ciImage?.transformed(by: transform))
let image = UIImage(ciImage: transformImage!)
qrView.image = image
}
}
这里我正在生成我的二维码,正如你在 atm 上看到的那样,我只有 "data",这是文档 ID。
所以现在,不知何故我需要添加一个额外的密钥,它应该包含 "authId",无论如何都可以这样做吗?
二维码阅读功能
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
if metadataObjects != nil && metadataObjects.count != 0{
if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject{
if object.type == AVMetadataObject.ObjectType.qr{
let arr = object.stringValue!.components(separatedBy:",")
let docId = arr.first!
let authId = arr[1]
let alert = UIAlertController.init(title: "QR Code", message: "Vill du använda denna QR koden?", preferredStyle: .alert)
alert.addAction(UIAlertAction.init(title: "Ny", style: .cancel, handler: nil))
alert.addAction(UIAlertAction.init(title: "Använd", style: .default, handler: { (nil) in
self.removeDiscountFromFirestore(documentId: docId, authentication: authId)
}))
self.present(alert, animated: true)
}
}
}
}
那么如何在我的二维码中传递 2 个字符串?提前致谢。
在 Sh_Khan 的输入后我成功地传递了数据,但它们变成了可选的并且不能用“!”强制。所以我通过添加
来解决这个问题
let data = "\(String(describing: docID!)),\(authId!)".data(using: .ascii, allowLossyConversion: false)
我在哪里生成二维码。
你可以尝试用 ,
来连接它们
let data = "\(docId),\(authId)".data(using: .ascii, allowLossyConversion: false)
当你阅读二维码时将它们分开
let arr = object.stringValue!.components(separatedBy:",")
let docId = arr.first!
let authId = arr[1]
有什么方法可以在我的二维码中添加额外的字符串吗?
我正在尝试传递两个带键的字符串(在我的情况下都需要)。
所以我的 QR 码应该包含用于编辑 Firestore 值的身份验证 ID 和文档 ID,但找不到好的方法。
func generateQR(){
let authId = Auth.auth().currentUser?.uid
if let myString = docID{
let data = myString.data(using: .ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
let ciImage = filter?.outputImage
let transform = CGAffineTransform(scaleX: 10, y: 10)
let transformImage = (ciImage?.transformed(by: transform))
let image = UIImage(ciImage: transformImage!)
qrView.image = image
}
}
这里我正在生成我的二维码,正如你在 atm 上看到的那样,我只有 "data",这是文档 ID。
所以现在,不知何故我需要添加一个额外的密钥,它应该包含 "authId",无论如何都可以这样做吗?
二维码阅读功能
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
if metadataObjects != nil && metadataObjects.count != 0{
if let object = metadataObjects[0] as? AVMetadataMachineReadableCodeObject{
if object.type == AVMetadataObject.ObjectType.qr{
let arr = object.stringValue!.components(separatedBy:",")
let docId = arr.first!
let authId = arr[1]
let alert = UIAlertController.init(title: "QR Code", message: "Vill du använda denna QR koden?", preferredStyle: .alert)
alert.addAction(UIAlertAction.init(title: "Ny", style: .cancel, handler: nil))
alert.addAction(UIAlertAction.init(title: "Använd", style: .default, handler: { (nil) in
self.removeDiscountFromFirestore(documentId: docId, authentication: authId)
}))
self.present(alert, animated: true)
}
}
}
}
那么如何在我的二维码中传递 2 个字符串?提前致谢。
在 Sh_Khan 的输入后我成功地传递了数据,但它们变成了可选的并且不能用“!”强制。所以我通过添加
来解决这个问题 let data = "\(String(describing: docID!)),\(authId!)".data(using: .ascii, allowLossyConversion: false)
我在哪里生成二维码。
你可以尝试用 ,
let data = "\(docId),\(authId)".data(using: .ascii, allowLossyConversion: false)
当你阅读二维码时将它们分开
let arr = object.stringValue!.components(separatedBy:",")
let docId = arr.first!
let authId = arr[1]