iOS Social.framework を使用して Facebook に共有しようとしています。ただし、ほとんどのユーザーは [Settings] > [Facebook] で Facebook を設定していないため、UIActivityViewController を起動しても Facebook は表示されず、一覧に表示されません。( Facebook の設定のない UIActivity を参照するか、「Facebook が UIActivityViewController に表示されない」をグーグルで参照してください。この問題を解決しようとしている人はたくさんいます。)
私たちのアプリは既に Facebook SDK を使用しているため、Facebook アカウント情報を取得できます。そのため、情報を取得して、[設定] > [Facebook] に情報を保存するだけでよいと考えました。これが私のコードです。( When do we use saveAccount:(ACAccount *)account of ACAccountStore class?およびiOS requestAccessToAccountsWithType is Not Show Permission Prompt / NSAlert から取得したもの)
- (void)storeAccountWithAccessToken:(NSString *)token secret:(NSString *)secret {
if (self.accountStore == nil) {
self.accountStore = [[ACAccountStore alloc] init];
}
//We start creating an account by creating the credentials object
ACAccountCredential *credential = [[ACAccountCredential alloc] initWithOAuthToken:token tokenSecret:secret];
ACAccountType *acctType =[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
ACAccount *newAccount = [[ACAccount alloc] initWithAccountType:acctType];
//Here we assign credentials and now can save account
newAccount.credential = credential;
NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
[VVEnvironment stringForKey:kVVEnvironmentKeyFacebookAppID], (NSString *)ACFacebookAppIdKey,
[NSArray arrayWithObject:@"basic_info"], (NSString *)ACFacebookPermissionsKey,
ACFacebookAudienceEveryone, (NSString *)ACFacebookAudienceKey,
nil];
[_accountStore requestAccessToAccountsWithType:acctType options:options completion:^(BOOL granted, NSError *error) {
if (granted == YES) {
[self.accountStore saveAccount:newAccount withCompletionHandler:^(BOOL success, NSError *error) {
if (success) {
NSLog(@"the account was saved!");
}
else {
if ([error code] == ACErrorPermissionDenied) {
NSLog(@"Got a ACErrorPermissionDenied, the account was not saved!");
}
NSLog(@"the account was not saved! %d, %@", [error code], error);
}
}];
}
else {
NSLog(@"ERR: %@ ",error);
}
}];
}
そこに requestAccessToAccountsWithType への呼び出しを追加しました。そうしないと、saveAccount から ACErrorPermissionDenied が返されなかったからです。これを実行すると、アプリが Facebook ダイアログのために一時的に横にスライドするのが見えます (Facebook の Web サイトでアプリを削除すると、付与する許可を求める完全なダイアログが表示されます)。
問題は、許可が常に NO であるため、アカウントを保存する機会がないことです。ここで何が欠けていますか?
Facebook アプリがインストールされ、セットアップされている実際のデバイスでこれを実行しています。
これについて何か助けていただければ幸いです、ありがとう!