87 lines
3.0 KiB
Java
87 lines
3.0 KiB
Java
package com.unity3d.player;
|
|
|
|
import android.app.Activity;
|
|
import android.content.pm.ApplicationInfo;
|
|
import android.content.pm.PackageManager;
|
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
|
|
import java.lang.reflect.Constructor;
|
|
|
|
public class ChannelAdapterManager {
|
|
private static final String TAG = "ChannelAdapterManager";
|
|
private static final String DEFAULT_CHANNEL = "GooglePlay";
|
|
private static final String META_CHANNEL = "com.arkgame.ft.channel";
|
|
|
|
private static SDKManager.IChannelSDKAdapter adapter;
|
|
|
|
public static SDKManager.IChannelSDKAdapter createSdkAdapter(Activity activity) {
|
|
String channel = readChannel(activity);
|
|
adapter = createAdapter(channel);
|
|
if (adapter instanceof ChannelAdapterBase) {
|
|
((ChannelAdapterBase) adapter).setup(activity, channel);
|
|
}
|
|
return adapter;
|
|
}
|
|
|
|
public static String normalizeSkuList(String msg) {
|
|
if (adapter == null) {
|
|
return msg;
|
|
}
|
|
return adapter.normalizeSkuList(msg);
|
|
}
|
|
|
|
private static SDKManager.IChannelSDKAdapter createAdapter(String channel) {
|
|
if (TextUtils.isEmpty(channel) || DEFAULT_CHANNEL.equals(channel)) {
|
|
return new ChannelAdapterBase();
|
|
}
|
|
|
|
SDKManager.IChannelSDKAdapter adapter = tryCreateAdapter(
|
|
"com.unity3d.player." + channel + "Adapter");
|
|
if (adapter != null) {
|
|
return adapter;
|
|
}
|
|
|
|
return new ChannelAdapterBase();
|
|
}
|
|
|
|
private static SDKManager.IChannelSDKAdapter tryCreateAdapter(String adapterClassName) {
|
|
try {
|
|
Class<?> adapterClass = Class.forName(adapterClassName);
|
|
Constructor<?> constructor = adapterClass.getDeclaredConstructor();
|
|
constructor.setAccessible(true);
|
|
Object instance = constructor.newInstance();
|
|
if (instance instanceof SDKManager.IChannelSDKAdapter) {
|
|
return (SDKManager.IChannelSDKAdapter) instance;
|
|
}
|
|
Log.e(TAG, "adapter does not implement IChannelSDKAdapter: " + adapterClassName);
|
|
} catch (Exception e) {
|
|
Log.e(TAG, "create adapter failed: " + adapterClassName, e);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static String readChannel(Activity activity) {
|
|
if (activity == null) {
|
|
return DEFAULT_CHANNEL;
|
|
}
|
|
|
|
try {
|
|
ApplicationInfo appInfo = activity.getPackageManager().getApplicationInfo(
|
|
activity.getPackageName(),
|
|
PackageManager.GET_META_DATA);
|
|
Bundle metaData = appInfo.metaData;
|
|
if (metaData == null) {
|
|
return DEFAULT_CHANNEL;
|
|
}
|
|
String value = metaData.getString(META_CHANNEL);
|
|
return TextUtils.isEmpty(value) ? DEFAULT_CHANNEL : value;
|
|
} catch (Exception e) {
|
|
Log.e(TAG, "read channel failed", e);
|
|
return DEFAULT_CHANNEL;
|
|
}
|
|
}
|
|
}
|