2011-01-20 4 views
2

я м разработки приложения iPhone, которое включает в себя facebook стены posting.After войти, я отправляю к стене пользователя по следующему коду:FBConnect: «Пользователь не авторизовано приложение для выполнения этого действия»

NSString *appIcon = [NSString stringWithString:@"http://a2.twimg.com/profile_images/416166235/apple-black_normal.png"]; 
NSString *appSiteUrl = [NSString stringWithString:@"http://www.apple.com"]; 
NSString *attachment= [NSString stringWithFormat:@"{\"caption\":\"%@ Likes in the iPhone App\",\"description\":\"\",\"media\":[{\"type\":\"image\",\"src\":\"%@\",\"href\":\"%@\"}]}",_facebookName,appIcon,appSiteUrl]; 

// [attachment stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

NSArray *obj = [NSArray arrayWithObjects:attachment,nil]; 
NSArray *keys = [NSArray arrayWithObjects:@"attachment",nil]; 
NSDictionary *params = [NSDictionary dictionaryWithObjects:obj forKeys:keys]; 

NSLog(@"atachment : %@",[params description]); 

[[FBRequest requestWithDelegate:self] call:@"facebook.stream.publish" params:params]; 

Это приводит к ошибке, говорящей: «Пользователь не разрешил приложению выполнять это действие».

В профиле пользователя Facebook у приложения есть только разрешение на доступ к основной информации пользователя. Поэтому мне нужно взять «stream_publish» от пользователя.

Так как предоставить расширенное разрешение Диалог (для разрешения «stream_publish»)?

Любая помощь будет оценена по достоинству.

ответ

2

Я нашел решение проблемы самостоятельно.

На самом деле причиной проблемы является то, что у приложения есть разрешение на «Опубликовать на стене». (publish_stream) .Hence FB отказался со следующей ошибкой.

«Пользователь не разрешил это приложение выполнять это действие».

Так что, когда пользователь входит в систему, Запрашивать дать разрешение publish_stream,

- (void)session:(FBSession*)session didLogin:(FBUID)uid { 

    FBPermissionDialog *permissions = [[FBPermissionDialog alloc]initWithSession:_session]; 
    permissions.permission = [NSString stringWithString: @"publish_stream"]; 
    [permissions show]; 

} 

`
Когда однажды пользователь позволили«Сообщение к стене», этот диалог не будете когда-нибудь снова появится.

+0

Его не сработают. Просмотрите свое приложение на сайте разработчика Facebook. Только тогда вы можете поделиться –

0

у вас должен быть небольшой блок кода, похожий на приведенный ниже. Если нет - поиск read_stream в коде -

if ((self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil])) { 
    _permissions = [[NSArray arrayWithObjects: 
         @"read_stream", @"offline_access",nil] retain]; 
    } 

Добавить @ «stream_publish» в список и вы должны быть хорошо идти.
-Jon

+0

Thanks John, К сожалению, я не мог найти такой код в своем FBConnect или в моем кодировании. На самом деле я нашел решение самостоятельно. – sanskarvihin

0

В приведенном выше решении используется FBPermissionDialog, который подходит для изменения разрешений после входа в систему, но вам лучше попросить разрешения на первоначальный вход. Таким образом, вы не открываете внешний браузер дважды.

if (![facebook isSessionValid]) { 
    NSArray *permissions = [[NSArray alloc] initWithObjects: 
          @"publish_stream", 
          nil]; 
    [facebook authorize:permissions]; 
    [permissions release];   
}