0

我正在開發一個簡單的Android應用程序,我想在Facebook中使用OpenGraphObject和OpenGraphAction發佈狀態。Android Facebook-sdf異常:無法爲用戶生成預覽

如果我使用新FacebookDialog.ShareDialogBuilder(this)我沒有問題,但是當我使用FacebookDialog.OpenGraphActionDialogBuilder我得到了錯誤:

01-09 15:56:29.594 11439-11439/simov.project2.yourcity E/Activity﹕ Error: com.facebook.FacebookException: Failed to generate preview for user. 

的Java

public void test(int position){ 

    File f = (File)mImageAdapter.getItem(position); 
    Bitmap myBitmap= BitmapFactory.decodeFile(f.getAbsolutePath()); 
    List<Bitmap> images = new ArrayList<Bitmap>(); 
    images.add(myBitmap); 
    //Session session = Session.getActiveSession(); 
    //session.requestNewPublishPermissions(new Session.NewPermissionsRequest(this, PERMISSION)); 

    try { 
     addresses = mGeocoder.getFromLocation(mItenerariumState.getCurrentLocation().getLatitude() 
       , mItenerariumState.getCurrentLocation().getLongitude() 
       , 1); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    OpenGraphObject location = OpenGraphObject.Factory.createForPost("yourcity:location"); 
    if(!addresses.isEmpty()){ 

     location.setProperty("title", addresses.get(0).getAddressLine(0)); 
    } else { 

     location.setProperty("title", "Unknown place"); 
    } 
    location.setProperty("Description", "I visited this place using YourCity App"); 

    OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class); 
    action.setProperty("location", location); 


    /* Request request = Request.newPostOpenGraphActionRequest(Session.getActiveSession(), action, new Request.Callback() { 
     @Override 
     public void onCompleted(Response response) { 
      //showPublishResult(getString(R.string.photo_post), response.getGraphObject(), response.getError()); 
     } 
    }); 

    request.executeAsync();*/ 
    FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(this, action, "yourcity:visit","location") 
      .setApplicationName("YourCity") 
      //.setImageAttachmentsForAction(images, true) 
      .build(); 
    uiHelper.trackPendingDialogCall(shareDialog.present()); 
} 

重要說明,shareDialog展屏幕像一秒鐘,然後消失沒有任何動作

+0

另一個問題是,如果我嘗試將圖像(註釋行)我得到異常: 19:21:40.664 6130-6130/simov.project2.yourcity E /活動:錯誤:com.facebook .FacebookException:檢索圖像附件時出錯。 – andrealmeida

+0

嘗試使用OpenGraphAction.Factory.createForPost來創建您的操作。另外,如果你想添加圖片,你需要在OpenGraphActionDialogBu​​ilder中使用setImageAttachmentsForObject或setImageAttachmentsForAction方法,並且確保閱讀javadocs,因爲你需要添加一個內容提供者到你的android清單。 –

+0

我有setImageAttachmentsForAction,你可以看到那裏,它的唯一評論,並在我的清單內容提供者:\ andrealmeida

回答

1

我們有完全相同的錯誤或者前幾次。 檢查您在OpenGraphActionDialogBu​​ilder中使用了正確的動作類型。 我們使用正確的動作類型參數修正了相同的錯誤。 在你的情況下,你應該檢查「yourcity:visit」是行動的名稱。 前往開發人員支持
中心 https://developers.facebook.com/x/apps/your-app-id/open-graph/action-types/然後單擊獲取代碼以獲取要執行的操作。然後閱讀應該看起來像這樣的網址:?

https://graph.facebook.com/me/app_namespace:app_action ...

然後用正確的APP_ACTION在你的代碼。它應該修復!

3

已經處理了幾個小時這個錯誤。 如何修復它。 您在代碼中指定的操作和對象是導致問題的操作和對象。

在Facebook開發者指南上提供的樣本不夠好,我覺得。這裏有一個你可以使用的示例代碼,它可以很好地工作。 基本上確保你的ObjectType - > eg:video.other設置正確,你的Action類型例如:video.watches設置正確。

void sometestCode(){ 
     OpenGraphObject video = OpenGraphObject.Factory.createForPost("video.other"); 
     video.setTitle("Awesome Video"); 
     video.setDescription("This video will show you how to make the Opengraph work"); 

     OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class); 
     action.setProperty("video", video); 
     action.setType("video.watches");    

     FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(this, action, "video") 
       .build(); 
     uiHelper.trackPendingDialogCall(shareDialog.present()); 

    } 
+0

1.什麼代表'other'在你的代碼中? - 例如:'video.other'-和2.爲什麼要使用'action.setType(「video.watches」)'?文檔說:'actionType \t - 要發佈的Open Graph操作的類型,它應該是操作類型的命名空間限定名稱(例如「myappnamespace:myactiontype」);這將覆蓋傳入的操作的類型。「我已經使用了你的代碼,但是我得到了同樣消失的對話框。 – AlexAndro

+0

您可以請分享我可以獲取更新文件的鏈接嗎? – Kunu

+0

@AlexAndro:1。「其他」表示可以是「tv_show」或「電影」的視頻類型。 2.僅當它是自定義對象或操作時,才需要指定「myappnamespace」。如果您使用的是Facebook提供的,那麼您可以跳過它。 – AmeyaB