最新のFacebook SDKを使用するようにアプリをアップデートしていて、iOS6ネイティブFacebookのサポートにアクセスできます。現在、かなり古いバージョンのFacebook SDKを使用しています。[FBSession openActiveSessionWithPublishPermissions:..]を使用するとエラーが発生する
Facebookの唯一の機能として、Facebookの「publish_actions」権限が必要です。
私は当初[FBSession openActiveSessionWithPublishPermissions: ...]
を使用できると思っていましたが、iOS6の設定でFacebookが設定されている場合、iOS6ではこれが失敗します。それはfrom the Facebook docs、この要件のため失敗します。
注意、アプリは、彼らがユーザーから 権限を要求する方法を変更する必要が、iOSの6ネイティブ認証を使用するように - と書き込み権限を読むためのアプリが彼らの要求を分離しなければなりません。 iOS向けFacebook SDKは、これらの機能をサポートしており、開発者が 複数のiOSバージョンとデバイス設定で動作するアプリを開発するのに役立ちます。
これは大きなPITA、IMOです。私たちの好みは、一度ユーザーに許可を求めてやりなおすことですが、Apple/Facebookごとの「新しい」理想は、必要なときに特定のアクセス許可がコンテキストにあることを確認することです。
現時点では、iOS5ユーザーと設定でFacebookが設定されていないiOS6ユーザーの以前の動作を維持する予定です。また、ネイティブアクセスを使用しているiOS6ユーザーのための新しいダブルプロンプトに準拠しています。
これを行うにはどうすればよいですか? Facebook SDKがiOS6ネイティブログインと代替メカニズムを選択するかどうかを検出するにはどうすればよいですか?私は明白な何かを見落としていますか?
EDIT:
gerraldWilliam右のトラックに私を置きます。彼の解決策は、ACAccountTypeIdentifierFacebookがiOS5では利用できないことを除いてほとんど機能します。また、ユーザーがAppへの設定でFBアクセスをブロックした場合、accountsWithAccountType呼び出しは空の配列を返します。
"com.apple.facebook"という一致するアカウントタイプを尋ねると、最初の問題を回避できます。これは、iOS5ではnil、iOS6では実際のアカウントタイプオブジェクトを返します。
しかし、2番目の問題は解決できません。私の新しい計画は、iOS6の初期セッションを常に読み取り専用の権限で開き、後で必要に応じて公開権限を得るためのコンテキストでプロンプトすることです。 iOS5では、依然として必要なpublish_actions権限を指定して初期セッションを開きます。ここでは、コードがあります:
ACAccountStore* as = [[ACAccountStore new] autorelease];
ACAccountType* at = [as accountTypeWithAccountTypeIdentifier: @"com.apple.facebook"];
if (at != nil) {
// iOS6+, call [FBSession openActiveSessionWithReadPermissions: ...]
} else {
// iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...]
}
は、このほとんど動作します。 1)ACAccountTypeIdentifierFacebookはiOS5と2では利用できません。ユーザーが設定でFBを設定しているが呼び出し元のアプリケーションへのアクセスをブロックしている場合、accountsWithAccountTypeは空の配列を返します。正しい答えとして私の究極の解決への道を私を置くようにマーキングしてください。それは私が質問に入れます。 – TomSwift
'accountsWithAccountType'は私のために空の配列を返します。私がiOS 6にいてもFacebookの統合が設定されていて、投稿することは可能です。 – jowie
また私のために空であり、この迷惑なエラーを取得com.facebook.sdkエラー2 ...アドバイス? – D33pN16h7