URL sau mở trên iOS 8.3 trở xuống, nhưng nó không hoạt động và iOS 9
let instagramURL = NSURL(string: "instagram://app")
Tại sao URL không mở?
URL sau mở trên iOS 8.3 trở xuống, nhưng nó không hoạt động và iOS 9
let instagramURL = NSURL(string: "instagram://app")
Tại sao URL không mở?
Câu trả lời:
iOS 9 đã thực hiện một thay đổi nhỏ đối với việc xử lý lược đồ URL. Bạn phải liệt kê danh sách các url mà ứng dụng của bạn sẽ gọi để sử dụng LSApplicationQueriesSchemes
khóa trong Info.plist
.
Vui lòng xem bài đăng tại đây: http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes
Kết luận chính là:
Nếu bạn gọi phương thức của can canpenpenL trên một URL không có trong danh sách trắng của bạn, nó sẽ trả về NÚT SỐ, ngay cả khi có một ứng dụng được cài đặt đã đăng ký để xử lý lược đồ này. Một ứng dụng này Ứng dụng này không được phép truy vấn cho sơ đồ xxx Mục nhập syslog sẽ xuất hiện.
Nếu bạn gọi phương thức openURL trực tiếp trên một URL không có trong danh sách trắng của bạn, nó sẽ thất bại trong âm thầm. Một ứng dụng này Ứng dụng này không được phép truy vấn cho sơ đồ xxx Mục nhập syslog sẽ xuất hiện.
Tác giả cũng suy đoán rằng đây là một lỗi với HĐH và Apple sẽ sửa lỗi này trong phiên bản tiếp theo.
-openURL:
luôn luôn hoạt động mặc dù -canOpenURL:
có giới hạn.
Như đã nói ở trên, bạn muốn thêm một khóa trong phần thông tin, đây là danh sách cho hầu hết các mạng xã hội
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fb</string>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>twitter</string>
<string>viber</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string> instagram-stories</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
<string>googlephotos</string>
<string>ha</string>
<string>yammer</string>
</array>
* 3 trận đấu đầu tiên của Facebook (FBSDK 4.6): fbapi, fbauth2, fbshareextension. "Ha" là dành cho snapchat
Ha://add/[username]
để thêm bạn bè snapchat trong swift 3
Đây là một tính năng bảo mật mới của iOS 9. Xem WWDC 2015 Phiên 703 để biết thêm thông tin.
Bất kỳ ứng dụng nào được xây dựng với SDK 9 đều cần cung cấp một LSApplicationQueriesSchemes
mục trong tệp plist của nó, tuyên bố những kế hoạch mà nó cố gắng truy vấn.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>urlscheme</string>
<string>urlscheme2</string>
<string>urlscheme3</string>
<string>urlscheme4</string>
</array>
openURL:
. Và nó sẽ cho bạn biết nếu mở đã thành công hay không.
Giả sử hai ứng dụng TestA và TestB. TestB muốn truy vấn nếu TestA được cài đặt. "TestA" định nghĩa lược đồ URL sau trong tệp info.plist của nó:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>testA</string>
</array>
</dict>
</array>
Ứng dụng thứ hai "TestB" cố gắng tìm hiểu xem "TestA" có được cài đặt hay không bằng cách gọi:
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];
Nhưng điều này thường sẽ trả về NO trong iOS9 vì "TestA" cần được thêm vào mục nhập LSApplicationQueriesScheme trong tệp thông tin.plist của TestB. Điều này được thực hiện bằng cách thêm đoạn mã sau vào tệp info.plist của TestB:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>TestA</string>
</array>
Một triển khai làm việc có thể được tìm thấy ở đây: https://github.com/gatzsche/LSApplicationQueriesScheme-Working-Example
Từ, Phiên 703 WWDC 2015:
Bạn có thể tiếp tục sử dụng các lược đồ URL khi bạn xây dựng ứng dụng cho iOS 9 và bạn muốn gọi các lược đồ URL, bây giờ bạn sẽ cần khai báo chúng trong ứng dụng Info.plist của bạn. Có một khóa mới
LSApplicationQueriesSchemes
, và ở đây bạn sẽ cần thêm danh sách các lược đồ bạn muốn là canOpenURL.
Chia sẻ Facebook từ hộp thoại chia sẻ không thành công ngay cả với câu trả lời @Matthieu (chính xác 100% cho các URL xã hội còn lại). Tôi đã phải thêm một bộ URL tôi đã đảo ngược từ SDK Facebook.
<array>
<string>fbapi</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>twitter</string>
<string>whatsapp</string>
<string>wechat</string>
<string>line</string>
<string>instagram</string>
<string>kakaotalk</string>
<string>mqq</string>
<string>vk</string>
<string>comgooglemaps</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
</array>
Trong Swift 4.2 và Xcode 10.1
Trong info.plist cần thêm CFBundleURLScheme và LSApplicationQueriesScheme.
-> Chọn info.plist trong dự án của bạn,
-> nhấp chuột phải,
-> Chọn Mở dưới dạng Mã nguồn
Xem ảnh chụp màn hình bên dưới
-> tập tin xml sẽ được mở
-> sao chép - dán mã bên dưới và thay thế bằng ID của bạn
CFBundleURLScheme và LSApplicationQueriesScheme cho gmail, fb, twitter và được liên kết trong.
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>li5****5</string>
<string>com.googleusercontent.apps.8***************5f</string>
<string>fb8***********3</string>
<string>twitterkit-s***************w</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>8*********3</string>
<key>FacebookDisplayName</key>
<string>K************ app</string>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-share-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
<string>twitter</string>
<string>twitterauth</string>
<string>linkedin</string>
<string>linkedin-sdk2</string>
<string>linkedin-sdk</string>
</array>
Xem bên dưới màn hình cuối cùng của bạn info.plist tập tin là
Vâng, bạn có thể mở một ứng dụng bằng cách gọi trực tiếp openURL:
hoặc openURL:options:completionHandler:
(iOS 10 trở đi) mà không cần thực hiện kiểm tra có điều kiện canOpenURL:
. Vui lòng đọc phần thảo luận trong tài liệu Apple cho canOpenURL: phương thức có nội dung:
phương thức openURL: không bị ràng buộc bởi
LSApplicationQueriesSchemes
yêu cầu.
Dường như không có ai đề cập đến cách chỉ định URL với các tham số được nhúng. Bất kỳ URL nào chứa tham số đều không thể chỉ định URL cụ thể trong LSAppluggestQueriesScheme. Ví dụ: giả sử tôi có một ứng dụng email vượt qua địa chỉ email của người gửi:
myemail://mailto?bob@gmail.com
Cách duy nhất để nó hoạt động trong iOS9 là xóa mọi tham số.
myemail
. Các thông số không có vai trò ở đây.
Swift 3.1, Swift 3.2, Swift 4
if let urlFromStr = URL(string: "instagram://app") {
if UIApplication.shared.canOpenURL(urlFromStr) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(urlFromStr)
}
}
}
Thêm những thứ này trong Info.plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>instagram</string>
</array>
Khi tôi cố gắng gọi Facebook từ ứng dụng của mình ngày hôm nay, tôi thấy rằng không có LSApplicationQueriesSchemes
khóa nào tôi có thể thêm vào Info.plist
(Phiên bản Xcode 8.2.1 (8C1002)). Tôi đã mở Info.plist
với Sublime Text và tự thêm nó vào tệp, sau đó nó hoạt động. Chỉ để cho bạn biết rằng nếu bạn không thể tìm thấy chìa khóa, chỉ cần tự thêm nó.
+canOpenURL:
trở lại?