Загрузка видео на Facebook с iOS - не удалось запросить разрешение на вход в систему от пользователя, код ошибки 6
Я использую социальную среду в iOS 6, чтобы интегрировать загрузку видео с Facebook в свое приложение. Однако при запуске программы ничего не происходит, и вместо этого я получаю следующие ошибки:
Операция не может быть завершена. (ошибка com.apple.accounts 6.)
"Активный токен доступа должен использоваться для запроса информации о текущем пользователе.", "Type":"OAuthException","code":2500}}"
Ниже приведен мой код, первую половину которого я реализовал из этого урока. granted
установлен в false
, вызывая первую ошибку.
- (void)uploadToFb {
ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *facebookAccountType = [accountStore
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
// Specify App ID and permissions
NSDictionary *options = @{
ACFacebookAppIdKey: @"2************",
ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"],
ACFacebookAudienceKey: ACFacebookAudienceFriends
};
[accountStore requestAccessToAccountsWithType:facebookAccountType
options:options completion:^(BOOL granted, NSError *e) {
if (granted)
{
NSArray *accounts = [accountStore accountsWithAccountType:facebookAccountType];
facebookAccount = [accounts lastObject];
}
else
{
NSLog(@"Error %@", e.localizedDescription); }
}
}];
NSURL *videourl = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];
NSString *filePath = [outputURL path];
NSURL *pathURL = outputURL;
NSData *videoData = [NSData dataWithContentsOfFile:filePath];
NSDictionary *params = @{
@"title": @"Face Puppets Video",
@"description": @"A funny video I made with the #FacePuppets iOS app."
};
SLRequest *uploadRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:videourl
parameters:params];
[uploadRequest addMultipartData:videoData
withName:@"source"
type:@"video/quicktime"
filename:[pathURL absoluteString]];
uploadRequest.account = facebookAccount;
[uploadRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
if(error){
NSLog(@"Error %@", error.localizedDescription);
}else
NSLog(@"%@", responseString);
}];
}
3 ответа
Привет! Это очень хороший пример совместного использования iOS (Wiki) (Пример проекта для iOS, ~3 МБ). С его помощью вы можете поделиться видео в Facebook, YouTube, Flicker, Vimeo. Посмотрите ссылку выше и протестируйте этот пример.
Вам нужно установить вас AppId
в к ESSViewController.m
класс в этом методе:
- (IBAction)facebook:(id)sender
{
self.fb = [[[ESSFacebook alloc] initWithDelegate:self
appID:@"youAppID"
appSecret:@"secret"] autorelease];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"IMG_1203" withExtension:@"MOV"];
[self.fb uploadVideoAtURL:url];
}
Может быть, это старая любовь Facebook, но для получения идеи о том, как обрабатывать для обмена видео из нашего приложения.
Весь ваш код после NSURL *videourl
следует перенести на другой метод. В настоящее время он выполняется, пока requestAccessToAccountsWithType:
запрос выполняется, поэтому facebookAccount
ссылка еще не доступна. Итак, новый метод, который вы создаете и перемещаете в этот код, должен вызываться из completion
заблокировать, если granted
правда.
Обратите внимание, что вы не можете сразу же запросить разрешение на публикацию. Сначала вы должны запросить разрешения на чтение, а затем, как только оно будет предоставлено, запросить разрешения на публикацию.
Проблема, кажется, с вашим созданием NSDictionary.
NSDictionary *options = @{
ACFacebookAppIdKey: @"2************",
ACFacebookPermissionsKey: @[@"publish_stream", @"publish_actions"],
ACFacebookAudienceKey: ACFacebookAudienceFriends
};
вы видите, что сначала вы передаете ключи, а потом объекты, где NSDictionary вызывает +dictionaryWithObjectsAndKeys в этом случае...
попробуйте использовать правильный формат, например:
NSDictionary *options = [[NSDictionary alloc] initWithObjectsAndKeys:
@"###############", ACFacebookAppIdKey,
[NSArray arrayWithObject:@"publish_stream"], ACFacebookPermissionsKey,
nil];
это должно работать.
см. тот же вопрос здесь: Получение "кода ошибки 8" при вызове [ACAccountStore requestAccessToAccountsWithType] - iOS Facebook