2011-01-20 66 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)。因此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的開發人員站點中查看您的應用。只有這樣你才能分享 – 2014-08-21 09:11:21

0

你應該有一小塊看上去類似於下面的代碼。如果沒有 - 搜索代碼中的read_stream -

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

添加@「stream_publish」到列表中,你應該是好去。
-Jon

+0

謝謝約翰,不幸的是,我在FBConnect或我的編碼中找不到這樣一段代碼。其實我已經找到了解決方案。 – sanskarvihin 2011-02-10 04:23:44

0

上面的解決方案使用了FBPermissionDialog,它可以在登錄後更改權限,但最好在初始登錄時詢問權限。這樣你就不會打開兩次外部瀏覽器。

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