Odpowiedzi:
Możesz nadal używać schematów adresów URL podczas tworzenia aplikacji na iOS 9 i chcesz wywoływać schematy adresów URL, musisz teraz zadeklarować je w swoich aplikacjach Info.plist. Jest nowy klucz, LSApplicationQueriesSchemes , i tutaj będziesz musiał dodać listę schematów, na których chcesz, aby można było otworzyć adres URL.
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbauth2</string>
</array>
Jeśli używasz iOS9, ważne jest, aby zaktualizować plik info.plist. Wystarczy wykonać 3 kroki 1. Przejdź do info.plist 2. Dodaj pole o typie danych LSApplicationQueriesSchemes NSArray . 3. Dodaj element typu danych NSString, nadaj mu nazwę fbauth2.
Otóż to. Po prostu wyczyść i uruchom. ostrzeżenie nie pokaże się ponownie.
Jeśli chodzi o wersję 4.6.0 FaceBook SDK, dodaj następujący klucz do pliku plist:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fb-messenger-api</string>
<string>fbauth2</string>
<string>fbshareextension</string>
</array>
not
ci, żebyś to zrobił, dobrze, że to wskazałeś!
Wystarczy postępować zgodnie z wyjaśnieniem na Facebooku: Przygotowanie aplikacji na iOS9
Apple wspomina o tym w swoich: Prywatność i Twoja aplikacja Keynote 2015
Po prostu nie dodawaj tego do swoich CFBundleURLSchemes ... to faktycznie spowoduje HIJACK próbę dowolnej aplikacji do autoryzacji Facebooka, powodując wyskakujące okienko z oknem dialogowym "X app chce otworzyć" ...
NIE CHCESZ tego robić.
por .:
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
Otrzymałem to podczas uruchamiania testów Kiwi, ponieważ nasz cel testowy nie miał dostępu do głównego pakietu. Musiałem więc dodać warunek do isRegisteredCanOpenURLScheme
inFBSDKInternalUtility.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];
}
Aby zbudować aplikację na iOS 9: (dla funkcji Facebook Share)
Info.plist
plik, dodaj kolejne pole LSApplicationQueriesSchemes w sekcji Lista właściwości informacji i ustaw jego typ danych Array
lub NSArray
.String
lub NSString
.fbauth2
, fbshareextension
, fbapi
jako wartość elementu.Śledź to zdjęcie :
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>
Możesz spróbować z poniższym kodem w swift 5.0
extension Bundle {
static let externalURLSchemes: [String] = {
guard let urlTypes = main.infoDictionary?["LSApplicationQueriesSchemes"]
as? [String] else {
return []
}
return urlTypes
}()
}
Możesz zadzwonić za pomocą Bundle
guard Bundle.externalURLSchemes.contains(URLScheme) else {
return
}