feat(channel): 同步渠道构建配置
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package com.unity3d.player;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.util.Log;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
public class ChannelAdapterBase implements SDKManager.IChannelSDKAdapter {
|
||||
private static final String TAG = "ChannelAdapterBase";
|
||||
protected Activity activity;
|
||||
protected String channel = "GooglePlay";
|
||||
|
||||
final ChannelAdapterBase setup(Activity activity, String channel) {
|
||||
this.activity = activity;
|
||||
this.channel = channel;
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final SDKManager.IChannelSDKAdapter loadConfig() {
|
||||
applyConfig();
|
||||
return this;
|
||||
}
|
||||
|
||||
protected void applyConfig() {
|
||||
applyConfigObject(createConfig());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getChannel() {
|
||||
return channel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void init() {
|
||||
SDKManager.initDefault(activity);
|
||||
}
|
||||
|
||||
protected void applyConfigObject(Object source) {
|
||||
if (source == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (Field sourceField : source.getClass().getDeclaredFields()) {
|
||||
sourceField.setAccessible(true);
|
||||
try {
|
||||
Object value = sourceField.get(source);
|
||||
if (value == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Field targetField = ConfigManager.class.getDeclaredField(sourceField.getName());
|
||||
targetField.setAccessible(true);
|
||||
targetField.set(null, value);
|
||||
Log.i(TAG, "apply config: " + sourceField.getName() + "=" + value);
|
||||
} catch (NoSuchFieldException ignored) {
|
||||
try {
|
||||
Object value = sourceField.get(source);
|
||||
Log.w(TAG, "ignore extra config: " + sourceField.getName() + "=" + value);
|
||||
} catch (Exception e) {
|
||||
Log.w(TAG, "ignore extra config: " + sourceField.getName());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "apply config failed: " + sourceField.getName(), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Object createConfig() {
|
||||
try {
|
||||
Class<?> configClass = Class.forName(this.getClass().getName() + "$Config");
|
||||
Constructor<?> constructor = configClass.getDeclaredConstructor();
|
||||
constructor.setAccessible(true);
|
||||
return constructor.newInstance();
|
||||
} catch (ClassNotFoundException ignored) {
|
||||
return null;
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "create config failed: " + this.getClass().getName(), e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user