3

このコードを使用して、共有ダイアログを表示します。

if (![[FBSession activeSession] isOpen]) {[self login]; return;}

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       @"name", @"name",
                                       @"caption", @"caption",
                                       @"description", @"description",
                                       @"http://cnn.com", @"link",
                                       @"http://cnn.com/.png", @"picture",
                                       nil];

  [FBWebDialogs presentFeedDialogModallyWithSession:nil
                                           parameters:params
                                              handler:
     ^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
         if (error) {
             NSLog(@"Error publishing story.");
         } else {
             if (result == FBWebDialogResultDialogNotCompleted) {
                 NSLog(@"User canceled story publishing (clicked the 'x' icon)");
             } else {
                 // Handle the publish feed callback
                 NSLog(@"Handle the publish feed callback");
             }
         }
     }];

Info.plist に適切なエントリ (sdk ドキュメントに従って必要) を追加しました。

ここに画像の説明を入力

Facebookのリダイレクトも処理するAppDelegateメソッド:

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    // attempt to extract a token from the url
    return [FBAppCall handleOpenURL:url
                  sourceApplication:sourceApplication
                    fallbackHandler:^(FBAppCall *call) {
                        NSLog(@"In fallback handler");
                    }];
}

-(void)applicationWillTerminate:(UIApplication *)application{

    [FBSession.activeSession close];

}

また、iOS Facebook 3.5.1 SDK に必要なフレームワークも追加しました。

ここに画像の説明を入力

空のダイアログ ボックス(実際のデバイスとシミュレータの両方) が表示され、読み込みインジケータが永久に回転します。

ここに画像の説明を入力

ログなどにエラーは表示されず、簡単に閉じることができます (正しいハンドラー ログを使用)。

FBSession が正しく開始され、開かれていると仮定します (Safari へのリダイレクトを介して正常に承認し、アプリに戻ることができるため、リダイレクトが正常に機能すると思います)。

なぜそれが起こっているのですか?私は何が欠けていますか?ところで: エラー ログがないのはなぜですか?

これまで何度も Facebook の統合を実装してきたので、これはとてもイライラしますが、このアプリでは、「これまでにないほど簡単になる」と宣伝されている最新の SDK を試してみたかったのです。

4

5 に答える 5

0

では、公開する権限があるかどうかを確認してください。ない場合は、許可を求めてください。

if([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound){
   [FBSession.activeSession requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                         defaultAudience:FBSessionDefaultAudienceEveryone
                                       completionHandler:
                                       ^(FBSession *session, NSError *error) {

                                        if (!error) {
                                            //Here call your method to publish again so you have granted the active session has publish permissions.
                                        }
             }];

Web フィード ダイアログはまだ使用していません。

于 2013-05-02T14:47:12.610 に答える
0

私は同じ問題に遭遇しました。しかし、最終的にこのエラーは params ディクショナリの @"picture" キーが原因でした。したがって、私のアドバイスは、 params 辞書を Facebook の例の辞書に置き換えることです

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"Sharing Tutorial", @"name",
                                   @"Build great social apps and get more installs.", @"caption",
                                   @"Allow your users to share stories on Facebook from your app using the iOS SDK.", @"description",
                                   @"https://developers.facebook.com/docs/ios/share/", @"link",
                                   @"http://i.imgur.com/g3Qc1HN.png", @"picture",
                                   nil];

次に、辞書のどのキーが空白の画面につながるかを段階的に把握します。

于 2014-03-30T15:10:11.253 に答える