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);
}
}];
}
結果は次のとおりです。
最初に「投稿」アクションが作成され、次に「撮影」アクションが写真に適用されます。「投稿」アクションを取り除く必要があります。さらに奇妙なことに、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 月の移行を有効にしました。