Skip to main content

-1015, -21XX (SDK Authentication Errors)

Notice

This document is a machine-translated draft and is currently undergoing review. Some content may be inaccurate or differ from the original Korean version. For the most precise information, refer to the Korean documentation.

Initialization method by platform

Android and iOS differ in their SDK initialization APIs and error checking approaches. Since the causes and solutions also vary by platform, confirm the target platform before beginning your investigation.

ItemAndroidiOS
Initialization methodsetCertification(key, expireDate, isTablet)Set storage.applicationKey / applicationBundleID / applicationExpireDate, then call start()
Error checking methodCheck the return value of getErrorCode() (synchronous)Exception thrown when start() is called (try/catch approach)
Authentication identifierApp package name (applicationId) extracted automaticallyBundle ID (CFBundleIdentifier) entered explicitly
Additional parameterisTablet (value to distinguish mobile and tablet)None
Device bindingRequires a separate call to setDevice(path, isTablet)Handled internally and automatically when start() is executed

-2103

  • Error code: -2103
  • Type: Constant name differs by platform
    • iOS: ERROR_INCORRECT_BUNDLE_ID
    • Android: ERROR_INCORRECT_PACKAGE_NAME
  • Summary: The authentication information (key, expiration date, Bundle ID, or package name) provided during SDK initialization does not match the issuance record

Cause

CausePlatformDescription
Bundle ID mismatchiOSThe value set in storage.applicationBundleID in the source code differs from the actual CFBundleIdentifier value defined in the project's Info.plist.
Package name mismatchAndroidThe package name automatically extracted by the SDK does not match the package name (applicationId) registered when the license was issued.
Debug/Release build mix-upAndroid, iOSIdentifiers are configured differently per build configuration (Variant/Target), and license keys have been cross-copied and mixed between configurations.
Development/production app mix-upAndroid, iOSAn app built with a development (Debug) key is run in a production environment, or conversely, a production (Release) key is tested in a development environment.
Caution

Even if the SDK key string and expiration date are correct, a -2103 error will occur if the Android package name or iOS Bundle ID does not match the registered information.

Diagnosis (Android)

  1. Open the build.gradle file of the module where the initialization code is called and check the applicationId value.
  2. If you are using a multi-module structure or build variants (Build Flavors/Product Flavors), check the final applicationId string for the currently built variant.
  3. Verify that the package name automatically extracted internally by the SDK exactly matches the package name registered when the license was issued.

Diagnosis (iOS)

  1. Check the value defined at [Target] > [General] > [Identity] > [Bundle Identifier] in the Xcode project settings.
  2. Verify that the string assigned to storage.applicationBundleID in the source code exactly matches the CFBundleIdentifier value in Xcode, including case.
    storage.applicationBundleID = "com.example.myapp"  // Must exactly match the CFBundleIdentifier in Info.plist.
  3. If the Bundle ID differs between build configurations (Debug/Release), verify that branching logic is in place to ensure the correct applicationBundleID and SDK key are matched for each build environment.

Solution

Fix the mismatched identifier found through diagnosis and rebuild.

  • If the identifier (Bundle ID/package name) itself must be completely changed, the existing key cannot be used. Contact Technical Support(tech_support@kollus.com) to request a new key.

-2104

  • Error code: -2104
  • Type: ERROR_EXPIRED_AUTH_DATE
  • Summary: SDK license validity period has expired

Cause

CauseDescription
License expiration date passedOccurs when the license expiration date registered at the time of SDK issuance has already passed relative to the current time.
Incorrect device timeThe system time on the user's device is set to a future time, causing the license validity check to fail.
Japanese calendar (和暦) in useIf the operating system calendar setting on a device in the Japanese region is set to the Japanese calendar (Reiwa, Heisei, etc.), a date calculation error may cause the license to be falsely detected as expired.

