从“设置”访问帐户时,不使用 SLComposeviewcontroller 将图像发布到 Facebook

Posted

技术标签:

【中文标题】从“设置”访问帐户时,不使用 SLComposeviewcontroller 将图像发布到 Facebook【英文标题】:Post Image to Facebook without using SLComposeviewcontroller when account accessed from Settings 【发布时间】:2014-07-31 15:48:45 【问题描述】:

我只是在不使用SLComposeviewcontroller 的情况下在Facebook 上共享图像时遇到问题。我在设置中添加了一些Facebook 的帐户。在图像共享时,我的应用程序首先搜索该帐户(如果它在设置中),然后它会获取该帐户,如果没有,则它使用户能够使用 Web 登录。但是假设如果它从设置中获取帐户,那么我如何能够在不使用SLComposeviewcontroller 的情况下共享图像。因为正如我所看到的,当它从设置中获取帐户时,没有活动会话,因此它打开了网络。如果不打开 session 就像 SLComposeviewcontroller 所做的那样,我们不能在该帐户上发布图片吗?

任何建议都将不胜感激。

谢谢- 阿舒托什

【问题讨论】:

【参考方案1】:

我认为这很简单。只需从 FB 设置中获取信息。然后让SLRequest 在该帐户墙上发帖。

代码写在下面-

if (self.accountStore == nil) 
    self.accountStore = [[ACAccountStore alloc] init];

ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

NSArray * permissions = @[@"email",@"publish_actions"];
NSDictionary * dict = @ACFacebookAppIdKey : FacebookAppId, ACFacebookPermissionsKey : permissions, ACFacebookAudienceKey : ACFacebookAudienceEveryone;
[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) 
    if (granted)
    
        NSLog(@"granted");
        NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
        ACAccount *account = [accounts lastObject];

        // Get the access token, could be used in other scenarios
        ACAccountCredential *fbCredential = [account credential];
        NSString *accessToken = [fbCredential oauthToken];
        NSLog(@"Facebook Access Token: %@", accessToken);


        NSMutableDictionary*params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                      @"post", @"type",
                                      descriptionTxtV.text, @"message",
                                      descriptionTxtV.text, @"description",
                                      nil];

        NSData *myImageData = UIImagePNGRepresentation(postImgV.image);

        SLRequest *facebookRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:[NSURL URLWithString:@"https://graph.facebook.com/me/photos"] parameters:params];
        [facebookRequest addMultipartData: myImageData withName:@"source" type:@"multipart/form-data"filename:@"TestImage"];
        [facebookRequest setAccount:account];

        [facebookRequest performRequestWithHandler:^(NSData* responseData, NSHTTPURLResponse* urlResponse, NSError* error) 
            if (responseData)
            
                NSError *jsonError =nil;
                NSDictionary *jsonDict = [ NSJSONSerialization JSONObjectWithData :responseData options : NSJSONReadingAllowFragments error:&jsonError];
                NSLog(@"-- json: %@", jsonDict);
                [descriptionTxtV resignFirstResponder];

                UIAlertView*    aAlert = [[UIAlertView alloc] initWithTitle:APP_NAME message:@"You have shared phots to Facebook successfully." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [aAlert show];
                [self.navigationController popToRootViewControllerAnimated:YES];

            
            else
            
                UIAlertView*    aAlert = [[UIAlertView alloc] initWithTitle:APP_NAME message:@"Your Facebook account details can't be accessed right now. Please try later." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [aAlert show];

            

        ];

就是这样。

谢谢

【讨论】:

以上是关于从“设置”访问帐户时,不使用 SLComposeviewcontroller 将图像发布到 Facebook的主要内容,如果未能解决你的问题,请参考以下文章

从服务应用程序访问访客帐户系统注册表配置单元

如何使用 REST API 从服务帐户凭据创建访问令牌?

多个 GitHub 帐户和 SSH 配置

怎么实现当域客户端访问linux共享文件服务器时不需要输入帐号密码呢,没加入域的客户端访问则需要提供帐户

从 ASP.NET 应用程序访问 Azure 存储帐户文件共享

从 iCloud 帐户访问用户个人资料图片