验证应用邀请服务器端

时间:2014-09-24 18:24:09

标签: c# facebook facebook-graph-api facebook-c#-sdk

当我们的移动应用用户将app-invite发送给fb用户并且他接受了它时,服务器应该对第一个给予奖励。所以我需要一种方法来验证邀请是否已发送。

        var fb = new FacebookClient(APP_ID + "|" + SECRET_ID);
        fb.AppId = APP_ID;
        fb.AppSecret = SECRET_ID;
        dynamic result = fb.Get(???);

我搜索了GraphAPI文档,似乎我需要检索用户apprequests。如何从服务器端执行此操作以及在何处查看以执行此类验证?

更新

好的,现在我知道它是allowed to reward only for accepted invites。我可以记录谁邀请谁在数据库中,并仅在新的受邀用户加入时给予奖励。但我仍然需要一种方法来验证这些邀请是否实际发送过。

UPDATE2

正如文档所述apprequests从应用程序调用返回从此应用程序发送的所有请求。所以我认为仅仅检查这个应用程序是否有任何请求就足够了:

        dynamic result = fb.Get("/" + facebookId + "/apprequests");
        IEnumerable data = result.data;
        return data.Cast<object>().Count() != 0;

但我现在无法查看。任何人都可以确认,如果用户向其他用户发送了应用邀请,则会通过应用程序访问令牌中的apprequests看到此邀请吗?

2 个答案:

答案 0 :(得分:0)

我的代码:

        public static FacebookRequestData GetInviteHash()
        {
            string requestId = Request["request_ids"];
            var accessToken = GetAccessToken(ConfigurationManager.AppSettings["FacebookAppId"], ConfigurationManager.AppSettings["FacebookSecret"]);

            string response;
            using (var webClient = new WebClient())
            {
                response = webClient.DownloadString(string.Format("https://graph.facebook.com/{0}?{1}", requestId, accessToken));
            }

            var javaScriptSerializer = new JavaScriptSerializer();

            return javaScriptSerializer.Deserialize<FacebookRequestData>(javaScriptSerializer.Deserialize<FacebookRequestInfo>(response).data);
        }

        private static string GetAccessToken(string appId, string password)
        {
            using (var webClient = new WebClient())
            {
                return webClient.DownloadString(string.Format("https://graph.facebook.com/oauth/access_token?client_id={0}&client_secret={1}&grant_type=client_credentials", appId, password));
            }
        }

        private class FacebookRequestInfo
        {
            public string data { get; set; }
        }

FacebookRequestData - 我的自定义类,其中包含我之前发布到fb的字段结构

答案 1 :(得分:0)

完成它:

    public static bool CheckInvite(string fromId, string toId)
    {
        var fb = new FacebookClient(APP_ID + "|" + SECRET_ID);
        fb.AppId = APP_ID;
        fb.AppSecret = SECRET_ID;
        dynamic result = fb.Get(string.Format("/{0}/apprequests", toId));
        foreach (var el in result.data)
            if ((string)el.from.id == fromId)
            {
                DateTime dateTime = DateTime.Parse((string)el.created_time, CultureInfo.InvariantCulture);
                if ((DateTime.Now - dateTime).TotalMinutes < 15)
                {
                        return true;
                }
            }

        return false;
    }