Facebook IOS SDK - проблемы с размещением фотографии с помощью UIImage - PullRequest
10 голосов
/ 10 июля 2011

Буду признателен за любые предложения о том, как справиться с проблемой. Я размещаю изображение в 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]: нераспознанный селектор, отправленный экземпляру 0x1c9420 CoreAnimation: игнорирование исключения: - [UIImage length]: нераспознанный селектор, отправленный экземпляру 0x1c9420

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

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

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

Я вижу в документации Facebook, что ключ "picture" должен использовать URL длякартинка.Но я видел несколько примеров онлайн, которые показывают, что люди используют UIImage вместо просто URL.

Понятно, я что-то не так делаю, но понятия не имею, что это может быть.

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

1 Ответ

15 голосов
/ 14 июля 2011

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

1) Обновление до последней версииFacebook-КСН-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) Подтвердите действительный токен доступа (не nil и не просрочен) ... в противном случае повторно авторизуйте приложение согласно вышеуказанному.6) Захват изображения в UIImage и вызов этого, отмечая критическое добавление access_token.Это автоматически создаст альбом для вашего приложения, поместит изображение и разместит его на стене в соответствии с моим тестированием.

</p>

<pre><code>-(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) Проверка результата идентификации в методе 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) НЕ ИСПОЛЬЗУЙТЕ тестовую учетную запись пользователя для тестирования ... в настоящее время она будет выполнять тестучетной записи и предоставить токен доступа, но при попытке использовать Graph API он будет возвращать неожиданные ошибки.Вы можете быть в порядке, если вы используете веб-версию в сравнении с настройками собственного приложения на dev.facebook.com, поскольку предположительно вы можете создавать тестовых пользователей и связывать их с приложением, но я этого не пробовал.

Удачи!

...