4

iOS用の写真アプリを作成しています。アプリで定義されたカスタム アクション タイプのペア「写真を撮る」があります。最初に「写真」オブジェクトを作成します (ユーザー生成の画像があり、最初に写真をアップロードしてステージング URI を取得します。このコードはその後です):

NSMutableDictionary *imageData = [NSMutableDictionary dictionaryWithDictionary:
                                          @{
                                          @"url" : stagingURL,
                                          @"user_generated" : @"true",

                                          }];
NSMutableDictionary<FBOpenGraphObject> *object =
        [FBGraphObject openGraphObjectForPostWithType:@"tonerapp:photo"
                                                title:@"photo"
                                                image:imageData
                                                  url:@"http://tonerapp.info"
                                          description:title];
//post the object to facebook
[FBRequestConnection startForPostOpenGraphObject:object completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
            if(result != nil){
                NSString* resultID = [result objectForKey:@"id"];
                NSMutableDictionary<FBGraphObject> *actionDict = [FBGraphObject graphObject];
                actionDict[@"photo"] = resultID;
                [self postTakeActionToFacebookWithOpenGraphObject:actionDict completion:action];

            }else{
                action(NO);
            }
        }];

オブジェクトを投稿した後、上記のように完了ハンドラーで「実行」アクションを公開します。「写真」オブジェクトを使用して「撮影」アクションを投稿するコードは次のとおりです。

-(void)postTakeActionToFacebookWithOpenGraphObject:(NSMutableDictionary<FBGraphObject>*)ogObject completion:(booleanAction)action{
  if(self.selectedPlace != nil){
      ogObject[@"place"] = [self.selectedPlace id];
  }
  if(self.taggedFriends != nil && self.taggedFriends.count > 0){
      ogObject[@"tags"] = self.taggedFriends;
  }
  [FBRequestConnection startForPostWithGraphPath:@"me/tonerapp:take"
                                   graphObject:ogObject
                             completionHandler:^(FBRequestConnection *connection,
                                                 id result,
                                                 NSError *error) {
                                 if(result != nil){
                                     NSLog(@"oldu");
                                     action(YES);
                                 }else{
                                     action(NO);
                                 }

                             }];
}

結果は次のとおりです。

2つのアクションを投稿しました

最初に「投稿」アクションが作成され、次に「撮影」アクションが写真に適用されます。「投稿」アクションを取り除く必要があります。さらに奇妙なことに、My Open Graph ダッシュボードは次のようになります。

自動的に追加されるデフォルト アクション

「オブジェクト」タイプと「投稿」アクションを削除しますが、1 回おきにアクションに追加されます。私が間違っていることが、「デフォルトの投稿作成​​アクション」の問題とダッシュボードに追加されるデフォルトのペアの両方の原因であると思われます。アプリの設定に移動し、写真タイプのサブスクライブ (作成) アクションを変更します。

作成アクション設定

その後、もう一度写真を投稿してみます。私の作成アクションは「取る」ですが、「投稿」アクションが作成されます。

投稿アクション

しかし、今回は「取る」アクションを作成できません。次の応答で失敗します。

body =     {
    error =         {
        code = 1611231;
        message = "A post action for this object already exists.";
        type = Exception;
    };
};
code = 500;

これは正反対ではないでしょうか。デフォルトの作成アクションをカスタム アクションに設定しないと、めちゃくちゃになるのではないですか? また、写真オブジェクトを「オンザフライ」で作成しようとしました(最初に「投稿」せずに、オブジェクトのJSONデータを「撮影」アクションで直接送信します。これは自然な方法のようです)、ただし、次の例のように失敗することもあります: Facebook オブジェクト コードの例。. 何か不足していますか、それとも Open Graph API に深刻な問題がありますか?

ありがとう、

できる。

更新: 2013 年 7 月の移行を有効にしました。

4

2 に答える 2

6

オブジェクト API (startForPostOpenGraphObject と共有ダイアログで使用しているもの) を使用して (ユーザー所有の) 開いているグラフ オブジェクトを作成すると、「投稿」アクションが作成されます。これを回避する唯一の方法は、独自の開いているグラフ オブジェクトをホストすることです。

このように考えてください。実際に行っているのは、実際には 2 つの別々の操作です。

  1. 開いているグラフ オブジェクトを作成します (つまり、オブジェクトを「投稿」しました)。
  2. オブジェクトに作用するオープン グラフ アクション (つまり、「実行」アクション) を作成します。

それらのそれぞれは、アクティビティ ログで個別のアクティビティになります。同じオブジェクトを別のアクションで再利用できるため、この分離は重要です。また、ユーザー所有のオブジェクトであるため、ユーザーのアクティビティ ログに表示する必要があります。

https://developers.facebook.com/docs/opengraph/using-object-api/も参照してください

于 2013-07-22T23:13:02.813 に答える
-1

@ポイラゾグル

投稿ごとにストーリーを作成しない場合は、このメソッドを使用する必要があります。同じ投稿の画像が複数ある場合、別の投稿を作成するのではなく、画像をグループ化して全体のみでアルバムを作成します。

NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
[params setObject:@"your custom message" forKey:@"message"];
[params setObject:UIImagePNGRepresentation(_image) forKey:@"picture"];
_shareToFbBtn.enabled = NO; //for not allowing multiple hits

[FBRequestConnection startWithGraphPath:@"me/photos"
                             parameters:params
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection,
                                          id result,
                                          NSError *error) 
 {
 if (error) 
 {
     //showing an alert for failure
     [self alertWithTitle:@"Facebook" message:@"Unable to share the photo please try later."];
 } 
 else
 {
     //showing an alert for success
     [UIUtils alertWithTitle:@"Facebook" message:@"Shared the photo successfully"];
 }
 _shareToFbBtn.enabled = YES;
 }];
于 2014-09-03T09:54:33.117 に答える