Как получить разрешение на чтение перед публикацией разрешения на загрузку видео на Facebook с помощью SLRequest?
Я просто пытаюсь интегрировать общий доступ к Facebook в свое приложение, конечным продуктом моего приложения является видео, поэтому загрузка и передача окончательной компиляции друзьям - это то, что я имею в виду, я использую собственную социальную среду с ACAccount Framework, чтобы мое приложение работало Кажется, из Facebook есть странная логика, что мне нужно запросить разрешение на чтение, прежде чем я запрашиваю разрешение publish_stream, и что они не могут быть получены сразу после (где-то читать), мой вопрос - где и как мне реализовать эту логику в моем коде, вот мой код
ACAccountStore* accountStore = [[ACAccountStore alloc] init];
NSDictionary *options = @{
ACFacebookAppIdKey: @"My app ID",
ACFacebookPermissionsKey: @[@"user_birthday"],
ACFacebookAudienceKey: ACFacebookAudienceOnlyMe
};
ACAccountType *facebookAccountType = [accountStore
accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
[accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error) {
if (granted) {
NSArray *accounts = [accountStore
accountsWithAccountType:facebookAccountType];
ACAccount * facebookAccount = [accounts lastObject];
NSLog(@"access to facebook account ok %@", facebookAccount.username);
NSData *videoData = [NSData dataWithContentsOfFile:[_fURL absoluteString]];
NSLog(@"%@",[_fURL absoluteString]);
NSLog(@"video size = %d", [videoData length]);
NSDictionary *params = @{
@"title": @"Me being silly",
@"description": @"Me testing the video upload to Facebook with the new system."
};
NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me/videos"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook
requestMethod:SLRequestMethodPOST
URL:requestURL
parameters:params];
[request addMultipartData:videoData
withName:@"source"
type:@"video/quicktime"
filename:[_fURL absoluteString]];
request.account = facebookAccount;
[request performRequestWithHandler:^(NSData *data, NSHTTPURLResponse *response,NSError * error){
NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"response = %@", responseString);
}];
Да, мне не хватает разрешения на публикацию потока, но я не могу понять, куда мне его поместить, весь этот код находится под одним методом, который вызывается, когда пользователь нажимает кнопку
1 ответ
Это очень просто. Вот моя реализация этого:
- (void)requestAccessToFacebookAccountWithCompletionHandler:(QCFacebookCommunicatorCompletionHandler)completionHandler {
[[self accountStore] requestAccessToAccountsWithType:[self accountType] options:[self facebookAccountAccessRequestOptionsForReadStreamPermission] completion:^(BOOL accessForReadingGranted, NSError *error) {
if (accessForReadingGranted) {
[[self accountStore] requestAccessToAccountsWithType:[self accountType] options:[self facebookAccountAccessRequestOptionsForPublishStreamPermission] completion:^(BOOL accessForWrittingGranted, NSError *error) {
if (accessForWrittingGranted) {
completionHandler(YES, nil);
} else {
completionHandler(NO, [error userInfo]);
}
}];
} else {
completionHandler(NO, [error userInfo]);
}
}];
}
Я просто использую вспомогательные методы для возврата словарей с опциями, другие вещи похожи на ваши.
Затем вы можете вставить свой код, который отвечает за загрузку видео, вместо вызовов завершение Handler, или вы можете использовать эту реализацию и загружать видео, только если успех == ДА в завершении Handler.
Надеюсь, поможет!