Mountain Lion が正式に Facebook と統合されたので、OS X で少し遊んでみたいと思いましたAccounts.framework
。Social.framework
Facebook 開発者アプリでアプリをセットアップし、次のコードを使用して、ログインしているユーザーの Facebook アカウントへのアクセスを要求しました。
ACAccountStore *acStore = [[ACAccountStore alloc] init];
ACAccountType *accType = [acStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:FB_APP_ID, ACFacebookAppIdKey, @"read_stream, publish_stream", ACFacebookPermissionsKey, ACFacebookAudienceFriends, ACFacebookAudienceKey, nil];
[acStore requestAccessToAccountsWithType:accType options:options completion:^(BOOL granted, NSError *error) {
if (granted) {
NSLog(@"Accounts: %@", acStore.accounts);
NSLog(@"Access granted");
} else {
NSLog(@"Access denied");
}
}];
今、私は常にエラーが発生しますError Domain=XPCObjectsErrorDomain Code=2 "The operation couldn’t be completed. (XPCObjectsErrorDomain error 2.)"
最初の 2 ~ 3 回、Xcode からアプリを起動すると、OS X に「XYZ が Facebook アカウントへのアクセスを要求しています」という確認ダイアログが表示され、[OK] をクリックすると、「アプリケーションがまだインストールされていません」などのエラーが表示されました。このエラーは「消え」、上記のエラーが発生しています。
私の質問は、OS X で動作させるために、Xcode プロジェクト (Info.plist) または Facebook 開発者アプリで特別なものを構成する必要がありますか? または、コードに何か不足していますか? これに関するサンプルとチュートリアルは非常にまれなようです :-/
Twitter/Facebook の統合に関する WWDC 2012 のビデオは既に見ましたが、使用したコードはほぼそのまま使用されています。
どんな助けでも大歓迎です:-)
乾杯、ビョルン
更新
問題を解決しました。ドキュメントを十分に注意深く読んでいませんでした;-)パーミッションを文字列ではなくNSArrayとして渡す必要があります。オプション ディクショナリを次のように変更しました。
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
FB_APP_ID, ACFacebookAppIdKey,
[NSArray arrayWithObjects:@"read_stream", @"publish_stream", @"email", @"user_likes", nil], ACFacebookPermissionsKey,
ACFacebookAudienceFriends, ACFacebookAudienceKey, nil];
OS X に、自分に代わってアプリが Facebook に投稿することを許可するかどうかを尋ねるアラートが表示されます。[OK] をクリックすると、Facebook アカウントにアクセスできないという新しいエラーが表示されます。
Error Domain=com.apple.accounts Code=7 "The Facebook server could not fulfill this access request: The app must ask for a basic read permission at install time."
パーミッションを justemail
または justに変更しuser_likes
ましたが、すべて同じエラーが発生しました。アクセスへのアクセスのみをリクエストするとread_stream
、アクセスは許可されますが、OAuth エラー 190 とメッセージが表示されますError validating access token: User XXXXXX has not authorized application XXXXXX.
更新 2:
すべての問題を解決しました。以下の回答を参照してください。