【问题标题】:How to discover which friends accepted invites with Facebook API?如何通过 Facebook API 发现哪些朋友接受了邀请?
【发布时间】:2014-08-18 13:17:03
【问题描述】:

Facebook API v2.0 引入了invitable_friends edge

GET 请求对此边缘的响应示例如下:

{
  "data": [ 
    {
      "id": "AVkgK9fLFxasdvXNbDV_gYogR6lXa9SKLnH...", 
      "name": "Anita Sujarit", 
      "picture": {
        "data": {
          "is_silhouette": false, 
          "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn2/t1.0-1/c0.0.50.50/p50x50/1470158_10201991701127909_302023572_t.jpg" 
        }
      }
    }
}

仔细查看该 ID,它不是普通的 Facebook 用户 ID。相反,它是Invite Token;此令牌作为to 参数的值传递给Requests Dialog

在每个朋友对象上作为名为 id 的字段的值返回的邀请令牌是一个唯一的(每个用户和每个游戏)可变长度的字符串。邀请令牌会过期,并且可能会在游戏会话之间发生变化。因此,不建议缓存这些结果,或者尝试将它们分配给给定的人。

friends edge 现在只返回已经在使用该应用的朋友


我的问题是我现在无法交叉引用我邀请的朋友和接受的朋友。

以前,当我向他们发送邀请时,我会存储一个朋友 ID,然后在稍后将其与玩游戏的朋友列表进行核对,但现在由于以下几个原因无法做到这一点:

  • 邀请令牌不存在于好友边缘
    • 无论如何它都是动态的
  • invitable_friends 边缘不存在普通用户 ID。
  • 我可以使用用户名作为键,但这不是唯一的。

实际问题: 有没有人想出一种方法来确定已受邀的用户是否接受了邀请?

【问题讨论】:

标签: ios facebook facebook-graph-api


【解决方案1】:

TLDR:保存来自实际邀请这些朋友请求的响应

据我了解您提供的reference

您可以开始请求invite_tokens,我假设您已经能够做到。

作为答案,您可以根据invitable_friend

{
  "id": "AVlzYTkXshfBqLe58zR9tY5dZ7L0wltTUkWKT0Z5V87zkwv-39...", // Invite Token
  "name": "Guy Cross",
  "picture": {
    "data": {
      "is_silhouette": false,
      "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/t5.0-1/623782_622770420_2109148508_q.jpg"
    }
  }
}

该页面前面提到了一般如何执行请求:

FB.ui({method: 'apprequests',
  message: 'YOUR_MESSAGE_HERE',
  to: 'USER_ID, USER_ID, INVITE_TOKEN' // It says invite token
}, function(response){
  console.log(response);
});

to那一行:你可以把邀请令牌放在那里。

现在响应如下所示:

{
  request: 'REQUEST_OBJECT_ID'
  to:[array of USER_IDs]
}

你得到了你的用户ID。


如果您走得更远,需要更多信息或想看看谁接受了,那么您有两种选择:

  • 可以查看用户id是否授权游戏
  • 当新用户登录时,您可以请求该新用户的所有请求。在那里你可以追踪谁邀请了他。 GET https://graph.facebook.com/me/apprequests?access_token=[USER ACCESS TOKEN]
  • 您保存所有数据(在 TLDR 中说明)并在每次有新用户加入您的游戏时检查新用户 ID 是否在您提到的请求列表中。

要查看谁邀请了他,您可以检查接收用户的request_object_idhttp://graph.facebook.com/{REQUEST_OBJECT_ID}?access_token=USER_ACCESS_TOKEN,以下响应将是:

{
  "id": "REQUEST_OBJECT_ID",
  "application": {
    "name": "APP_DISPLAY_NAME",
    "namespace": "APP_NAMESPACE",
    "id": "APP_ID"
  },
  "to": {
    "name": "RECIPIENT_FULL_NAME",
    "id": "RECIPIENT_USER_ID"
  },
  "from": {
    "name": "SENDER_FULL_NAME",
    "id": "SENDER_USER_ID"
  },
  "message": "ATTACHED_MESSAGE",
  "created_time": "2014-01-17T16:39:00+0000"
}

如果您使用来自发件人的用户访问令牌,您会得到:

{
  "id": "REQUEST_OBJECT_ID",
  "application": {
    "name": "APP_DISPLAY_NAME",
    "namespace": "APP_NAMESPACE",
    "id": "APP_ID"
  },
  "from": {
    "name": "SENDER_FULL_NAME",
    "id": "SENDER_USER_ID"
  },
  "message": "ATTACHED_MESSAGE",
  "created_time": "2014-01-17T16:39:00+0000"
}

为了防止这种情况,您可以指定接收用户的用户 ID,并从接收者那里得到相同的答案:https://graph.facebook.com/{REQUEST_OBJECT_ID}_{USER_ID}?access_token={APP_ACCESS_TOKEN}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多