3

現在、iOS用の古いFacebook SDKを使用して、フィードダイアログからFacebookへの投稿をサポートしているアプリがあります。

iOS用のFacebookSDK3.1にアップデートした後、次のいずれかができるようです。

  1. 古いスタイルのAPIを使用します(Facebook.h、インスタンス化Facebook、呼び出しdialog:...
  2. または、新しいスタイルのAPIFacebookSDK.hを使用します(、共有FBSessionのネイティブダイアログを使用します)

異なるヘッダーファイルが衝突し、完全に互換性がないように見えます。

両方できますか?もしそうなら、どのように?

4

5 に答える 5

8

代わりに Facebook.h をインクルードしてください。これを最初に行うには、DeprecatedHeaders フォルダーを Frameworks プロジェクトにコピーします。DeprecatedHeaders は ~/Documents/FacebookSDK/FacebookSDK.frameworks/Versions/A/ にあります。コピーするときは、アイテムをプロジェクトにコピーしないでください。参照としてコピーされたままになります。

次に、あなたが持っているコードで:

#import <FacebookSDK/FacebookSDK.h>

これに置き換えます:

#import "Facebook.h"

エラーが発生する場合があります。その場合は、プロジェクトを閉じてから再度開きます。

次に、Facebook オブジェクトを宣言し、セッションを設定するか、セッションが開いているか閉じているときにセッションをクリアします。

例として、サンプルを取り上げます: https://github.com/fbsamples/ios-3.1-howtos/tree/master/ShareNativeDialogsHowToこれはここに文書化されています, https://developers.facebook.com/docs/howtos/share-ネイティブ-ダイアログ-ios-sdk/

そのサンプルに次の変更を加えて、共有 UI を使用してビュー コントローラーにフォールバックするのではなく、フィード ダイアログにフォールバックすることができます。ViewController.m では、Facebook ヘッダーを含めた後にこれらの変更を行います。

....
@property (unsafe_unretained, nonatomic) IBOutlet UIButton *publishButton;
@property (nonatomic, retain) Facebook *facebook;

....
@synthesize authButton;
@synthesize facebook = _facebook;

....
- (void)sessionStateChanged:(NSNotification*)notification {
    if (FBSession.activeSession.isOpen) {
        self.publishButton.hidden = NO;
        [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
        if (nil == self.facebook) {
            self.facebook = [[Facebook alloc]
                             initWithAppId:FBSession.activeSession.appID
                             andDelegate:nil];
            // Store the Facebook session information
            self.facebook.accessToken = FBSession.activeSession.accessToken;
            self.facebook.expirationDate = FBSession.activeSession.expirationDate;
        }
    } else {
        self.publishButton.hidden = YES;
        [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
        self.facebook = nil;
    }
}

- (void) publishUsingFeedDialog {
    // Put together the dialog parameters
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"Facebook SDK for iOS", @"name",
                                   @"Build great social apps and get more installs.", @"caption",
                                   @"The Facebook SDK for iOS makes it easier and faster to develop Facebook integrated iOS apps.", @"description",
                                   @"https://developers.facebook.com/ios", @"link",
                                   @"https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png", @"picture",
                                   nil];

    // Invoke the dialog
    [self.facebook dialog:@"feed" andParams:params andDelegate:nil];
}


- (IBAction)publishButtonAction:(id)sender {
    BOOL displayedNativeDialog =
    [FBNativeDialogs
     presentShareDialogModallyFrom:self
     initialText:@""
    ....

    if (!displayedNativeDialog) {
        /*ShareViewController *viewController =
        [[ShareViewController alloc] initWithNibName:@"ShareViewController"
                                              bundle:nil];
        [self presentViewController:viewController
                           animated:YES
                         completion:nil];*/
        [self publishUsingFeedDialog];
    }
}
于 2012-10-23T23:50:02.707 に答える
1

両方使うと「重複エラー」になると思います。私はそれがひどいことを知っています。

私は何日も重複エラーをいじっています。あなたがそこに着いたかどうか私に知らせてください。

于 2012-10-04T21:12:16.817 に答える
0

インポートしてみる

"FBSession.h" 

それ以外の

#import<FacebookSDK/FacebookSDK.h>

重複エラーを解決します..

于 2013-03-22T09:25:30.490 に答える
0

おそらく、共通のインターフェイスを抽象化し、それを別のソース ファイルに 2 回実装する必要があります (そのため、コンパイラは Facebook.h と FacebookSDK.h を同じファイルで認識しません)。

于 2012-10-04T21:14:53.930 に答える
0

不可能です。Feed Dialog の代わりにGraph API https://developers.facebook.com/docs/howtos/publish-to-feed-ios-sdk/を使用する必要があります:(

于 2012-11-16T09:36:31.140 に答える