Universal Link: Kết nối
Update : Owen Brown đã cập nhật hướng dẫn này lên Swift 4.2. Ông cũng viết cả bản gốc. Bạn có trang web chia sẻ nội dung với ứng dụng iOS không? Kể từ iOS 9, bạn có thể kết nối chúng bằng cách sử dụng các liên kết phổ quát, có nghĩa là người dùng hiện có thể chạm vào liên ...
Update: Owen Brown đã cập nhật hướng dẫn này lên Swift 4.2. Ông cũng viết cả bản gốc.
Bạn có trang web chia sẻ nội dung với ứng dụng iOS không? Kể từ iOS 9, bạn có thể kết nối chúng bằng cách sử dụng các liên kết phổ quát, có nghĩa là người dùng hiện có thể chạm vào liên kết HTTP trên iPhone và được gửi trực tiếp đến ứng dụng của bạn!
Trong hướng dẫn này, bạn sẽ tìm hiểu cách liên kết ứng dụng iOS với trang web được lưu trữ trên Heroku. Cả ứng dụng và trang web đều cung cấp tài liệu tham khảo cho các máy tính bảng duy nhất, do đó, những người đam mê sở thích phần cứng, vui mừng! Bạn đang ở trong một điều trị. :]
Hướng dẫn này giả định bạn có hiểu biết cơ bản về phát triển iOS và Swift. Nếu bạn là người mới, hãy xem qua một số hướng dẫn khác về iOS và Swift của chúng tôi trước. Kinh nghiệm trước đây với Heroku và phát triển web sẽ mang lại lợi ích, nhưng nó không phải là bắt buộc.
Cuối cùng, bạn phải có tài khoản nhà phát triển Apple có trả tiền. Đáng tiếc là, một tài khoản miễn phí sẽ không hoạt động. *sad face*
Lưu ý : Có thể nói, các liên kết phổ quát có thể thay thế cho các ứng dụng đăng ký các lược đồ URL của riêng chúng. Chúng hoạt động bằng cách cung cấp một tệp nhỏ (được phân phối qua HTTPS) từ thư mục gốc của miền web trỏ đến ID ứng dụng cụ thể và sau đó đăng ký ID ứng dụng cụ thể đó với Apple để xử lý các liên kết từ miền đó.
Do các yêu cầu này, bạn sẽ không thể thử nghiệm hoàn toàn các liên kết phổ biến mà không cần có trang web thực có thể truy cập qua HTTPS và ứng dụng thực trên App Store, nhưng bạn vẫn có thể có được trải nghiệm với các liên kết phổ dụng bằng cách thực hiện quy trình thiết lập mọi thứ.
Bắt đầu
Bắt đầu bằng cách tải xuống các tài liệu bạn cần bằng cách sử dụng nút Download Materials ở trên cùng hoặc dưới cùng của hướng dẫn này. Mở dự án khởi động, sau đó xây dựng và chạy. Bạn sẽ thấy bộ điều khiển chế độ xem chính của ứng dụng ComputersController.
Main view
Các ứng dụng cho thấy một vài trong số các máy tính bảng duy nhất phổ biến nhất trên thị trường. Chạm vào một trong các hàng để tách biệt với bộ điều khiển chế độ xem chi tiết ComputerDetailController. Tại đây, bạn có thể xem thông tin về sản phẩm cụ thể, bao gồm trang web, nhà cung cấp và giá cả.
Tôi cũng đã tạo một trang web cơ bản với thông tin tương tự. Kiểm tra trang web khởi động tại đây.
Đừng băn khoăn phần Heroku: Đây chỉ là một cách nhanh chóng để bạn truy cập vào trang web demo cho hướng dẫn này. Mặc dù không được yêu cầu bởi hướng dẫn này, bạn có thể tùy ý triển khai trang web vào tài khoản Heroku của riêng bạn. Nếu bạn muốn làm như vậy, hãy làm theo hướng dẫn tại đây.
Bây giờ bạn đã thấy cả ứng dụng và trang web, đã đến lúc tìm hiểu mã để kết nối chúng. Mục tiêu cuối cùng: Bất cứ khi nào người dùng nhấn vào bất kỳ liên kết trang web nào của bạn trên thiết bị iOS – chẳng hạn như https://rw-universal-links-starter.herokuapp.com/arduino.html – nó sẽ mở trong ứng dụng thay vì Safari . Là một bit đánh bóng cuối cùng, ứng dụng thậm chí sẽ điều hướng trực tiếp đến bộ điều khiển chi tiết máy tính cụ thể.
Để thực hiện điều này, bạn cần phải làm ba việc:
- Thông báo cho ứng dụng của trang web.
- Thông báo cho trang web của ứng dụng.
- Xử lý điều hướng trong ứng dụng bất cứ khi nào người dùng nhấn vào một liên kết.
Định cấu hình ứng dụng
- Chọn dự án UniversalLinks .
- Chọn mục tiêu UniversalLinks .
- Chọn tab Capabilities .
- Cuộn xuống và BẬT Associated Domains .
Bật các Capabilities
Bạn có thể nhận lời nhắc Select a Development Team to Use for Provisioning. Chọn bất kỳ nhóm nhà phát triển Apple có trả tiền nào mà bạn đang truy cập và nhấn Select để tiếp tục.
Nếu bạn thấy lời nhắc Add an Apple ID Account, điều đó có nghĩa là bạn hiện chưa đăng nhập vào bất kỳ tài khoản nào. Trong trường hợp này, nhấn nút Add và đăng nhập vào nhóm nhà phát triển Apple có trả tiền mà bạn là thành viên.
Điều quan trọng là đây là tài khoản paid. Nếu bạn sử dụng một tài khoản miễn phí, Xcode có thể sụp đổ; đây dường như là lỗi Xcode.
Bạn cũng có thể thấy thông báo lỗi, trong phần Signing của tab chung, nói rằng “ID ứng dụng ‘com.razeware.UniversalLinks’ không thể được đăng ký cho nhóm phát triển của bạn. Thay đổi số nhận dạng gói của bạn thành một chuỗi duy nhất để thử lại.” Điều này là do số nhận dạng ứng dụng đã được ứng dụng hướng dẫn ban đầu thực hiện.
Trong ứng dụng của riêng bạn, hãy đảm bảo số nhận dạng ứng dụng của bạn là duy nhất (theo ký pháp tên miền ngược). Tuy nhiên, đối với ứng dụng hướng dẫn này, bạn có thể bỏ qua thông báo này.
Tiếp theo, nhấn + và thêm tên miền sau: applinks: rw-universal-links-final.herokuapp.com. Nếu bạn làm theo hướng dẫn để khởi chạy ứng dụng Heroku của riêng bạn, sau đó thay thế chuỗi sau dấu hai chấm bằng tên miền đầy đủ của ứng dụng Heroku của bạn.
Hãy chắc chắn thêm tiền tố applinks. Bây giờ bạn sẽ thấy như sau:
Cấu hình trang Web
Bây giờ, bạn cần để cho trang web ở trên “bí mật lớn”. Để làm điều này, hãy tạo một tệp apple-app-site-association. Tệp này không mới đối với thế giới iOS: Đó là cùng một tệp được sử dụng trong iOS 8 cho thông tin đăng nhập web và Handoff. Định dạng khớp với định dạng của tệp JSON, nhưng nó KHÔNG THỂ có phần mở rộng .json . Không sử dụng bất kỳ phần mở rộng tên tập tin nào và để bảo vệ tính chính xác của lỗi , hãy kiểm tra kỹ xem tên tệp có khớp chính xác không!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ <span class="hljs-string">"applinks"</span>: { <span class="hljs-string">"apps"</span>: [], <span class="hljs-string">"details"</span>: [ { <span class="hljs-string">"appID"</span>: <span class="hljs-string">"KFCNEC27GU.com.razeware.UniveralLinksTutorial"</span>, <span class="hljs-string">"paths"</span>: [<span class="hljs-string">"*"</span>] } ] } } |
Các applinks thẻ xác định các ứng dụng có liên quan đến trang web. Để apps giá trị dưới dạng mảng trống. Bên trong details thẻ là một loạt các từ điển để liên kết các appID và đường dẫn URL. Để đơn giản, bạn sử dụng ký tự đại diện * để liên kết tất cả các liên kết của trang web này với ứng dụng UniversalLinks. Bạn có thể giới hạn paths giá trị cho các thư mục hoặc tên tệp cụ thể.
ID ứng dụng bao gồm team ID của bạn được kết hợp với bundle ID của ứng dụng. ID nhóm được liệt kê ở trên thuộc về nhóm Ray Wenderlich, nhưng bạn sẽ cần sử dụng số nhận dạng cho tài khoản của riêng bạn.
Apple đã chỉ định cho bạn ID nhóm khi bạn tạo tài khoản nhà phát triển Apple của mình. Bạn có thể tìm thấy nó trong trung tâm phát triển của Apple. Đăng nhập vào trang web, nhấp vào Membership, sau đó tìm kiếm Team ID trong phần Membership Information .
Bạn có thể tìm thấy ID gói của ứng dụng thông qua các mục tiêu của Xcode Targets ▸ UniversalLinks ▸ General
Giờ đây, apple-app-site-association đã hoàn tất, đã đến lúc tải nó lên máy chủ web.
Một lần nữa, bạn phải có “ghi truy cập” vào trang web để làm điều này. Vì lợi ích của hướng dẫn này, bạn có thể tham khảo trang web đã hoàn thành , đã chứa tệp này.
Nếu bạn muốn đảm bảo nó ở đó, hãy mở http://rw-universal-links-final.herokuapp.com/apple-app-site-association. Bạn sẽ thấy rằng nó khớp với thông tin được hiển thị ở trên.
Tuyệt quá! Ứng dụng biết về trang web và trang web biết về ứng dụng UniversalLinks. Đã đến lúc bước cuối cùng: thêm logic ứng dụng để xử lý khi người dùng chạm vào liên kết toàn cầu.
Xử lý các liên kết phổ dụng
Giờ ứng dụng và trang web đã chính thức nhận thức được nhau, tất cả nhu cầu ứng dụng là mã để xử lý liên kết khi được gọi.
Mở AppDelegate.swift và thêm phương thức trợ giúp sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">presentDetailViewController</span><span class="hljs-params">(<span class="hljs-number">_</span> computer: Computer)</span></span> { <span class="hljs-keyword">let</span> storyboard = <span class="hljs-type">UIStoryboard</span>(name: <span class="hljs-string">"Main"</span>, bundle: <span class="hljs-literal">nil</span>) <span class="hljs-keyword">guard</span> <span class="hljs-keyword">let</span> detailVC = storyboard .instantiateViewController(withIdentifier: <span class="hljs-string">"DetailController"</span>) <span class="hljs-keyword">as</span>? <span class="hljs-type">ComputerDetailController</span>, <span class="hljs-keyword">let</span> navigationVC = storyboard .instantiateViewController(withIdentifier: <span class="hljs-string">"NavigationController"</span>) <span class="hljs-keyword">as</span>? <span class="hljs-type">UINavigationController</span> <span class="hljs-keyword">else</span> { <span class="hljs-keyword">return</span> } detailVC.item = computer navigationVC.modalPresentationStyle = .formSheet navigationVC.pushViewController(detailVC, animated: <span class="hljs-literal">true</span>) } |
Phương thức này mở ComputerDetailController và hiển thị Computerthông tin của tham số. Điều này cung cấp cho bạn một cách sạch sẽ để điều hướng đến một máy tính bảng duy nhất cụ thể. Bạn sẽ sử dụng phương pháp này tiếp theo.
Ngay sau phương thức trước, thêm phương thức ủy nhiệm sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">application</span><span class="hljs-params">( <span class="hljs-number">_</span> application: UIApplication, <span class="hljs-keyword">continue</span> userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]? )</span></span> -> <span class="hljs-type">Void</span>) -> <span class="hljs-type">Bool</span> { <span class="hljs-comment">// 1</span> <span class="hljs-keyword">guard</span> userActivity.activityType == <span class="hljs-type">NSUserActivityTypeBrowsingWeb</span>, <span class="hljs-keyword">let</span> url = userActivity.webpageURL, <span class="hljs-keyword">let</span> components = <span class="hljs-type">URLComponents</span>(url: url, resolvingAgainstBaseURL: <span class="hljs-literal">true</span>) <span class="hljs-keyword">else</span> { <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span> } <span class="hljs-comment">// 2</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">let</span> computer = <span class="hljs-type">ItemHandler</span>.sharedInstance.items .<span class="hljs-built_in">filter</span>({ $<span class="hljs-number">0</span>.path == components.path}).first { presentDetailViewController(computer) <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span> } <span class="hljs-comment">// 3</span> <span class="hljs-keyword">if</span> <span class="hljs-keyword">let</span> webpageUrl = <span class="hljs-type">URL</span>(string: <span class="hljs-string">"http://rw-universal-links-final.herokuapp.com"</span>) { application.<span class="hljs-keyword">open</span>(webpageUrl) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span> } <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span> } |
- Trước tiên, bạn xác minh rằng thông tin userActivity có các đặc tính được mong đợi. Cuối cùng, bạn muốn có được path thành phần cho hoạt động này. Nếu không, bạn return false chỉ ra rằng ứng dụng không thể xử lý hoạt động.
- Sử dụng path, bạn tìm một máy tính đã biết phù hợp với nó. Nếu bạn tìm thấy một, bạn trình bày bộ điều khiển xem chi tiết cho nó và return true.
- Nếu bạn không thể tìm thấy một máy tính phù hợp với đường dẫn, bạn hướng dẫn application mở URL, sẽ sử dụng ứng dụng hệ thống mặc định thay thế – rất có thể là Safari. Bạn cũng return false ở đây để cho biết rằng ứng dụng không thể xử lý hoạt động của người dùng này.
Kiểm tra các liên kết
Như đã thảo luận ở trên, không có cách nào tuyệt vời để kiểm tra xem các liên kết phổ dụng có hoạt động trong ứng dụng hướng dẫn hay không, nhưng điều quan trọng là phải hiểu kết quả mong đợi khi bạn triển khai các liên kết phổ dụng trong ứng dụng của riêng mình.
Nếu bạn đã thực hiện điều này trong ứng dụng của riêng mình, bạn sẽ có thể gửi email cho chính mình một liên kết (ví dụ: https://rw-universal-links-final.herokuapp.com/arduino.html), nhấn vào nó và xác minh rằng ứng dụng hiển thị đúng trang.
Hãy nhớ rằng các liên kết phổ biến có thể được kích hoạt từ các nơi khác là tốt, chẳng hạn như trong một UIWebView, WKWebView, SFSafariViewController, ghi chú hoặc trực tiếp trong trình duyệt Safari.
Đi về đâu từ đây?
Bạn có thể tải xuống phiên bản đã hoàn thành của dự án bằng cách sử dụng nút Tải xuống tài liệu ở đầu hoặc cuối hướng dẫn này. Và bạn sẽ tìm thấy trang web đã hoàn thành tại đây: https://rw-universal-links-final.herokuapp.com .
Xin chúc mừng! Bạn đã học được rất nhiều về cách triển khai các liên kết phổ dụng trong iOS. Bây giờ bạn đã sẵn sàng áp dụng khái niệm này vào ứng dụng của riêng bạn và tạo các liên kết phổ quát “thực” – bạn có thể làm điều đó!
Bạn muốn tìm hiểu sâu hơn về chủ đề này? Kiểm tra phần trên các liên kết phổ quát (Chương 3) trong Hướng dẫn iOS 9.
Bạn cũng có thể tìm thêm tài liệu tham khảo trực tiếp từ tài liệu của Apple .
Để kiểm tra việc triển khai các liên kết phổ biến trên trang web của riêng bạn, bạn có thể sử dụng công cụ này hoặc trình xác thực liên kết của riêng Apple, cả hai đều có thể chỉ ra các vấn đề có thể xảy ra trong quá trình thiết lập của bạn.
TopDev via raywenderlich.com