我们正在将谷歌游戏服务的成就添加到我们的游戏中(史诗之剑)。我们正在进行最后的测试,它可以正常工作,只是我希望通过g+可以看到或以某种方式发布未锁定的成就。我没有看到这种分享发生。
google的文档暗示这些是共享的,例如“登录google与好友共享你的分数和成就”http://goo.gl/V3Y41和其他各种地方,尽管对于如何共享这些内容还很模糊。
问题1:解锁的游戏服务成绩是否通过G+自动显示?
问题2:如果是的话,那么我们在测试这些东西的时候是不是做错了什么?
问题3:如果没有……那么,为什么要使用play服务来实现成就,而不是自己滚动呢?我们自己的实现会更简单、更可靠(因为状态与google的云同步会带来很多复杂性,更不用说客户端代码中的一些有趣的bug了;-)
背景:我们已经发布了谷歌游戏服务。在游戏中一切都很好,而且状态是从google共享/检索的。我在登录游戏服务时选择了游戏进度的公共可见性。
顺便说一下,我们可以添加显式的g+共享时,成就解锁使用通用共享apihttp://goo.gl/L70sY但再次…如果我们必须这样做,那么为什么要使用游戏服务的成就呢?
最佳答案
感谢Ianhanniballake的帮助,我添加这个来澄清答案(例如,成就可以自动发布),并总结我们在添加这个功能时所学到的东西。
希望googler会关注我们的pro/con,因为使用1.0sdk很难推荐api,但是通过改进它会很有价值。
自动分享google play服务成果(截至7/13 sdk):
成就进度(例如解锁)不通过G共享/可见+
sdk不利于共享成果。如果不添加自动共享,像plusshare.builder.shareunlock()这样的东西会有帮助,但当前要在g+上共享成就,必须从头开始实现
imo没有阻止google在未来增加自动成果分享。他们的登录流获得了用户共享“游戏进度”的许可,其他帖子说排行榜确实有社交共享
根据我们的经验:Google Play服务成就的赞成/反对:
赞成的意见:
这是谷歌的官方解决方案,希望能成为事实上的android标准。
如果他们愿意的话,google可以通过g+共享/显示成就进展。这会让它更有价值
反对的论点:
用户必须愿意登录G+以查看/保存成就。有些用户不会这样做,他们很恼火不能使用成就
同步客户端服务器有复杂的策略和实现问题。例如,用户可以在游戏取得实质性进展后登录;可以同时在多个设备上玩游戏;可以在游戏中途以不同的用户身份注销和登录
测试很困难,因为无法通过android api或服务器ui重置测试帐户的实现进度。我想谷歌可以解决这个问题…拜托!一些帖子说删除/重新添加一个测试人员帐户会重置,但这对我们不起作用,或者它可能只在发布前起作用
google的设计意图是他们的服务器管理ui资产(图标、字符串)和成就策略。如果在g+中可以看到未来的成就,这是很好的,但在那之前这是一个麻烦。例如,见下面的代码
客户端用户界面还可以,但还没有完善。例如,描述文本区域是有限的,“在战斗中击败骷髅王”在某些用户界面模式下被截断,无法看到完整的细节。增量成果仅限于10000步(为什么?)
推荐:如果你相信google会通过g+使成就可见,这是一个很好的功能,并解释了上面大部分的“骗局”。然而,如果成就仍然是不共享的,那么使用google的api就比滚动我们自己的客户机实现更不可靠,工作也更多。
警告:如果使用imagemanager,2013年7月15日起的google play game services似乎存在间歇性崩溃错误。请参见ClassCastException: com.google.android.gms.common.images.e我们已切换到在apk中捆绑解锁图像,不再使用imagemanager
这是我们现在弃用的代码,用于在用户解锁成就时检索位图:
Uri unlockedUri = achievement.getUnlockedImageUri();
if (unlockedUri != null) {
ImageManager im = ImageManager.create(context);
// Warning -- loadImage may silently skip call back if called too soon after achievement load
im.loadImage(new ImageManager.OnImageLoadedListener() {
@Override public void onImageLoaded(Uri arg0, Drawable drawable) {
// Attempt to convert the Drawable to a sharable image; if it fails we'll post text only
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
bitmap = ((BitmapDrawable) drawable).getBitmap();
} else {
log.warn("not BitmapDrawable ", drawable);
}
listener.onBitmapLoaded(bitmap);
}
}, unlockedUri);
} else {
log.debug("no unlockedImageUri");
listener.onBitmapLoaded(null);
}
google不提供自动g+共享的一个好处是,当你不得不滚动你自己的共享时,你也可以在g+之外的其他服务上这样做。我们还提供给Twitter分享未锁定的成就。但反常的是,这是谷歌应该尽快在g+上实现社交化的一个很好的理由……开发人员很懒,这将确保很多游戏的社交成果都是在g+上的;-)