4

我正在爲iOS創建一個照片應用程序。我有一個自定義的動作類型,在我的應用程序中定義的「拍照」。我首先創建了「照片」對象(我有一個用戶生成的圖像,而且我第一次上傳照片並獲得分期URI這個代碼後):如何在創建Open Graph對象時禁止Facebook默認創建動作(發佈)

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); 
      } 
     }]; 

發佈的對象後,如上所示,我在完成處理程序中發佈「take」操作。下面是與「合影」的對象發佈的「採取」行動代號:

-(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); 
           } 

          }]; 
} 

下面是結果:創建

posted two actions

首先「後」的行動,那麼「採取」行動適用於照片。我需要擺脫「後」行動。更古怪,我打開圖形儀表盤看起來是這樣的:

default actions added automatically

我刪除了「對象」型和「郵報」的行動,但每個其他時間,將它們添加到我的行動一次。我懷疑我做錯的事情是「缺省創建後操作」問題和缺省對被添加到我的儀表板的原因。我去我的應用程序的設置和更改我的照片類型的訂閱(創建)行動:

creation action setting

然後我嘗試再次發佈我的照片。儘管我的創作行爲是「吃」,創建一個「後」的行動:

post action

但我不能夠產生任何「採取」行動這段時間。它與此響應失敗:

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

這不應該是恰恰相反嗎?我不應該把它搞亂,如果我將我的默認創建行動設置爲我的自定義操作?我也試着創建照片對象「在飛」(沒有「發佈」它首先發送對象的JSON數據直接在「採取」行動,這似乎是自然的做法),但它也會失敗,就像在這個例子中:Example Facebook object code.。我是否錯過了某些東西,或者Open Graph API有什麼嚴重錯誤?

謝謝,

可以。

更新:我已啓用2013年7月的遷移。

+1

我很震驚,這個問題不會有更多的投票UPS ..認真 – abbood

回答

6

如果您通過Object API(這是您使用的startForPostOpenGraphObject以及共享對話框)創建(用戶擁有的)開放圖形對象,那麼會創建一個「Post」動作。唯一的解決辦法是託管自己的開放圖形對象。

想想這樣,你真正做的實際上是2個獨立的操作。

  1. 您可以創建一個打開的圖形對象(即,你「貼」的對象)
  2. 您創建一個開放的圖形操作(即你的「採取」行動),其作用在物體

他們每個人都將導致在活動日誌中一個單獨的活動上。這種分離很重要,因爲您可以在不同的操作中重複使用同一個對象,並且它必須顯示在用戶的活動日誌中,因爲它是用戶擁有的對象。

https://developers.facebook.com/docs/opengraph/using-object-api/

+0

我知道,他們是兩個不同的操作(創建,並採取)。我可以在活動日誌中看到兩次,但我不希望我的應用創建「故事污染」,所以我不希望人們在新聞動態/新聞Feed中看到雙重故事。 而我仍然不明白爲什麼訂閱操作無法正常工作。 –

+0

就你而言,實際上現在有3種不同類型的操作 - 發佈,訂閱和採取。舊的「創造」行動現在是「訂閱」行動,與「後」行動不同。任何用戶生成的對象都會有一個與之關聯的「發佈」操作。您也可以設置「訂閱」操作,以便用戶獲得「喜歡」通知。 「發佈」操作不會顯示在新聞Feed中。另請參閱 - https://developers.facebook.com/docs/opengraph/creating-object-types/#creation –

+0

實際上,訂閱動作需要是「採取」動作(並且鏈接中的示例完全給出了「採取」示例一張照片'),但是當我將訂閱動作設置爲'take'時,我得到'這個對象的後置動作已經存在。'錯誤,即使我已將「獨特行爲」設置爲「多重」。如果我刪除「採取」行動作爲訂閱行動,我可以發佈它。你確定後期操作不會顯示在新聞Feed中嗎? –

-1

見@can Poyrazoglu

你應該你這個方法,如果你不爲每個崗位創造的故事。如果來自同一個帖子的圖片有多個,它將​​對圖片進行分組,並僅將整個相冊製作出來,而不是創建單獨的帖子。

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; 
}]; 
+0

你有沒有讀過我的問題?這與開放圖形對象有什麼關係? –

相關問題