2014-09-24 33 views
1

當我們的移動應用程序用戶向fb用戶發送應用程序邀請並且他接受它時,服務器應該對第一個應用程序給予獎勵。所以我需要一種方法來驗證邀請是否已發送。驗證應用程序邀請服務器端

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

我在GraphAPI文檔上搜索,似乎我需要檢索用戶apprequests。如何從服務器端執行此操作,以及在何處查看以執行此類驗證?

UPDATE

好了,現在我知道這是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被看到?

+0

你不允許給根據https://developers.facebook.com/policy – WizKid 2014-09-24 18:32:57

+0

發送邀請的獎勵,您可以給出報價嗎? – Vlad 2014-09-24 18:35:12

+0

4.5:「只有激勵一個人登錄你的應用程序,就像你的應用程序的頁面,在你的應用程序的頁面上輸入促銷或者在某個地方登記一樣,不要激勵其他行爲(從2014年11月5日開始,你可能不再鼓勵人們喜歡你的應用的頁面)。「 – WizKid 2014-09-24 18:38:10

回答

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; 
    } 
+0

這種方法比razon的建議更適合我 - 請求響應ID不包含「to」屬性(如果您沒有指定包含123456_234567之類的to-id請求)。 – Vlad 2014-09-25 21:45:00

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較早