SLComposeViewControllerを使っている時に、同じ文面でもTwitterには正常に投稿できるがFacebookには投稿に失敗してしまうというケースが発生することがあります。画面にはただ「Facebookに投稿できません」とアラートが表示されるだけですし、SLComposeViewControllerは投稿失敗時のerrorに対してコールバックblockもdelegateも存在しないので原因を調べることもできません。
実機のコンソールログを見てみると以下の様なエラーになっています。
Jan 8 11:01:25 akisute-no-iPhone sociald[6444]SLComposeViewControllerが裏で使用しているsocialdのSLDFacebookPostUploadクラスがエラーを吐いています。一見しただけだとOAuthExceptionとか書いてあって認証系のエラーかと勘違いしてしまいそうですが、実はこれSLComposeViewControllerのaddURL:メソッドに「空の」NSURLインスタンスを渡した時に発生するエラーです。以下のコードで簡単に実験することができます。: 2013-01-08 11:01:25.665|sociald|0x1fd65e70: Request status was 400 Jan 8 11:01:25 akisute-no-iPhone sociald[6444] : 2013-01-08 11:01:25.668|sociald|0x1fd65e70: SLDFacebookPostUpload: The response indicates an error Parameters: {type = immutable dict, count = 1, entries => 2 : {contents = "error"} = {type = immutable dict, count = 3, entries => 0 : {contents = "message"} = {contents = "(#100) The parameter link is required"} 1 : {contents = "type"} = {contents = "OAuthException"} 2 : {contents = "code"} = {value = +100, type = kCFNumberSInt64Type} } } . HTTP status 0
対策としてaddURL:しようとしているURLのschemeがnilまたは空文字列だったらaddURL:しないとすればOKです。しかしTwitterでは通るのにFacebookだけ通らないのはなんだか納得いかない・・・><