4

我们正在将 Google Play 游戏服务成就添加到我们的游戏 (Epic Swords)。我们正在进行最终测试,它可以正常工作,我曾预计解锁的成就会通过 g+ 以某种方式可见或发布。我没有看到这种共享发生。

谷歌的文档暗示这些是共享的,例如“用谷歌登录以与朋友分享你的分数和成就” http://goo.gl/V3Y41和其他各种地方,尽管这些是如何共享的含糊不清。

Q1:解锁的游戏服务成就会自动通过g+可见吗?

Q2:如果是,那么我们在测试这些方面是否做错了什么?

Q3:如果不是……那么,为什么使用播放服务而不是滚动我们自己的服务来实现成就?做我们自己的实现会更简单,更可靠(由于与谷歌的云同步状态有很多复杂性,更不用说他们的客户端代码中的一些有趣的错误;-)

背景:我们已经发布了 Google Play 游戏服务。游戏中一切正常,状态正在从谷歌共享/检索。我在登录游戏服务时选择了游戏进度的公开可见性。

顺便说一句,我们可以在使用通用共享 API http://goo.gl/L70sY解锁成就时添加显式 g+ 共享,但是再次......如果我们必须这样做,那为什么还要使用播放服务成就呢?

4

2 回答 2

4

感谢 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+ 上实现社交成就的一个很好的理由......

于 2013-07-13T23:30:48.357 回答
1

没有 Android 应用程序可以自动发布到 Google+ - 您必须通过 Google+ 应用程序通过传统的分享意图或通过您提到的交互式发布 API。有一些应用活动可以由应用程序创建并通过他们的个人资料在用户的应用程序页面中看到(然后由用户从那里共享)。但是,App Activity 目前并未集成到 Google Play 游戏服务中。这并不是说它不会在任何时候神奇地发生(并且,因为它是服务器端的变化,可能会自动发生,因为所有游戏都已经请求创建游戏活动的权限(目前没有))。

成就,如Google Play 游戏服务主页中所述,“鼓励用户以新颖有趣的方式探索您的游戏”,当然,它确实为所有支持 Google Play 的游戏提供了一致的体验。这对您或您的用户是否足够重要可能会随着时间而改变,但预先提供完整的体验(正如那些愿意通过 Google+ 登录的人可能期望的那样)可能会提供更好的用户体验。

于 2013-07-11T17:15:52.110 回答