Câu trả lời:
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, LSApplicationQueriesScheme , và ở đây bạn sẽ cần thêm danh sách các lược đồ bạn muốn là canOpenURL trên.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbauth2</string>
</array>
Nếu bạn đang sử dụng iOS9 thì điều này rất quan trọng để cập nhật tệp info.plist của bạn. Bạn chỉ cần thực hiện 3 bước 1. Truy cập thông tin.plist 2. Thêm một trường cụ thể là kiểu dữ liệu LSApplicationQueriesScheme NSArray. 3. Thêm một mục của kiểu dữ liệu NSString đặt tên nó là fbauth2.
Đó là nó. Chỉ cần làm sạch và chạy. cảnh báo sẽ không hiển thị lại.
Đối với v4.6.0 của SDK FaceBook, hãy thêm khóa sau vào tệp plist của bạn:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
not
cho bạn biết điều này, thật tốt khi bạn chỉ ra điều đó!
Chỉ cần làm theo lời giải thích của Facebook: Chuẩn bị ứng dụng của bạn cho iOS9
Apple đề cập đến nó trong phần: Quyền riêng tư và ứng dụng của bạn 2015
Vui lòng chỉ không thêm phần này vào CFBundleURLScheme của bạn ... điều đó thực sự sẽ HIJACK bất kỳ nỗ lực nào của ứng dụng tại Facebook auth, khiến cửa sổ bật lên hiển thị hộp thoại "Ứng dụng X muốn mở" ...
Bạn KHÔNG muốn làm điều đó.
cf:
https://developers.facebook.com/docs/applinks/ios
https://www.fireeye.com/blog/threat-research/2015/04/url_masques_on_apps.html
https://www.reddit.com/r/workflow/comments/2tlx29/get_url_scheme_of_any_app
Tôi đã nhận được điều này khi chạy các thử nghiệm Kiwi của mình vì mục tiêu thử nghiệm của chúng tôi không có quyền truy cập vào gói chính. Vì vậy, tôi đã phải thêm một điều kiện để isRegisteredCanOpenURLScheme
trongFBSDKInternalUtility.m
+ (BOOL)isRegisteredCanOpenURLScheme:(NSString *)urlScheme
{
static dispatch_once_t fetchBundleOnce;
static NSArray *schemes = nil;
dispatch_once(&fetchBundleOnce, ^{
schemes = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"LSApplicationQueriesSchemes"];
if (!schemes) { // This is a work around for our Kiwi tests as the Specs target doesn't have access to main bundle
NSBundle *bundle = [NSBundle bundleForClass:[self class]];
NSString *path = [bundle pathForResource:@"Info" ofType:@"plist"];
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:path];
schemes = [dictionary valueForKey:@"LSApplicationQueriesSchemes"];
}
});
return [schemes containsObject:urlScheme];
}
Để xây dựng ứng dụng của bạn cho iOS 9: (Dành cho Facebook Share)
Info.plist
tệp, thêm một trường LSApplicationQueriesScheme khác trong Danh sách thuộc tính thông tin và đặt kiểu dữ liệu Array
hoặc NSArray
.String
hoặc NSString
.fbauth2
, fbshareextension
, fbapi
như giá trị mục.Theo dõi bức ảnh này :
Write the below code in your info.plist under the **LSApplicationQueriesScheme**
<string>fbapi</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>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-api20140430</string>
<string>fb-messenger-platform-20150128</string>
<string>fb-messenger-platform-20150218</string>
<string>fb-messenger-platform-20150305</string>
Bạn có thể thử với mã dưới đây trong swift 5.0
extension Bundle {
static let externalURLSchemes: [String] = {
guard let urlTypes = main.infoDictionary?["LSApplicationQueriesSchemes"]
as? [String] else {
return []
}
return urlTypes
}()
}
Bạn có thể gọi bằng Bundle
guard Bundle.externalURLSchemes.contains(URLScheme) else {
return
}