2017-11-27 1 views
0

私はcocoapodsを使ってインストールしたswift SDKを使用しています。私が望むのは、単純な共有関数で、.cancelledや.successなどの異なる結果が返されたときに異なるメッセージアラートが表示されます。ios facebook swift sdk共有ダイアログが成功を返すことはありません

共有部分は問題ありません。私のFacebookにコンテンツを投稿することはできますが、投稿後は空白のままで、成功しません。空白の画面を終了する唯一の方法は、左上の終了ボタンをクリックすることですが、それはキャンセルされます。実際に正常に投稿されたら別のメッセージを表示する必要があります。ここで

は私のコードです:

let url=URL(string: imageUrl as String) 
let content = LinkShareContent(url: url!) 
let shareDialog = ShareDialog(content: content) 
shareDialog.presentingViewController = self 
shareDialog.mode = .browser 
shareDialog.failsOnInvalidData = true 
shareDialog.completion = { result in 
    // Handle share results 
    switch result{ 
    case .success: 
    self.view.showToast("Shared successfully", position: .bottom, popTime: 1, dismissOnTap: false) 
    case .failed: 
    self.view.showToast("Shared failed", position: .bottom, popTime: 1, dismissOnTap: false) 
    case .cancelled: 
    self.view.showToast("Shared cancelled", position: .bottom, popTime: 1, dismissOnTap: false) 
    } 
} 
try? shareDialog.show() 

私は実際に一部が正しくなるように、それは予想される警告メッセージを与えるポストをキャンセルした場合。 .sharesheetモードを使用しようとしましたが、そのモードではダイアログが閉じられ、成功を返し、コンテンツを投稿した後に正しい警告メッセージが表示されます。

私の質問はここにあります。私のコードには何か問題があり、成功を返せませんでしたか?それとも.browserモードですか?どちらの場合でも、投稿後に自動的に閉じるようにして成功を返す方法は?

ありがとうございます。

答えて

0

委任方法を使用して共有ステータスコールバック(FBSDKSharingデリゲートメソッド)を取得することができます。つまり、didCompleteWithResults、didFailWithError、sharerDidCancelです。 link

+0

私が試した中でFBSDKCoreKitをインポートし、成功した、それだけで空白の画面に貼り付けコンテンツを投稿し、任意の結果をバック与えないことを忘れないでください。デリゲート機能を呼び出すのは夜ではありません。どんな手掛かり? –

0

基本的には、iDのFacebook SDKのクイックスタートのように、AppDelegateファイルにいくつかの行を追加するだけで済みます。

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [FBSDKAppEvents activateApp]; 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    [[FBSDKApplicationDelegate sharedInstance] application:application 
         didFinishLaunchingWithOptions:launchOptions]; 
    return YES; 
} 

- (BOOL)application:(UIApplication *)application 
     openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
    annotation:(id)annotation { 
    return [[FBSDKApplicationDelegate sharedInstance] application:application 
                openURL:url 
              sourceApplication:sourceApplication 
                annotation:annotation]; 
} 

クイックスタートの迅速なバージョンがないため、AppDelegateを変更する必要があるかどうかわかりませんでした。とにかく、ここで迅速なコードだと右ポストボタンを打った後、AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
} 

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { 
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation) 
} 

func applicationDidBecomeActive(_ application: UIApplication) { 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    FBSDKAppEvents.activateApp() 
} 
関連する問題