Twitter 错误 215 使用 Fabric Android SDK 和 Retrofit 上传媒体
Posted
技术标签:
【中文标题】Twitter 错误 215 使用 Fabric Android SDK 和 Retrofit 上传媒体【英文标题】:Twitter error 215 using Fabric Android SDK and Retrofit to upload media 【发布时间】:2015-07-31 20:43:23 【问题描述】:我正在通过 Retrofit 使用 Rest API 将视频上传到 Twitter,但有时,我在改造日志中收到内部服务器错误 (500):"errors":["code":215,"message": “错误的身份验证数据。”]
身份验证过程是使用 Fabric 完成的:
TwitterAuthConfig authConfig = new TwitterAuthConfig(CONSUMER_KEY, CONSUMER_SECRET);
Fabric.with(this, new TwitterCore(authConfig), new TweetUi());
twitterLoginButton.setCallback(new Callback<TwitterSession>()
@Override
public void success(final Result<TwitterSession> result)
// Calls method to let user chose a media to upload
@Override
public void failure(final TwitterException exception)
// Do something on failure
);
选择视频并尝试发布后,我进行以下验证:
AccountService accountService = TwitterCore.getInstance().getApiClient().getAccountService();
accountService.verifyCredentials(false, false, new Callback<User>()
@Override
public void success(final Result<User> result)
// Calls retrofit to init upload video process
@Override
public void failure(final TwitterException exception)
// Do something on failure
);
改造电话如下:
@FormUrlEncoded()
@POST("/1.1/media/upload.json")
void uploadVideoInit(@Field("command") String command,
@Field("total_bytes") String totalBytes,
@Field("media_type") String mediaType,
Callback<T> callback);
@Multipart
@POST("/1.1/media/upload.json")
void uploadVideoAppend(@Part("command") String command,
@Part("media_id") String mediaId,
@Part("media") TypedFile media, // The raw binary file content being uploaded. Cannot be used with media_data.
// Required after an INIT, an index number starting at zero indicating the order of the uploaded chunks.
// The chunk of the upload for a single media, from 0-999, inclusive.
// The first segment_index is 0, the second segment uploaded is 1, etc.
@Part("segment_index") int segmentIndex,
Callback<T> callback);
@POST("/1.1/media/upload.json")
@FormUrlEncoded()
void uploadVideoFinalize(@Field("command") String command,
@Field("media_id") String mediaId,
Callback<T> callback);
推文部分是这样的:
@FormUrlEncoded
@POST("/1.1/statuses/update.json")
void update(@Field("status") String status,
@Field("media_ids") String mediaIds,
Callback<T> callback);
它有效,但是,我收到上述错误并不难,通常是在过程的 de APPEND 部分。我尝试上传短视频以及允许的最长持续时间(大约 30 秒)的短视频,但情况相同。
我想知道是否需要为每个请求添加一些参数,例如用户的令牌,或者用户凭据是否比预期的过期时间早。到目前为止,我还没有发现丢失或错误的地方。
提前致谢。
【问题讨论】:
您好,您可以添加完整的代码吗?我在发送视频时遇到问题,我认为问题在于uploadVideoAppend
请求中的media
信息。当调用finalize
时显示错误InvalidContent
。非常感谢您的帮助。
您好,很遗憾,因为我在另一家公司工作,所以我已经无法访问代码了,但是我当时遵循的过程基本上就是上面描述的。当我开始等待 Twitter 服务器响应然后启动该过程的另一部分时,我的错误得到了解决。您的 InvalidContent 错误可能与您尝试上传的媒体类型或其格式和大小有关?
【参考方案1】:
我们已经解决了这个问题。问题是我们发送块文件时没有期望来自服务器的任何结果并立即继续该过程。通过这样做,我们能够毫无问题地完成该过程。谢谢。
【讨论】:
以上是关于Twitter 错误 215 使用 Fabric Android SDK 和 Retrofit 上传媒体的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fabric SDK 从 Twitter 授权中取消时出现授权错误