25

一个链接应该会打开应用程序。我有这个工作。我只想知道如何传递参数。假设网址是“addappt://?code=abc”。当视图控制器弹出时,代码字段应该填充文本 - 等号后的字母要签名。我有一部分工作要做。我使用以下内容 (in app delegate.m)

NSArray *elements = [url.query componentsSeparatedByString:@"="];
NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
          val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

(顺便说一句:val 在 appdelegate.h 中声明

我也可以传递val给视图控制器。我唯一的问题是填充名为'code'. 一旦通过链接打开应用程序,如何填充代码?

帮助赞赏。

4

2 回答 2

23

这是在 iOS中使用自定义 URL 方案的一个很好的教程

与教程中一样,您应该解析 URL 参数并将它们存储在此方法中的应用程序中使用:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
  // Do something with the url here
}
于 2013-01-09T08:12:24.750 回答
0

在 Xcode 12 上,此代码完美运行。你可以想象这也是一个常规的 URL。在源应用程序中,您可以使用参数调用和打开目标 URL,例如

    let url = URL(string: "DestinationApp:PATH?PARAMETER=11111")
           
    UIApplication.shared.open(url!) { (result) in
        if result {
            print(result)
           // The URL was delivered successfully!
        }
    }

目标应用程序可以使用此方法处理 AppDelegate 中的方法。警报用于双重检查。

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
            // Determine who sent the URL.
            let sendingAppID = options[.sourceApplication]
            print("source application = \(sendingAppID ?? "Unknown")")
    
            // Process the URL.
            guard let components = NSURLComponents(url: url, resolvingAgainstBaseURL: true),
                let path = components.path,
                let params = components.queryItems else {
                    print("Invalid URL or path missing")
                    return false
            }
    
            if let parameter = params.first(where: { $0.name == "PARAMETER" })?.value {
                print("path = \(path)")
                print("parameter = \(parameter)")
    
                let alert = UIAlertController(title: "Path = \(path)", message: "Parameter = \(parameter)", preferredStyle: .alert)
    
                let keyWindow = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
    
                if var topController = keyWindow?.rootViewController {
                    while let presentedViewController = topController.presentedViewController {
                        topController = presentedViewController
                    }
    
                    topController.present(alert, animated: true, completion: nil)
                }
                return true
            } else {
                print("parameter is missing")
                return false
            }
}
于 2020-10-26T09:16:50.297 回答