Facebook iOS SDK - 发布自定义故事

时间:2015-01-07 00:33:24

标签: ios objective-c facebook facebook-graph-api

我正在尝试做一些似乎比必要更难的事情。

我有一个针对Parse后端编写的iOS应用程序。我们的应用程序的用户可以创建要存储的项目,他们有时可以为这些项目生成警报。

我想向Facebook发布一个简单的警告提醒。

我在Facebook网站上已经阅读了很多关于将Facebook整合到iOS中的内容,但他们的文档令人困惑,我在StackOverflow上看到不止一个人提到他们的iOS代码至少有时会有缺陷。

基本上,自定义故事将包含以下内容:

  1. 故事标题
  2. 故事描述(这里的文字通常不多)
  3. 一张或多张图片(我满足于1,但我希望能够发布多张图片)
  4. 如果可能,请使用用户提供的GPS位置。
  5. 我会事先承认我是一名正在为工作目的学习Facebook的开发人员,而且我远非成为Facebook的专家。

    当我在Facebook应用程序中玩游戏时,我可以添加一个状态更新,其中包括:

    1. 文本
    2. 图片(S)
    3. 我正在做什么
    4. 我在哪里(或某个地方)
    5. 但是,在Facebook SDK中,似乎只有以下2个选项可用于发布状态更新:

      startForPostStatusUpdate:completionHandler:
      startForPostStatusUpdate:place:tags:completionHandler:
      

      如果我在那里遗漏了什么,请告诉我。

      其次,我正在尝试按照Facebook的文档和示例代码执行以下事件序列:

      1. 上传并暂存图片资源
      2. 创建一个对象(在我的应用中,我注册了一个“警告”对象)
      3. 创建一个动作(在我的应用中,我已经注册了“帖子”动作)
      4. 以下是我从Facebook网站拼凑的代码(评论主要来自其他人的代码,而不是我自己的代码):

        - (void)postToFacebookWithAlert:(PFObject *)alert image:(UIImage *)image {        
            // Stage the image
            [FBRequestConnection startForUploadStagingResourceWithImage:image completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                if (error != nil) {
                    // See: https://developers.facebook.com/docs/ios/errors                
                } else {
                    // Package image inside a dictionary, inside an array like we'll need it for the object
                    NSArray *image              = @[@{@"url": [result objectForKey:@"uri"], @"user_generated" : @"true" }];
                    // Create an object
                    NSString *caption           = // user-generate content
                    NSMutableDictionary<FBOpenGraphObject> *alert;
                    alert                       = [FBGraphObject openGraphObjectForPostWithType:@"<myapp>:alert"
                                                                                          title:caption
                                                                                          image:image
                                                                                            url:nil
                                                                                    description:alert[@"subtitle"]];
                    alert.provisionedForPost    = YES;
        
                    // Post custom object
                    [FBRequestConnection startForPostOpenGraphObject:alert completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                        if (error != nil) {
                            // An error occurred                        
                        } else {
                            NSMutableDictionary<FBGraphObject> *post    = [FBGraphObject graphObject];
                            post[@"alert"]                              = result[@"id"];
                            [FBRequestConnection startForPostWithGraphPath:@"me/<myapp>:post" graphObject:post completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                                NSLog(@"startForPostWithGraphPath:graphObject:completionHandler:");
                                if (error != nil) {
                                    // An error occurred
                                    NSLog(@"Encountered an error posting to Open Graph: %@", error);                                
                                } else {
                                    NSLog(@"OG story posted, story id: %@", result[@"id"]);                                
                                }
                            }];
                        }
                    }];
                }
            }];        
        }
        

        我实际上已经让这段代码工作了一次。我以自己的个人Facebook帐户登录。如果我转到我的活动日志,我可以看到我要发布的项目。如果我去看我的照片,我可以看到我试图上传的照片。如果我从我妻子的应用程序/帐户查看我的个人资料,它就不会显示。

        有没有人有能够做我想要的工作代码?

1 个答案:

答案 0 :(得分:1)

也许您需要将“fb:explicit_shared”设置为“true”,并且应该由Facebook审核。

审核通过后,您可以添加如下选项。

[post setObject:@"true" forKey:@"fb:explicitly_shared"];