Universal Link IOS
Bài viết đc làm theo tutorial của Owen Brom trên Raywenderlich và sử dụng Xcode 8, swift 3 Tải project start đã đc dựng sẵn UI và 1 số thứ cần thiết Cài đặt cho app Mở project start và làm theo như trong ảnh để làm bật được Asociated Domains bạn cần đăng nhập tài khoản developer của mình, ...
Bài viết đc làm theo tutorial của Owen Brom trên Raywenderlich và sử dụng Xcode 8, swift 3 Tải project start đã đc dựng sẵn UI và 1 số thứ cần thiết
Cài đặt cho app
Mở project start và làm theo như trong ảnh để làm bật được Asociated Domains bạn cần đăng nhập tài khoản developer của mình, thay thế Bundle Id com.razeware.UniversalLinks bằng budle id của bạn Tiếp theo, ta sẽ add domain của website với tiền tố applinks:
Cài đặt cho website
Khác với deep link, ta cần có website để cấu hình cho Universal Link, và tôi sử dụng https://rw-universal-links-starter.herokuapp.com/arduino.html để hướng dẫn nhưng với ứng dụng của mình bạn sẽ cấu hình cho website của bạn. Bạn phải tạo file apple-app-site-asociation với định dạng của 1 file JSON như sau
{ "applinks": { "apps": [], "details": [ { "appID": "KFCNEC27GU.com.razeware.UniveralLinksTutorial", "paths": ["*"] } ] } }
Thay team id KFCNEC27GU thành team id của bạn, bundle id com.razeware.UniveralLinksTutorial thành bundle id của bạn paths tôi để ["*"] thì mọi liên kết của trang web đều liên kết với app của bạn. Còn nếu muốn giới hạn chỉ một vài trường hợp cụ thể ta sẽ thêm như sau
"paths": [ "/auth/password/edit*", "/boards/*/accept_invitation*", "/auth/confirmation*" ]
Sau đó kiểm tra file trên website của bạn theo link sau. Thường thì file này sẽ có thể download về theo đường dẫn với định dạng "domain của bạn" +/apple-app-site-association
Xử lý Universal Link
Trong Appdelegate Mã code xử lý khi từ link mở đến app của mình
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { // 1 guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL, let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return false } // 2 if let computer = ItemHandler.sharedInstance.items.filter({ $0.path == components.path}).first { self.presentDetailViewController(computer) return true } // 3 let webpageUrl = URL(string: "http://rw-universal-links-final.herokuapp.com")! application.openURL(webpageUrl) return false }
tiếp theo viết hàm để mở xem chi tiết
func presentDetailViewController(_ computer: Computer) { let storyboard = UIStoryboard(name: "Main", bundle: nil) let detailVC = storyboard.instantiateViewController(withIdentifier: "NavigationController") as! ComputerDetailController detailVC.item = computer let navigationVC = storyboard.instantiateViewController(withIdentifier: "DetailController") as! UINavigationController navigationVC.modalPresentationStyle = .formSheet navigationVC.pushViewController(detailVC, animated: true) }
Mọi công việc cần thiết đã được hoàn thành, bây giờ hãy chạy app và tận hưởng thành quả của mình Nếu paths bạn đê ["*"] thì gõ bất kỳ link nào trên website vào safari của iphone (simulator) còn với link khác thì hãy gõ đúng theo định dạng bạn cài đặt.