2017-03-28 2 views
2

Share-Dialog öffnet Facebook-App und trotz Inhalt ist erfolgreich geteilt Ich erhalte immer .cancelled Rückruf. In beiden Fällen - wenn ich die Freigabe abbringe und die Freigabe erfolgreich ist. Irgendeine Idee was falsch ist? Pods Versionen:Facebook ShareDialog immer zurück .Canceled bei Fertigstellung

Using Bolts (1.8.4) 
Using FBSDKCoreKit (4.20.2) 
Using FBSDKLoginKit (4.20.2) 
Using FBSDKShareKit (4.20.2) 
Using FacebookCore (0.2.0) 
Using FacebookLogin (0.2.0) 
Using FacebookShare (0.2.0) 

Snippet für die Ansicht Dialog:

@IBAction func onShareClicked(_ sender: UIButton) { 
    do{ 
     var myContent = LinkShareContent(url: URL(string: "https://www.facebook.com/8MinuteWorkoutChallenge")!) 
     myContent.hashtag = Hashtag("#8MWC") 

     let shareDialog = ShareDialog(content: myContent) 
     shareDialog.mode = .native 
     shareDialog.failsOnInvalidData = true 
     shareDialog.completion = { result in 
      switch result { 
      case .success: 
       print("Share succeeded") 
      case .failed: 
       self.shareButton.isHidden = true 
      case .cancelled: 
       print("Share cancelled") 
      } 
     } 

     try shareDialog.show() 
    } catch { 
     print("Error: \(error)") 
    } 
} 

Config

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>fbapi</string> 
    <string>fb-messenger-api</string> 
    <string>fbauth2</string> 
    <string>fbshareextension</string> 
</array> 
<key>CFBundleURLTypes</key> 
<array> 
    <dict> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>fb188***33776</string> 
     </array> 
    </dict> 
</array> 
<key>FacebookAppID</key> 
<string>18851***3776</string> 
<key>FacebookDisplayName</key> 
<string>8MWC</string> 
+0

Haben Sie die Berechtigung zum Veröffentlichen von Benutzern angefordert? –

+0

Nein, habe ich nicht. In Docs und Freigaben funktioniert nichts, nicht aber der Callback. –

Antwort

1

diese Nutzung unter Code den FB Aktie Dialog zu aktuellen View-Controller zeigen:

{ 
    let shareDialog: FBSDKShareDialog = FBSDKShareDialog() 
    shareDialog.shareContent = content 
    shareDialog.delegate = self 
    shareDialog.fromViewController = self 
    shareDialog.show() 
} 

Das funktioniert für mich, um den Link zu Facebook zu teilen. Sie können die Delegierungsmethode verwenden, um den Freigabe-Status zurückzurufen.

+0

Dies ist für alte SDK. Der neue hat eine andere API –

+0

shareDialog.presentingViewController = Selbst hat den Trick gemacht. Vielen Dank –

1

Überprüfen Sie zuerst, ob die Berechtigung für publish action erteilt wurde, wenn ja, dann share Ihre content. Andernfalls erhalten Sie die Erlaubnis des Benutzers, den Post auf der Zeitleiste zu veröffentlichen und den Post zu teilen, wenn die Berechtigung erteilt wurde.

if FBSDKAccessToken.current().hasGranted("publish_actions") { 
     if FBSDKShareAPI().self.canShare() { 
      FBSDKShareAPI.share(with: videoContent, delegate: self) 
     } else { 
      print("Graph API can not share your video") 
     } 

    } else { 

     // Get publish_actions permission from fb app and upload photo to share. 
     let loginManager = FBSDKLoginManager() 
     loginManager.logIn(withPublishPermissions: ["publish_actions"], from: fromViewController, handler: { (result, error) in 

      if result != nil && error == nil { 

       if FBSDKShareAPI().self.canShare() { 
        FBSDKShareAPI.share(with: videoContent, delegate: self) 
       } else { 
        print("Graph API can not share your video") 
       } 
      } else if error != nil { 
       print("Error in sharing photo:- \(error!)") 
      } 
     }) 
    } 
Verwandte Themen