Android アクセスガイド
アクセス手順
- Android SDK デモ ダウンロード
- (Android11システムに適合させる必要があります。そうでない場合、チャネルへの掲載に影響を与えます。)
- Android StudioプロジェクトパッケージをエクスポートするにはUnityを使用することをお勧めします。
- ゲーム初回導入時には、Androidスマートフォンのフルスクリーン最適化が必要です (一般的な対応方法としては、デフォルトでフルスクリーン表示とし、画面上部のノッチやカメラ部分がゲームUIや機能に影響を与えないようにする必要があります。適切に対応されていない場合、クラウドテスト時の評価に影響する可能性があります)
- SDKを呼び出すすべてのインターフェースは、 () で行う必要があります。
- UnityでJavaインターフェースを呼び出す場合は、UIスレッドに切り替えてからSDKインターフェースを呼び出す必要があることにご注意ください。
- 必ず本アクセスガイドを詳細にお読みください。アクセスについてご質問がある場合は、グループチャットで技術スタッフに直接お問い合わせください。
- 本アクセスガイドは随時更新される可能性があります。インターフェースに変更があった場合、グループチャット内で共有します。詳しいアップデートについては、FastSdk アップデート ログ を確認してください。
Maven リポジトリの設定
project:build.gradle
buildscript {
repositories {
maven {
url 'https://sdk.wdyxgames.com/nexus/repository/sdk-public/'
}
}
}
allprojects {
repositories {
maven {
url 'https://sdk.wdyxgames.com/nexus/repository/sdk-public/'
}
}
}
app:build.gradle
dependencies {
implementation 'com.hoolai.access.open:hoolai-core:1.0.3.26'
}
app: AndroidManifest.xml の特別な処理
::: 注意 パッケージツール使用時にはAPK内のパッケージ名が動的に置換されます。以下のルールに従ってAndroidManifest.xmlの設定を修正・置換してください。対応しない場合、同一デバイスへの複数チャネル版のインストールが不可能になったり、異常終了(クラッシュ)が発生したりする可能性があります。 () :::
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.hoolai.access.channel.impl">
<!-- 例 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- アプリケーションには以下の3つの新規設定がある場合,必ず(ゲームがカスタムApplicationを定義していない場合、android:nameにHLApplicationの設定が必要です)を追加してください-->
<application
android:name="com.hoolai.access.open.fastaccess.HLApplication"
android:allowBackup="false"
android:extractNativeLibs="true"
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true">
<meta-data
android:name="android.max_aspect"
android:value="2.5"
android:allowBackup="false"
android:requestLegacyExternalStorage="true"/>
<activity
android:name="ゲームのメインActivity"
android:configChanges="screenLayout|orientation|keyboardHidden|keyboard|fontScale|layoutDirection|density|smallestScreenSize|screenSize|uiMode|navigation|touchscreen|locale|mnc|mcc"
android:launchMode="standard">
...
<!-- 以下の内容をゲームのランチャークラスにcopyしてください,必ず接続する必要があります -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="hlscheme" android:host="hlhost"/>
</intent-filter>
<!-- シェア設定(オプション) -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!--gameパラメータはカスタマイズ可能(リクエストパラメータと一致させること)-->
<data android:scheme="game" />
</intent-filter>
</activity>
<!-- MAIN_ACTIVITYタグのvalue=ゲームのエントリーポイントとなるActivityの完全修飾パス(未設定の場合、応用宝チャネルでログイン失敗が発生) -->
<!-- このタグは必須 -->
<meta-data
android:name="MAIN_ACTIVITY"
android:value="ゲームのメインActivity,如com.demo.GameActivity"/>
<!-- 注意!!!! ${applicationId}はhlApplicationIdに置換すること -->
<!-- 以下は例です copyする必要なし -->
<!-- TODO 元の設 -->
<provider
android:name="xx.FileProvider"
android:authorities="${applicationId}.Fileprovider"
... />
<!-- TODO 修正後 -->
<provider
android:name="xx.FileProvider"
android:authorities="hlApplicationId.Fileprovider"
... />
<!-- 以下は例です copyする必要なし -->
</application>
</manifest>
WARNING
サードパーティの SDK を統合している場合、AndroidManifest ファイル内の ${applicationId} を含む構成は、現在の APK パッケージのパッケージ名に自動的に置き換えられるため、チャネル パッケージがリリースされたときに置き換えられなくなります。 R&D 担当者は、パッケージのリリース後にチェックする必要があります。
セルフチェックプロセス
Android Studio で apk パッケージを開き、AndroidManifest.xml ファイル内のパッケージ タグを見つけます。タグに対応する値は、apk のパッケージ名です。
このファイルでパッケージ名を検索し、このパッケージ名を含むすべての構成 (package="package name" 構成を除く) をプロジェクトの AndroidManifest ファイルにコピーし、すべてを hlApplicationId に置き換えて、再パッケージ化します。
ゲーム アクティビティの起動モードが必ず android:launchMode="standard" に設定してください。
インターフェース仕様書
Applicationアクセス()、この構成は AndroidManifest.xml で宣言する必要があることに注意してください。
- 方法1: ゲームにカスタムアプリケーションがない場合にHLApplicationを使用する
- 方法2: ゲームにカスタムアプリケーションがあり、HLApplication.classを継承している場合は処理は必要ありません。
- 方法3: ゲームにカスタムアプリケーションがあり、HLApplication.classを継承していない場合は、次の呼び出しを行う必要があります。
- 上記 3 つの設定を完了したら、AndroidManifest.xml に <application android:name="xxxx.xxxx.XXXApplication" が設定されているかどうかを確認してください。ここで設定する必要があります。
public class YourApplication extends YourBaseApplication {
@Override
public void onCreate() {
super.onCreate();
FastSdk.onApplicationCreate(this);
}
@Override
public void onTerminate() {
super.onTerminate();
FastSdk.onTerminate(this);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
FastSdk.onConfigurationChanged(this, newConfig);
}
@Override
protected void attachBaseContext(Context context) {
super.attachBaseContext(context);
FastSdk.attachBaseContext(this, context);
}
}
SDK 機能アクセス
初期化 ()
WARNING
- SDK の初期化中に、ゲーム内の黒画面の問題を解決するための提案: 「unity_static_splash」という画像を準備し、それを res/drawable ディレクトリにコピーします。
- このインターフェースは、ゲームの開始後に最初に呼び出されます。初期化が成功した後のみ、熱更新/バージョン検出/ゲームの初期化/ログインなどの機能を呼び出すことができます。
- 初期化コールバック未受信時、またはonInitFailed時は、後続の機能呼び出しを行うことができません。
- 初期化に失敗した場合は、ユーザーにゲームの再初期化または再起動を案内することをお勧めします。
//ゲーム起動クラス(非スプラッシュ画面)のonCreate内で実施
//SDK初期化コールバック
FastSdk.hlSystemListener = new HLSystemListener() {
@Override
public void onInitSuccess(InitResult initResult) {
//初期化成功,コールバックInitResult:gameId,channelId,channel
//gameId プロダクトid,ログイン認証時に必要な値
//channelId プロダクトの異なるチャネルのID値
//channel チャネル値(例: xiaomi, huaweiなど)
}
@Override
public void onInitFailed(String reason) {
//ダイアログ表示を推奨。再起動ボタンやアプリ終了ボタンを追加可能
}
@Override
public void onCustomExit() {
//ゲームカスタム終了画面。終了ロジックを実装しないとチャネル審査に通らない場合あり
//デモは例示のみ。そのままコピーしないでください
new AlertDialog.Builder(GameActivity.this)
.setTitle("ゲーム終了ダイアログ")
.setMessage("私はゲームのダイアログ画面です")
.setNegativeButton("キャンセル", null)
.setPositiveButton("確認", (dialog, which) -> onExitSuccess(s))
.setCancelable(false).show();
}
@Override
public void onExitSuccess(String result) {
//ゲームは以下のコードロジックに従って終了することを推奨、互換性が最も良い
//そうしないとOPPO、vivoなどのチャネルで終了が不完全になり、再度起動時に黒画面が発生する可能性あり
moveTaskToBack(true);
finish();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
android.os.Process.killProcess(android.os.Process.myPid());
}
@Override
public void onUpdate(String data) {
//バージョンアップ(インターフェース予備する)
}
};
//SDKアカウントコールバック
FastSdk.hlAccountListener = new HLAccountListener() {
@Override
public void onRefreshUser(LoginResult result) {
//サブアカウント切り替え。このコールバックではユーザー合法性検証のみ必要。サブアカウントなしの場合は無視可
//ゲーム内でプレイヤー情報切り替えをサポートしていない場合、ゲームは一度ログアウト後、再ログインが必要(再初期化不要)
}
@Override
public void onLoginSuccess(LoginResult result) {
//ログイン成功
}
@Override
public void onLoginFailed(String reason) {
//ログイン失敗
}
@Override
public void onLogout(Object... var1) {
//ログアウト
}
};
//SDK支払いコールバック
FastSdk.hlPaymentListener = new HLPaymentListener() {
@Override
public void onPaySuccess(String result) {
//支払い成功。コールバック状態がOKであることを示すのみ。実際の発送はサーバー通知を基準とする
//resultが空文字列の場合あり、要注意
}
@Override
public void onPayFailed(String reason) {
//支払い失敗。reasonが空文字列の場合あり
}
@Override
public void onQuerySuccess(List<GoodsInfo> list) {
//海外ゲーム用。商品リスト取得して表示に使用
}
};
//SDKコールバック共有(注意:一部のサードパーティ共有はコールバックを受け取れない場合があります。例:WeChat共有)
FastSdk.hlShareListener = new HLShareListener() {
@Override
public void onShareSuccess() {
//共有成功
}
@Override
public void onShareFailed(String reason) {
//共有失敗
}
};
//注意:onCreateを呼び出す前に、上記で使用するインターフェースをインスタンス化する必要があります
FastSdk.onCreate(this);
InitResult
パラメータ名 | タイプ | 説明 |
---|---|---|
gameId | int | プロダクトID |
channel | String | チャネル名 |
channelId | int | チャネルID |
LoginResult
パラメータ名 | タイプ | 説明 |
---|---|---|
uid | long | ユーザーID |
accessToken | String | トークン |
nickName | String | ニックネーム |
channelUid | String | チャネルユーザーID |
channel | String | チャネル名 |
serverArea | String | 拡張パラメータ |
GoodsInfo
パラメータ名 | タイプ | 説明 |
---|---|---|
itemId | String | 商品ID |
itemName | String | 商品名 |
itemCount | String | 商品数 |
itemPrice | String | 商品金額 |
showTag | String | 中国本土では無視可能 |
currency | String | 通貨タイプ |
ログイン()
WARNING
- このメソッドを呼び出す際は、"game_init_result"イベント送信が完了していることを確認してください。詳細は[ゲームカスタムレポート]を参照
- 初期化コールバックが未受信または初期化失敗時はログインインターフェースを呼び出さないでください
FastSdk.login();
データレポート()
(支払い前に基本データレポートが必要)
- レポートイベントタイプ(EventType)は4種類:キャラ作成、サーバー入室、レベルアップ、カスタム
- キャラ作成、サーバー入室、レベルアップイベントレポート時、roleId、roleName、serverId、serverNameパラメータは必須で空不可、支払い機能に影響します!!その他必須データはこちら
//eventType範囲:
//キャラ作成:EventType.CreateRole
//サーバー入室:EventType.EnterServer
//レベルアップ: EventType.LevelUp
//上記3種は必ずレポートする、以下は運営要請に応じたカスタムイベントレポート
//カスタムポイント:EventType.CustomerEvent
//カスタムポイント設定時はsetExtendAction("xx"),setPhylum("xx")等の設定必須
PlayerInfo playerInfo = new PlayerInfo();
playerInfo.setRoleId("32424");//キャラクター固有ID,必須
playerInfo.setRoleName("ニックネーム");//必須,String
playerInfo.setRoleLevel("6");//必須,文字列は数字である必要あり、"123"等
playerInfo.setZoneId("1");//必須,ない場合はデフォルト値"1"、文字列内は数字であること
playerInfo.setZoneName("華東サーバー");//必須,ない場合はデフォルト値、"1区"等
playerInfo.setServerId("1");//必須,い場合はデフォルト値"1"、文字列内は数字であること
playerInfo.setServerName("区名称");//必須,ない場合はデフォルト値、"1区"等
playerInfo.setBalance("66");//必須,取得不能時""
playerInfo.setVip("5");//必須
playerInfo.setPartyname("帮派名称");//任意
//追加内容: extraはデータ必須、クライアントデータレポート特殊データレポート参照
//拡張情報,形式:key:value,key:value
playerInfo.setExtra("a:arm,b:bom,gameResourceUrl:xxx,gameLoginServerUrl:xxx");
playerInfo.setClassField("");//ベント結果、空可
//playerInfo.setPhylum("");//拡張データレポート時は提供されたイベントIDを記入、例:1
//playerInfo.setExtendAction("ポイント名"); //基本ポイントは不要、カスタムポイントは必要
FastSdk.report(EventType.EnterServer, PlayerInfo playerInfo);
DANGER
- CLSネットワーク検出機能を導入する場合の注意!!詳細ルールはこちら
- この機能はSDK初期化後できるだけ早くレポート,単独でも他のポイントと一緒でも可能
- 検出アドレスはドメインまたはIP可
- 検出アドレスのコロンは@で置換、フォーマットエラー防止
- 検出アドレスのkeyは以下3フィールド必須:gameResourceUrl,gameLoginServerUrl,gameServerUrl
如:playerInfo.setExtra("key:value,gameResourceUrl:http@xxx/open/init, gameServerUrl:tcp@111.222.333.6@8888");
EventType
パラメータ名 | 説明 | 必須か |
---|---|---|
EventType.CreateRole | キャラクター作成 | はい |
EventType.EnterServer | ゲームサーバー入室 | はい |
EventType.LevelUp | キャラクターレベルアップ | はい |
EventType.CustomerEvent | カスタム | はい |
PlayerInfo
パラメータ名 | タイプ | 説明 | 必須か |
---|---|---|---|
roleId | String | キャラクターid | はい |
roleName | String | キャラクター名 | はい |
roleLevel | String | レベル | はい |
zoneId | String | エリアID、エリアなし時はserverId値 | はい |
zoneName | String | エリア名、エリアなし時はserverName値 | はい |
serverId | String | サーバーID | はい |
serverName | String | サーバー名 | はい |
balance | String | 残高 | はい |
vip | String | VIPレベル | はい |
partyName | String | ギルド名 | いいえ |
appVersion | String | アプリバージョン | はい |
appResVersion | String | ゲームリソースバージョン | はい |
extendAction | String | イベント名 | はい |
roleCreateTime | String | キャラクター作成時間 | はい |
phylum | String | イベントID,「クライアントデータレポート」ドキュメント参照 | はい |
classField | String | イベント結果,ok/fail | いいえ |
extra | String | 拡張情報(注意:clsレポートで使用) | いいえ |
ログアウト
FastSdk.logout();
支払い(),サーバー入室またはキャラ作成レポート後に呼び出し、そうでないと支払いが開始されない
PayParams payParams = new PayParams();
payParams.setItemId("item60");//商品ID,任意
payParams.setItemName("60钻石");//商品名,任意
payParams.setAmount(100);//商品金額,必須,単位:分
payParams.setNotifyUrl("");//支払いコールバックURL
//拡張情報、コールバック時にそのまま返却、各チャネルコールバックパラメータ制限が異なるため。
//コールバックパラメータは現在255文字まで。callBackInfoでは「|」、「=」、「+」、「/」記号を使用しないでください。
payParams.setCallbackInfo("支払い拡張情報,ゲーム透過パラメータ");
payParams.setCurrency("CNY");//中国本土では不要またはCNY
FastSdk.pay(payParams);
:ディバウンス処理における意見
- SDKはディバウンス処理済み、3秒内に最初の支払いのみ有効。
- 購入イベント発生時にクライアント側でオーバーレイ表示を推奨、プレイヤーの連続クリック防止。支払いコールバック受信後オーバーレイ解除、コールバック未受信時はタイムアウト設定後自動解除。
- 支払いデータのキャッシュと支払い完了後のCheckは不要。異なる価格帯を高速クリックすると、実際には最初の支払いだが2番目をキャッシュする可能性があり、支払い成功だがCheck不合格となる。支払い成功ポップアップはSDKコールバックを基準とする。
PayParams
パラメータ名 | タイプ | 説明 | 必須か |
---|---|---|---|
itemId | String | 商品ID | はい |
itemName | String | 商品名 | はい |
amount | int | 金額,単位:分 | はい |
count | int | 数量,デフォルト1 | はい |
callbackInfo | String | 透過フィールド | いいえ |
notifyUrl | String | 支払いコールバックURL | いいえ |
currency | String | 通貨タイプ,デフォルト:CNY | はい |
opt | Map<String, String> | 拡張パラメータ | いいえ |
プログラム終了
FastSdk.exit();
商品リスト情報取得
//注意:中国本土ゲームではこのメソッドは不要
FastSdk.queryGoodsInfo();
ライフサイクルメソッド()
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
FastSdk.onSaveInstanceState(outState);
}
@Override
protected void onStart() {
super.onStart();
FastSdk.onStart(this);
}
@Override
protected void onResume() {
super.onResume();
FastSdk.onResume(this);
}
@Override
protected void onStop() {
super.onStop();
FastSdk.onStop(this);
}
@Override
protected void onPause() {
super.onPause();
FastSdk.onPause(this);
}
@Override
protected void onRestart() {
super.onRestart();
FastSdk.onRestart(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
FastSdk.onDestroy(this);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
FastSdk.onNewIntent(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
FastSdk.onActivityResult(this, requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
FastSdk.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
FastSdk.onConfigurationChanged(this, newConfig, getResources());
}
@Override
public void onBackPressed() {
FastSdk.exit();
}
@Override
public Resources getResources() {
return FastSdk.getResources(super.getResources());
}
//以下は更新内容
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
FastSdk.onRestoreInstanceState(savedInstanceState);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
FastSdk.onWindowFocusChanged(hasFocus);
}
共有
ShareParams params = new ShareParams();
params.setTitle("タイトル");
params.setContent("内容");
params.setPicPath("picPath");//ローカルまたはネットワーク画像リンク
//共有リンク(懂球帝アプリ固定値: dongqiudi://share/circle/)
params.setShareUrl("http://xx.com");
//WeChat画像
params.setBmp(bmp);
FastSdk.share(ShareType.WX, ShareType.ChildType.WX_CHAT, params);
ShareType
パラメータ名 | タイプ | 説明 |
---|---|---|
ShareType | QQ共有 | |
WX | ShareType | WeChat共有 |
DQD | ShareType | 懂球帝共有 |
ShareType | Facebook共有 | |
SYSTEM | ShareType | システム共有 |
ShareType.ChildType
パラメータ名 | タイプ | 説明 |
---|---|---|
WX_CHAT | ShareType.ChildType | WeChatチャット |
WX_CIRCLE | ShareType.ChildType | WeChatモーメント |
WX_FAVORITES | ShareType.ChildType | WeChatお気に入り |
QQ_TEXT_AND_QQZONE | ShareType.ChildType | テキスト共有 & QQZone同期 |
QQ_IMG_AND_QQZONE | ShareType.ChildType | 画像共有 & QQZone同期 |
QQ_TEXT | ShareType.ChildType | テキスト共有 |
QQ_IMG | ShareType.ChildType | 画像共有 |
DQD | ShareType.ChildType | 懂球帝 |
FACEBOOK_LINK | ShareType.ChildType | facebookリンク |
FACEBOOK_IMG | ShareType.ChildType | facebook画像 |
FACEBOOK_VIDEO | ShareType.ChildType | facebook動画 |
SYSTEM_TEXT | ShareType.ChildType | システムテキストリンク共有 |
SYSTEM_IMG | ShareType.ChildType | システム画像共有 |
SYSTEM_FILE | ShareType.ChildType | システムファイル共有 |
ShareParams
パラメータ名 | タイプ | 説明 | 必須か |
---|---|---|---|
id | String | 懂球帝ID(懂球帝専用) | はい |
wxType | int | 1:チャット, 2:モーメント, 3:お気に入り | いいえ |
qqType | int | 1:デフォルト, 2:画像のみ | いいえ |
showQQZone | boolean | QQZoneに表示 | いいえ |
title | String | タイトル | いいえ |
content | String | 内容 | いいえ |
picPath | String | 画像url | いいえ |
shareUrl | String | リンク共有 | いいえ |
callbackUrl | String | 懂球帝コールバックURL(懂球帝専用) | はい |
bmp | Bitmap | WeChat画像(WeChat画像共有専用) | はい |
権限申請()
WARNING
ポリシー要件により、センシティブ権限が拒否された場合、複数回申請できません。SDKでは申請回数を1回に制限しています。権限申請時にダイアログ表示有無を設定可能(デフォルトfalse)。true設定時、次回呼び出しで手動承認を促すダイアログが表示されます。権限拒否が機能に影響する場合に表示推奨。
//単一危険権限申請、結果を返却
boolean hasPermission = FastSdk.checkPermission(Activity activity,
String permission, boolean showRefuseDialog);
//activity:現在のActivityコンテキスト
//permission:権限名
//showRefuseDialog:ダイアログ表示有無(デフォルトtrue、非必須)
boolean hasPermission = FastSdk.checkPermission(activity,
Manifest.permission.WRITE_EXTERNAL_STORAGE, true);
if(hasPermission){
//your code
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
FastSdk.onRequestPermissionsResult(requestCode, permissions, grantResults);
// 権限申請結果コールバック
if (requestCode == Math.abs(Manifest.permission.WRITE_EXTERNAL_STORAGE.hashCode())){
if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
Logger.i("権限が許可されました");
//your code
}else{
Logger.i("権限が拒否されました");
}
}
}
方舟データレポート(オプション、注: 本APIはSDK経由せず直接方舟に送信)
String action = "game_xxx";
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("xxx", 123);
hashMap.put("ooo", "321");
FastSdk.gameDataReport(action, hashMap);
方舟パラメータ
パラメータ名 | タイプ | 説明 | 必須 |
---|---|---|---|
action | String | イベント名 | はい |
hashMap | Map<String, Object> | イベント内容 | はい |
CD-KEY(オプション、ギフトコード交換)
AccessActivityDataInfo info = new AccessActivityDataInfo();
info.setCode("引き換えコード");
FastSdk.accessParticipate(AccessActivityType.CD_KEY, info);
CD-KEYパラメータ
パラメータ名 | タイプ | 説明 | 必須 |
---|---|---|---|
type | AccessActivityType | アクティビティ種別 | はい |
info | AccessActivityDataInfo | 引き換えコードオブジェクト | はい |
Q&A
初期化失敗時に「非正規アプリ」と表示される場合の対処方法は?
署名ファイルが正しくないです。署名ファイルがない場合は運営担当者に連絡してください。
アカウントログイン時にアカウントが存在しないと表示する場合は?
アカウント/パスワード方式には登録機能がありません。運営担当者からアカウント/パスワードを取得してください。
サンドボックス環境での支払いテスト方法?
運営担当者に確認し、サンドボックス環境が有効化されていること、アカウントがテスト白リストに登録されていることを確認してください。
支払いが起動できない?
ゲーム開始時にキャラクター作成またはサーバー入室イベントを送信しているか確認してください。
支払い成功後アイテムが付与されない?
1.支払いコールバックURLが正しいか確認
2.支払いAPIでsetNotifyUrl(url)を呼び出している場合、このURLが優先的にコールバックされます。
チャネルパッケージでゲーム内からログアウト時、フローティングボールが非表示にならない
Fastsdk.logout()が呼び出されていません。ゲームの「設定」画面に2つのボタン(「サーバー切り替え」「アカウント切り替え」)を実装し、「アカウント切り替え」時にFastsdk.logout()を呼び出すことを推奨します。「サーバー切り替え」時はログアウトせず直接サーバー選択画面に遷移することができます。