我对android和facebook比较新,所以请耐心等待。重要说明:无论我输入h ..这意味着http://www。我不打算在这里发布链接,但我必须解释这个(我的许可只允许2个链接)所以请耐心等待。
此应用使用FacebookDialog.ShareDialogBuilder进行Facebook帖子。如果使用.setPicture方法的帖子图像被赋予静态硬编码URL h..example.com / share_name / image_name.png,这一切都很有效。在这种情况下,帖子工作,图片显示在帖子上,一切都很好。
但是,发送到帖子的图像是由应用程序动态创建的。因此我将图像发送到Facebook的临时区域,这也很好。 Request.newUploadStagingResourceWithImageRequest返回一个响应,该响应具有JSON编码的URI位置 在facebook的临时区域中的图像。
问题是FacebookDialog.ShareDialogBuilder不喜欢那个URI位置。不知怎的,它没有形成正确的东西,或者我只是做错了什么。
以下是详细信息以及我尝试过的内容:
1)uriMine,图像存储的位置,因为它最初从Facebook的暂存资源上传调用返回: " fbstaging://graph.facebook.com/staging_resources/MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng==" ;.我不知道协议是什么" fbstaging:"是关于(我在网上搜索和搜索但没有)但我 一开始就按原样运行应用程序。结果显然是不可预测的结果,因为它卡在一个循环中(弯针类不断重复,没有特定的模式)。它会显示帖子屏幕,但你无法输入信息,因为它会锁定,关闭,重复等...
2)在网上进行了一些关于格式良好的URL的教育之后,我用h ..替换了fbstaging://,从而将uriMine变量更改为以下内容: h..graph.facebook.com / staging_resources / MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng == 这解决了无限循环问题(使得后期工作正常),除了它不会显示任何图像。
3)为了查看它是否适用于h..blablabla.com / image_resource表单的任何旧普通URL,我在网上对一些图像进行了硬编码,并且工作正常,并显示了图像。 / p>
4)好的,我保证,我做得最多(哇!)。所以,它现在的立场是:
a)将uriMine作为fbstaging传递://graph.facebook.com/staging_resources/etc等 让它吓坏了。
b)发送在线资源的正常URL工作正常(顺便说一下,形成一个浏览器形成它)。
c)预先http://www。而不是fbstaging://使帖子工作,但Facebook没有显示图像,好像它无法找到它。
顺便说一句,通过将其复制/粘贴到浏览器中直接转到上面,会被重定向到以下内容:
h..dnsrsearch.com / index.php的origURL = HTTP%3A // www.graph.facebook.com / staging_resources / MDE4NTY0NzE4MDQ0MTUwNjA6MTM5ODI2Nzc3Ng%3D%3D&安培; R =
显然它无法找到它。SO:
错误的URI或我缺少的URI是什么?请帮忙。
非常感谢您花时间和耐心阅读本文。
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();
}
}
});
}
答案 0 :(得分:0)
登台资源端点仅用于为打开的图形对象或操作暂存二进制数据,而不适用于常规链接共享。请参阅此处的文档:https://developers.facebook.com/docs/reference/android/current/class/Request/#newUploadStagingResourceWithImageRequest
在这种情况下,您可以使用PhotoShareDialogBuilder(但之后无法添加链接),也可以将图片上传到您自己的托管服务,并使用http / https网址在setPicture方法中。