Публикация изображения на странице facebook от имени администратора

У меня проблема с публикацией фотографии из приложения iOS на странице facebook от имени администратора страницы. Единственное, что я могу опубликовать как администратор, это сообщение о состоянии.

Вот что я сделал.

// get access token first
[FBRequestConnection startWithGraphPath:@"/__facebook_page_id__?fields=access_token" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

    // make sure its not nil
    if ([result valueForKey:@"access_token"] != nil) {
        NSString *accessToken = [result objectForKey:@"access_token"];

        NSLog(@"Access token: %@", accessToken);

        NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
        [params setObject:@"This is some status message" forKey:@"message"];
        [params setObject:accessToken forKey:@"access_token"];

        [FBRequestConnection startWithGraphPath:@"/__facebook_page_id__/feed" parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

            NSLog(@"Result: %@", result);
            NSLog(@"Error: %@", error);

        }];
    }

}];

Приведенный выше код успешно опубликован на странице facebook от имени администратора. Так как мне нужно опубликовать фотографию, мне нужно изменить путь на /facebook_page_id/photos.

NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setObject:UIImagePNGRepresentation(self.imagePreview.image) forKey:@"picture"];
[params setObject:@"This is some description" forKey:@"message"];
[params setObject:accessToken forKey:@"access_token"];

[FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/__facebook_page_id__/photos"] parameters:params HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

    NSLog(@"Result: %@", result);
    NSLog(@"Error: %@", error);

}];

Приведенный выше код успешно опубликован, но не от имени администратора. Хотя я использую токен доступа к странице.

Я думал, что путь fb_page_id/photos не работает, поэтому я попытался использовать fb_page_id/feed и отправить другие поля, такие как ссылка, изображение и т. д. Но, тем не менее, он был опубликован как пользователь, а не администратор страницы.

Пожалуйста, дайте мне знать, если я делаю неправильно.

Некоторая информация: - Цель развертывания: 5.1 и выше - Версия Facebook SDK: 3.7

Заранее спасибо.


person Didats Triadi    schedule 14.08.2013    source источник
comment
проверьте эту ссылку stackoverflow.com/questions/12193915/.   -  person iPhone 7    schedule 14.08.2013
comment
Я думал, что у меня нет проблем с публикацией на Facebook в качестве пользователя. единственная проблема в том, что я, похоже, не могу публиковать сообщения как администратор страницы.   -  person Didats Triadi    schedule 14.08.2013


Ответы (1)


Я наконец нашел ответ. На всякий случай, если у кого-то такая же проблема, вот что я делаю.

  1. Вам понадобится access_token Страницы для доступа к /page_id?fields=access_token

    [FBRequestConnection startWithGraphPath:[NSString stringWithFormat:@"/%@?fields=access_token", FB_PAGE_ID] завершениеHandler:^(FBRequestConnection *connection, id result, NSError *error) {

    // if the access_token is not there, the user might not able to post. check the permission
    if ([result valueForKey:@"access_token"] != nil) {
        NSString *accessToken = [result objectForKey:@"access_token"];
    }
    

    }];

  2. После получения access_token Страницы вам необходимо опубликовать изображение с помощью REST API. Здесь я использую AFNetworking и загружаю изображение вручную.

    if ([result valueForKey:@"access_token"] != nil) { NSString *accessToken = [result objectForKey:@"access_token"];

    NSURL *url = [NSURL URLWithString:@"https://graph.facebook.com"];
    AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:url];
    
    // parameter
    NSDictionary *params = @{@"access_token": accessToken, @"message": message};
    
    // image data
    NSData *imageData = UIImageJPEGRepresentation(self.imagePreview.image, 1);
    
    // create Request and upload the image
    NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:[NSString stringWithFormat:@"/%@/photos/", [defaults stringForKey:@"fb_page_id"]] parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileData:imageData name:@"source" fileName:accessToken mimeType:@"image/jpeg"];
    }];
    
    // publish!
    AFJSONRequestOperation *json = [AFJSONRequestOperation JSONRequestOperationWithRequest:request1 success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    
        // IMAGE PUBLISHED!!!
    
    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
        // SOMETHING WRONG HAPPEN
    }];
    [json start];
    

    }

Не спрашивайте меня, почему я использую REST API, я пробовал все, используя их SDK, но всегда терпел неудачу.

Я надеюсь, что кто-то найдет это полезным для этого куска кода.

person Didats Triadi    schedule 16.08.2013