- 印刷する
- PDF
FAQ
- 印刷する
- PDF
Classic/VPC環境で利用できます。
ログインエラー
ログインエラーに関連してよくある質問とその回答は、次の通りです。
ソーシャルログイン機能の場合、基本的にそのプラットフォームの開発ガイドを基準にします。問題が発生した場合、まず、そのプラットフォームのログイン開発ガイドをご確認ください。
Q. ログインしようとすると、以下のようなエラーが表示されます。
Please check if you have set the 'XXXX' channel before using it. Did you import or set 'XXXX' information in gradle.build file
A. XXXXタイプのログインに必要な GAMEPOT SDKライブラリがないか、初期化後にログイン関連の設定を行わなかった場合です。
- Android / iOSネイティブ環境の場合
- ログイン関連の GAMEPOTライブラリがビルド時に搭載されたかご確認ください。
- 例: android基準 Appleログイン時、gamepot-channel-apple-signin.aarファイルが搭載されている必要があります。
- ログインタイプに合った設定値が入っているかご確認ください。
- 例: (Android) build.gradle/(iOS) GamePotConfig-Info.plist内で設定値のセッティングやその他の設定を行う
- addchannel処理されているかご確認ください。
- 例: android基準 Appleログインのために GAMEPOT SDKを初期化後、GamePotChannel.getInstance().addChannel(this, GamePotChannelType.APPLE, new GamePotAppleSignin()); )
- Unity環境の場合
- ログイン関連の GAMEPOTライブラリがビルド時に搭載されたかご確認ください。
- 例: android基準 Appleログイン時、/Assets/Plugins/Android/libsフォルダに gamepot-channel-apple-signin.aarファイルが搭載されている必要があります。
- ログインタイプに合った設定値が入っているかご確認ください。
- 例: Unity 2019.02.XX以前のバージョン: mainTemplate.gradle / Unity 2019.03.XX以降のバージョン: launcherTemplate.gradle内に設定値のセッティングやその他の設定を行う
Googleログイン
Googleログインに関連してよくある質問とその回答は、次の通りです。
Q. ログインしようとすると、すぐにログインキャンセルが返されます。(Android, iOS)
A. 必要な環境が設定されていないために起こる現象です。
- Firebase設定ファイルの google-service.jsonファイルが、プロジェクトに正常に含まれているかご確認ください。
- (Android) APKのビルド時に使用した Keystoreの SHA-1値を Firebase Consoleに追加したかご確認ください。
- SHA-1値は開発会社にお問い合わせください。
- Firebase Consoleでプロジェクト設定が正常に行われたかご確認ください。
3-1) 該当する内容が適用されたビルドで合っているかご確認ください。
- Console上で設定した Package Name(Android) / Bundle ID(iOS)でビルドしたかどうか
- (Android) SHA-1を抽出した Keystoreでビルドしたかどうか
3-2) Firbase Conosoleにサポートメールを設定したかご確認ください。
3-3) Google開発者コンソール > 設定 > アプリの完全性 メニューをクリックすると次のような画面が表示されます。
- (Android) Google Consoleでアプリ署名を使用する場合、Consoleで作成された SHA-1値も追加で入力します。
- 上記のチェック項目をすべて確認したにもかかわらず、解決しない場合は、サポートメールを別のメールに変更します。
ごく稀に、最初のサポートメール設定時に正常に動作しない場合が発生しています。この場合、別のメールアドレスに変更します。
1~4の項目まで試したのに、ログインしようとすると onCancel処理される場合、次の項目をご確認ください。
Google Cloudコンソールにアクセスします。
プロジェクトを選択 > 左上メニュー > APIとサービス > ユーザー認証情報 > OAuth 2.0クライアント IDタイプ にアクセスし、Android/ iOS /ウェブアプリケーション情報があるかご確認ください。
Androidの場合、パッケージ名と SHA-1がビルドで使用中の値と一致するかご確認ください。
- プロジェクトを選択 > 左上メニュー > APIとサービス > OAuth同意画面 で公開状態がプロダクションであり、ユーザータイプが外部であることをご確認ください。
Q. APKを直接インストールするとログインできますが、ストアにアップロードしたアプリをダウンロードしてログインするとログインできません。(Android)
A. Google Developer Consoleで「アプリ署名」機能を使用したために発生する問題です。コンソールで APKをアップロードする際に「アプリ署名」を有効にすると、keystoreがコンソールで管理するキーに置き換えられて発生する問題です。コンソールで管理する keystoreの sha-1値を、Firebase consoleに追加します。
Facebookログインを使用する場合、Facebook Developer Consoleにも新しい keystoreの keyhash値を追加します。
Q. iOSで Googleログインしようとすると、エラー(401エラー: disabled_client)が発生します。(iOS)
A. Firebaseコンソール設定にサポートメールが設定されていないと、問題が発生する可能性があります。Firebaseコンソールでサポートメールを設定して、ご確認ください。
Q. iOSで Googleログインするとポップアップが表示されますが、ゲーム名ではなく、他の値が表示されます。(iOS)
A. Xcode > Targets > Build Settings で Product Name項目の値を変更します。
Facebookログイン
Facebookログインに関連してよくある質問とその回答は、次の通りです。
Q. Facebookアプリがスマートフォンにインストールされていると、正常にログインできません。(Android, iOS)
A. Facebook Developer Consoleの環境設定が正しくないせいに問題が発生する可能性があります。APKをビルドする際に使用した Keystoreのキーハッシュ値を Facebookコンソールに追加します。
Google Consoleで「アプリ署名」機能を使用する場合、Google Consoleで管理する keystoreの keyhash値も追加します。
Appleログイン
Appleログインに関連してよくある質問とその回答は、次の通りです。
Q. Appleログインしようとすると、エラーが発生します。(iOS)
A. 必要な環境が正しく設定されていないために起こる現象です。
- Xcode > TARGETS > Signing & Capabilities > Capability に Sign In with Appleが追加されているかご確認ください。
- Xcode > TARGETS > Build phases > Link Binary With Libraries に LocalAuthentication.framework、AuthenticationService.frameworkが追加されているかご確認ください。 Targetのバージョンが iOS 13以前の場合、AuthenticationService.frameworkは optionalに設定します。
NAVER IDでログイン(ネアロ)
NAVER IDに関連してよくある質問とその回答は、次の通りです。
Q. NAVERログインしようとすると、エラーが発生します。(Android, iOS)
A. NAVER Developers Consoleの環境設定がビルド設定と異なると、問題が発生する場合があります。NAVER Developers Applicationの設定とビルド設定が一致しているかご確認ください。
Q. NAVER Cafe SDKと連携したら、ウェブビューでネアロ(NAVER IDでログイン)ができません。(iOS)
A. ネアロ SDKと Cafe SDKのログインモジュールが共存しているために発生する問題です。NAVER Cafe SDKを一緒に連携する場合にのみ適用されます。
- パッチファイルをダウンロードします。(Download)
- プロジェクト内に存在する2つの既存の frameworkを削除します。
- GamePotNaver.framework
- NaverThirdPartyLogin.framework(存在する場合)
- ダウンロードしたパッチ(GamePotNaver.framework)を既存のパスに保存します。
- iOS UIWebviewの問題で、NAVER Cafe SDKは4.4.7以降のバージョンをご使用ください。
- (UNITY ONLY) NAVER Cafeの初期化段階で、url schemeを明示的に追加します。
../Assets/NCSDK/Plugins/iOS/NCSDKUnityManager.mm
- info.plistの URL Scheme値の優先順位を1番目に変更します。
LINEログイン
LINEログインに関連してよくある質問とその回答は、次の通りです。
Q. LINEログインしようとすると、エラー(400エラー: Bad_Request)が発生します。(Android, iOS)
A. LINE Developers Consoleの環境設定が正しくないと、問題が発生する可能性があります。LINE Developers Consoleの設定が正しいかどうかご確認ください。
Appleログイン(Android)
Appleログイン(Android)に関連してよくある質問とその回答は、次の通りです。
- ログイン試行時のエラーメッセージ: Insufficient data!の時
- GAMEPOT > ダッシュボード > プロジェクトの設定 > 一般 の Apple ID Login項目に関連設定がない場合です。ヘルプの内容を確認してご記入ください。
- ログイン試行時に invalid_clientエラー画面が表示される場合
- 「Primary App ID」項目で使用するアプリの App IDを選択した後、「Register Website URLs」項目に GAMEPOT APIドメインと Return URLが正しく入力されなかった場合です。ヘルプボタン内の Client IDを設定する7番項目をご参照ください。
- Apple SDKでログイン失敗/エラーメッセージが Error occurs from apple server. の場合
- GAMEPOT > ダッシュボード > プロジェクトの設定 > 一般 で Apple ID Login項目に記入された情報に誤りがあり、Appleサーバでエラーが発生した場合です。 ヘルプボタン内の Keyを設定する部分を確認し、キーを保存し直してください。
決済エラー
決済エラーに関連してよくある質問とその回答は、次の通りです。
共通
決済エラーに関連して共通してよくある質問とその回答は、次の通りです。
Q. 決済しようとすると「productid was wrong!」というメッセージが表示されます。
A. GAMEPOTダッシュボード > 決済 > IAP にストアの商品 IDを追加します。
Q. 最初の決済試行では応答がなく、2回目の決済試行で決済に成功したと応答がありました。(Play Store, ONE Store)
A. ダッシュボード > プロジェクトの設定 > 一般 の Public Keyのキーが正しくない場合です。ヘルプを参照してキーを入力します。
Google Play Store
Google Play Storeに関連してよくある質問とその回答は、次の通りです。
Q. Google決済のポップアップは表示されますが、決済が行われません。
A. Google決済ができる環境が正しく設定されていないために発生する場合です。次の項目をご確認ください。
- コンソール > アプリ情報 > In-App商品 で In-Appアプリがアクティブ APKになっているかご確認ください。
- コンソールにアプリが公開された状態であるか確認
プロダクショントラックではなく、非公開/内部テストトラックに公開します。可能であれば、内部テストトラックにアップロードすることをお勧めします。 - コンソール > テスト > トラックの管理 > テスト参加対象の管理 にテストアカウントが登録されているかご確認ください。
- テスト参加 URLにアクセスし、テスト参加が申し込まれているかご確認ください。
- コンソール > 設定 で、ライセンステストにテストアカウントが追加されているかご確認ください。
- 端末 > 設定 > アカウント メニューでテストに参加したアカウント以外、すべて削除されているかご確認ください。
ONE Store
ONE Storeに関連してよくある質問とその回答は、次の通りです。
Q. 「異常なアプリから決済が依頼されました」というメッセージが表示されます。
A. オープン前のアプリはテストアカウントのみアクセス可能です。以下の内容をご確認ください。
- テストアカウントが登録されているかご確認ください。
- 端末にインストールされた ONE Storeアプリが1番で登録したテストアカウントでログインしたかご確認ください。
Q. 決済の際に[package] doesn't exist or wrong secret. というメッセージが表示されます。
A. GAMEPOTダッシュボードに、ONE Store関連のキーが正常に適用されたかご確認ください。
APKの Package nameが、ONE Storeに登録されたパッケージ名と一致しているかご確認ください。
ONE Storeコンソールのライセンスキーが適用されているかご確認ください。
該当値が GAMEPOTダッシュボードの以下の項目に適用されているかご確認ください。
ONE Storeコンソールの Client secretが適用されているかご確認ください。
{height="" width="70%"}
該当値が GAMEPOTダッシュボードの以下の項目に適用されているかご確認ください。
{height="" width="70%"}
{height="" width="70%"}
Q. 決済を完了したら、「照会された結果値が存在しません。(9001)」と表示され、決済に失敗します。
A. ONE Storeに領収書検証を依頼する際、本番環境/テスト環境の違いで問題が発生した場合です。
ONE Storeの決済画面が Sandbox環境の場合
- ONE Storeコンソール > In-App情報 > 決済テスト メニューで、ONE Storeアプリアカウントの登録と決済設定を Sandbox状態に設定した状態かご確認ください。
- テスト機器に ONE Storeアプリがインストールされていて、登録されたアカウントでログインが完了した状態かご確認ください。
- GAMEPOTダッシュボード > プロジェクトの設定 > ホワイトユーザー メニューで決済/クーポンとして IPアドレスが登録されているかご確認ください。
- GAMEPOTダッシュボード > プロジェクトの設定 メニューの Webhook項目で決済アイテム(テストユーザー)のアドレスが登録されているかご確認ください。
ONE Storeの決済画面が Production環境の場合
- ONE Storeコンソール - In-App情報 - 決済テストメニューで、ONE Storeアプリアカウントの登録と決済設定を常用テスト状態に設定した状態かご確認ください。
- テスト機器に ONE Storeアプリがインストールされていて、登録されたアカウントでログインが完了した状態かご確認ください。
- GAMEPOTダッシュボード > プロジェクトの設定 > ホワイトユーザー メニューで決済/クーポンの IPアドレスが未使用状態か、未登録状態かご確認ください。
- GAMEPOTダッシュボード > プロジェクトの設定 メニューの Webhook項目で決済アイテム(サービス)のアドレスが登録されているかご確認ください。
ONE Store SDK In-Appバージョン SDKのサポート範囲
ONE Store SDK In-Appバージョン SDKは、GAMEPOT SDKバージョンに応じてサポートの範囲が異なります。
- GAMEPOT SDK V 3.5.0以降: api21、V7をサポート
- 関連ライブラリファイル: gamepot-billing-onestore.aar、gamepot-common.aar、sdk-auth-1.0.2.aar、sdk-base-1.0.3.aar、sdk-iap-21.00.00.aar
- GAMEPOT SDK V 3.4.3-oneV6: api19、V6をサポート
- 関連ライブラリファイル: iap_sdk-v19.00.02.aar、gamepot-billing-onestoreV6.aar、gamepot-common_onestoreV6_only.aar
GAMEPOT SDK V 3.4.2 api17、V5をサポート
関連ライブラリファイル: gamepot-billing-onestore.aar、gamepot-common.aar
Androidのビルド時に targetSdkVersion 30(Android 11)以降でビルドした場合、Android 11 OS機器に ONE Store APKがインストールされたにもかかわらず、見つけられません。
AndroidManifest.xmlファイル内に以下の文言を追加します。
<!-- targetSdkVersion 30以降の場合の ONE Store関連パッチ[Start] -->
<queries>
<intent>
<action android:name="com.onestore.ipc.iap.IapService.ACTION" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="onestore" />
</intent>
</queries>
<!-- targetSdkVersion 30以降の場合の ONE Store関連パッチ[End] -->
<application>
Galaxy Store
Galaxy Storeに関連してよくある質問とその回答は、次の通りです。
Q. ログイン時に「Samsung In-App決済で選択した商品がありません」と表示されます。
A. アプリが配信されていない場合に発生します。アプリ配信前にテスト In-App決済をするには、以下のように行ってください。
- プロジェクト > プロジェクトの設定 > ホワイトユーザー メニューで [追加] ボタンをクリックします。
- 次のように入力してホワイトユーザーを追加します。
- 種類: 開発
- IPアドレス/ユーザー ID: テスト機器の IPアドレス
Apple Store
Apple Storeに関連してよくある質問とその回答は、次の通りです。
- 決済を行う Sandboxアカウントの国情報が、Appleコンソール上のアプリ配信国設定に含まれている国である必要があります。
- Xcode > Capability 項目に in app purchase項目が追加されている必要があります。
- Appleコンソール上の契約、税金および金融取引項目の関連情報に異常があってはいけません。未処理の部分があると、In-App情報が Apple In-App SDKから提供されず、決済ができません。
In-Appエラー
In-Appエラーに関連してよくある質問とその回答は、次の通りです。
Q. In-Appアイテムリストを読み込めない場合
A. 以下の内容をご確認ください。
- GAMEPOT決済は消耗品の In-App商品のみサポートします。
- 決済ライブラリがビルド時に搭載されている必要があります。
Google In-App SDK:
(Unity) ../Assets/Plugins/Android/libs/billing-5.0.0.aar ../Assets/Plugins/Android/libs/firebase-crashlytics-buildtools-2.9.1.jar (Native) implementation 'com.google.firebase:firebase-crashlytics-buildtools:2.9.1' implementation 'com.android.billingclient:billing:5.0.0'
ONE Store In-App SDK:
(Unity) ../Assets/Plugins/Android/nativeLibs/gamepot-billing-onestore.aar ../Assets/Plugins/Android/nativeLibs/sdk-auth-1.0.2.aar ../Assets/Plugins/Android/nativeLibs/sdk-base-1.0.3.aar ../Assets/Plugins/Android/nativeLibs/sdk-iap-21.00.00.aar (Native) implementation(name: 'gamepot-billing-onestore', ext: 'aar') implementation(name: 'sdk-auth-1.0.2', ext: 'aar') implementation(name: 'sdk-base-1.0.3', ext: 'aar') implementation(name: 'sdk-iap-21.00.00', ext: 'aar')
Galaxy Store In-App SDK:
(Unity) ../Assets/Plugins/Android/nativeLibs/gamepot-billing-galaxystore.aar (Native) implementation(name: 'gamepot-billing-galaxystore', ext: 'aar')
- 決済関連の設定を完了する必要があります。決済エラーを参照
- getPurchaseItems APIを利用する場合、ログイン後に決済モジュールを初期化した後、非同期で In-Appリストを受け取り、その結果を表示する APIです。呼び出すタイミング上、情報がない場合があります。情報がない場合は、getPurchaseDetailListAsync API(同期式 In-Appリスト項目取得)を使用することをお勧めします。Googleの場合、機器に Googleアカウントが登録されていない機器では応答がないことがあります。
- 各ストアの In-App決済のための決済アカウントが、機器でログインしている必要があります。さらに、決済を行うアカウントの国情報が、ストアアプリの配信国に属するアカウントである必要があります。
- App Storeの場合、Appleシステムの特性上、アプリやアプリの In-App情報の配信が異なる構造ですが、ポリシー上24時間以内に配信されることになっています。
In-App商品の審査と配信の設定まで完了した状態で、開発バージョン/テストフライトバージョンから情報を取得します。ただし、常用サービスバージョンからしか取得できない場合は、Appleサーバに In-App情報が配信されていないことを意味します。通常、配信の設定後24時間以内に解決しますが、3日くらいまで Appleから関連情報が届かない場合もあります。
Q. In-App領収書があるのに、ダッシュボードの領収書情報がありません / 決済が中断された場合、復旧するロジックはありますか?
A. GAMEPOTの決済ロジックは次の通りです。
クライアント -> ストアで In-App決済 -> GAMEPOTサーバで、ダッシュボードに記入した情報を基に領収証検証を行います。
領収証検証時に問題がなければ、決済 Webhook api送信後、ダッシュボードの決済リストに情報が追加 / Webhook apiの結果と関係なく、クライアント SDKには成功処理されます。
ストア In-App決済に成功後、不明な理由で(ネットワークの問題、アプリの強制終了など)中断された場合、決済 API呼び出し時に渡した情報を共有メモリに保存します。
問題が発生したアプリを終了 -> アプリを再起動 -> ログイン成功時、GAMEPOT内部で決済中断履歴をチェックします。中断された履歴がある場合、共有メモリに保存された内容を基に決済ロジックが再開され、領収書検証まで異常がなければ決済 Webhook apiを送信し、ダッシュボードの決済リストに情報が追加されます。
In-App領収証はあるのに、GAMEPOTダッシュボードに決済履歴がない場合は、GAMEPOT決済ロジックに問題が発生したケースです。ユーザーには、決済を行ったアプリを再実行してログインするように誘導してください。内部的に決済ロジックが再開され、異常がない場合、決済 APIを送信し、ダッシュボードに履歴を残します。
決済モジュールが異なるアプリを実行すると、決済復旧ロジックが発生しません。
<例> Googleの決済後に障害発生 -> ONE Storeバージョンでログインすると、決済モジュールが異なるため、決済復旧ロジックが行われません。
Googleの場合、機器の設定で決済を行ったアカウントのみを残した状態で行います。(ログインアカウントと決済するアカウントは異なる場合があります)
Adbrix Remaster
Adbrix Remasterに関連してよくある質問とその回答は、次の通りです。
Q. Adbrix Remasterを適用したら、IOSビルド時に Crashが発生します。
A. Adbrix Remasterは Swiftで実装されているライブラリで、Swiftライブラリを適用する際に追加設定が必要です。XCodeで以下のように設定してビルドします。ビルドしても問題が続く場合、クリーンビルドをした後にご確認ください。
Q. Adbrix Remasterを適用したら、AppStoreにアップロードする際にエラーが発生します。
A. Adbrix Remasterライブラリが、x86_64、i386アーキテクチャを含んでいるために発生する問題です。以下のような措置をとった後、再ビルドし、ご確認ください。
コンソール(ターミナル)で AdBrixRM.frameworkファイルの位置に移動し、以下の2つのコマンドを入力します。
lipo -remove x86_64 ./AdBrixRM.framework/AdBrixRM -o ./AdBrixRM.framework/AdBrixRM lipo -remove i386 ./AdBrixRM.framework/AdBrixRM -o ./AdBrixRM.framework/AdBrixRM
NAVER Cafe
NAVER Cafeに関連してよくある質問とその回答は、次の通りです。
Q. iOS NAVER Cafeが英語で表示されます。
A. XCode > Targets > Info > Localization で native development regionを koreaに変更し、ご確認ください。
サービスのローンチ
サービスのローンチに関連してよくある質問とその回答は、次の通りです。
Q. iOSプラットフォーム向けにサービスをローンチする際に、注意すべき点はありますか?
A. 1) iOS App Storeの場合、アプリの審査期間が1~2週程度かかります。2週程度余裕を持って本番環境ダッシュボードへの移行をお申し込みください。
Q. iOS審査関連の主要リジェクト理由
- アプリの完成度
バグがあったり、開発が完了していない機能が存在し、「準備中です」などのメッセージが表示されるか、アプリにbeta、Testなどの表現が含まれている場合 - ATT権限
IDFA値を取得する際に、ユーザーから権限を取得しないと IDFA値を取得できないようになりました。
収集する目的および使用先についての説明が明確でない場合、審査を拒否される場合があります。 - リワードポリシー
リワードを通じてアプリのインストールを誘導したり、レビュー作成を誘導する場合 - 審査テスト関連
審査担当者がテストを行えるように、正確なテスト IDを伝える必要があります。 - 退会機能がなかったり、アプリ内クーポン機能がある場合もリジェクトの理由となります。
- スクリーンショットのスペック
Android実行画面のスクリーンショットを活用したり、解像度の低い画像などを使用する場合
Appleスクリーンショットスペックのリンク
プッシュ通知
プッシュ通知に関連してよくある質問とその回答は、次の通りです。
Q. iOSから通知が届きません。
A. 次の項目を1つずつご確認ください。
- NCloud SENS設定の Certificationに、iOS証明書が登録されているかご確認ください。
- iOSは、ビルド時に使用されたプロビジョニングプロファイルタイプに応じて登録する証明書が異なります。
- Developement Provisioning > Apple Development証明書の登録 で Typeを Sandboxに設定
- Adhoc / Distribution Provisioning > iOS Distribution証明書の登録 で Typeを Productionに設定
- iOSは、ビルド時に使用されたプロビジョニングプロファイルタイプに応じて登録する証明書が異なります。
- 証明書を登録した後、クライアントでログインまで完了したかご確認ください。
- GAMEPOTはプッシュトークンをログイン完了時にサーバに渡します。したがって、証明書を登録したら、クライアントでログインまで行った後、ご確認ください。
- アプリが Forground状態でないかご確認ください。
- iOSの場合、アプリが Forground状態ではプッシュが受信されません。homeボタンをクリックして、メイン画面でプッシュが受信されているかご確認ください。
- Xcodeで build時に、Capabilityに Push Notificationが含まれたかご確認ください。
- Xcodeで build時に、Capabilityに Push Notificationを含める必要があります。受信ができない場合、ビルド時にこの部分が含まれたかご確認ください。
Q. AOSから通知が届きません。
A. 以下の項目をご確認ください。
- NAVERクラウドコンソールで、プッシュが正しく設定されているかご確認ください。
- Firebaseコンソール > アプリ設定 > [クラウドメッセージング] タブでサーバキーと送信者 ID情報をご確認ください。
- [NAVERクラウドコンソール > Simple & Easy Notification Service (SENS) > push > certificate] 項目で設定値をご確認ください。
https://console.ncloud.com/sens/push-certificate
- android.permission.POST_NOTIFICATIONS権限を取得していることが必要で、テスト対象のデバイスでアプリの通知が許可されているかご確認ください。
- GAMEPOTダッシュボード - 会員情報で、「プッシュ通知に同意/プッシュ型広告に同意」が有効になっているかご確認ください。
- Firebase SDKを別途搭載して使用している場合
- ../Assets/Plugins/Android/AndroidManifest.xml内に下記のコードが適用されているかご確認ください。
.... </activity> <!-- FCM [start]--> <service android:name="io.gamepot.common.GamePotFCMIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> <service android:name="io.gamepot.common.GamePotFCMService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <!-- FCM [End]--> ... <meta-data android:name="android.max_aspect" android:value="2.1" />
Googleアプリ署名を使用する時の注意事項
Googleアプリ署名の使用に関連してよくある質問とその回答は、次の通りです。
Q. 直接インストールした APKはソーシャルログインが正常にできますが、ストアからダウンロードしてソーシャルログインするとログインできません。
A. Google開発者コンソールでアプリ署名が有効化され、キーストアが変更された場合です。Google開発者コンソール > 設定 > アプリの完全性 メニューに、以下のような画面が表示されます。Googleログインを利用している場合は SHA-1値を firebase consoleに追加し、Facebookログインを利用している場合は上記の SHA-1値の keyhashを Facebookコンソールに追加します。
ユーザー IDの移行
ユーザー IDの移行に関連してよくある質問とその回答は、次の通りです。
ユーザー IDの移行は、ソーシャルアカウントで連携されたユーザー IDでのみ他のユーザー IDに移行できます。
- 移行するユーザー IDと移行を受けるユーザー IDを確保します。
- 移行するユーザー IDは、GAMEPOTダッシュボード > 会員 > リスト画面でユーザー IDを照会し、ユーザー IDをクリックして詳細画面に移動します。
- 下部にあるアカウント連携タブをクリック > 移行するソーシャル IDの横にある設定アイコンをクリックします。
- 連携情報変更のポップアップに移行を受けるユーザー IDを入力し、 [変更] ボタンをクリックします。
- 変更すると、そのユーザー IDからソーシャルアカウント情報が消えます。
- 変更すると、そのユーザー IDからソーシャルアカウント情報が消えます。
- 移行を受けたユーザー IDは、GAMEPOTダッシュボード > 会員 > リスト画面でユーザー IDを照会し、ユーザー IDをクリックして詳細画面に移動します。
- 下部にある [アカウント連携] タブをクリック > 移行したソーシャル IDが存在するかご確認ください。
- 移行するユーザー IDでログインしたクライアントからログアウトし、再度ログインします。
ユーザー IDの復旧
ユーザー IDの復旧に関連してよくある質問とその回答は、次の通りです。
- GAMEPOTダッシュボード > 会員 > リスト でユーザー IDを照会し、ユーザー IDをクリックして詳細画面に移動します。
- 会員復旧ボタンをクリックし、 [確認] ボタンをクリックします。
ただし、 ユーザーが退会した後、同じソーシャルアカウントでログインして新規ユーザー IDが発行された場合、1番と2番の手順を実行した後、ユーザー IDを移行する方法を利用してユーザー ID移行の手順を実行する必要があります。
ダッシュボード事前予約ページと連携
ダッシュボード事前予約を行う方法は、次の通りです。
1. 発信番号の申し込み
発信番号を申し込んでその番号が承認されたら、SMSを送信できます。
SMS発信番号お申し込みガイドをご参照ください。
2. 事前予約ページ連携 API
APIは、SMS認証メールの送信->SMS認証完了->SMS事前予約申し込み完了の順に行う必要があります。
ゲーム > 事前予約 ページで [追加] ボタンをクリックして名前を入力し、 [保存] をクリックします。
GAMEPOT事前予約ページの Category Idで保存した名称を選択し、横のコピーアイコンをクリックします。
3. SMS認証
SMS認証に関連してよくある質問とその回答は、次の通りです。
3-1. SMS認証の送信
Request
POST
url : https://gamepot.apigw.ntruss.com/gpapps/v2/phone/request
Header : 'content-type: application/json'
data:
{
"projectId":"ab2775b4-cf09-4794-9480-XXXXXXXXXXXX",
"categoryId":"b062a3f3-0a37-44d1-9e8f-XXXXXXXXXXXX",
"from":"XXXXXXX",
"to":"010XXXXXXX",
"store":"google"
}
Attribute | Type | Required | Description |
---|---|---|---|
projectId | String | - | GamePot SDKの projectId |
categoryId | String | - | GAMEPOT事前予約ページの categoryId |
from | String | - | 承認を受けた発信番号 |
to | String | - | SMS認証番号を受信する連絡先 |
store | String | - | ストア(Google、ONE、Apple) |
Response
{
"code": 200,
"message" : ""
}
Attribute | Type | Description |
---|---|---|
code | Int | 結果値(200: 成功、404: 失敗) |
error | String | 状況別エラー内容を渡す |
3-2 SMS認証完了
Request
POST
url : https://gamepot.apigw.ntruss.com/gpapps/v2/phone/verify
Header : 'content-type: application/json'
data:
{
"projectId":"ab2775b4-cf09-4794-9480-XXXXXXXXXXXX",
"categoryId":"b062a3f3-0a37-44d1-9e8f-XXXXXXXXXXXX",
"code":"6137",
"to":"010XXXXXXX",
"store":"google"
}
Attribute | Type | Required | Description |
---|---|---|---|
projectId | String | - | GamePot SDKの projectId |
categoryId | String | - | GAMEPOT事前予約ページの categoryId |
code | String | - | 受信した認証番号 |
to | String | - | SMS認証番号を受信する連絡先 |
store | String | - | ストア(Google、ONE、Apple) |
Response
{
"code": 200,
"message" : ""
}
Attribute | Type | Description |
---|---|---|
code | Int | 結果値(200: 成功、404: 失敗) |
error | String | 状況別エラー内容を渡す |
3-3 SMS事前予約申し込み完了
Request
POST
url : https://gamepot.apigw.ntruss.com/gpapps/v2/phone/join
Header : 'content-type: application/json'
data:
{
"projectId":"ab2775b4-cf09-4794-9480-XXXXXXXXXXXX",
"categoryId":"b062a3f3-0a37-44d1-9e8f-XXXXXXXXXXXX",
"code":"6137",
"from":"02XXXXXXXX",
"to":"010XXXXXXX",
"store":"google",
"tag":""
}
Attribute | Type | Required | Description |
---|---|---|---|
projectId | String | - | GamePot SDKの projectId |
categoryId | String | - | GAMEPOT事前予約ページの categoryId |
code | String | - | 受信した認証番号 |
from | String | - | 承認を受けた発信番号 |
to | String | - | SMS認証番号を受信する連絡先 |
store | String | - | ストア(Google、ONE、Apple) |
tag | String | - | その他の情報(流入経路などの情報) |
Response
{
"code": 200,
"message" : ""
}
Attribute | Type | Description |
---|---|---|
code | Int | 結果値(200: 成功、404: 失敗) |
error | String | 状況別エラー内容を渡す |
事前予約サイト関連の PHPソースベースのソースは、以下のリンクをご参照ください。
GooglePlayGames API
GooglePlayGames APIに関連してよくある質問とその回答は、次の通りです。
Googleログインとは異なり、Google Playゲームサービスログインは異種間ログインをサポートしません。そのため、GAMEPOTでは Google Playゲームサービスログインをメインログイン方法として使用しないことをお勧めします。GAMEPOTでは、基本的に Google Playゲームサービスライブラリ(gamepot-channel-google-playgame.aar)がある場合、Google実績とリーダーボード連携のための動作と判断し、基本のログイン後に Google Playログインするようになっています。
Q. ログイン時、他のプラットフォームを使用しようとしても Google Playログインするようになってしまいます。関連ポップアップが表示されないようにするには、どうすればいいですか?
A. GAMEPOTでは、Google実績とリーダーボード連携のための動作と判断し、基本のログイン後に Google Playログインするようになっています。
Google Playゲームサービスログインは使用しても、Google実績、リーダーボードは使用しない場合は、ログイン APIの前に以下のように設定します。
- Android
GamePotChannel.getInstance().enableGPG(false);
- Unity
GamePot.enableGPG(false)
Google Play Game API - Google実績、Googleリーダーボード
Google実績、Googleリーダーボードに関連してよくある質問とその回答は、次の通りです。
Q. GAMEPOT SDKを介して GooglePlayGames APIを使用できますか?
A. GAMEPOT SDKで独自にサポートする GooglePlayGames APIが存在します。(実績、リーダーボード)(Android、Unity、Unreal)プラットフォーム別、GooglePlayGames APIの使用方法は次の通りです。
Android
ビルド時に gamepot-channel-google-playgame.aarを含めてビルドを行ってください。
../app/build.gradleに gamepot_gpg_idの値を入力します。
...
android {
...
defaultConfig {
...
resValue "string", "gamepot_gpg_id", ""
}
...
}
import io.gamepot.channel.GamePotChannel;
import io.gamepot.channel.google.playgame.GamePotAchievementInfo;
//Achievement Handling API
GamePotChannel.getInstance().showAchievement(ACTIVITY);
GamePotChannel.getInstance().loadAchievements(ACTIVITY, new GamePotChannelListener<GamePotAchievementInfo>() {
@Override
public void onCancel() {
}
@Override
public void onSuccess(GamePotAchievementInfo info) {}
@Override
public void onFailure(GamePotError err) {}
});
GamePotChannel.getInstance().unlockAchievement(Activity activity, String achievementId);
GamePotChannel.getInstance().incrementAchievement(Activity activity, String achievementId, int Count);
//Leaderboard Handling API
GamePotChannel.getInstance().showLeaderboard(Activity activity);
GamePotChannel.getInstance().submitScoreLeaderboard(Activity activity, String leaderBoardId, int leaderBoardScore);
Unity
ビルド時に gamepot-channel-google-playgame.aarを含めてビルドを行ってください。
../Assets/Plugin/Android/mainTemplate.gradleに gamepot_gpg_idの値を入力します。
...
android {
...
defaultConfig {
...
resValue "string", "gamepot_gpg_id", ""
}
...
}
using GamePotUnity;
//Achievement Handling API
GamePot.showAchievement();
GamePot.unlockAchievement(string achievementId);
GamePot.incrementAchievement(string achievementId, string count);
GamePot.loadAchievement();
//loadAchievement Handled by Callback Function
void onLoadAchievementSuccess(List<NAchievementInfo> info);
void onLoadAchievementFailure(NError error);
void onLoadAchievementCancel();
//Leaderboard Handling API
GamePot.showLeaderboard();
GamePot.submitScoreLeaderboard(string leaderBoardId, string leaderBoardScore);
Unreal
Unrealエンジンの場合、エンジンソース内のビルドスクリプトにおいて、gpg App IDの値をデフォルトで Manifest Mergeします。(UnrealEngine 4.26基準)
GAMEPOT GooglePlayGamesモジュールと duplicateしないように、エンジンソース内の Engine/Source/Programs/UnrealBuilTool/Platform/Android/UEDeployAndroid.csの次の2-lineをコメントアウトしてください。
GamePot_Android_UPL.xmlの編集
...
<resourceCopies>
<copyFile src="$S(PluginDir)/ThirdParty/Android/libs/gamepot-channel-google-playgame.aar" dst="$S(BuildDir)/libs/gamepot-channel-google-playgame.aar" />
</resourceCopies>
...
<AARImports>
<insertValue value="com.google.android.gms,play-services-games,21.0.0"/>
<insertNewline/>
<insertValue value="com.google.android.gms,play-services-base,17.5.0"/>
<insertNewline/>
<insertValue value="com.google.android.gms,play-services-auth,19.0.0"/>
<insertNewline/>
</AARImports>
...
<buildGradleAdditions>
<insert>
...
dependencies {
...
implementation(name: 'gamepot-channel-google-playgame', ext: 'aar')
implementation 'com.google.android.gms:play-services-games:21.0.0'
implementation 'com.google.android.gms:play-services-base:17.5.0'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
...
}
...
defaultConfig {
...
resValue "string", "gamepot_gpg_id","xxx" //insert gpg App ID
...
}
</insert>
</buildGradleAdditions>
...
<gameActivityImportAdditions>
<insert>
import io.gamepot.channel.google.playgame.GamePotGooglePlaygame;
</insert>
</gameActivityImportAdditions>
...
#include "GamePotSDKPluginModule.h"
//Achievement Handling API
FGamePotSDKPluginModule::GetSharedGamePotSdk()->showAchievement();
FGamePotSDKPluginModule::GetSharedGamePotSdk()->unlockAchievement(FString achievementId);
FGamePotSDKPluginModule::GetSharedGamePotSdk()->incrementAchievement(FString achievementId, FString count);
//loadAchievement Handled by Callback Function
FGamePotSDKPluginModule::GetSharedGamePotSdk()->loadAchievement();
void FOnSdkLoadAchievementSuccess(FNAchievementInfo info);
void FOnSdkLoadAchievementFailure(FNError error);
void FOnSdkLoadAchievementCancel();
//Leaderboard Handling API
FGamePotSDKPluginModule::GetSharedGamePotSdk()->showLeaderboard();
FGamePotSDKPluginModule::GetSharedGamePotSdk()->submitScoreLeaderboard(FString leaderBoardId, FString leaderBoardScore);
Casebook
Casebookに関連してよくある質問とその回答は、次の通りです。
GAMEPOT APIの遅延速度の確認
GAMEPOT APIの遅延速度を確認するには、遅延テストをご参照ください。
Dashboard
Dashboardに関連してよくある質問とその回答は、次の通りです。
Q. Pushメッセージが受信できません。
A. ダッシュボード > プロジェクトの設定 > ncloud API認証キー の AccessKey、Secret Key、SENS-PUSH、SENS-SMSの値をご確認ください。その認証キーに対して、SENSプロジェクトの Certificate設定が済んでいるかご確認ください。
Q. ユーザー指標の Retentionの計算方法を教えてください。
A. 広告などの経路で流入した対象外数値を除外するため、アカウントを作成した後、翌日アクセスしたユーザーを新規ユーザーとしてカウントします。
<例>
下の画像で2020-01-07を基準にした場合、2020-01-07の新規ユーザーのうち2020-01-08にアクセスした人数が5人で、その日(2020-01-07)の新規ユーザーを5人と判断します。(Day1の値と同じです) その人数を基準にして、Day 2(翌日の2020-01-09)に1人アクセス / Day 3に0人アクセス / Day 4に1人アクセスした状態を示しています。5人のユーザーのうち、n Dayにカウントされる方式なので、途中で0%になる区間が発生します。
Q. 会員を利用停止リストに追加した後、Googleの払い戻しを行うと、ユーザー IDは有効になりますか?
A. 利用停止リストにユーザー IDが追加されていて無効化状態の場合、Googleの払い戻しを行っても、自動的にそのリストが有効化するわけではありません。さらに、無効化されたユーザー IDについては、アカウントへのアクセスをブロックしていません。
その他
GAMEPOTに関連してよくある質問とその回答は、次の通りです。
Q. Firebase Consoleで google-service.json抽出時にエラーが発生します。
A. Firebase Console上で、SHAフィンガープリントが登録された状態で google-service.jsonを抽出します。そうしないと、jsonファイルの一部の値が欠落して抽出される可能性があり、正常にログインできない場合があります。
Q. GAMEPOTログイン検証時、Token authentication failedエラーが発生します。
A. ベータゾーンを使用している企業で発生する可能性のある問題です。ログイン検証 Request URLが「https://gamepot.apigw.ntruss.com/gpapps/v1/loginauth」に設定されている場合、https://cloud-api.gamepot.io/loginauthに変更し、ご確認ください。
- 本番ゾーン: https://gamepot.apigw.ntruss.com/gpapps/v1/loginauth
- ベータゾーン: https://cloud-api.gamepot.io/loginauth(サービス終了)
Q. ビルド実行時、「アプリが異常実行されました。ストアからダウンロードしてください」というメッセージのポップアップが発生します。
A. ダッシュボード > プロジェクトの設定 > [一般] タブのハッシュキーの設定に誤りがあって発生する可能性があります。そのハッシュキーを削除するか正確なハッシュキーを入力した後、ご確認ください。
Q. GAMEPOT SDKで決済をしようとすると、GAMEPOT SDKでは成功の応答を受けたのに、ダッシュボード > 決済 > 決済リスト に決済した履歴が表示されず、ゲームサーバに requestが送信されません。
A. ダッシュボード > プロジェクトの設定 > [一般] タブで、Google API Keyの Json値が登録されているかご確認ください。 Google API Keyの設定が version 2になっていたときは、その keyがなくても決済は可能でしたが、version 3からは keyの入力が必要です。
入力されている状態なら、ヘルプをクリックして JSON値を再度作成して登録します。
新しくアカウントを発行して keyを抽出して入れた場合、新しいキーへの更新が適用されるまで約一日ほど時間がかかります。
Q. 決済が完了すると、Google Play Developer API not linkedエラーが発生します。
A. Google API Keyの設定が正しくない場合に発生する可能性がある問題です。ヘルプをクリックして、JSON値を再度作成してご登録ください。
新しくアカウントを発行して keyを抽出して入れた場合、新しいキーへの更新が適用されるまで約一日ほど時間がかかります。
Q. 新規サービスアカウントを発行し、Keyを適用しても決済 APIが失敗します。
A. (Googleサービスアカウントの移行時)新規 Keyを発行して適用したにもかかわらず、決済 APIが失敗するという Googleコンソール側のバグレポートがありました(2020.02.13)。
決済を行うと、以下のようなエラーが発生します。
- エラーメッセージ: 「The current user has insufficient permissions to perform the requested operation.」
Googleコンソールでサービスアカウントの権限が正常に設定されているか確認した後、Googleコンソールで任意の In-App商品を一つ作成し、問題が解決するかご確認ください。
Q. iOS Pushメッセージの受信時にエラーが発生します。
A. iOSメッセージの受信時にエラーが発生した場合、(KO)iOS APNS証明書登録ガイド / (EN)iOS APNS証明書登録ガイドを参照して次の手順を実行してください。
- SENS設定の Certificationに、認証キーと証明書が登録されているかご確認ください。
- iOSは、ビルド時に使用されたプロビジョニングプロファイルタイプに応じて登録する証明書が異なります。
[Development]: Xcode > Provisioning に Push Development証明書をアップロードし、Typeを Sandboxに設定します。
[Adhoc/Distribution]: Xcode > Provisioning で Push Distribution証明書をアップロードし、Typeを Productionに設定します。 - GAMEPOTは、Push Tokenをログイン完了時にサーバに渡します。したがって、証明書を登録した後、クライアントでログインまで行われるかご確認ください。
- iOSの場合、アプリが Forground状態ではプッシュが届きません。homeボタンをクリックして、メイン画面でプッシュが届くかご確認ください。
- iOSの場合、Xcodeで build時に、Capabilityに Push Notificationを含める必要があります。受信ができない場合、ビルド時にその部分が追加されかご確認ください。
Q. iOSで決済をテストしたいのですが。
A. iOSで決済テストを行うには、次の手順を実行してください。
- テストする機器の設定 >> iTunseと Store >> Apple ID: XXXXをタップ >> ログアウト
- アプリを実行
- アプリの有料決済項目を選択
- ポップアップ発生時、既存の appleID使用を選択。
- テストアカウントの IDとパスワードを入力してログイン
- 状態に応じてポップアップが複数回表示されることがあります。
- 有料決済項目の価格と名前がポップアップで表示され、[Environment: Sandbox]という文言が表示
- 購入を選択
- 決済ポップアップに[Environment: Sandbox]という文言が表示されたら、実際には課金されません。
Q. Pushメッセージに表示されるアプリ名を変更したいのですが。
A. アプリ名はクライアントビルド時に決まります。言語に合わせてアプリ名を変更するには、次の手順を実行してください。
Android
app/src/main/res/values-国コード/strings.xml
<例> デバイス言語が英語で、アプリ名を変更する場合
app/src/main/res/values-en/strings.xml
Unity Android
Assets/Plugins/Android/GamePotResources/res/values-国コード/strings.xml
<例> デバイス言語が韓国語で、アプリ名を変更する場合
Assets/Plugins/Android/GamePotResources/res/values-ko/strings.xml
strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">言語に合わせてアプリ名を設定</string> </resources>
iOS
- XCode > Targets > Info の Localization項目に目的の言語を追加します。
- Xcode > File > File で Strings Fileアイコンと [next] ボタンを順にクリックします。ファイル名を InfoPlistにしてファイルを作成します。
- 作成されたファイルを選択し、Localization設定を入力します。
- 言語を選択すると関連ファイルが作成されます。そのファイルにそれぞれ言語に合ったアプリ名を入力します。
[InfoPlist.string] CFBundleDisplayName="言語に合わせてアプリ名を設定";
- XCode > Targets > Info の Localization項目に目的の言語を追加します。
Q. In-Appリスト情報を取得する際、ストアごとに GamePot.getPurchaseItems() APIの Price値が異なります。
A. In-Appリスト情報を取得する際、各ストアの In-App SDKから渡される値は次の通りです。
- Google Play Store: priceの値は通貨単位 + In-App価格
<例> ₩1,000 - App Store: priceの値は In-App価格
<例> 1000
IOSで通貨単位を表記するには、price_currency_codeの値をご参照ください。
<例> price_currency_code: KRW
Q. ダッシュボード管理者アカウントが、パスワード5回失敗でログインできません。(V2ダッシュボードユーザー対象)
A. 5回以上管理者アカウントログインに失敗すると、パスワードを初期化する必要があります。次のようにパスワード初期化を行ってください。
- NAVERクラウドプラットフォームコンソールに adminアカウントでログインし、Services > Gaming > GAMEPOT メニューをクリックします。
- パスワードを初期化するダッシュボードを選択してプロジェクト管理項目をクリックすると、パスワード初期化メニューが表示されます。
- パスワード初期化メニューを選択すると、管理者アカウントを入力するポップアップが発生し、内容を入力すると関連メールで初期化できるメールが送信されます。
Q. ダッシュボードデータ初期化のサポート範囲を教えてください。
A. ストア配信前に必要なリストを整理して依頼することをお勧めします。アプリ配信後にデータを初期化する場合、実際のユーザーのデータとダミーデータの区別が明確でなく、サービスに混乱を招くため、お勧めしません。CBTを先行して行ってローンチを行うと、会員情報を保持していない場合、ゲーム DBの初期化時に GAMEPOTアカウント連携履歴も削除されている必要があるため、ローンチ前に必ず削除依頼を行います。削除されたデータは復旧されませんので、慎重に判断してください。
韓国リージョンのダッシュボードの場合にのみ削除できます。
ダッシュボードメニュー別のデータ削除可能範囲は、次の通りです。
リスト | ストア配信前 | ストア配信後 |
---|---|---|
ユーザー指標 | X | X |
売上指標 | X | X |
会員(ソーシャルアカウント連携を含む) | O | 条件付きで可能 |
決済リスト | O | O |
お知らせ事項 | X | X |
メンテナンス | X | X |
アップデート | X | X |
メッセージ | X | X |
クーポン | X | X |
カスタマーサポート | X | X |
ゲーム > プレイヤー | X | X |
ゲーム > プレゼントする | X | X |
Q. Apple iOS 14の個人情報取扱方針の強化に伴って収集する個人情報リストを教えてください。
A. Appleコンソール > 一般情報 > [アプリが収集する個人情報] タブを基準に(顧客の身元情報とは連携されず、関連情報として追跡する目的ではない事項) GAMEPOT SDKで収集する項目は次の通りです。
- 識別子
- ユーザー ID(アカウント情報)
- 機器 ID(IDFA、auto generated)
- 購入項目
- ユーザーコンテンツ
- 写真またはビデオ
- カスタマーサポート
ユーザーコンテンツは、GAMEPOT PRO以上の商品を利用する顧客のうち、GAMEPOTのお問い合わせ UIを使用する場合に該当します。オブジェクトストレージ機能を使用すると、お問い合わせに画像ファイルをアップロードできます。
Q. 決済/ログイン時のエラーコードを教えてください。
A. 決済とログイン時に発生するエラーコードは次の通りです。
決済失敗時のエラーコード - 405: 同じ決済情報が GAMEPOTサーバに受信されて発生する場合です。
- 決済 APIの呼び出し後、決済ロジックが完了していない状態で、連続した呼び出しにより発生した場合、決済完了処理後に呼び出す部分があるかどうかご確認ください。
- ネットワークの問題で、同じ決済情報が重複してリクエストされて発生した場合、GAMEPOTサーバに決済情報を渡したが(GAMEPOTサーバでは、関連情報を受け取って関連処理が行われた状態- Purchase Webhook APIを送信)、関連応答を受け取れなかった状態で、クライアントで再度決済情報を GAMEPOTサーバに渡したら、GAMEPOTサーバがその件を重複処理として認識し、失敗ケースとして処理した場合です。クライアントの構造上、一つの応答しか受け取れないため発生するケースであり、実質的にはユーザーが決済アイテムを受け取ったものと判断されているので、このケースでは運用上の問題はないと思われます。
決済失敗時のエラーコード - 5000: ガイドの内容のように、決済で不明なエラーが発生し、ストア In-App SDKでエラーが発生した場合です。
- 機器内の決済環境が整っていないか、決済関連のセッティングが行われていない場合に発生します。ビルド時に決済モジュールライブラリが未搭載、各ストアコンソール内の決済関連設定が不十分、GAMEPOTダッシュボード内の決済関連設定情報の欠落、機器内の決済アカウントがアプリ配信国に合わない場合など。決済エラーを参照
- 「決済エラーが発生しました。code(数字)... です」というメッセージが表示される場合、In-App SDKのエラーにより発生する問題で、code ()の中の数字が In-App SDKのエラーコードです。Google決済の場合、決済時に時折、特定のユーザーから codeエラー(5)に関する問い合わせがあります。
- APK改ざんの可能性 - 問題が発生するアプリを削除した後、ストアからバージョンを再度ダウンロードするように誘導します。
- アプリの再インストール後も発生する場合は、Google Play Storeアプリに保存された情報と決済情報の問題である可能性があります。 機器内の Googleアカウントと Google Play Storeアプリのデータを削除した後、Googleアカウントを再登録します。
- Google In-Appエラーコードを参照: https://developer.android.com/reference/com/android/billingclient/api/BillingClient.BillingResponseCode?authuser=1#DEVELOPER_ERROR
ログイン時のエラーコード - 407: ユーザー IDが利用停止されたケースです。error messageでダッシュボードに設定した利用停止の理由を伝えます。
Q. 決済 In-Appリスト上の通貨単位を変更するには、どうすればいいですか?
A. 決済 In-Appリスト上の通貨単位は、当該ストアの In-App SDKが提供する値を提供します。通常、決済を行う決済アカウントの国や決済手段によって関連情報が決定されます。他の国の通貨単位で表示したい場合は、その国に合った決済アカウントを作成し、関連設定を行います。(Googleの場合、機器内のアカウント設定で決済アカウントを除く他のアカウントを削除してから行う)
Q. GAMEPOT Proから Essentialへのダウングレードを行う際に考慮すべき点は何ですか?
A. 統計(ユーザー指標/売上指標)、メンテナンスとアップデート、カスタマーサポート(お問い合わせ/約款/ページ機能など)、クーポンなどは別途実装する必要があります。
- GAMEPOT Essential商品でサポートするメニューは次の通りです。
運用 > 会員 (リスト/日別アクセス者/新規ユーザー/同時アクセス者/利用停止)
運用 > 決済 (リスト/IAP/統計)
運用 > メッセージ (プッシュメッセージ/SMSメッセージ)
Q. GAMEPOTでは、Google > プロジェクトの選択 > アプリコンテンツ > データセキュリティセクションに該当するものはどんな機能を使用していて、その使用目的は何ですか?
A. アプリの通信は HTTPS通信方式で暗号化されています。会員退会機能がある場合、会員退会が完了すると会員情報は削除します。
アプリの機能目的にのみ使用します。
- 個人情報
- メールアドレス
- ユーザー ID
- 機器またはその他の ID
- 機器またはその他の ID
- 写真および動画
- 写真
- 動画
写真や動画の場合、GAMEPOT PRO以上の商品を利用する顧客のうち、GAMEPOTのお問い合わせ UIを使用する場合に該当します。オブジェクトストレージ機能を使用すると、お問い合わせに画像ファイルをアップロードできます。
Ver 3.5.1の変更事項 - セキュリティ上の問題で該当バージョンは使用禁止
ゲストログイン処理方式の変更(Ver 3.5.1)
GAMEPOT SDK 3.5.1バージョンから、ゲストログインの処理方式が変更されました。
既存の方式
既存の GAMEPOT SDK 3.5.0以前のバージョンでは、ゲストログイン後にアプリを削除したり、アプリのデータを削除した後にゲストログインをしようとすると、新規に GAMEPOTユーザー IDを提供していました。新しい方式
GAMEPOT SDK 3.5.1バージョンから、ゲストログインしてアプリを削除するか、アプリのデータを削除した後にゲストログインすると、以前に使用した GAMEPOTユーザー ID情報を提供します。ANDROID_IDと UDID情報に基づいて、GAMEPOTユーザー IDを作成します。関連情報が変更された場合、ユーザー ID情報は保持されません。
ゲストログインの成功後、会員退会または他のソーシャルログイン方式でアカウント連携が成功した後、ゲストログインする場合、従来と同じように新規に使用した GAMEPOTユーザー ID情報を提供します。
従来の GAMEPOT SDK 3.5.0以前のバージョンでゲストログインに成功して利用しているユーザーが、GAMEPOT SDK 3.5.1搭載バージョンにアップデートされた状態の場合、既存のユーザー ID情報を提供しますが、アプリを削除するか、アプリのデータを削除した後にゲストログインする場合は、新規で GAMEPOTユーザー ID(新規ゲストログインユーザー ID)を提供します。旧バージョンのゲストユーザー IDは、アプリを削除するか、アプリのデータを削除すると保持されません。
上記のケース以降、アプリを削除するか、アプリのデータを削除した後にゲストログインする場合、以前のユーザー ID(最後に受け取った新規ゲストログインユーザー ID)が提供されます。
Migration
Ver Unity 2.1.1 To Ver Unity 2.1.2 or New Version
Unity 2019.02.XX以前のバージョン
- 従来と同じ方法でアップデート
Unity 2019.3.0~2019.3.6
既存の settingsTemplate.gradle / mainTemplate.gradleファイルを維持します。
このバージョンのエンジンの特性上、外部ライブラリを搭載する際に制約が発生するバージョンなので、他のバージョンの Unityプラグインバージョンを使用することをお勧めします。
Unity 2019.3.7以降のバージョン(新規に作業する場合)
GAMEPOT SDK ver 3.5.1バージョン基準
mainTemplate.gradle / launcherTemplate.gradle / baseProjectTemplate.gradleファイル変更時の参考事項
- [ファイル]GAMEPOT_UNITY[年度][中間][マイナーバージョンまたは以降のバージョン]
- UNITY_2019_3_Over: UNITY 2019.3.XX以降のバージョンの場合に使用
- UNITY_2020_XX_Over_2022_1_XX: UNITY_2020以降で UNITY_2022.1.XX以前のバージョンの場合に使用
- UNITY_2022_2_XX_Over: 2022.2.XX以降のバージョンの場合に使用
- mainTemplate.gradleファイルを削除(既存ファイルは Unity 2018基準ファイルなので削除)
- 搭載する Unityバージョンに合った mainTemplate.gradleファイルを探してファイル名を変更。
GAMEPOT環境変数は launcherTemplateファイルに定義するので、mainTemplateファイルに定義しなくても構いません。- case 1) Unityエディタのバージョンが2019.4.40の場合、mainTemplate_GAMEPOT_UNITY_2019_3_Overファイルの名前を mainTemplate.gradleに変更
- case 2) Unityエディタのバージョンが2021.3.13バージョンの場合、mainTemplate_GAMEPOT_UNITY_2020_XX_Over_2022_1_XX.gradleファイルの名前を mainTemplate.gradleに変更
- case 3) Unityエディタのバージョンが2022.3.00バージョンの場合、mainTemplate_GAMEPOT_UNITY_2022_2_XX_Overファイルの名前を mainTemplate.gradleに変更
- 搭載する Unityのバージョンに合った launcherTemplate.gradleファイルを探してファイル名を変更した後、オープンして GAMEPOTの環境変数を定義します。
- case 1) Unityエディタのバージョンが2019.4.40バージョンの場合、launcherTemplate_GAMEPOT_UNITY_2019_3_Overファイルの名前を launcherTemplate.gradleに変更
- case 2) Unityエディタのバージョンが2021.3.13バージョンの場合、launcherTemplate_GAMEPOT_UNITY_2020_XX_Over_2022_1_XX.gradleファイルの名前を launcherTemplate.gradleに変更
- case 3) Unityエディタのバージョンが2022.3.00バージョンの場合、launcherTemplate_GAMEPOT_UNITY_2022_2_XX_Overファイルの名前を launcherTemplate.gradleに変更
- 搭載する Unityのバージョンに合った baseProjectTemplate.gradleファイルを探して名前を変更
- case 1) Unityエディタのバージョンが2019.4.40バージョンの場合、baseProjectTemplate_GAMEPOT_UNITY_2019_X_XXファイルの名前を baseProjectTemplate.gradleに変更
- case 2) Unityエディタのバージョンが2021.3.13バージョンの場合、baseProjectTemplate_GAMEPOT_UNITY_2020_X_Over_2022_1_XX.gradleファイルの名前を baseProjectTemplate.gradleに変更
- case 3) Unityエディタのバージョンが2022.3.00バージョンの場合、baseProjectTemplate_GAMEPOT_UNITY_2022_2_XX_Overファイルの名前を baseProjectTemplate.gradleに変更
GAMEPOT SDK ver 3.4.2バージョン基準
- baseProjectTemplate.gradleを追加します。通常は下記のファイルを renameして使用します。baseProjectTemplate_GAMEPOT_UNITY_2019_3_Over.gradle => baseProjectTemplate.gradle
- settingsTemplate.gradleを削除します。../Assets/Plugins/Android/settingsTemplate.gradle
- mainTemplate.gradleファイルで定義した gamepot_project_idのような環境変数の定義を launcherTemplate.gradleに定義します。通常は下記のファイルを renameして GAMEPOT環境変数を定義します。launcherTemplate_GAMEPOT_UNITY_2019_3_Over.gradle => launcherTemplate.gradle
- mainTemplate_GAMEPOT_UNITY_2019_3_Over.gradleファイルを参照して mainTemplate.gradleを設定します。gamepot_project_idのような環境変数は launcherTemplate.gradleで定義されたので、削除します。
Unity 2022.2.X以降
Unity Editor Ver 2022.2.X以降のバージョンで、baseProjectTemplate.gradle / launcherTemplate.gradle / mainTemplate.gradleファイル内の形式が変更されたので、パッチファイル基準で適用し、ビルドを行います。
2022.2.X用 gradle_files: ダウンロード
Unity 2023.1.X以降
Unity Editor Ver 2023.1.X baseProjectTemplate.gradle / launcherTemplate.gradle / mainTemplate.gradleファイル内の形式が変更されたので、パッチファイル基準で適用し、ビルドを行います。
- 2023.1.X用 gradle_files: ダウンロード
Unity 2022.3.Xバージョンで multidex関連のエラーが発生した場合は、次の手順を実行してください。
- Unity Editer > Player Settings > Publishing Settings > Custom Gradle Propreties Template項目にチェックを入れてください。
- ../Assets/Plugins/Android/gradleTemplate.propertiesファイル内に android.useAndroidX / android.enableJetifier設定を追加し、保存
org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M org.gradle.parallel=true unityStreamingAssets=**STREAMING_ASSETS** **ADDITIONAL_PROPERTIES** android.useAndroidX= true // 追加 android.enableJetifier=true // 追加
Unity 2020.X、2021.X、2022.1.X バージョンを使用する場合の追加変更事項(GAMEPOT SDK 3.4.X以前のバージョン対象)
- Unity 202X.Xバージョン用パッチ: ダウンロード
- フォルダおよびファイルの置き換え
../Assets/ExternalDependencyManager ../Assets/Firebase
- フォルダとファイルの追加
../Assets/Parse (任意) ../Assets/GooglePlayPlugins //com.google.android.appbundle-1.7.0.unitypackage
- フォルダ名の変更
従来: ../Assets/Plugins/Android/Firebase 変更: ../Assets/Plugins/Android/FirebaseApp.androidlib 従来: ../Assets/Plugins/Android/GamePotResources 変更: ../Assets/Plugins/Android/GamePotResources.androidlib
- mainTemplate.gradleの編集(フォルダ名の変更に伴う編集)
従来: dependencies { ... implementation project('GamePotResources') implementation project('Firebase') 変更: dependencies { ... implementation project('GamePotResources.androidlib') implementation project('FirebaseApp.androidlib') ... aaptOptions { noCompress = ['.ress', '.resource', '.obb'] + unityStreamingAssets.tokenize(', ') // add ... - launcherTemplate.gradleの編集 aaptOptions { noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]+ unityStreamingAssets.tokenize(', ') //add ...
Unityエディタ上で、../Assets/Plugins/Android/nativeLibsフォルダ内のすべてのライブラリが、Androidビルド時に含まれないように設定します。
{height="" width="70%"}
```
6. Please fix your Bundle IDのポップアップが表示されたら、パッケージ名を確認して [Apply] ボタンをクリックします。
google android resolverライブラリで google-services.jsonまたは GoogleService-Info.plistを認識した後、パースするかどうかを確認するポップアップで、承諾すると Google関連の動作が正常に行われます。
{height="" width="70%"}
Unityエディタ 2021.X以降のバージョンでは、Android/IOS関連の Build Settings > Player Settings > Other Settingsメニューでパッケージ名を手動で入力し、ビルドしたい OSに Switch Platformしてからビルドしてください。
上記の作業を先行していない場合、google resolverライブラリの内部バグによる Please fix your Bundle IDのポップアップ > Applyボタンをクリックすると Ambiguous match foundエラーが発生し、動作しません。- 関連内容: https://github.com/googlesamples/unity-jar-resolver/issues/523#issuecomment-1147499484
Unityエディタ 202X.Xバージョンではサンプルシーンファイルを置き換え: ダウンロード
Unityエディタ 2019.X以前のバージョンで、Androidバージョンのビルド環境で以下のようなエラーが発生する場合は、パッチのダウンロードをダウンロードし、以下のように変更します。
System.TypeLoadException: Could not resolve type with token 01000074 (from typeref, class/assembly Google.EditorInitializer, Google.VersionHandlerImpl, Version=1.2.0.0, Culture=neutral, PublicKeyToken=null)
UnityEditor.EditorAssemblies:ProcessInitializeOnLoadAttributes (System.Type[]) (at /Users/bokken/buildslave/unity/build/Editor/Mono/EditorAssemblies.cs:138)
- フォルダおよびファイルの置き換え
../Assets/ExternalDependencyManager
../Assets/Firebase
- フォルダ名の変更
従来: ../Assets/Plugins/Android/Firebase
変更: ../Assets/Plugins/Android/FirebaseApp.androidlib
- mainTemplate.gradleの編集(フォルダ名の変更に伴う編集)
従来:
dependencies {
...
implementation project('Firebase')
変更:
dependencies {
...
implementation project('FirebaseApp.androidlib')
...
- (macOS Monterey 12.3基準) Unityビルド時に次のようなエラーが発生する場合は、./Assets/Firebase/Editor内のファイルを置き換えてください。
- https://github.com/techyworm10/firebase-unity-sdk-editor-python-fix
パッチのダウンロードからパッチファイルをダウンロードして展開し、/Assets/Firebase/Editorフォルダに入れてファイルを入れてください(Firebase.Editor.dllファイルを置き換えます)。
エラーメッセージ
Unable to find command line tool python required for Firebase Android resource generation.
python is required to generate the Firebase Android resource file google-services.xml from Assets/Plugins/Android/google-services.json. Without Firebase Android resources, your app will fail to initialize.
python was distributed with each Firebase Unity SDK plugin, was it deleted?
System.ComponentModel.Win32Exception (0x80004005): ApplicationName='python',