Facebook ios sdk - проблема с публикацией фотографий с использованием UIImage

Буду благодарен за любые предложения относительно того, как справиться с проблемой, которую я размещаю в Facebook.

Следующий код работает так, как я ожидал:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                 @"http://myserver/img.png", @"picture",
                 @"My Testing", @"name",
                 @"Enter some text...",  @"message",
                 nil];

[appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];

Однако я действительно хочу использовать изображение, которое я снимаю с камеры. Я установил код, чтобы сделать это раньше в моем приложении, и я поместил изображение на экран. Итак, я попытался сделать это:

CGRect contextRect  = CGRectMake(0, 0, 320, 436);
UIGraphicsBeginImageContextWithOptions(contextRect.size, YES, 1);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Я тестировал этот код, а newImage - это действительный UIImage, который я могу разместить и манипулировать так, как я ожидал. Однако, когда я пытаюсь интегрировать его в диалог Facebook, выполните следующие действия:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                 newImage, @"picture",
                 @"My Testing", @"name",
                 @"Enter some text...",  @"message",
                 nil];

[appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];

Я получаю эти два нелепых сообщения в консоли: - [UIImage length]: непризнанный селектор, отправленный в экземпляр 0x1c9420 CoreAnimation: игнорирование исключения: - [UIImage length]: непризнанный селектор, отправленный в экземпляр 0x1c9420

Итак, в качестве теста я решил попробовать импортировать изображение в свой проект и получить доступ к нему напрямую. Это точный образ, на который я ссылался в Интернете в первом примере, поэтому я знаю, что он должен работать. Но даже когда я пробую это:

UIImage *newImage = [UIImage imageNamed:@"BaB.png"];

Я получаю те же сообщения об ошибках, что и выше.

В документации по Facebook я вижу, что ключ "картинка" должен использовать URL-адрес для изображения. Но я видел несколько примеров в Интернете, которые показывают, что люди используют UIImage вместо простого URL-адреса.

Ясно, что я делаю что-то неправильно, но я понятия не имею, что это может быть.

Я был бы очень благодарен за любые указания относительно того, как действовать.

Ответ 1

Сводный ответ, в котором описывается процесс... ключевым моментом является включение access_token в вызовы графа, поскольку facebook-ios-sdk не делает это автоматически:

1) Обновите последнюю версию facebook-ios-sdk.
 2) Создайте файл с идентификатором приложения.



      self.facebook = [[Facebook alloc] initWithAppId:kApplicationFBID]; 

3) Авторизовать приложение, включая publish_stream



  NSArray * neededPermissions = [[[NSArray alloc] initWithObjects:@"user_about_me", @"publish_stream", @"user_photos", nil] autorelease];
  [facebook authorize:neededPermissions delegate:appDelegate];

4) Убедитесь, что делегат приложения fBDidLogin захватывает и сохраняет токен доступа и срок его действия по умолчанию для пользователей (для дальнейшей оптимизации процесса входа в систему).



    -(void)fbDidLogin {
        DebugLog(@"New Access Token: %@", [facebook accessToken] );
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
        [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
        [defaults synchronize];
    }

5) Подтвердите действительный токен доступа (не ноль и не истек)... в противном случае повторите авторизацию приложения в соответствии с выше.
6) Захватите изображение в UIImage и назовите это, отметив критическое добавление access_token. Это автоматически создаст альбом для вашего приложения и разместит изображение там и разместит его на стене для моего тестирования.



-(void)postImageToAlbum:(UIImage *)image {
  NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
    image, @"source", 
    @"caption desc", @"message",             
    nil];
  [facebook requestWithGraphPath:[NSString stringWithFormat:@"/me/photos?access_token=%@", self.facebook.accessToken]
  andParams:params andHttpMethod:@"POST" andDelegate:self];
}

код > 7) Проверьте результат ID в методе FBRequestDelegate


    -(void)request:(FBRequest *)request didLoad:(id)result {
        NSLog(@"Request didLoad: %@ ", [request url ]);
        if ([result isKindOfClass:[NSArray class]]) {
            result = [result objectAtIndex:0];
        }
        if ([result isKindOfClass:[NSDictionary class]]){

        }
        if ([result isKindOfClass:[NSData class]]) {
        }
        NSLog(@"request returns %@",result);
     }

8) НЕ ИСПОЛЬЗУЙТЕ тестовую учетную запись пользователя для тестирования... в настоящее время она будет проверять тестовую учетную запись и предоставлять токен доступа, но при попытке использовать график api он вернет неожиданные ошибки. Вы можете быть в порядке, если вы используете настройку веб-версии и родного приложения на dev.facebook.com, так как предположительно вы можете создавать тестовых пользователей и связывать их с приложением, но я этого не пробовал.

Удачи!