0

私はグラフAPIを使用して、概念実証Androidアプリを開発中です。私は自分のFacebookアプリのアルバムにビデオをアップロードしようとしています。AndroidでグラフAPI経由で動画をアップロードする際にエラーが発生しました

私がそうするように、コードのこの部分を使用するには:

String dataName = new File(getRealPathFromURI(this,data.getData())).getName(); 
      Toast.makeText(this,dataName,Toast.LENGTH_LONG).show(); 
      params.putString("filename", new File(getRealPathFromURI(this,data.getData())).getName()); 
      params.putByteArray("source",k); 
      /* make the API call */ 
      new GraphRequest(
        AccessToken.getCurrentAccessToken(), 
        "/"+sProfile.getId()+"/videos", 
        params, 
        HttpMethod.POST, 
        new GraphRequest.Callback() { 
         public void onCompleted(GraphResponse response) { 
          TextView textView = (TextView) findViewById(R.id.textView2); 
           textView.setText(response.toString()+" "+k.length); 
          Log.v("Response:",response.toString()); 
         } 
        } 
      ).executeAsync(); 

にもかかわらず、これはFacebookからsuggested methodにAndroidのと同等であり、私が働いて.mp4ファイルをアップロードしようとしていることを、私はこのエラーを取得します。

{Response: responseCode: 400, graphObject: null, error: {HttpStatus: 400,errorCode: 352, errorType: OAuthException, errorMessage: Sorry, the video file you selected is in a format that we don't support.}} 

は、それだけで「ソース」に設定されるようにアップロードする動画のファイル名を引き起こしAndroidのFacebookのSDK、中GraphRequest.javaにバグがあり、私には思えます。ここで

は、ライン2166および2167にGraphRequest.javaに、我々は以下を参照してください。

ライン2245年から2248年に同じファイル内
public void writeBytes(String key, byte[] bytes) throws IOException { 
     writeContentDisposition(key, key, "content/unknown"); 

そしてwriteContentDispositionの引数:

public void writeContentDisposition(
      String name, 
      String filename, 
      String contentType 
    ) 

べき、中大文字小文字のparams.putByteArray("source",k);を "source"に設定し、フェイスブックのファイル拡張子は使用しません。

params.putString("filename", <FILENAME>);を追加すると、ファイル名が間違ってsourceに変更されないため、単に機能しません。

ソースパラメータを含めて、あなたはファイルコンテナのタイプを示す正しい拡張子を持つファイル名を含める必要があります。私たちは、次の読むことができるGraph API 2.5 video reference

ぼんやりとして、2.6 video referenceには、そこに書かれたようなものはありません。

私の質問は以下のとおりです。

  1. が本当にGraphRequest.javaにバグがありますか?または、2.6ビデオ参照が正しいです、そして、ファイル名はもはや重要ではありませんか?
  2. バグがある場合、build.gradle依存関係を使用してAPIを使用しているときに、どのようにクラスを変更できますか?
  3. バグがない場合、アップロードスクリプトについて何が間違っていますか?Facebookがフォーマットエラー応答を送信しないようにするにはどうすればよいですか?

答えて

0

Facebook Android SDKには本当にバグがあるようです。回避策として

、私は次のような方法作成したと、Android Asynchronous Http Clientを使用:

void uploadVideo(String name, InputStream is, String fileName){ 
    AsyncHttpClient client = new AsyncHttpClient(); 
    RequestParams rp = new RequestParams(); 
    rp.put("access_token",AccessToken.getCurrentAccessToken().getToken()); 
    rp.put("name",name); 
    rp.put("source",is,fileName); 
    client.post(this, "https://graph-video.facebook.com/me/videos", rp, new AsyncHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
      //something... 
     } 

     @Override 
     public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { 
      //something... 
     } 
    }); 
} 

をそして意図したとおりにすべての作品。

関連する問題