#iphone #objective-c #ios #facebook #fbconnect
#iPhone #objective-c #iOS #Facebook #fbconnect
Вопрос:
Я получаю ошибку «Неправильная подпись» при загрузке видео через FBConnect (версия наhttps://github.com/zoul/facebook-ios-sdk /). Смотрите ниже.
Есть идеи, как это отладить?
Есть ли рабочий пример загрузки видео через FBConnect?
Любые предложения будут оценены.
Код:
NSArray *permissions = [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil];
_facebook.forceOldStyleAuth = TRUE;
[_facebook authorize:APP_ID permissions:permissions delegate:_facebookDelegate];
...
NSString *path = [[NSBundle mainBundle] pathForResource:@"dreamall" ofType:@"m4v" inDirectory:@"/"];
NSURL *url = [NSURL fileURLWithPath:path];
FBVideoUpload *upload = [[FBVideoUpload alloc] init];
upload.accessToken = _facebook.accessToken;
upload.apiKey = API_KEY;
upload.appSecret = SECRET;
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"test", @"title",
@"upload testing", @"description",
nil];
[upload startUploadWithURL:url params:params delegate:self];
Ответ:
<error_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://api.facebook.com/1.0/ http://api.facebook.com/1.0/facebook.xsd">
<error_code>104</error_code>
<error_msg>Incorrect signature</error_msg>
<request_args list="true">
<arg>
<key>description</key>
<value>upload testing</value>
</arg>
<arg>
<key>v</key>
<value>1.0</value>
</arg>
<arg>
<key>api_key</key>
<value>...</value>
</arg>
<arg>
<key>method</key>
<value>facebook.video.upload</value>
</arg>
<arg>
<key>session_key</key>
<value>41ab9717c61b70a34a8e48d4.3-100000419172530</value>
</arg>
<arg>
<key>sig</key>
<value>bca612d495400136f1847f2bc6907525</value>
</arg>
<arg>
<key>title</key>
<value>test</value>
</arg>
</request_args>
</error_response>
í£|<€_Y†gÊˇ¯ZÓzìamp;Àle4:∫Ù6V-Fn#vÂΩ'‚¥gƒ˙Y†ˇOáeyœn,≠ˇŒX≤Ÿ˘¡¬6G˛éÊ]÷FùC¯7˘JêÁW˙∫nÂfi${(;∑.L‰¯õßÏAüˆ—6Û{ˆhu|ûfi± •ìn£hfiÇç£÷¥GÃ…˛Ü·B:up
Ответ №1:
Для меня FBVideoUpload работает нормально, поэтому я поместил свой код здесь :
m_Facebook = [[Facebook alloc] init];
m_FacebookUploader = [[FBVideoUpload alloc]init];
NSArray *permissions = [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil];
m_Facebook.forceOldStyleAuth = YES;
[m_Facebook authorize:APP_ID permissions:permissions delegate:self];
В Facebook методы делегирования
- (void)fbDidLogin
{
NSURL *movieURL = [NSURL fileURLWithPath:m_MoviePath];
NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:
@"Look at my funny video !", @"title",
[@"A message" objectForKey:@"message"], @"description",
nil];
[m_FacebookUploader setApiKey:APP_ID];
[m_FacebookUploader setAccessToken:m_Facebook.accessToken];
[m_FacebookUploader setAppSecret:APP_SECRET];
[m_FacebookUploader startUploadWithURL:movieURL params:params delegate:self];
}
Комментарии:
1. Большое вам спасибо за пример. На самом деле, проблема заключалась в том, что мое приложение Facebook не было настроено на режим «Рабочий стол». Я должен был обновить этот пост.
Ответ №2:
Мое приложение facebook не было переведено в режим «Рабочий стол». Вот почему аутентификация не сработала. Смотрите:
http://code.google.com/p/facebook-java-api/wiki/DesktopMode
К сожалению, они удалили эту опцию с сайта Facebook для разработчиков, поэтому невозможно заставить текущую версию FBVideoUpload работать с новым приложением.
Я изменил FBVideoUpload, чтобы использовать новый Graph API вместо старого REST API. Смотрите ниже. Я свяжусь с разработчиком FBVideoUpload.
//static NSString *const kAPIURL = @"http://api-video.facebook.com/restserver.php";
static NSString *const kAPIURL = @"https://graph-video.facebook.com/me/videos";
...
/*
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:userParams];
[params setObject:@"1.0" forKey:@"v"];
[params setObject:@"facebook.video.upload" forKey:@"method"];
[params setObject:[self sessionID] forKey:@"session_key"];
[params setObject:apiKey forKey:@"api_key"];
[params setObject:[self signatureForParams:params] forKey:@"sig"];
[params setObject:[NSData dataWithContentsOfURL:movieURL] forKey:[movieURL lastPathComponent]];
[[FBRequest getRequestWithParams:params httpMethod:@"POST" delegate:delegate requestURL:kAPIURL] connect];
*/
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithDictionary:userParams];
[params setObject:accessToken forKey:@"access_token"];
[params setObject:[NSData dataWithContentsOfURL:movieURL] forKey:[movieURL lastPathComponent]];
[FBRequest getRequestWithParams:params httpMethod:@"POST" delegate:delegate requestURL:kAPIURL];