在我的 QR 码中包含一个 Deep Link URL

Include a Deep Link URL within my QR Code

在我的 iOS 应用程序中,我正在生成一个二维码,其中的基本功能只是将用户转移到应用程序的某个功能中。

我想在同一个二维码中包含一个深度-link URL。

用例是一个人让应用程序向另一个人显示 QR 码。那个人会打开他们的本机相机应用程序或选择的二维码扫描仪,它会选择这个 URL 并导航到 Safari / App Store。

以下是我创建二维码的方式:

    func generateQRCode(from string: String) -> UIImage? {
        
        var jsonDict = [String: Any]()
        
        let url = "https://mydeeplinkurlhere"
        jsonDict.updateValue(url, forKey: "url")
        jsonDict.updateValue(string, forKey: "xyz")
        
        guard let jsonData = try? JSONSerialization.data(withJSONObject: jsonDict, options: [.prettyPrinted]) else {
            return nil
        }
        
        guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
                
        // Input the data
        qrFilter.setValue(jsonData, forKey: "inputMessage")
        
        // Get the output image
        guard let qrImage = qrFilter.outputImage else { return nil}
        
        // Scale the image
        let transform = CGAffineTransform(scaleX: 12, y: 12)
        let scaledQrImage = qrImage.transformed(by: transform)
        // Do some processing to get the UIImage
        let context = CIContext()
        guard let cgImage = context.createCGImage(scaledQrImage, from: scaledQrImage.extent) else { return nil }
        let processedImage = UIImage(cgImage: cgImage)
        
        return processedImage
    }

更新:

上面的代码让我更接近我想要的结果。

如果在应用程序中扫描二维码并使用我需要的,我可以将其拆分。

我现在的问题是:

如果用户使用他们的相机应用进行扫描,它会吐出 JSON 是什么。

所以他们会看到两个键值对。我不需要他们看到这一切。在这种情况下,我只需要他们看到 URL and/or 一条自定义消息。

那部分可以编辑吗?也就是说,扫描二维码会显示什么?

或者网站是否可以自动打开而不是看到通知?

你可以在二维码中存储任何类型的对象,在你的情况下你可以通过字典或数组类型在你的二维码中发送一些信息,这里是代码:

func generateQRCode(from dictionary: [String: String]) -> UIImage? {
    guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
    guard let data = try? NSKeyedArchiver.archivedData(withRootObject: dictionary, requiringSecureCoding: false) else { return nil }
    qrFilter.setValue(data, forKey: "inputMessage")

    guard let qrImage = qrFilter.outputImage else { return nil}

    let transform = CGAffineTransform(scaleX: 10, y: 10)
    let scaledQrImage = qrImage.transformed(by: transform)
    let context = CIContext()
    guard let cgImage = context.createCGImage(scaledQrImage, from: scaledQrImage.extent) else { return nil }
    let processedImage = UIImage(cgImage: cgImage)

    return processedImage
}

这是您的模型以及如何调用该方法:

let dictionary: [String: String] = [
    "message" : "some message string here",
    "link" : "https://google.com"
]

YOUR_IMAGE_VIEW.image = generateQRCode(from: dictionary)

您可以完全自由地更改您的数据模型,但扫描二维码是另一回事,请查看:https://www.hackingwithswift.com/example-code/media/how-to-scan-a-qr-code

希望对您有所帮助,祝您编码愉快