2015-09-18 10 views
8

Wraz z Xcode7 aktualizuję pakiet SDK do wersji Facebook pod FBSDKShareKit (4.6.0). I dodałem schemat Facebooka do WhiteList, jak poniżej. referencyjny: https://developers.facebook.com/docs/ios/ios9FBSDKShareDialog z Facebook SDK nie działa na iOS9?

<key>LSApplicationQueriesSchemes</key> 
<array> 
     <string>fbapi</string> 
     <string>fb-messenger-api</string> 
     <string>fbauth2</string> 
     <string>fbshareextension</string> 
</array> 

Jednak Poniższy kod pokazuje tylko iOS domyślnie dialog społeczny na iOS9. Ten sam kod z tym samym plikiem binarnym na iOS8 może otworzyć aplikację Facebooka i poprawnie wyświetlić okno dialogowe udostępniania.

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init]; 
content.contentURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.example.com"]]; 
content.contentDescription = @"Test"; 
[FBSDKShareDialog showFromViewController:self withContent:content delegate:nil]; 

Domyślam się, że aplikacja Facebook nie została znaleziona na iOS9, a następnie pokazuje domyślne okno dialogowe społeczności. Nawet nie pojawił się komunikat o błędzie.

Czy coś mi brakuje? Czy jest to bug systemu iOS9?

+0

Mam ten sam problem. Myślę, że śledziłem wszystko na dokumencie. Jeśli aplikacja Facebook nie zostanie znaleziona, powinna nadal korzystać z internetowej formy udostępniania. I działa dobrze w symulatorze. – mrhangz

Odpowiedz

27

Domyślam się, że Facebook zmienił zachowanie, ponieważ iOS 9 wyświetla teraz okno dialogowe z pytaniem, czy chcesz "otworzyć Facebooka"? podczas przełączania aplikacji. Nawet dla FBSDKLoginManager, metoda przełączania aplikacji (natywna) wydaje się być mniej preferowana niż modalny UIWebView.

Jednak nadal można zmusić okno zakładowego, aby przełączyć się do aplikacji Facebook (zakładając, że masz konfigurację plist aplikacji, jak opisano w https://developers.facebook.com/docs/ios/ios9) za pomocą tej metody:

FBSDKShareDialog *dialog = [[FBSDKShareDialog alloc] init]; 

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"fbauth2://"]]){ 
    dialog.mode = FBSDKShareDialogModeNative; 
} 
else { 
    dialog.mode = FBSDKShareDialogModeBrowser; //or FBSDKShareDialogModeAutomatic 
} 
dialog.shareContent = content; 
dialog.delegate = self; 
dialog.fromViewController = self; 
[dialog show]; 
+1

Wielkie dzięki. To działa, a tego właśnie chcę. ^^ – derjohng

+2

Ponadto nie będzie działać, jeśli aplikacja fb nie jest zainstalowana, więc lepiej sprawdź, a jeśli nie jest zainstalowana, użyj zamiast tego FBSDKShareDialogModeFeedBrowser. – mrhangz

+0

@mrhangz Zmieniłem rozwiązanie, aby dołączyć czek, jeśli aplikacja Facebook jest zainstalowana. Zakładałem, że automatycznie powróci do innych trybów, ale tak się nie dzieje. Dzięki! Ponadto wolę FBSDKShareDialogModeBrowser od FBSDKShareDialogModeFeedBrowser. – wilsontgh

0

W iOS 9 Poniżej znajduje się tylko rozwiązanie, które zadziałało dla mnie, aby wykryć, czy aplikacja Facebook jest zainstalowana w urządzeniu, czy nie:

NSString *urlString = @"fbapi://"; 
    NSURL *url1 = [NSURL URLWithString:urlString]; 

    if ([[UIApplication sharedApplication] canOpenURL:url1]) { 
     [[UIApplication sharedApplication] openURL:url1]; 
    } 
    else { 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itunes link for download app"]]; 
    }