感谢 ianhanniballake 的帮助,我添加这个是为了澄清答案(例如,成就可以自动发布)并总结我们在添加此功能时所学到的知识。
希望 Google 员工会关注我们的 Pro/Con,因为使用 1.0 SDK 很难推荐 API,但经过改进它会很有价值。
自动分享 google play services 成就(截至 7/13 SDK):
- 成就进度(例如解锁)不通过 g+ 共享/可见
- sdk 不利于共享成就。如果不添加自动共享,PlusShare.Builder.shareUnlock() 之类的东西会有所帮助,但目前要在 g+ 上共享成就,您必须从头开始实施
- imo 没有什么能阻止谷歌在未来添加自动成就共享。他们的登录流程获得了用户分享“游戏进度”的权限,其他帖子称排行榜确实有社交分享
根据我们的经验:Google Play 服务成就的优劣:
亲:
- 这是 Google 的官方解决方案,因此希望成为事实上的 Android 标准
- 如果愿意, Google可以通过 g+ 分享/显示成就进度。那会让它更有价值
缺点:
- 用户必须愿意登录 g+ 才能查看/保存成就。一些用户不会这样做并且很恼火他们不能使用成就
- 同步客户端-服务器具有复杂的策略和实施问题。例如,用户可以在游戏取得实质性进展后登录;可以同时在多个设备上播放;可能会在游戏中途退出并以其他用户身份登录
- 测试很困难,因为无法通过 Android API 或服务器 UI 重置测试帐户的成就进度。我认为谷歌可以解决这个问题......拜托!有些帖子说删除/重新添加测试员帐户重置,但这对我们不起作用,或者它可能只在发布前起作用
- Google 的设计旨在让他们的服务器管理 UI 资产(图标、字符串)和成就策略。如果将来在 g+ 中可以看到成就,这很好,但在那之前,这很麻烦。例如见下面的代码
- 客户端 UI 还可以,但没有完善。例如,描述文本区域有限,“在战斗中击败骷髅王”在某些 UI 模式中被截断,无法查看全部细节。增量成就限制为 10,000 步(为什么?)
建议:如果您相信 Google 会通过 g+ 显示成就,这是一个很棒的功能,并且解释了上面的大部分“骗局”。然而,如果成就仍然不共享,那么使用谷歌的 API 就不太可靠,而且与推出我们自己的客户端实现相比,它的工作量要大得多。
警告:如果您使用 ImageManager,截至 2013 年 7 月 15 日的 Google Play 游戏服务似乎存在间歇性崩溃错误。见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+ 上实现社交成就的一个很好的理由......