获取玩这个游戏的所有游戏中心朋友

时间:2013-04-17 09:35:37

标签: ios objective-c game-center

我想要一个同时玩我的游戏的本地玩家的所有朋友的列表。

我考虑过对每个排行榜上的每个朋友得分进行查询,并找到不同的玩家:

GKLeaderboard *allScoresEver = [[GKLeaderboard alloc] init];
allScoresEver.playerScope = GKLeaderboardPlayerScopeFriendsOnly;
allScoresEver.range = NSMakeRange(1,100);
allScoresEver.category = nil;

[allScoresEver loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) {

        // filter out distinct players, favouring scores from our leaderboard
        ...
    }];

...但这似乎只返回本地玩家的最后报告得分,而不是每个排行榜的每个得分,由朋友过滤。 docs说设置类别为nil应该返回“游戏之前报告的所有分数”。我想这意味着游戏的运行实例,而不是全球应用程序意义上的游戏?

有效获取我想要的结果的想法吗?

1 个答案:

答案 0 :(得分:0)

尝试类似的代码当类别设置为nil时,我得到的不仅仅是本地播放器的结果,但我似乎只获得了默认排行榜的结果。这是有道理的,我想,因为要求所有排行榜的所有结果都可能最终得到大量数据,但这并不是文档会让您相信的。就个人而言,为了解决类似的问题,我只是在询问其中一个排行榜,每个玩过至少一次的玩家应该有一个入口而不是每个排行榜。似乎奇怪的是,由于Game Center本身知道谁下载了应用程序,因此没有更好的方法来获取此信息。

编辑:似乎range = NSMakeRange(1, 100);是一个硬限制,考虑到你可以拥有多达500个朋友,这意味着这仍然不是一个有用的测试,以吸引所有玩游戏的朋友。但是,您可以创建一个包含playerID列表的排行榜,所以:

GKLeaderboard *query = [[GKLeaderboard alloc] initWithPlayerIDs:[GKLocalPlayer localPlayer].friends];

是处理它的一种方法。我已经用500个玩家ID的虚拟阵列以及最后的朋友列表进行了测试,但它确实有效,但如果可以与500名真正的朋友一起测试我会感觉更好 - 我只是没时间制作他们都是!