Diagnosis

  1. Confirm the exact expiration date of the issued license. (This can be verified through the issuance records of your Account Manager or Technical Support.)
  2. Check in the device's date and time settings menu that network time synchronization (automatic setting) is enabled.
    • Android: [Settings] > [System] > [Date & time] > [Set time automatically]
    • iOS: [Settings] > [General] > [Date & Time] > [Set Automatically]
  3. For devices used by Japanese users, verify that the operating system calendar setting is configured to use the Gregorian calendar (西暦).

Solution

A expired license will prevent the SDK from functioning until a new license is issued and applied to the app.

  • License reissuance: Contact Technical Support(tech_support@kollus.com) to obtain a renewed key.
  • Expiration warning notice: A notification email is sent before the license expires, but for the stability of your service, it is safest for the customer to manage the expiration date independently. Record and manage both the app's release cycle and the SDK expiration date together.

-2106

  • Error code: -2106
  • Type: ERROR_INCORRECT_AUTH_KEY
  • Summary: SDK authentication key mismatch

Cause

CausePlatformDescription
SDK key mismatchAndroid, iOSThe key string entered in the source code differs from the original issued key.
Expiration date format errorAndroid, iOSThe date delimiter format was entered incorrectly using a format other than "YYYY/MM/DD" (e.g., YYYY-MM-DD, YYYYMMDD).
Development/production app mix-upAndroid, iOSAn app built with a development (Debug) key is run in a production environment, or conversely, a production (Release) key is tested in a development environment.
isTablet mismatchAndroidThe isTablet argument value in the setCertification(..., isTablet) initialization method does not match the device type (mobile/tablet) specified when the license was issued.

Diagnosis (Android)

1. Validate the initialization code.

// 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. Check the error code return method.

Unlike iOS, the Android environment requires you to check the return value of the getErrorCode() method synchronously rather than using exception handling (try/catch).

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 tech_support@kollus.com.
}
// Do not attempt playback or downloads while an error is present.
return;
}

3. Perform self-diagnosis in the following order.

  1. Check whether there are any unnecessary spaces or newline characters on the left or right side of the entered app key string.
  2. Verify that the applicationId value set in the build.gradle file exactly matches the package name registered when applying for the SDK key.
  3. Confirm that the expiration date format entered in the code uses the "YYYY/MM/DD" format.
  4. Verify that the isTablet value matches the device type specified when the license was issued.

Diagnosis (iOS)

1. Validate the initialization code.

  • Be sure to explicitly specify the calendar identifier as gregorian to prevent false date detection on devices using the Japanese calendar setting.
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. Check the exception handling structure.

Unlike Android, the iOS environment requires wrapping the storage.start() or startWithCheck() method in a try/catch block, as errors are thrown.

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. Perform self-diagnosis in the following order.

  1. Verify that the value registered at [General] > [Identity] > [Bundle Identifier] in the Xcode project target settings exactly matches applicationBundleID in the source code, including case.
  2. If the Bundle ID differs between build configurations (Debug/Release), verify that the correct SDK key is mapped for each build environment.
  3. Check whether the formatter.calendar = Calendar(identifier: .gregorian) line is missing, which could cause the expiration date to be incorrectly detected on Japanese devices.

Solution

  • Fix the mismatched parameters found through self-diagnosis and rebuild the app.
  • If the package name (Android) or Bundle ID (iOS) has changed and a new license key is required, contact Technical Support(tech_support@kollus.com).

-1015 (Android SDK)

  • Error code: -1015
  • Type: ERROR_UNSUPPORTED_DEVICE
  • Summary: Error occurring at the time of setDevice() method call or during DRM compatibility verification (Android only)

Cause

CauseDescription
null passed as argumentnull is passed as the device path parameter when calling the setDevice(path, isTablet) method.
DRM-unsupported deviceThe hardware does not support Widevine, or an attempt is made to play DRM content on a rooted device.
EmulatorAn attempt is made to play DRM content in an AVD (Android Virtual Device) environment.

Diagnosis

Validate based on the implementation code below to ensure that null is not being passed as the parameter value at the point where setDevice() is called in the source code.

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

Solution

Correct the code so that an actual device identification string is passed to the setDevice() parameter instead of null.