メインコンテンツまでスキップ

-1015, -21XX (SDK 認証エラー)

プラットフォーム別の初期化方法

Android と iOS では SDK 初期化 API とエラー確認方法が異なります。エラーの発生原因と解決方法にもプラットフォーム別の違いがあるため、検証を開始する前に対象プラットフォームをまず確認してください。

項目AndroidiOS
初期化メソッドsetCertification(key, expireDate, isTablet)storage.applicationKey / applicationBundleID / applicationExpireDate を設定後、start() を呼び出す
エラー確認方法getErrorCode() の戻り値を確認(同期方式)start() 実行時に例外処理が発生(try/catch 方式)
認証識別子アプリパッケージ名(applicationId)を自動抽出Bundle ID(CFBundleIdentifier)を明示的に入力
追加パラメーターisTablet(モバイル・タブレット区分値)なし
デバイスバインディングsetDevice(path, isTablet) の別途呼び出しが必要start() メソッド実行時に内部で自動処理

-2103

  • エラーコード: -2103
  • タイプ: プラットフォームにより定数名が異なる
    • iOS: ERROR_INCORRECT_BUNDLE_ID
    • Android: ERROR_INCORRECT_PACKAGE_NAME
  • 概要: SDK 初期化時に渡した認証情報(キー、有効期限、Bundle ID またはパッケージ名)が発行記録と一致しない

原因

原因プラットフォーム説明
Bundle ID の不一致iOSソースコードの storage.applicationBundleID 設定値が、プロジェクトの Info.plist に定義されている実際の CFBundleIdentifier 値と異なる場合です。
パッケージ名の不一致AndroidSDK が自動抽出したアプリのパッケージ名と、ライセンス発行時に登録したパッケージ名(applicationId)が異なる場合です。
Debug/Release ビルドの混用Android, iOSビルド構成(Variant/Target)ごとに識別子を異なる設定にした状態で、ライセンスキーを交差コピーして混用した場合です。
開発/本番アプリの混用Android, iOS開発用(Debug)キーでビルドしたアプリを本番環境で実行したり、逆に本番用(Release)キーを開発環境でテストした場合です。
注意

SDK キー文字列と有効期限の日付が正確であっても、Android のパッケージ名や iOS の Bundle ID が登録情報と異なれば -2103 エラーが発生するため、注意してください。

診断(Android)

  1. 初期化コードが呼び出されるモジュールの build.gradle ファイルを開き、applicationId の値を確認してください。
  2. マルチモジュール構成やビルドバリアント(Build Flavors/Product Flavors)を使用している場合は、現在ビルドされている Variant の最終的な applicationId 文字列を確認してください。
  3. SDK が内部で自動抽出したパッケージ名と、ライセンス発行時に登録したパッケージ名が完全に一致しているか比較してください。

診断(iOS)

  1. Xcode プロジェクト設定の [Target] > [General] > [Identity] > [Bundle Identifier] パスに定義されている値を確認してください。
  2. ソースコードで storage.applicationBundleID に代入した文字列と、Xcode の CFBundleIdentifier 値が大文字・小文字まで完全に一致しているか確認してください。
    storage.applicationBundleID = "com.example.myapp"  // Must exactly match the CFBundleIdentifier in Info.plist.
  3. ビルド構成(Debug/Release)によって Bundle ID が異なる場合は、ビルド環境ごとに適切な applicationBundleID と SDK キーが対応するよう分岐処理が行われているか確認してください。

解決方法

診断で発見された不一致の識別子項目を修正してから再ビルドしてください。

  • 識別子(Bundle ID/パッケージ名)自体を完全に変更する必要がある場合、既存のキーは使用できません。営業担当者(jp_sales@catenoid.net)までお問い合わせください。

-2104

  • エラーコード: -2104
  • タイプ: ERROR_EXPIRED_AUTH_DATE
  • 概要: SDK ライセンスの有効期間が失効

原因

原因説明
ライセンス有効期限切れSDK 発行時に登録したライセンスの有効期限が、現在時刻基準ですでに過ぎている場合に発生します。
デバイスの時刻誤設定ユーザーのデバイスのシステム時刻が未来の時刻に設定されており、ライセンスの有効性検証を通過できない場合です。
和暦の使用日本地域のデバイスの OS カレンダー設定が和暦(令和・平成など)に設定されている場合、日付計算エラーにより有効期限切れとして誤検知することがあります。

診断

  1. 発行されたライセンスの正確な有効期限を確認してください。(営業担当者(jp_sales@catenoid.net)の発行記録から確認できます。)
  2. デバイスの日付と時刻の設定メニューで、ネットワーク時刻同期(自動設定)が有効になっているか確認してください。
    • Android: [設定] > [システム] > [日付と時刻] > [日時を自動設定]
    • iOS: [設定] > [一般] > [日付と時刻] > [自動設定]
  3. 日本のユーザーのデバイスの場合、OS のカレンダー設定が西暦に指定されているか確認してください。

解決方法

失効したライセンスは、再発行を受けてアプリに反映するまで SDK が動作しません。

  • ライセンスの再発行: 営業担当者(jp_sales@catenoid.net)までお問い合わせいただき、更新されたキーを発行してもらってください。
  • 有効期限切れ通知への対応: ライセンスの有効期限前に案内メールが送信されますが、サービスの安定性のため、お客様が自主的に有効期限を管理することが最も安全です。アプリのリリースサイクルと SDK の有効期限をあわせて記録・管理してください。

-2106

  • エラーコード: -2106
  • タイプ: ERROR_INCORRECT_AUTH_KEY
  • 概要: SDK 認証キーの不一致

原因

