2016-09-01 10 views
0

sharing view and open graph storiesを使用してFacebookに広告を掲載する必要があるアプリケーションを作成しています。 それは時間や距離などの基本的な情報だけで罰金ポストが、何らかの理由で私はもちろん、この例のように、地図上に表示することができません。ShareOpenGraphObjectを使用してFacebookに地図を投稿

enter image description here

これは私が持っているコードです。ポストを作成する:this bug reportに記載されているように

for (int i = 0; i < dataPoints.size(); i++) { 
     DataPoint dataPoint = dataPoints.get(i); 
     ShareOpenGraphObject.Builder metric = new ShareOpenGraphObject.Builder(); 
     metric.putDouble("fitness:metrics:location:latitude", dataPoint.latitude); 
     metric.putDouble("fitness:metrics:location:longitude", dataPoint.longitude); 
     metric.putDouble("fitness:metrics:location:altitude", dataPoint.altitude); 
     locations.add(metric.build()); 
    } 

    ShareOpenGraphObject object = new ShareOpenGraphObject.Builder() 
      .putString("fb:app_id", parent.getString(R.string.facebook_app_id)) 
      .putString("og:type", "fitness.course") 
      .putString("og:title", "Workout on " + date) 
      .putString("og:url", BASE_URL + getApp().getUserName() + "/activity/" + summary.Id) 
      .putInt("fitness:duration:value", summary.TijdInSecondes) 
      .putString("fitness:duration:units", "s") 
      .putDouble("fitness:distance:value", samenvatting.AfstandInMeters/1000f) 
      .putString("fitness:distance:units", "km") 
      .putInt("fitness:speed:value", samenvatting.AfstandInMeters/samenvatting.TimeInSeconds) 
      .putString("fitness:speed:units", "m/s") 
      .putInt("fitness:calories", samenvatting.Kcal) 
      .putObjectArrayList("fitness:metrics:location", locations) 
      .build(); 

    ShareOpenGraphAction action = new ShareOpenGraphAction.Builder() 
      .setActionType("fitness.runs") 
      .putObject("fitness:course", object) 
      .build(); 

    ShareOpenGraphContent content = new ShareOpenGraphContent.Builder() 
      .setPreviewPropertyName("fitness:course") 
      .setAction(action) 
      .build(); 

Iはまた、配列のインデックスを含むように指標をエンコードすることを試みた:

 for (int i = 0; i < dataPoints.size(); i++) { 
     DataPoint dataPoint = dataPoints.get(i); 
     ShareOpenGraphObject.Builder metric = new ShareOpenGraphObject.Builder(); 
     metric.putDouble("fitness:metrics[" + i + "]:location:latitude", dataPoint.latitude); 
     metric.putDouble("fitness:metrics[" + i + "]:location:longitude", dataPoint.longitude); 
     metric.putDouble("fitness:metrics[" + i + "]:location:altitude", dataPoint.altitude); 
     locations.add(metric.build()); 
    } 

しかしそれでも解決しませんでした。私は何が欠けていますか?

+0

@CBroeありがとうございましたが、私はそれを理解しました。彼らのドキュメンテーションでは、まったく不明瞭です。 – Michiel

答えて

1

予想よりもずっと簡単でした。場所のために別々の配列を作成するのではなく、元のShareOpenGraphObjectに直接追加するだけですが、配列番号を手動でコーディングします。

 ShareOpenGraphObject.Builder object = new ShareOpenGraphObject.Builder() 
      .putString("fb:app_id", parent.getString(R.string.facebook_app_id)) 
      .putString("og:type", "fitness.course") 
      .putString("og:title", "Workout on " + date) 
      .putString("og:url", BASE_URL + getApp().getUserName() + "/activity/" + samenvatting.Id) 
      .putInt("fitness:duration:value", samenvatting.TijdInSecondes) 
      .putString("fitness:duration:units", "s") 
      .putDouble("fitness:distance:value", samenvatting.AfstandInMeters/1000f) 
      .putString("fitness:distance:units", getApp().getSettings().speedUnitIsMetric() ? "km" : "mi") 
      .putInt("fitness:speed:value", samenvatting.AfstandInMeters/samenvatting.TijdInSecondes) 
      .putString("fitness:speed:units", "m/s") 
      .putInt("fitness:calories", samenvatting.Kcal); 


    for (int i = 0; i < dataPoints.size(); i++) { 
     DataPoint dataPoint = dataPoints.get(i); 
     object.putDouble("fitness:metrics[" + i + "]:location:latitude", dataPoint.latitude); 
     object.putDouble("fitness:metrics[" + i + "]:location:longitude", dataPoint.longitude); 
     object.putDouble("fitness:metrics[" + i + "]:location:altitude", dataPoint.altitude); 
    } 
関連する問題