From de1767f8fd8d0bf8f23619ad2f28bda478ae4e68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 28 Jan 2021 17:43:20 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0Token=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E9=80=82=E9=85=8D=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/cloud/MoGoApplication.java | 2 +- .../com/mogo/cloud/network/OkHttpFactory.kt | 2 ++ .../cloud/network/SSLSocketFactoryUtils.kt | 8 ++--- .../interceptor/HttpPassportInterceptor.kt | 35 +++++++++++++++++++ .../cloud/passport/MoGoAiCloudClient.java | 2 ++ 5 files changed, 44 insertions(+), 5 deletions(-) create mode 100644 foudations/mogo-network/src/main/java/com/mogo/cloud/network/interceptor/HttpPassportInterceptor.kt diff --git a/app/src/main/java/com/mogo/cloud/MoGoApplication.java b/app/src/main/java/com/mogo/cloud/MoGoApplication.java index 36070af..18958d4 100644 --- a/app/src/main/java/com/mogo/cloud/MoGoApplication.java +++ b/app/src/main/java/com/mogo/cloud/MoGoApplication.java @@ -40,7 +40,7 @@ public class MoGoApplication extends MultiDexApplication { // 设置从蘑菇AI开放平台获取的APPKey clientConfig.setThirdPartyAppKey("bydauto"); // 设置车机设备的唯一标识(这些表识必须是通过后台录入的设备) - clientConfig.setThirdPartyDeviceId("bydauto"); + clientConfig.setThirdPartyDeviceId("F803EB2046PZD00149"); // 设置循环检测间隔时间 clientConfig.setLoopCheckDelay(15 * 1000); diff --git a/foudations/mogo-network/src/main/java/com/mogo/cloud/network/OkHttpFactory.kt b/foudations/mogo-network/src/main/java/com/mogo/cloud/network/OkHttpFactory.kt index 9caed9f..fbfe63c 100644 --- a/foudations/mogo-network/src/main/java/com/mogo/cloud/network/OkHttpFactory.kt +++ b/foudations/mogo-network/src/main/java/com/mogo/cloud/network/OkHttpFactory.kt @@ -8,6 +8,7 @@ import com.mogo.cloud.network.SSLSocketFactoryUtils.createTrustAllManager import com.mogo.cloud.network.interceptor.HttpHeaderInterceptor import com.mogo.cloud.network.interceptor.HttpDnsInterceptor import com.mogo.cloud.network.interceptor.HttpLoggingInterceptor +import com.mogo.cloud.network.interceptor.HttpPassportInterceptor import okhttp3.OkHttpClient import java.util.concurrent.TimeUnit @@ -25,6 +26,7 @@ class OkHttpFactory private constructor() { .addNetworkInterceptor(HttpHeaderInterceptor()) .addNetworkInterceptor(HttpLoggingInterceptor()) .addInterceptor(HttpDnsInterceptor()) + .addInterceptor(HttpPassportInterceptor()) .sslSocketFactory(createSSLSocketFactory(), createTrustAllManager()) .hostnameVerifier(SSLSocketFactoryUtils.TrustAllHostnameVerifier()) .connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS) diff --git a/foudations/mogo-network/src/main/java/com/mogo/cloud/network/SSLSocketFactoryUtils.kt b/foudations/mogo-network/src/main/java/com/mogo/cloud/network/SSLSocketFactoryUtils.kt index 172150b..c742884 100644 --- a/foudations/mogo-network/src/main/java/com/mogo/cloud/network/SSLSocketFactoryUtils.kt +++ b/foudations/mogo-network/src/main/java/com/mogo/cloud/network/SSLSocketFactoryUtils.kt @@ -10,10 +10,10 @@ import javax.net.ssl.* * describe: */ object SSLSocketFactoryUtils { - /* - * 默认信任所有的证书 - * 最好加上证书认证,主流App都有自己的证书 - * */ + /** + * 默认信任所有的证书 + * 最好加上证书认证,主流App都有自己的证书 + * */ private const val str = "TLS" fun createSSLSocketFactory(): SSLSocketFactory? { var sslSocketFactory: SSLSocketFactory? = null diff --git a/foudations/mogo-network/src/main/java/com/mogo/cloud/network/interceptor/HttpPassportInterceptor.kt b/foudations/mogo-network/src/main/java/com/mogo/cloud/network/interceptor/HttpPassportInterceptor.kt new file mode 100644 index 0000000..0d764ec --- /dev/null +++ b/foudations/mogo-network/src/main/java/com/mogo/cloud/network/interceptor/HttpPassportInterceptor.kt @@ -0,0 +1,35 @@ +package com.mogo.cloud.network.interceptor + +import com.mogo.utils.logger.Logger +import okhttp3.Interceptor +import okhttp3.MediaType +import okhttp3.Response +import okhttp3.ResponseBody + +/** + * created by donghongyu on 2021/1/28 14:33 + * describe: 令牌拦截,如果发现令牌过期需要重新获取令牌 + */ +class HttpPassportInterceptor : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + Logger.d("HttpPassportInterceptor", "Passport error ") + + val response = chain.proceed(chain.request()) + val responseBody = response.body() + var responseContent: String? = null + var bodySize: String? = null + var contentType: MediaType? = null + var consumedResponse = false + + if (responseBody != null) { + val contentLength = responseBody.contentLength() + bodySize = if (contentLength != -1L) "$contentLength-byte" else "unknown-length" + contentType = responseBody.contentType() + responseContent = responseBody.string() + Logger.d("响应结果", "responseContent:$responseContent") + consumedResponse = true + } + return if (consumedResponse) response.newBuilder().body(ResponseBody.create(contentType, responseContent)).build() else response + + } +} \ No newline at end of file diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java index 2e48278..b476607 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java @@ -2,6 +2,7 @@ package com.mogo.cloud.passport; import android.content.Context; import android.util.Log; +import android.widget.Toast; import androidx.annotation.Keep; @@ -115,6 +116,7 @@ public class MoGoAiCloudClient { @Override public void onFailure(int code, String msg) { + Toast.makeText(mContext, "MoGo鉴权失败", Toast.LENGTH_SHORT).show(); Log.e(TAG, "═════════════════════════════════════"); Log.e(TAG, "║ MoGo鉴权失败 "); Log.e(TAG, "║ ErrorCode:" + code); From e972cd360de12aac9f2b382785ac8ffb49297772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 28 Jan 2021 18:01:24 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E7=9A=84=E6=97=B6=E5=80=99=E5=9B=9E=E8=B0=83=E7=9A=84?= =?UTF-8?q?=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/gradle.xml | 1 - .../java/com/mogo/cloud/MainActivity.java | 26 ++++++------ .../java/com/mogo/cloud/MoGoApplication.java | 10 ++++- .../cloud/passport/MoGoAiCloudClient.java | 40 ++++++++++++++----- 4 files changed, 50 insertions(+), 27 deletions(-) diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 1a0aaec..df338e2 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -23,7 +23,6 @@ diff --git a/app/src/main/java/com/mogo/cloud/MainActivity.java b/app/src/main/java/com/mogo/cloud/MainActivity.java index 532cf07..5dbbaac 100644 --- a/app/src/main/java/com/mogo/cloud/MainActivity.java +++ b/app/src/main/java/com/mogo/cloud/MainActivity.java @@ -29,21 +29,9 @@ public class MainActivity extends AppCompatActivity { tvSn = findViewById(R.id.tvSn); tvToken = findViewById(R.id.tvToken); - initPassportInfo(); - btnJumpPassPort = findViewById(R.id.btnJumpPassPort); btnJumpPassPort.setOnClickListener(v -> { - MoGoAiCloudClient.getInstance().refreshToken(new IMoGoTokenCallback() { - @Override - public void onTokenGot(String token, String sn) { - initPassportInfo(); - } - - @Override - public void onError(int code, String msg) { - - } - }); + MoGoAiCloudClient.getInstance().refreshToken(); }); btnJumpNetWorkPort = findViewById(R.id.btnJumpNetWorkPort); @@ -57,6 +45,18 @@ public class MainActivity extends AppCompatActivity { Intent intent = new Intent(MainActivity.this, RealTimeActivity.class); startActivity(intent); }); + + MoGoAiCloudClient.getInstance().addTokenCallbacks(new IMoGoTokenCallback() { + @Override + public void onTokenGot(String token, String sn) { + initPassportInfo(); + } + + @Override + public void onError(int code, String msg) { + initPassportInfo(); + } + }); } /** diff --git a/app/src/main/java/com/mogo/cloud/MoGoApplication.java b/app/src/main/java/com/mogo/cloud/MoGoApplication.java index 18958d4..c8d7b35 100644 --- a/app/src/main/java/com/mogo/cloud/MoGoApplication.java +++ b/app/src/main/java/com/mogo/cloud/MoGoApplication.java @@ -5,17 +5,22 @@ import androidx.multidex.MultiDexApplication; import com.mogo.cloud.httpdns.MogoHttpDnsConfig; import com.mogo.cloud.httpdns.bean.HttpDnsSimpleLocation; import com.mogo.cloud.httpdns.listener.IHttpDnsCurrentLocation; +import com.mogo.cloud.passport.IMoGoTokenCallback; import com.mogo.cloud.passport.MoGoAiCloudClient; import com.mogo.cloud.passport.MoGoAiCloudClientConfig; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; import java.util.Random; /** * */ public class MoGoApplication extends MultiDexApplication { + + @Override public void onCreate() { super.onCreate(); @@ -40,7 +45,7 @@ public class MoGoApplication extends MultiDexApplication { // 设置从蘑菇AI开放平台获取的APPKey clientConfig.setThirdPartyAppKey("bydauto"); // 设置车机设备的唯一标识(这些表识必须是通过后台录入的设备) - clientConfig.setThirdPartyDeviceId("F803EB2046PZD00149"); + clientConfig.setThirdPartyDeviceId("bydauto"); // 设置循环检测间隔时间 clientConfig.setLoopCheckDelay(15 * 1000); @@ -54,7 +59,8 @@ public class MoGoApplication extends MultiDexApplication { }); // 初始化SDK,可以设置状态回调来监听 - MoGoAiCloudClient.getInstance().init(this, clientConfig, null); + MoGoAiCloudClient.getInstance().init( + this, clientConfig); } } diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java index b476607..3739706 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java @@ -14,6 +14,9 @@ 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; + /** * 蘑菇AI云平台SDK入口 */ @@ -26,9 +29,10 @@ public class MoGoAiCloudClient { private MogoHttpDnsConfig mHttpDnsConfig; private Context mContext; + private List mTokenCallbacks; private MoGoAiCloudClient() { - + mTokenCallbacks = new ArrayList<>(); } @Keep @@ -51,13 +55,12 @@ public class MoGoAiCloudClient { * @param tokenCallback 获取令牌回调,使用端可根据回调的方法判断是否获取令牌成功,可为空 */ public MoGoAiCloudClient init(Context context, - MoGoAiCloudClientConfig aiCloudClientConfig, - final IMoGoTokenCallback tokenCallback + MoGoAiCloudClientConfig aiCloudClientConfig ) { mContext = context; mAiCloudClientConfig = aiCloudClientConfig; // 刷新令牌 - refreshToken(tokenCallback); + refreshToken(); return sInstance; } @@ -69,7 +72,7 @@ public class MoGoAiCloudClient { return mAiCloudClientConfig; } - public void refreshToken(final IMoGoTokenCallback tokenCallback) { + public void refreshToken() { if (mAiCloudClientConfig != null) { ThirdLoginParam thirdLoginParam = ThirdLoginParam.of( mAiCloudClientConfig.getThirdPartyDeviceId(), @@ -91,17 +94,17 @@ public class MoGoAiCloudClient { // 本地存储 SpStorage.setSn(result.sn); SpStorage.setToken(result.token); - - if (tokenCallback != null) { - tokenCallback.onTokenGot(result.token, result.sn); - } - // 变量赋值 if (mAiCloudClientConfig != null) { mAiCloudClientConfig.sn = result.sn; mAiCloudClientConfig.token = result.token; } + // 循环调用将数据传出去 + for (IMoGoTokenCallback tokenCallback : mTokenCallbacks) { + tokenCallback.onTokenGot(result.token, result.sn); + } + // 初始化HttpDNS mHttpDnsConfig = new MogoHttpDnsConfig() @@ -122,7 +125,12 @@ public class MoGoAiCloudClient { Log.e(TAG, "║ ErrorCode:" + code); Log.e(TAG, "║ ErrorMessage:" + msg); Log.e(TAG, "═════════════════════════════════════"); - if (tokenCallback != null) { + // 变量赋值 + if (mAiCloudClientConfig != null) { + mAiCloudClientConfig.sn = ""; + mAiCloudClientConfig.token = ""; + } + for (IMoGoTokenCallback tokenCallback : mTokenCallbacks) { tokenCallback.onError(code, msg); } } @@ -157,5 +165,15 @@ public class MoGoAiCloudClient { } } + /** + * 添加Token 回调 + * + * @param iMoGoTokenCallback 回调监听 + */ + public void addTokenCallbacks(IMoGoTokenCallback iMoGoTokenCallback) { + if (mTokenCallbacks != null) { + mTokenCallbacks.add(iMoGoTokenCallback); + } + } } From bbcd1fcc8485be2166d7a150336c1c2090b7428e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 28 Jan 2021 18:08:54 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E4=BF=AE=E6=94=B9dns=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java index 3739706..9807084 100644 --- a/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java +++ b/foudations/mogo-passport/src/main/java/com/mogo/cloud/passport/MoGoAiCloudClient.java @@ -109,7 +109,7 @@ public class MoGoAiCloudClient { mHttpDnsConfig = new MogoHttpDnsConfig() .setContext(mContext) - .setSn(mAiCloudClientConfig.sn) + .setSn(mAiCloudClientConfig.getSn()) .setEnv(mAiCloudClientConfig.getNetMode()) .setShowDebugLog(mAiCloudClientConfig.isShowDebugLog()) .setCurrentLocation(mAiCloudClientConfig.getIHttpDnsCurrentLocation()) From 61da36083429b60f4fe95e34d57400eea520a4eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=91=A3=E5=AE=8F=E5=AE=87?= Date: Thu, 28 Jan 2021 18:21:32 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/mogo/cloud/MainActivity.java | 7 +++++++ app/src/main/res/layout/activity_main.xml | 20 +++++++++++++++++-- app/src/main/res/values/styles.xml | 2 +- .../cloud/passport/MoGoAiCloudClient.java | 1 - 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/mogo/cloud/MainActivity.java b/app/src/main/java/com/mogo/cloud/MainActivity.java index 5dbbaac..e1cadcc 100644 --- a/app/src/main/java/com/mogo/cloud/MainActivity.java +++ b/app/src/main/java/com/mogo/cloud/MainActivity.java @@ -20,12 +20,16 @@ public class MainActivity extends AppCompatActivity { private TextView tvSn; private TextView tvToken; + private TextView tvAppKey; + private TextView tvDevicesId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + tvAppKey = findViewById(R.id.tvAppKey); + tvDevicesId = findViewById(R.id.tvDevicesId); tvSn = findViewById(R.id.tvSn); tvToken = findViewById(R.id.tvToken); @@ -63,6 +67,9 @@ public class MainActivity extends AppCompatActivity { * 初始化令牌信息 */ private void initPassportInfo() { + tvAppKey.setText("AppKey:" + MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getThirdPartyDeviceId()); + tvDevicesId.setText("DevicesId:" + MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getThirdPartyDeviceId()); + String sn = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getSn(); String token = MoGoAiCloudClient.getInstance().getAiCloudClientConfig().getToken(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a6cf79b..b8af372 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,11 +10,27 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + @@ -22,7 +38,7 @@ android:id="@+id/tvToken" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_margin="10dp" + android:layout_margin="5dp" android:text="Token:" android:textSize="20dp" /> diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index fac9291..13f74a4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,6 +1,6 @@ -