Facebook用户是否可以通过W8 / WP8 c#sdk向用户请求?

时间:2014-01-11 20:17:24

标签: c# facebook windows-8 windows-phone-8 facebook-c#-sdk

我正试图让我的手机游戏邀请来自facebook的朋友,但我无法做到。我正在使用面向Windows 8的Facebook c#SDK(希望在准备好WP8,Android和iOS时移植)但问题是我对facebook API参数感到困惑:

这是我的代码:

var fb = new FacebookClient (accessToken);
dynamic parameters = new ExpandoObject();
parameters.appId = facebookAppId;
parameters.message = "This is a test!";
parameters.to="friendID1,friendID2,...";

string request=String.Format ("/me/apprequests");
dynamic result = await fb.PostTaskAsync (request, parameters);

当我使用此代码时,Post任务正确完成,但是(检查结果变量并查看facebook)“me”用户会收到该邀请。 “to”字段似乎被忽略,“me”是唯一接收请求的人。

如果我使用

string request=String.Format ("/{0}/apprequests",FRIEND_ID);

而不是/ me / apprequests,然后我收到以下错误:

OAuthException“(#2)无法创建任何应用请求”,

我在某些地方读过访问令牌必须是App Token,但是文档说它只应在服务器执行这些请求时使用,我想要的是用户对用户请求,不是应用程序到用户的请求。

到目前为止,我已经看到可以通过Dialog Request在Android和iOS中获取它,但是我没有在C#SDK中找到它们,所以我试图手动进行apprequest,没有运气。< / p>

是否可以使用Windows Phone 8或Windows 8?怎么样?

谢谢, 珏

1 个答案:

答案 0 :(得分:2)

是的,这是可能的。不幸的是,你不能通过SDK来实现它,因为Facebook不允许你以编程方式发送请求。必须通过对话框请求框/弹出窗口完成。

因此,在尝试以下解决方案之前,请确保用户已登录。使用LoginAsync方法获取facebook访问令牌后,请按照下列步骤操作。

  1. 在xaml中创建一个启用了脚本的WebBrowser控件。
  2. <phone:WebBrowser Visibility="Collapsed" IsScriptEnabled="True" Name="FbBrowser"></phone:WebBrowser>

    1. 现在在您的代码中,创建一个字符串,其中包含您要以CSV格式邀请的用户的facebook ID,例如&#34; id1,id2,id3&#34;。

    2. 将Web浏览器导航到以下页面并订阅导航事件: "https://m.facebook.com/dialog/apprequests?" + "message=your_message&app_id=" + "your_facebook_appid" + "&redirect_uri=https://m.facebook.com&to=" + user_facebook_ids_CSV + "&sdk=2&display=touch"

    3. FbBrowser.Visibility = Visibility.Visible; FbBrowser.Navigating += FbBrowser_Navigating; FbBrowser.Navigate(url1);

      1. 您可以在导航事件中处理网页的成功和失败响应。
      2. private void FbBrowser_Navigating(object sender, NavigatingEventArgs e) { if (e.Uri.ToString().StartsWith("https://m.facebook.com/?error_code") || e.Uri.ToString().StartsWith("https://m.facebook.com/?request")) { FbBrowser.Visibility = Visibility.Collapsed; FbBrowser.Navigate(new Uri("about:blank"));
        } }