Facebook for Android FacebookDialog.ShareDialogBuilder不';无法识别请求返回的URI。newUploadStagingResourceWithImageRequest
我对android和facebook比较陌生,所以请耐心听我说。重要提示:无论我在何处键入h。。也就是说。我不打算在这里张贴链接,但我必须解释这一点(我的许可只允许2个链接),所以请容忍我 此应用程序使用FacebookDialog.ShareDialogBuilder发布facebook帖子。如果为使用.setPicture方法的帖子提供静态硬编码URL h..example.com/share_name/image_name.png,那么这一切现在都非常有效。在这种情况下,帖子工作,图片显示在帖子上,一切都很好 但是,发送到帖子的图像是由应用程序动态创建的。因此,我将图像发送到facebook的暂存区,该区域也运行良好。 Request.newUploadStagingResourceWithImageRequest返回一个响应,该响应具有 这张照片出现在facebook的登台区 问题是FacebookDialog.ShareDialogBuilder不喜欢该URI位置。不知怎么的,它没有正确地形成或者我只是做错了什么 以下是详细信息和我尝试过的内容: 1) uriMine是存储图像的位置,它最初是从facebook的登台资源上传调用返回的,它是: "fbstaging://graph.facebook.com/staging_resources/MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng==". 我不知道协议“fbstaging:”是关于什么的(我在网上搜索了又搜索,但什么都没有),但我 一开始就按原样运行应用程序。结果显然是不可预测的结果,因为它卡在了一个循环中(looper类在没有特定模式的情况下不断重复)。它会显示post屏幕,但您无法键入消息,因为它会锁定、关闭、重复等 2) 在接受了一点关于格式良好的URL的在线教育后,我用h.替换了fbstaging://。。从而将uriMine变量更改为: h、 .graph.facebook.com/staging_resources/MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng== 这解决了无休止的循环问题(使后期工作很好),但它不会显示任何图像 3) 为了查看它是否能与任何形式为h..blabla.com/image_resource的旧的普通URL一起工作,我在线硬编码了一些图像的URL,它工作正常,并显示了这些图像 4) 好的,我保证,我已经完成了(唷!)。因此,目前的情况是: a) 将尿嘧啶作为fbstaging://graph.facebook.com/staging_resources/etc 等 让它疯狂 b) 发送一个在线资源的普通URL很好(顺便说一句,它是由浏览器形成的) c) 准备。而不是FBI,它让帖子工作,但facebook没有显示图像,好像它找不到它 顺便说一句,通过将其复制/粘贴到浏览器中直接转到上面的内容会被重定向到以下内容: h、 .dnsrearch.com/index.php?origURL=http%3A//www.graph.facebook.com/staging_resources/mde40nze4mdq0mtuwnja6mtm5odi2nzc3ng%3D%3D&r= 显然它找不到它 因此: 这个URI有什么地方不对,或者我遗漏了什么?请帮忙 非常感谢您花时间和耐心阅读本文Facebook for Android FacebookDialog.ShareDialogBuilder不';无法识别请求返回的URI。newUploadStagingResourceWithImageRequest,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我对android和facebook比较陌生,所以请耐心听我说。重要提示:无论我在何处键入h。。也就是说。我不打算在这里张贴链接,但我必须解释这一点(我的许可只允许2个链接),所以请容忍我 此应用程序使用FacebookDialog.ShareDialogBuilder发布facebook帖子。如果为使用.setPicture方法的帖子提供静态硬编码URL h..example.com/share_name/image_name.png,那么这一切现在都非常有效。在这种情况下,帖子工作,图片显示
暂存资源终结点仅用于暂存打开的图形对象或操作的二进制数据,并不用于常规链接共享。请参阅此处的文档:
在这种情况下,您可以使用(但不能添加链接),也可以将图像上载到自己的托管服务,并在setPicture方法中使用http/https url。非常感谢!我已决定将图像上载到另一台主机。我在网上找到了一些代码,似乎它可以做到这一点,但它相当复杂。你能为我指出一些代码/类的正确方向吗?这些代码/类可以让这变得更轻松一些(例如,android的ftp逻辑已经有点抽象了,或者??),非常感谢你的时间。
public class FacebookActivity extends Activity {
// initialize the global object to enable passing of activity to facebook dialog
public GlobalClass globalObject = new GlobalClass();
private UiLifecycleHelper uiHelper; // for Facebook...to mimic android's activity life cycle
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
uiHelper = new UiLifecycleHelper(this, null);
uiHelper.onCreate(savedInstanceState);
// set the calling activity...to pass to Face book
globalObject.setCurrentActivity(this);
// start Facebook Login
Session currentSession = new Session(this);
currentSession = Session.openActiveSession(this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(final Session session, SessionState state, Exception exception) {
// this callback should fire multiple times, be sure to get the right one i.e. session.isOpened()
if (session.isOpened()) {
// make request to the /me API
Request.newMeRequest(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
Bitmap bitmap = takeScreenshot();
Request imageRequest = Request.newUploadStagingResourceWithImageRequest(Session.getActiveSession(), bitmap, new Request.Callback() {
@Override
public void onCompleted(Response response) {
String uriMine = "";
JSONObject data = response.getGraphObject().getInnerJSONObject();
try {
uriMine = data.getString("uri");
uriMine = "http://www." + uriMine.substring(12); // strip off the "fbstaging://" from the uri
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (FacebookDialog.canPresentShareDialog(getApplicationContext(),
FacebookDialog.ShareDialogFeature.SHARE_DIALOG))
{
FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(globalObject.getCurrentActivity())
.setLink("https://play.google.com/store")
.setPicture(uriMine)
.setRequestCode(NativeProtocol.DIALOG_REQUEST_CODE)
.setApplicationName("This is the App Name")
.setName("This is the name")
.setDescription("This is the description")
.setCaption("This is the caption")
.build();
uiHelper.trackPendingDialogCall(shareDialog.present());
}
else
{
Toast.makeText(globalObject.getCurrentActivity(), "Please install the Facebook App first from Google Play.", Toast.LENGTH_LONG).show();
}
}
});
imageRequest.executeAsync();
}
}
}).executeAsync();
}
}
});
}