comptible socket and passport service in AISDK

This commit is contained in:
zhongchao
2021-03-03 17:47:21 +08:00
parent 9136f633eb
commit 1ca1f1c879
12 changed files with 330 additions and 124 deletions

View File

@@ -11,9 +11,6 @@ import com.mogo.cloud.passport.MoGoAiCloudClient;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
import com.mogo.cloud.util.Devices;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
@@ -41,17 +38,16 @@ public class MoGoApplication extends MultiDexApplication {
clientConfig.setNetMode(MogoHttpDnsConfig.HTTP_DNS_ENV_QA);
// 设置是否是第三APP登录false自有车机 true外部三方车机
clientConfig.setThirdLogin(false);
// 设置长链AppId //todo 需要卸载智慧驾驶
clientConfig.setSocketAppId("com.mogo.launcher");
// 设置是否输出日志
clientConfig.setShowDebugLog(true);
clientConfig.setThirdLogin(true);
// 设置从蘑菇AI开放平台获取的APPKey
clientConfig.setThirdPartyAppKey("wbvpzgar");
// 设置AI云平台分配给三方应用的签名密钥需要从AI云平台申请
// 设置车机设备的唯一标识(这些表识必须是通过后台录入的设备)
clientConfig.setThirdPartyDeviceId(Devices.getSn());
// 设置应用服务AppId 长链、鉴权 //todo 需要卸载智慧驾驶、行车记录仪
clientConfig.setServiceAppId("com.mogo.launcher");
// 设置是否输出日志
clientConfig.setShowDebugLog(true);
// 设置循环检测间隔时间
clientConfig.setLoopCheckDelay(15 * 1000);
// 设置是否属于高精定位设备

View File

@@ -10,7 +10,7 @@ import com.mogo.cloud.utils.logger.Logger;
public class WifiBroadCastReceiver extends BroadcastReceiver {
private WifiBroadCastReceiver() {
public WifiBroadCastReceiver() {
Logger.d(TAG, "WifiBroadCastReceiver init");
}

View File

@@ -27,8 +27,10 @@ android {
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
// passport
// passport-for-sdk 外部SDK版本
implementation 'com.zhidao.thirdlogin:third-login:1.0.2'
// passport-for-internal 内部SDK版本
implementation 'com.zhidao.accountservice:account-sdk:1.0.18'
if (Boolean.valueOf(RELEASE)) {
api "com.mogo.cloud:httpdns:${MOGO_HTTPDNS_VERSION}"

View File

@@ -0,0 +1,8 @@
package com.mogo.cloud.passport;
public interface IPassport {
void onSuccess(String token, String sn);
void onError(int code, String msg);
}

View File

@@ -9,11 +9,6 @@ import com.mogo.cloud.httpdns.MogoHttpDnsClient;
import com.mogo.cloud.httpdns.MogoHttpDnsConfig;
import com.mogo.cloud.utils.logger.LogLevel;
import com.mogo.cloud.utils.logger.Logger;
import com.zhidao.thirdlogin.Environment;
import com.zhidao.thirdlogin.LoginManager;
import com.zhidao.thirdlogin.model.ThirdLoginParam;
import com.zhidao.thirdlogin.model.TokenData;
import com.zhidao.thirdlogin.network.LoginCallback;
import java.util.ArrayList;
import java.util.List;
@@ -25,14 +20,14 @@ import java.util.List;
*/
@Keep
public class MoGoAiCloudClient {
private static final String TAG = "MoGoAiCloudClient";
public static final String TAG = "MoGoAiCloudClient";
private static volatile MoGoAiCloudClient sInstance;
private MoGoAiCloudClientConfig mAiCloudClientConfig;
private MogoHttpDnsConfig mHttpDnsConfig;
private Context mContext;
private List<IMoGoTokenCallback> mTokenCallbacks;
private final List<IMoGoTokenCallback> mTokenCallbacks;
private MoGoAiCloudClient() {
mTokenCallbacks = new ArrayList<>();
@@ -85,99 +80,63 @@ public class MoGoAiCloudClient {
Log.i(TAG, "═══════════════刷新Token═════════════");
}
if (mAiCloudClientConfig != null) {
ThirdLoginParam thirdLoginParam = ThirdLoginParam.of(
mAiCloudClientConfig.getThirdPartyDeviceId(),
mAiCloudClientConfig.getThirdPartyAppKey()
);
LoginCallback loginCallback = new LoginCallback() {
@Override
public void onSuccess(TokenData.TokenResult result) {
if (mAiCloudClientConfig.isShowDebugLog()) {
Log.i(TAG, "═════════════════════════════════════");
Log.i(TAG, "║ PassportVersion" + com.mogo.cloud.passport.BuildConfig.VERSION_NAME);
Log.i(TAG, "║ HttpDnsVersion" + com.mogo.cloud.httpdns.BuildConfig.VERSION_NAME);
Log.i(TAG, "║ ThirdLoginVersion" + com.zhidao.thirdlogin.BuildConfig.VERSION_NAME);
Log.i(TAG, "║ MoGo鉴权成功 ");
Log.i(TAG, "║ SN" + result.sn);
Log.i(TAG, "║ Token" + result.token);
Log.i(TAG, "═════════════════════════════════════");
}
// 变量赋值
if (mAiCloudClientConfig != null) {
mAiCloudClientConfig.setSn(result.sn);
mAiCloudClientConfig.setToken(result.token);
}
// 循环调用将数据传出去
for (IMoGoTokenCallback tokenCallback : mTokenCallbacks) {
tokenCallback.onTokenGot(result.token, result.sn);
}
// 初始化HttpDNS
mHttpDnsConfig =
new MogoHttpDnsConfig()
.setContext(mContext)
.setSn(mAiCloudClientConfig.getSn())
.setEnv(mAiCloudClientConfig.getNetMode())
.setShowDebugLog(mAiCloudClientConfig.isShowDebugLog())
.setCurrentLocation(mAiCloudClientConfig.getIHttpDnsCurrentLocation())
.setLoopCheckDelay(mAiCloudClientConfig.getLoopCheckDelay());
MogoHttpDnsClient.INSTANCE.init(mHttpDnsConfig);
PassportManager.getInstance().refreshToken(mContext, new IPassport() {
@Override
public void onSuccess(String token, String sn) {
if (mAiCloudClientConfig.isShowDebugLog()) {
Log.i(TAG, "═════════════════════════════════════");
Log.i(TAG, "║ PassportVersion" + com.mogo.cloud.passport.BuildConfig.VERSION_NAME);
Log.i(TAG, "║ HttpDnsVersion" + com.mogo.cloud.httpdns.BuildConfig.VERSION_NAME);
Log.i(TAG, "║ ThirdLoginVersion" + com.zhidao.thirdlogin.BuildConfig.VERSION_NAME);
Log.i(TAG, "║ MoGo鉴权成功 ");
Log.i(TAG, "║ SN" + sn);
Log.i(TAG, "║ Token" + token);
Log.i(TAG, "═════════════════════════════════════");
}
@Override
public void onFailure(int code, String msg) {
if (mAiCloudClientConfig.isShowDebugLog()) {
Toast.makeText(mContext, "MoGo鉴权失败", Toast.LENGTH_SHORT).show();
Log.e(TAG, "═════════════════════════════════════");
Log.e(TAG, "║ MoGo鉴权失败 ");
Log.e(TAG, "║ ErrorCode" + code);
Log.e(TAG, "║ ErrorMessage" + msg);
Log.e(TAG, "═════════════════════════════════════");
}
// 变量赋值
if (mAiCloudClientConfig != null) {
mAiCloudClientConfig.setSn("");
mAiCloudClientConfig.setToken("");
}
for (IMoGoTokenCallback tokenCallback : mTokenCallbacks) {
tokenCallback.onError(code, msg);
}
// 变量赋值
if (mAiCloudClientConfig != null) {
mAiCloudClientConfig.setSn(sn);
mAiCloudClientConfig.setToken(token);
}
};
if (mAiCloudClientConfig.isShowDebugLog()) {
Log.w(TAG, "loginCallback" + loginCallback);
// 循环调用将数据传出去
for (IMoGoTokenCallback tokenCallback : mTokenCallbacks) {
tokenCallback.onTokenGot(token, sn);
}
// 初始化HttpDNS
mHttpDnsConfig =
new MogoHttpDnsConfig()
.setContext(mContext)
.setSn(mAiCloudClientConfig.getSn())
.setEnv(mAiCloudClientConfig.getNetMode())
.setShowDebugLog(mAiCloudClientConfig.isShowDebugLog())
.setCurrentLocation(mAiCloudClientConfig.getIHttpDnsCurrentLocation())
.setLoopCheckDelay(mAiCloudClientConfig.getLoopCheckDelay());
MogoHttpDnsClient.INSTANCE.init(mHttpDnsConfig);
}
Environment environment;
switch (mAiCloudClientConfig.getNetMode()) {
case MogoHttpDnsConfig.HTTP_DNS_ENV_DEV:
environment = Environment.dev;
break;
case MogoHttpDnsConfig.HTTP_DNS_ENV_QA:
case MogoHttpDnsConfig.HTTP_DNS_ENV_DEMO:
environment = Environment.qa;
break;
default:
environment = Environment.release;
break;
@Override
public void onError(int code, String msg) {
if (mAiCloudClientConfig.isShowDebugLog()) {
Toast.makeText(mContext, "MoGo鉴权失败", Toast.LENGTH_SHORT).show();
Log.e(TAG, "═════════════════════════════════════");
Log.e(TAG, "║ MoGo鉴权失败 ");
Log.e(TAG, "║ ErrorCode" + code);
Log.e(TAG, "║ ErrorMessage" + msg);
Log.e(TAG, "═════════════════════════════════════");
}
// 变量赋值
if (mAiCloudClientConfig != null) {
mAiCloudClientConfig.setSn("");
mAiCloudClientConfig.setToken("");
}
for (IMoGoTokenCallback tokenCallback : mTokenCallbacks) {
tokenCallback.onError(code, msg);
}
}
LoginManager.getInstance().login(
mContext,
environment,
thirdLoginParam,
loginCallback);
} else {
Log.e(TAG, "═════════════════════════════════════");
Log.e(TAG, "║ MoGo 鉴权失败 ");
Log.e(TAG, "║ 请配置 MoGoAiCloudClientConfig 信息");
Log.e(TAG, "═════════════════════════════════════");
}
});
}
/**
@@ -186,9 +145,7 @@ public class MoGoAiCloudClient {
* @param iMoGoTokenCallback 回调监听
*/
public void addTokenCallbacks(IMoGoTokenCallback iMoGoTokenCallback) {
if (mTokenCallbacks != null) {
mTokenCallbacks.add(iMoGoTokenCallback);
}
mTokenCallbacks.add(iMoGoTokenCallback);
}
}

View File

@@ -88,9 +88,9 @@ public class MoGoAiCloudClientConfig {
private boolean mIsAccuracyDevice;
/**
* 应用长连接id
* 应用服务AppId,包括长链、鉴权
*/
private String mSocketAppId;
private String mServiceAppId;
/**
* 设置HttpDns的位置监听
@@ -333,21 +333,21 @@ public class MoGoAiCloudClientConfig {
}
/**
* 获取应用长连接id
* 获取应用服务AppId
*
* @return String 长连接id
* @return String AppId
*/
public String getSocketAppId() {
return mSocketAppId;
public String getServiceAppId() {
return mServiceAppId;
}
/**
* 设置应用长连接id,三方应用无需设置
* 设置应用服务AppId,包括长链、鉴权,三方应用无需设置
*
* @param socketAppId 设置应用长连接id
* @param serviceAppId 设置应用服务AppId
*/
public void setSocketAppId(String socketAppId) {
mSocketAppId = socketAppId;
public void setServiceAppId(String serviceAppId) {
mServiceAppId = serviceAppId;
}
/**
@@ -383,7 +383,7 @@ public class MoGoAiCloudClientConfig {
", mLoopCheckDelay=" + mLoopCheckDelay +
", mIsUseExternalLocation=" + mIsUseExternalLocation +
", mIsAccuracyDevice=" + mIsAccuracyDevice +
", mSocketAppId='" + mSocketAppId + '\'' +
", mServiceAppId='" + mServiceAppId + '\'' +
", mIHttpDnsCurrentLocation=" + mIHttpDnsCurrentLocation +
'}';
}

View File

@@ -0,0 +1,35 @@
package com.mogo.cloud.passport;
import android.content.Context;
import com.mogo.cloud.passport.internal.InternalPassportManager;
import com.mogo.cloud.passport.third.ThirdPassportManager;
public class PassportManager {
private static volatile PassportManager mInstance;
private final MoGoAiCloudClientConfig cloudClientConfig;
private PassportManager() {
cloudClientConfig = MoGoAiCloudClient.getInstance().getAiCloudClientConfig();
}
public static PassportManager getInstance() {
if (mInstance == null) {
synchronized (PassportManager.class) {
if (mInstance == null) {
mInstance = new PassportManager();
}
}
}
return mInstance;
}
public void refreshToken(Context context, IPassport passport) {
if (cloudClientConfig.isThirdLogin()) {
ThirdPassportManager.getInstance().refreshToken(context, passport);
} else {
InternalPassportManager.getInstance(context).refreshToken(passport);
}
}
}

View File

@@ -0,0 +1,82 @@
package com.mogo.cloud.passport.internal;
import android.content.Context;
import android.text.TextUtils;
import com.mogo.cloud.DevicesUtils;
import com.mogo.cloud.httpdns.MogoHttpDnsConfig;
import com.mogo.cloud.passport.IPassport;
import com.mogo.cloud.passport.MoGoAiCloudClient;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
import com.mogo.cloud.utils.logger.Logger;
import com.zhidao.account.sdk.AccountClientManager;
import com.zhidao.account.sdk.BusinessType;
import com.zhidao.account.sdk.Environment;
import com.zhidao.account.sdk.callback.TicketInfoCallback;
import static com.mogo.cloud.passport.MoGoAiCloudClient.TAG;
public class InternalPassportManager {
private static volatile InternalPassportManager mInstance;
private IPassport mPassport;
private final MoGoAiCloudClientConfig mAiCloudClientConfig;
private InternalPassportManager(Context context) {
mAiCloudClientConfig = MoGoAiCloudClient.getInstance().getAiCloudClientConfig();
String appId = mAiCloudClientConfig.getServiceAppId();
if (TextUtils.isEmpty(appId)) {
Logger.e(TAG, "需要初始化 passport AppId");
return;
}
AccountClientManager.init(context.getApplicationContext(), getNetEnvironment(), BusinessType.toc_login, appId);
}
public static InternalPassportManager getInstance(Context context) {
if (mInstance == null) {
synchronized (InternalPassportManager.class) {
if (mInstance == null) {
mInstance = new InternalPassportManager(context);
}
}
}
return mInstance;
}
public void refreshToken(IPassport passport) {
this.mPassport = passport;
AccountClientManager.getTicket(new TicketInfoCallback() {
@Override
public void onSuccess(String ticket) {
if (mPassport != null) {
mPassport.onSuccess(ticket, DevicesUtils.getSn());
}
}
@Override
public void onFailure(int code, String msg) {
if (mPassport != null) {
mPassport.onError(code, msg);
}
}
});
}
private Environment getNetEnvironment() {
int mode = mAiCloudClientConfig.getNetMode();
Environment environment;
switch (mode) {
case MogoHttpDnsConfig.HTTP_DNS_ENV_DEV:
environment = Environment.dev;
break;
case MogoHttpDnsConfig.HTTP_DNS_ENV_QA:
case MogoHttpDnsConfig.HTTP_DNS_ENV_DEMO:
environment = Environment.qa;
break;
default:
environment = Environment.release;
break;
}
return environment;
}
}

View File

@@ -0,0 +1,94 @@
package com.mogo.cloud.passport.third;
import android.content.Context;
import android.util.Log;
import com.mogo.cloud.httpdns.MogoHttpDnsConfig;
import com.mogo.cloud.passport.IPassport;
import com.mogo.cloud.passport.MoGoAiCloudClient;
import com.mogo.cloud.passport.MoGoAiCloudClientConfig;
import com.zhidao.thirdlogin.Environment;
import com.zhidao.thirdlogin.LoginManager;
import com.zhidao.thirdlogin.model.ThirdLoginParam;
import com.zhidao.thirdlogin.model.TokenData;
import com.zhidao.thirdlogin.network.LoginCallback;
import static com.mogo.cloud.passport.MoGoAiCloudClient.TAG;
public class ThirdPassportManager {
private static volatile ThirdPassportManager mInstance;
private IPassport mPassport;
private ThirdPassportManager() {
}
public static ThirdPassportManager getInstance() {
if (mInstance == null) {
synchronized (ThirdPassportManager.class) {
if (mInstance == null) {
mInstance = new ThirdPassportManager();
}
}
}
return mInstance;
}
public void refreshToken(Context context, IPassport passport) {
this.mPassport = passport;
MoGoAiCloudClientConfig mAiCloudClientConfig = MoGoAiCloudClient.getInstance().getAiCloudClientConfig();
if (mAiCloudClientConfig != null) {
ThirdLoginParam thirdLoginParam = ThirdLoginParam.of(
mAiCloudClientConfig.getThirdPartyDeviceId(),
mAiCloudClientConfig.getThirdPartyAppKey()
);
LoginCallback loginCallback = new LoginCallback() {
@Override
public void onSuccess(TokenData.TokenResult result) {
if (mPassport != null) {
mPassport.onSuccess(result.token, result.sn);
}
}
@Override
public void onFailure(int code, String msg) {
if (mPassport != null) {
mPassport.onError(code, msg);
}
}
};
if (mAiCloudClientConfig.isShowDebugLog()) {
Log.w(TAG, "loginCallback" + loginCallback);
}
Environment environment;
switch (mAiCloudClientConfig.getNetMode()) {
case MogoHttpDnsConfig.HTTP_DNS_ENV_DEV:
environment = Environment.dev;
break;
case MogoHttpDnsConfig.HTTP_DNS_ENV_QA:
case MogoHttpDnsConfig.HTTP_DNS_ENV_DEMO:
environment = Environment.qa;
break;
default:
environment = Environment.release;
break;
}
LoginManager.getInstance().login(
context,
environment,
thirdLoginParam,
loginCallback);
} else {
Log.e(TAG, "═════════════════════════════════════");
Log.e(TAG, "║ MoGo 鉴权失败 ");
Log.e(TAG, "║ 请配置 MoGoAiCloudClientConfig 信息");
Log.e(TAG, "═════════════════════════════════════");
//todo 未来配置 errorCode设置回调错误码
}
}
}

View File

@@ -26,12 +26,12 @@ android {
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
// 长链 http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48956182 外部SDK版本
// socket-for-sdk 长链 http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48956182 外部SDK版本
api 'com.zhidao.socket:built-in-socket:1.0.22'
// 上报位置 http://wiki.zhidaohulian.com/pages/viewpage.action?pageId=48956200
implementation 'com.zhidao.locupload:loc-upload-sdk:1.1.9'
// 长链 内部SDK版本
// socket-for-internal 长链 内部SDK版本
implementation 'com.zhidao.socketsdk:socketsdk:2.1.4'
implementation 'com.google.protobuf:protobuf-java:3.5.1'

View File

@@ -43,11 +43,12 @@ public class InternalSocketManager implements OnSocketReceiveCallback, OnSocketA
mSocketConnManager = SocketConnManagerImpl.getInstance(context);
mSocketConnManager.addSocketMessageCallback(this);
mSocketConnManager.addSocketAckCallback(this);
if (TextUtils.isEmpty(cloudClientConfig.getSocketAppId())) {
String appId = cloudClientConfig.getServiceAppId();
if (TextUtils.isEmpty(appId)) {
Logger.e(TAG, "需要初始化 Socket AppId");
return;
}
mSocketConnManager.init(cloudClientConfig.getSocketAppId());
mSocketConnManager.init(appId);
}
@Override
@@ -72,8 +73,10 @@ public class InternalSocketManager implements OnSocketReceiveCallback, OnSocketA
}
public void release() {
mSocketConnManager.onRelease();
mSocketConnManager = null;
if (mSocketConnManager != null) {
mSocketConnManager.onRelease();
mSocketConnManager = null;
}
mInstance = null;
}
}

View File

@@ -1,7 +1,36 @@
package com.mogo.cloud;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 设备信息
*/
public class DevicesUtils {
private static final String PROPERTIES = "android.os.SystemProperties";
private static final String GSM_SERIAL = "gsm.serial";
private static final String GET = "get";
public static String getSn(){
return getSystemProperties(GSM_SERIAL);
}
public static String getSystemProperties(String name ) {
String value = "";
try {
Class< ? > c = Class.forName( PROPERTIES );
Method get = c.getMethod( GET, String.class );
value = (String) get.invoke( c, name );
} catch ( ClassNotFoundException var3 ) {
var3.printStackTrace();
} catch ( NoSuchMethodException var4 ) {
var4.printStackTrace();
} catch ( InvocationTargetException var5 ) {
var5.printStackTrace();
} catch ( IllegalAccessException var6 ) {
var6.printStackTrace();
}
return value;
}
}