ianhanniballake さん、ご協力ありがとうございます。回答を明確にするため (たとえば、実績を自動投稿することができます)、この機能を追加することで学んだことを要約するために、これを追加します。
1.0 SDK では API を推奨するのは難しいため、Google 社員が私たちの賛否両論を検討してくれることを願っていますが、改善されれば価値があるでしょう。
Google Play サービスの実績の自動共有(7/13 SDK 時点):
- アチーブメントの進行状況 (ロック解除など) は g+ で共有/表示されません
- SDK は成果の共有を促進しません。自動共有が追加されていない場合は PlusShare.Builder.shareUnlock() のようなものが役立ちますが、現在 g+ で実績を共有するには、ゼロから実装する必要があります
- imo は、Googleが将来的に自動実績共有を追加することを妨げるものは何もありません。彼らのサインインフローは、「ゲームの進行状況」を共有するためのユーザー許可を取得し、他の投稿では、リーダーボードにはソーシャル共有があると書かれています
私たちの経験から: Google Play サービスでの実績の賛否両論:
プロ:
- これは Google の公式ソリューションなので、Android のデファクト スタンダードになることを願っています。
- Googleは、必要に応じて、g+ を通じて実績の進捗状況を共有または表示できるようにすることができます。そうすればもっと価値が上がる
短所:
- 実績を表示/保存するには、ユーザーが g+ にサインインする必要があります。一部のユーザーはこれを行わず、実績を使用できないことに悩まされます
- クライアントとサーバーの同期には、複雑なポリシーと実装の問題があります。たとえば、ユーザーはゲームがかなり進行した後にサインインする場合があります。複数のデバイスで同時に再生できます。ゲーム中にサインアウトして、別のユーザーとしてサインインすることができます
- Android API またはサーバー UI を介してテスト アカウントの実績の進行状況をリセットする方法がないため、テストは困難です。私はグーグルがこれを修正できると思います...お願いします!一部の投稿では、テスター アカウントのリセットを削除/再追加すると書かれていますが、それは機能しませんでした。または、公開前にのみ機能する可能性があります
- Google の設計では、サーバーが UI アセット (アイコン、文字列) と実績ポリシーを管理することを意図しています。今後g+で実績が見えるようになればこれでいいのですが、それまでは面倒です。たとえば、以下のコードを参照してください
- クライアント UI は問題ありませんが、洗練されていません。たとえば、説明のテキスト エリアが限られている、「バトルでスケルトン キングを倒せ」が一部の UI モードで切り詰められており、完全な詳細を表示する方法がありません。インクリメンタル アチーブメントは 10,000 ステップに制限されています (なぜですか?)
推奨事項: Google が g+ を通じて実績を表示できると信じている場合、それは優れた機能であり、上記の「短所」のほとんどを説明しています。ただし、成果が共有されないままである場合、Google の API を使用することは信頼性が低くなり、独自のクライアント実装を展開するよりも大幅に多くの作業が必要になります。
警告: 2013 年 7 月 15 日の時点で、Google Play ゲーム サービスには、ImageManager を使用すると断続的にクラッシュするバグがあるようです。ClassCastException: com.google.android.gms.common.images.e を参照してください
これは、ユーザーが実績のロックを解除したときにビットマップを取得するための、現在非推奨のコードです。
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+ 共有を提供しないことの利点の 1 つは、とにかく独自の共有をロールバックする必要がある場合、g+ に加えて他のサービスに対しても同様に実行できることです。たとえば、ロック解除された実績を Twitter で共有することもできます。しかし逆に言えば、これは Google ができるだけ早く g+ で実績をソーシャルにすべき理由です... 開発者は怠け者であり、ソーシャル実績が最初に g+ にあった多くのゲームを確実にするでしょう ;-)