原因プラットフォーム説明
SDK キーの不一致Android, iOSソースコードに入力したキー文字列が、発行された元のキーと異なります。
有効期限フォーマットエラーAndroid, iOS日付区切り文字のフォーマットを "YYYY/MM/DD" 形式ではなく別の形式(YYYY-MM-DDYYYYMMDD など)で誤って入力した場合です。
開発/本番アプリの混用Android, iOS開発用(Debug)キーでビルドしたアプリを本番環境で実行したり、逆に本番用(Release)キーを開発環境でテストした場合です。
isTablet の不一致Androidライセンス発行時に指定したデバイスタイプ(モバイル/タブレット)環境と、初期化メソッドの setCertification(..., isTablet) 引数の値が異なっている場合です。

診断(Android)

1. 初期化コードを検証してください。

// Verify that ApplicationContext is used instead of Activity context when calling getInstance to prevent memory leaks.
mMultiStorage = MultiKollusStorage.getInstance(getApplicationContext());
boolean isTablet = Utils.getDeviceType(this) == Utils.DEVICE_TYPE.DEVICE_TABLET;
mMultiStorage.setCertification(
"SDK_Key", // Verify that this exactly matches the original key issued by Catenoid.
"YYYY/MM/DD", // Must use slash (/) as delimiter; hyphens (-) and dots (.) are not allowed.
isTablet // Must match the device type registered when the license was issued.
);

2. エラーコードの返却方式を確認してください。

iOS と異なり、Android 環境では例外処理(try/catch)方式ではなく、getErrorCode() メソッドの戻り値を同期的に確認する必要があります。

int nRet = mMultiStorage.getErrorCode();
if (nRet != ErrorCodes.ERROR_OK) {
if (nRet == ErrorCodes.ERROR_INCORRECT_AUTH_KEY) {
// The app key has expired or the authentication information does not match.
// Update the app to the latest version or contact jp_sales@catenoid.net.
}
// Do not attempt playback or downloads while an error is present.
return;
}

3. 以下の順序でセルフ診断を行ってください。

  1. 入力したアプリキー文字列の左右に不要なスペースや改行文字が含まれていないか確認してください。
  2. build.gradle ファイルに設定されている applicationId の値が、SDK キー発行申請時に登録したパッケージ名と完全に一致しているか確認してください。
  3. コードに入力されている有効期限のフォーマットが "YYYY/MM/DD" 形式であるか確認してください。
  4. isTablet の値がライセンス発行時に指定したデバイスタイプと一致しているか確認してください。

診断(iOS)

1. 初期化コードを検証してください。

  • 和暦設定を使用しているデバイスでの日付誤検知を防ぐため、必ずカレンダー識別子を gregorian に明示してください。
storage.applicationKey      = "SDK_Key"
storage.applicationBundleID = "com.example.myapp" // Must exactly match the CFBundleIdentifier in Info.plist.
let formatter = DateFormatter()
formatter.dateFormat = "YYYY/MM/DD"
formatter.calendar = Calendar(identifier: .gregorian) // Required to prevent recognition errors caused by Japanese calendar settings.
storage.applicationExpireDate = formatter.date(from: "2030/12/31")

2. 例外処理の構造を確認してください。

Android と異なり、iOS 環境では storage.start() または startWithCheck() メソッドがエラーを throw するため、try/catch 構文で囲んで実装する必要があります。

do {
try storage.start() // or startWithCheck()
} catch {
// Extract and check the error code using (error as NSError).code.
// If the returned error code is -2106, review the applicationKey, applicationBundleID, and applicationExpireDate settings again.
}

3. 以下の順序でセルフ診断を行ってください。

  1. Xcode プロジェクトのターゲット設定の [General] > [Identity] > [Bundle Identifier] パスに登録されている値が、ソースコードの applicationBundleID と大文字・小文字まで正確に一致しているか確認してください。
  2. ビルド構成(Debug/Release)によって Bundle ID が異なる場合は、各ビルド環境ごとに適切な SDK キーがマッピングされているか確認してください。
  3. formatter.calendar = Calendar(identifier: .gregorian) の記述が欠落していることで、日本のデバイス環境で有効期限が誤検知されていないか確認してください。

解決方法

  • セルフ診断で発見された不一致のパラメーター項目を正しく修正してからアプリを再ビルドしてください。
  • パッケージ名(Android)または Bundle ID(iOS)が変更され、新しいライセンスキーの再発行が必要な場合は、営業担当者(jp_sales@catenoid.net)までお問い合わせください。

-1015(Android SDK)

  • エラーコード: -1015
  • タイプ: ERROR_UNSUPPORTED_DEVICE
  • 概要: setDevice() メソッドの呼び出し時点または DRM 互換性検証時に発生するエラー(Android OS でのみ発生)

原因

原因説明
引数に null を渡した場合setDevice(path, isTablet) メソッドを呼び出す際に、デバイスパスパラメーターに null が渡される場合です。
DRM 非対応デバイスハードウェアが Widevine をサポートしていないか、ルーティング(Rooting)が検知されたデバイスで DRM コンテンツを再生しようとした場合です。
エミュレーターAVD(Android Virtual Device)環境で DRM コンテンツを再生しようとした場合です。

診断

ソースコード内で setDevice() を呼び出す時点でパラメーター値として null が渡されていないか、以下の実装コードをもとに検証してください。

// Correct setDevice implementation
storage.setDevice(
Build.MANUFACTURER + "/" + Build.Model, // Use the actual device model name as the identifier. (null is not allowed)
isTablet
);

解決方法

setDevice() パラメーターに null の代わりに実際のデバイス識別文字列が渡されるようコードを修正してください。