Files
tysdk-intergration/sdk-intergration/Packages/tysdk/Plugins/Android/ChannelAdapterManager.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;
}
}
}