Browse Source

1.对接接口。

石慧云 4 years ago
parent
commit
74cef0ec02
35 changed files with 597 additions and 150 deletions
  1. 3 1
      app/build.gradle
  2. 12 0
      app/proguard-rules.pro
  3. 7 3
      app/src/main/AndroidManifest.xml
  4. 3 1
      app/src/main/java/com/quansu/heifengwuliu/App.java
  5. 15 2
      app/src/main/java/com/quansu/heifengwuliu/activity/HomeActivity.kt
  6. 17 1
      app/src/main/java/com/quansu/heifengwuliu/activity/OneLoginActivity.kt
  7. 11 11
      app/src/main/java/com/quansu/heifengwuliu/activity/PrivateCenterActivity.kt
  8. 7 0
      app/src/main/java/com/quansu/heifengwuliu/component/CpApp.kt
  9. 2 2
      app/src/main/java/com/quansu/heifengwuliu/config/Config.kt
  10. 2 0
      app/src/main/java/com/quansu/heifengwuliu/config/ConfigRx.kt
  11. 15 0
      app/src/main/java/com/quansu/heifengwuliu/model/LoginBean.java
  12. 12 0
      app/src/main/java/com/quansu/heifengwuliu/model/SendSmsBean.java
  13. 31 0
      app/src/main/java/com/quansu/heifengwuliu/repository/HomeRepository.kt
  14. 48 19
      app/src/main/java/com/quansu/heifengwuliu/repository/LoginRepository.kt
  15. 5 5
      app/src/main/java/com/quansu/heifengwuliu/repository/OneLoginRepository.kt
  16. 18 35
      app/src/main/java/com/quansu/heifengwuliu/repository/RegisterRepository.kt
  17. 88 0
      app/src/main/java/com/quansu/heifengwuliu/utils/WeChatUtil.kt
  18. 52 12
      app/src/main/java/com/quansu/heifengwuliu/utils/net/ApiService.kt
  19. 8 8
      app/src/main/java/com/quansu/heifengwuliu/utils/net/Response.kt
  20. 17 0
      app/src/main/java/com/quansu/heifengwuliu/vmodel/HomeVModel.kt
  21. 73 4
      app/src/main/java/com/quansu/heifengwuliu/vmodel/LoginVModel.kt
  22. 32 1
      app/src/main/java/com/quansu/heifengwuliu/vmodel/OneLoginVModel.kt
  23. 9 16
      app/src/main/java/com/quansu/heifengwuliu/vmodel/RegisterVModel.kt
  24. 82 0
      app/src/main/java/com/quansu/heifengwuliu/wxapi/WXEntryActivity.kt
  25. 4 4
      app/src/main/res/layout/activity_login.xml
  26. 2 0
      app/src/main/res/layout/activity_onelogin.xml
  27. 1 2
      app/src/main/res/layout/activity_register.xml
  28. 2 0
      base/build.gradle
  29. 3 1
      base/src/main/java/com/ysnows/base/base/BRepository.kt
  30. 1 1
      base/src/main/java/com/ysnows/base/net/BHeaderInterceptor.java
  31. 4 0
      base/src/main/java/com/ysnows/base/net/NetEngine.java
  32. 0 13
      base/src/main/java/com/ysnows/base/route/HeiFengName.kt
  33. 4 4
      base/src/main/java/com/ysnows/base/route/IApp.kt
  34. 1 1
      jpush/build.gradle
  35. 6 3
      jpush/src/main/java/com/quansu/jpush/componnent/CpJpush.kt

+ 3 - 1
app/build.gradle

@@ -13,7 +13,7 @@ android {
         versionName rootProject.application_version_name
         manifestPlaceholders = [
                 JPUSH_PKGNAME : 'com.quansu.heifengwuliu',
-                JPUSH_APPKEY : "30244e1e645c855996b5e516",//值来自开发者平台取得的AppKey
+                JPUSH_APPKEY : "fe6707d0979ba5e2059b8fb9",//值来自开发者平台取得的AppKey
                 JPUSH_CHANNEL: "default_developer",
         ]
         ndk {
@@ -125,4 +125,6 @@ dependencies {
     implementation('com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar') {
         exclude group: 'com.android.support', module: 'support-v4'
     }
+    //微信sdk
+    implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
 }

+ 12 - 0
app/proguard-rules.pro

@@ -328,3 +328,15 @@
 
 -dontwarn com.tencent.bugly.**
 -keep public class com.tencent.bugly.**{*;}
+#wx
+-keep class com.tencent.mm.opensdk.** {
+    *;
+}
+
+-keep class com.tencent.wxop.** {
+    *;
+}
+
+-keep class com.tencent.mm.sdk.** {
+    *;
+}

+ 7 - 3
app/src/main/AndroidManifest.xml

@@ -19,7 +19,9 @@
     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
     <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
-
+    <queries>
+        <package android:name="com.tencent.mm" />
+    </queries>
     <application
 
         android:name="com.quansu.heifengwuliu.App"
@@ -68,8 +70,6 @@
 
 
 
-
-
         <activity android:name="com.quansu.heifengwuliu.activity.TodosActivity" />
 
         <activity android:name="com.quansu.heifengwuliu.activity.LoginActivity" />
@@ -87,6 +87,10 @@
         <activity
             android:name="com.quansu.heifengwuliu.activity.SplashActivity"
             android:theme="@style/AppTheme.Launcher" />
+        <activity android:name=".wxapi.WXEntryActivity"
+            android:exported="true"
+            android:launchMode="singleTop"/>
+
 
     </application >
 

+ 3 - 1
app/src/main/java/com/quansu/heifengwuliu/App.java

@@ -2,6 +2,7 @@ package com.quansu.heifengwuliu;
 
 import com.litesuits.orm.LiteOrm;
 import com.quansu.heifengwuliu.config.Config;
+import com.quansu.heifengwuliu.utils.WeChatUtil;
 import com.ysnows.base.base.BApp;
 import com.ysnows.base.ccretrofit.CCRetrofit;
 import com.ysnows.base.config.IConfig;
@@ -31,7 +32,8 @@ public class App extends BApp {
                 .init()
                 .subscribe();
 
-
+        //注册微信
+        WeChatUtil.Companion.regToWx(this);
 
 //        CCRetrofit.instance()
 //                .create(IUmeng.class)

+ 15 - 2
app/src/main/java/com/quansu/heifengwuliu/activity/HomeActivity.kt

@@ -11,8 +11,11 @@ import com.quansu.heifengwuliu.fragment.IndexFragment
 import com.quansu.heifengwuliu.fragment.MineFragment
 import com.quansu.heifengwuliu.fragment.WayBillFragment
 import com.quansu.heifengwuliu.model.bean.TabEntity
+import com.quansu.heifengwuliu.repository.HomeRepository
+import com.quansu.heifengwuliu.repository.OneLoginRepository
+import com.quansu.heifengwuliu.vmodel.HomeVModel
+import com.quansu.heifengwuliu.vmodel.OneLoginVModel
 import com.ysnows.base.base.BRepository
-import com.ysnows.base.base.BViewModel
 import kotlinx.android.synthetic.main.activity_home.*
 import java.util.ArrayList
 
@@ -21,7 +24,7 @@ import java.util.ArrayList
  *Created by shihuiyun
  *on 2020/9/9
  */
-class HomeActivity : MBActivity<BViewModel<BRepository>, ActivityHomeBinding>() {
+class HomeActivity : MBActivity<HomeVModel, ActivityHomeBinding>() {
 
     private var mTitles = emptyArray<String>()
     // 未被选中的图标
@@ -49,6 +52,16 @@ class HomeActivity : MBActivity<BViewModel<BRepository>, ActivityHomeBinding>()
         initTab()
         tab_layout.currentTab = mIndex
         switchFragment(mIndex)
+      //  vm.getUserInfo();
+
+    }
+
+    override fun vmClass(): Class<HomeVModel> {
+        return HomeVModel::class.java
+    }
+
+    override fun createRepository(): BRepository {
+        return HomeRepository()
     }
 
     private fun initTab() {

+ 17 - 1
app/src/main/java/com/quansu/heifengwuliu/activity/OneLoginActivity.kt

@@ -1,5 +1,6 @@
 package com.quansu.heifengwuliu.activity
 
+import android.util.Log
 import com.hwangjr.rxbus.annotation.Subscribe
 import com.hwangjr.rxbus.annotation.Tag
 import com.quansu.heifengwuliu.base.MBActivity
@@ -35,10 +36,15 @@ class OneLoginActivity : MBActivity<OneLoginVModel, ActivityOneloginBinding>(){
         return OneLoginRepository()
     }
 
+    override val isRxbus: Boolean
+        get() = true
+
 
     @Subscribe(tags = [Tag(ConfigRx.ADD_ONELOGIN)])
     fun setOneLogin(token: String) {
-      vm.login(token)
+        Log.e("-shy-", "token1: "+token)
+        vm.oneLogin(token)
+
     }
 
     @Subscribe(tags = [Tag(ConfigRx.ONELOGIN_ERROR)])
@@ -73,5 +79,15 @@ class OneLoginActivity : MBActivity<OneLoginVModel, ActivityOneloginBinding>(){
         toast( bean.msg)
 
     }
+
+    @Subscribe(tags = [Tag(ConfigRx.ADD_SEND_CODE)])
+    fun setLoginCode(code: String) {
+        Log.e("-shy-", "wxcode2=: "+code)
+        //todo:去请求微信登录的接口
+
+        vm.login(code)
+    }
+
+
 }
 

+ 11 - 11
app/src/main/java/com/quansu/heifengwuliu/activity/PrivateCenterActivity.kt

@@ -40,19 +40,19 @@ class PrivateCenterActivity : MBActivity<PrivateCenterVModel, ActivityPrivateCen
         super.listeners()
 
         binding.laySettings.onClick {
-            CCRetrofit.instance()
-                    .with(this)
-                    .create(IApp::class.java)
-                    .settings()
-                    .subscribe()
+//            CCRetrofit.instance()
+//                    .with(this)
+//                    .create(IApp::class.java)
+//                    .settings()
+//                    .subscribe()
         }
 
         binding.layNote.onClick {
-            CCRetrofit.instance()
-                    .with(this)
-                    .create(IApp::class.java)
-                    .todoList()
-                    .subscribe()
+//            CCRetrofit.instance()
+//                    .with(this)
+//                    .create(IApp::class.java)
+//                    .todoList()
+//                    .subscribe()
         }
 
         binding.layAb.onClick {
@@ -85,4 +85,4 @@ class PrivateCenterActivity : MBActivity<PrivateCenterVModel, ActivityPrivateCen
     }
 
 
-}
+}

+ 7 - 0
app/src/main/java/com/quansu/heifengwuliu/component/CpApp.kt

@@ -1,6 +1,8 @@
 package com.quansu.heifengwuliu.component
 
+import android.util.Log
 import com.billy.cc.core.component.CC
+import com.billy.cc.core.component.CCResult
 import com.billy.cc.core.component.IComponent
 import com.hwangjr.rxbus.RxBus
 import com.quansu.heifengwuliu.config.ConfigRx
@@ -12,13 +14,18 @@ open class CpApp() : IComponent, BIComponent() {
 
      fun setLogin(cc: CC, token: String): Boolean {
 
+
          RxBus.get().post(ConfigRx.ADD_ONELOGIN, token)
 
+         CC.sendCCResult(cc.callId, CCResult.success())
+
         return false
     }
      fun isError(cc: CC, code: Int, msg: String): Boolean {
          val oneLoginBean = OneLoginBean(code, msg)
          RxBus.get().post(ConfigRx.ONELOGIN_ERROR, oneLoginBean)
+         CC.sendCCResult(cc.callId, CCResult.success())
+
          return false
     }
 

+ 2 - 2
app/src/main/java/com/quansu/heifengwuliu/config/Config.kt

@@ -4,7 +4,7 @@ import com.ysnows.base.config.IConfig
 
 class Config : IConfig {
     override fun baseUrl(): String? {
-        return "https://heifengwuliu.qs110.com/api/"
+        return "https://heifengwuliudev.qs110.com/"
     }
 
     override fun BBDCUrl(): String? {
@@ -42,4 +42,4 @@ class Config : IConfig {
     override fun UmengAppKey(): String {
         return "5f5603967823567fd8650597"
     }
-}
+}

+ 2 - 0
app/src/main/java/com/quansu/heifengwuliu/config/ConfigRx.kt

@@ -16,5 +16,7 @@ object ConfigRx {
 
     const val ONELOGIN_ERROR = "ONELOGIN_ERROR" //一键登录失败
 
+    const val ADD_SEND_CODE = "ADD_SEND_CODE" //微信登录的code
+
 
 }

+ 15 - 0
app/src/main/java/com/quansu/heifengwuliu/model/LoginBean.java

@@ -0,0 +1,15 @@
+package com.quansu.heifengwuliu.model;
+
+import com.ysnows.base.inter.IModel;
+
+/**
+ * Created by shihuiyun
+ * on 2020/9/10
+ */
+public class LoginBean implements IModel {
+    public String uid;
+    public String name;
+    public String mobile;
+    public String TOKEN;
+
+}

+ 12 - 0
app/src/main/java/com/quansu/heifengwuliu/model/SendSmsBean.java

@@ -0,0 +1,12 @@
+package com.quansu.heifengwuliu.model;
+
+import com.ysnows.base.inter.IModel;
+
+/**
+ * Created by shihuiyun
+ * on 2020/9/10
+ */
+public  class SendSmsBean implements IModel {
+
+    public String code;
+}

+ 31 - 0
app/src/main/java/com/quansu/heifengwuliu/repository/HomeRepository.kt

@@ -0,0 +1,31 @@
+package com.quansu.heifengwuliu.repository
+
+import android.annotation.SuppressLint
+import com.quansu.heifengwuliu.activity.HomeActivity
+import com.quansu.heifengwuliu.model.LoginBean
+import com.quansu.heifengwuliu.utils.net.NetEngine
+import com.tencent.mmkv.MMKV
+import com.ysnows.base.base.BRepository
+import com.ysnows.base.utils.UiSwitch
+
+class HomeRepository : BRepository() {
+    @SuppressLint("CheckResult")
+    fun login(token: String) {
+
+        lreq(NetEngine.service.wxLogin(token))
+                .doOnNext{
+                    if (it.ok(true)) {
+
+                        var bean: LoginBean =it.data() as LoginBean;
+                        MMKV.defaultMMKV().putString("token",bean.TOKEN)
+
+                        UiSwitch.single(context, HomeActivity::class.java)
+
+                    }
+                }
+                .subscribe();
+
+    }
+
+
+}

+ 48 - 19
app/src/main/java/com/quansu/heifengwuliu/repository/LoginRepository.kt

@@ -1,34 +1,63 @@
 package com.quansu.heifengwuliu.repository
 
 import android.annotation.SuppressLint
-import com.hwangjr.rxbus.RxBus
-import com.quansu.heifengwuliu.config.ConfigRx
-import com.quansu.heifengwuliu.model.User
+import com.quansu.heifengwuliu.R
+import com.quansu.heifengwuliu.activity.HomeActivity
+import com.quansu.heifengwuliu.model.LoginBean
 import com.quansu.heifengwuliu.utils.net.NetEngine
-import com.quansu.heifengwuliu.utils.net.Response
+import com.tencent.mmkv.MMKV
 import com.ysnows.base.base.BRepository
-import io.reactivex.ObservableSource
-import io.reactivex.functions.Function
+import com.ysnows.base.utils.UiSwitch
+
 
 class LoginRepository : BRepository() {
     @SuppressLint("CheckResult")
-    fun login(userName: String?, passWord: String?) {
-        lreq(NetEngine.service.login(userName, passWord))
-                .concatMap(Function<Response<Any>, ObservableSource<Response<User>>?> {
+    fun login(mobile: String?, passWord: String?) {
+
+        if (mobile.isNullOrEmpty()) {
+            toast(R.string.please_input_user_phone)
+            return
+        }
+        if (passWord.isNullOrEmpty()) {
+            toast(R.string.please_input_pwd)
+            return
+        }
+
+        lreq(NetEngine.service.login(mobile, passWord))
+                .doOnNext() {
                     if (it.ok(true)) {
-                        lreq(NetEngine.service.getUser())
-                    } else {
-                        null
-                    }
-                })
-                .doOnNext {
-                    it.data()?.save().apply {
-                        RxBus.get().post(ConfigRx.LOGIN, "settings")
-                        view()?.finishActivity()
+                        var bean: LoginBean =it.data() as LoginBean;
+
+                        MMKV.defaultMMKV().putString("token",bean.TOKEN)
+                        UiSwitch.single(context, HomeActivity::class.java)
                     }
                 }
                 .subscribe()
+
     }
 
+    @SuppressLint("CheckResult")
+    fun loginCode(mobile: String?, code: String?) {
+
+        if (mobile.isNullOrEmpty()) {
+            toast(R.string.please_input_user_phone)
+            return
+        }
+        if (code.isNullOrEmpty()) {
+            toast(R.string.please_input_code)
+            return
+        }
+        lreq(NetEngine.service.smsLogin(mobile, code))
+                .doOnNext() {
+                    if (it.ok(true)) {
+                        var bean: LoginBean =it.data() as LoginBean;
+
+                        MMKV.defaultMMKV().putString("token",bean.TOKEN)
+                        UiSwitch.single(context, HomeActivity::class.java)
+                    }
+                }
+                .subscribe()
+
+    }
 
-}
+}

+ 5 - 5
app/src/main/java/com/quansu/heifengwuliu/repository/OneLoginRepository.kt

@@ -2,7 +2,9 @@ package com.quansu.heifengwuliu.repository
 
 import android.annotation.SuppressLint
 import com.quansu.heifengwuliu.activity.HomeActivity
+import com.quansu.heifengwuliu.model.LoginBean
 import com.quansu.heifengwuliu.utils.net.NetEngine
+import com.tencent.mmkv.MMKV
 import com.ysnows.base.base.BRepository
 import com.ysnows.base.utils.UiSwitch
 
@@ -10,17 +12,15 @@ class OneLoginRepository : BRepository() {
     @SuppressLint("CheckResult")
     fun login(token: String) {
 
-        lreq(NetEngine.service.jiguangLogin(token))
+        lreq(NetEngine.service.wxLogin(token))
                 .doOnNext{
                     if (it.ok(true)) {
-                        //todo:保存token
 
-//                        S().putString("token", res.getToken())
+                        var bean: LoginBean =it.data() as LoginBean;
+                        MMKV.defaultMMKV().putString("token",bean.TOKEN)
 
                         UiSwitch.single(context, HomeActivity::class.java)
 
-                    }else{
-                        toast(it.msg())
                     }
                 }
                 .subscribe();

+ 18 - 35
app/src/main/java/com/quansu/heifengwuliu/repository/RegisterRepository.kt

@@ -1,59 +1,42 @@
 package com.quansu.heifengwuliu.repository
 
-import android.annotation.SuppressLint
 import com.quansu.heifengwuliu.R
-import com.quansu.heifengwuliu.model.User
+import com.quansu.heifengwuliu.activity.HomeActivity
+import com.quansu.heifengwuliu.model.LoginBean
 import com.quansu.heifengwuliu.utils.net.NetEngine
 import com.quansu.heifengwuliu.utils.net.Response
+import com.tencent.mmkv.MMKV
 import com.ysnows.base.base.BRepository
+import com.ysnows.base.utils.UiSwitch
 import io.reactivex.Observable
-import io.reactivex.functions.Function
 
 class RegisterRepository : BRepository() {
 
-    @SuppressLint("CheckResult")
-    fun login(userName: String?, passWord: String?) {
-        lreq(NetEngine.service.login(userName, passWord))
-                .concatMap(Function<Response<Any>, Observable<User>> {
-                    if (it.ok(true)) {
-                        lreq(NetEngine.service.getUser())
-                    }
-                    null
-                })
-                .doOnNext {
-                    it.save()
-                }
-                .subscribe()
-    }
 
-    fun register(phone: String?, code: String?, passWord: String?, passWordAgain: String?): Observable<Response<Any>>? {
-        if (phone.isNullOrEmpty()) {
+    fun register(name: String?, mobile: String?, code: String?, type: String?): Observable<Response<Any>>? {
+        if (name.isNullOrEmpty()) {
             toast(R.string.please_input_user_name)
             return null
         }
-        if (code.isNullOrEmpty()) {
-            toast(R.string.please_input_code)
+        if (mobile.isNullOrEmpty()) {
+            toast(R.string.please_input_user_phone)
             return null
         }
-        if (passWord.isNullOrEmpty()) {
-            toast(R.string.please_input_pwd)
-            return null
-        }
-        if (passWordAgain.isNullOrEmpty()) {
-            toast(R.string.please_input_pwd_twice)
-            return null
-        }
-
-        if (passWord != passWordAgain) {
-            toast(R.string.password_not_equal)
+        if (code.isNullOrEmpty()) {
+            toast(R.string.please_input_code)
             return null
         }
 
         return Observable.create { emitter ->
-            lreq(NetEngine.service.register(phone, code, passWord))
+            lreq(NetEngine.service.register(name, mobile, code,type))
                     .doOnNext() {
                         if (it.ok(true)) {
-                            emitter.onNext(it)
+                            var bean: LoginBean =it.data() as LoginBean;
+
+                            MMKV.defaultMMKV().putString("token",bean.TOKEN)
+                            UiSwitch.single(context,HomeActivity::class.java)
+//                            emitter.onNext(it)
+
                         }
                     }
                     .subscribe()
@@ -62,4 +45,4 @@ class RegisterRepository : BRepository() {
     }
 
 
-}
+}

+ 88 - 0
app/src/main/java/com/quansu/heifengwuliu/utils/WeChatUtil.kt

@@ -0,0 +1,88 @@
+package com.quansu.heifengwuliu.utils
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import com.tencent.mm.opensdk.constants.ConstantsAPI
+import com.tencent.mm.opensdk.modelmsg.SendAuth
+import com.tencent.mm.opensdk.openapi.IWXAPI
+import com.tencent.mm.opensdk.openapi.WXAPIFactory
+import com.ysnows.base.utils.Toasts
+
+/**
+ *Created by shihuiyun
+ *on 2020/9/10
+ */
+ class WeChatUtil {
+
+
+    companion object {
+
+        //微信id
+        //正式 wx57c846e4b0571008
+        //测试 wxa045c3e9012bdd56
+        var WECHAT_APP_ID = "wx0d443555978c1ca0" //正式的
+        var iwxapi: IWXAPI? = null
+
+        fun regToWx(mContext: Context) {
+
+            val mWXApi: IWXAPI = WXAPIFactory.createWXAPI(mContext, WECHAT_APP_ID, true)
+            mWXApi.registerApp(WECHAT_APP_ID)
+            if (null == iwxapi) {
+                iwxapi = mWXApi
+            }
+            //建议动态监听微信启动广播进行注册到微信
+            mContext.registerReceiver(object : BroadcastReceiver() {
+                override fun onReceive(context: Context, intent: Intent) {
+                    // 将该app注册到微信
+                    iwxapi!!.registerApp(WECHAT_APP_ID)
+                }
+            }, IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP))
+        }
+
+        /**
+         * 绑定微信登录
+         *
+         * @param context
+         */
+        fun setWXLoigin(context: Context?) {
+            if (isWeixinAvilible(context)) {
+
+                if (null == iwxapi) {
+                    val mWXApi: IWXAPI = WXAPIFactory.createWXAPI(context, null)
+                    mWXApi.registerApp(WECHAT_APP_ID)
+                    iwxapi = mWXApi
+                }
+
+                val req = SendAuth.Req()
+                req.scope = "snsapi_userinfo"
+                req.state = "wechat_sdk_demo_test"
+                iwxapi!!.sendReq(req)
+            } else {
+                Toasts.toast(context, "您未安装微信或微信版本过低,无法分享")
+            }
+        }
+
+
+        /**
+         * 判断是否安装了微信
+         *
+         * @param context
+         *
+         * @return
+         */
+        fun isWeixinAvilible(context: Context?): Boolean {
+
+            if (null == iwxapi) {
+                val mWXApi: IWXAPI = WXAPIFactory.createWXAPI(context, null)
+                mWXApi.registerApp(WECHAT_APP_ID)
+                iwxapi = mWXApi
+            }
+            return iwxapi!!.isWXAppInstalled
+        }
+
+
+    }
+
+}

+ 52 - 12
app/src/main/java/com/quansu/heifengwuliu/utils/net/ApiService.kt

@@ -1,5 +1,7 @@
 package com.quansu.heifengwuliu.utils.net
 
+import com.quansu.heifengwuliu.model.LoginBean
+import com.quansu.heifengwuliu.model.SendSmsBean
 import com.quansu.heifengwuliu.model.Todo
 import com.quansu.heifengwuliu.model.User
 import io.reactivex.Observable
@@ -14,9 +16,6 @@ interface ApiService {
     @GET("user")
     fun getUser(): Observable<Response<User>>
 
-    @POST("login")
-    @FormUrlEncoded
-    fun login(@Field("user_mobile") user_name: String?, @Field("pwd") pwd: String?): Observable<Response<Any>>
 
     @POST("task/save")
     @FormUrlEncoded
@@ -26,13 +25,6 @@ interface ApiService {
     @FormUrlEncoded
     fun alipayPreOrder(@Field("vip_level") vip_level: Int): Observable<Response<String>>
 
-    @POST("login/register_sms")
-    @FormUrlEncoded
-    fun getRegisterCode(@Field("user_mobile") user_mobile: String?): Observable<Response<Any>>
-
-    @POST("login/register")
-    @FormUrlEncoded
-    fun register(@Field("user_mobile") user_mobile: String?, @Field("code") code: String?, @Field("pwd") pwd: String?): Observable<Response<Any>>
 
 
     @GET("task/ls")
@@ -66,14 +58,62 @@ interface ApiService {
     fun getFuncIcon(@Query("host") host: String?): Observable<Response<String>>
 
 //    ------------
+
+    /**
+     * 获取验证码
+     *
+     * @return
+     */
+    @POST("api/index/sendSms")
+    @FormUrlEncoded
+    fun getRegisterCode(@Field("mobile") mobile: String?): Observable<Response<SendSmsBean>>
+
+
     /**
      * 极光一键登录
      *
      * @return
      */
-    @POST("login")
+    @POST("api/index/jiguangLogin")
+    @FormUrlEncoded
+    fun jiguangLogin(@Field("loginToken") loginToken: String): Observable<Response<LoginBean>>
+
+    /**
+     * 注册
+     *
+     * @return
+     */
+
+    @POST("api/index/register")
     @FormUrlEncoded
-    fun jiguangLogin(@Field("loginToken") loginToken: String): Observable<Response<Any>>
+    fun register(@Field("name") name: String?, @Field("mobile") mobile: String?, @Field("code") code: String?,@Field("type") type: String?): Observable<Response<LoginBean>>
 
 
+    /**
+     *密码登录
+     *
+     * @return
+     */
+    @POST("api/index/pwdLogin")
+    @FormUrlEncoded
+    fun login(@Field("mobile") mobile: String?, @Field("pwd") pwd: String?): Observable<Response<LoginBean>>
+
+    /**
+     *短信登录
+     *
+     * @return
+     */
+    @POST("api/index/smslogin")
+    @FormUrlEncoded
+    fun smsLogin(@Field("mobile") mobile: String?, @Field("code") code: String?): Observable<Response<LoginBean>>
+
+    /**
+     *微信登录
+     *
+     * @return
+     */
+    @POST("api/index/wxLogin")
+    @FormUrlEncoded
+    fun wxLogin(@Field("code") code: String?): Observable<Response<LoginBean>>
+
 }

+ 8 - 8
app/src/main/java/com/quansu/heifengwuliu/utils/net/Response.kt

@@ -5,15 +5,15 @@ import com.ysnows.base.net.IResponse
 import com.ysnows.base.utils.Toasts
 
 class Response<D>(
-        private val code: Int = 0,
-        private val msg: String? = null,
+        private val status: Int = 0,
+        private val message: String? = null,
         private val total: Int = 0,
         private val count: Int = 10,
-        private val data: D? = null
+        private val datas: D? = null
 ) : IResponse<D> {
 
     override fun ok(showError: Boolean): Boolean {
-        val ok = code == 1
+        val ok = status == 1
 
         if (showError && !ok) {
             Toasts.toast(BApp.instance(), msg())
@@ -22,7 +22,7 @@ class Response<D>(
     }
 
     override fun code(): Int {
-        return code
+        return status
     }
 
     override fun count(): Int {
@@ -34,11 +34,11 @@ class Response<D>(
     }
 
     override fun msg(): String? {
-        return msg
+        return message
     }
 
     override fun data(): D? {
-        return data
+        return datas
     }
 
     override fun more(page: Int): Boolean {
@@ -48,4 +48,4 @@ class Response<D>(
     override fun empty(): Boolean {
         return total() <= 0
     }
-}
+}

+ 17 - 0
app/src/main/java/com/quansu/heifengwuliu/vmodel/HomeVModel.kt

@@ -0,0 +1,17 @@
+package com.quansu.heifengwuliu.vmodel
+
+import com.quansu.heifengwuliu.repository.HomeRepository
+import com.ysnows.base.base.BViewModel
+
+open class HomeVModel : BViewModel<HomeRepository>() {
+
+
+
+    fun getUserInfo() {
+        repository().login("")
+    }
+
+
+
+
+}

+ 73 - 4
app/src/main/java/com/quansu/heifengwuliu/vmodel/LoginVModel.kt

@@ -4,8 +4,18 @@ import android.view.View
 import androidx.databinding.Bindable
 import androidx.lifecycle.MutableLiveData
 import com.quansu.heifengwuliu.BR
+import com.quansu.heifengwuliu.R
+import com.quansu.heifengwuliu.config.ConfigMMKV
+import com.quansu.heifengwuliu.model.SendSmsBean
 import com.quansu.heifengwuliu.repository.LoginRepository
+import com.quansu.heifengwuliu.utils.net.NetEngine
 import com.ysnows.base.base.BViewModel
+import com.ysnows.base.utils.MMKVManager
+import io.reactivex.Observable
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.disposables.Disposable
+import io.reactivex.schedulers.Schedulers
+import java.util.concurrent.TimeUnit
 
 open class LoginVModel : BViewModel<LoginRepository>() {
 
@@ -13,6 +23,10 @@ open class LoginVModel : BViewModel<LoginRepository>() {
     var passwordVisiblity = MutableLiveData<Int>()
     var codeVisibility = MutableLiveData<Int>()
     var switchType= MutableLiveData<String>()
+
+    var codeTip: MutableLiveData<String> = MutableLiveData(getCodeStr)
+    private var disposable: Disposable? = null
+
     private var showType=true
 
     init {
@@ -21,13 +35,68 @@ open class LoginVModel : BViewModel<LoginRepository>() {
         switchType.value="使用密码登录"
     }
 
+    companion object {
+        const val time = 60
+        var timeStart: Long = 1
+        const val getCodeStr = "获取验证码"
+
+
+
+    }
+
+
+
+    fun getSmsCode(start: Long = 1) {
+        if (codeTip.value != getCodeStr) {
+            return
+        }
+
+        if (phone.isNullOrEmpty()) {
+            toast(R.string.please_input_user_phone)
+            return
+        }
+
+        repository().lreq(NetEngine.service.getRegisterCode(phone))
+                .doOnNext() { res ->
+                    if (res.ok(true)) {
+                        var bean: SendSmsBean = res.data() as SendSmsBean
+
+                        code=bean.code
+                        startTimer(start)
+                    }
+                }
+                .subscribe()
+    }
+
+    private fun startTimer(start: Long = 1) {
+        disposeTimer()
+        disposable = Observable.intervalRange(start, time - start + 1, 0, 1, TimeUnit.SECONDS)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .doOnNext {
+                    timeStart = it
+                    codeTip.value = if (time - it > 0) "${time - it}秒后重发" else {
+                        getCodeStr
+                    }
+                }
+                .doOnComplete() {
+                    MMKVManager.instance().encode(ConfigMMKV.REGISTER_TIME_START, 60)
+                }
+                .doOnDispose() {
+                    MMKVManager.instance().encode(ConfigMMKV.REGISTER_TIME_START, 60)
+                }
+                .subscribe()
+    }
 
 
+    private fun disposeTimer() {
+        disposable?.isDisposed ?: disposable?.dispose()
+    }
     @Bindable
-    open var userName: String? = null
+    open var phone: String? = null
         set(value) {
             field = value
-            notifyPropertyChanged(BR.userName)
+            notifyPropertyChanged(BR.phone)
         }
 
 
@@ -51,10 +120,10 @@ open class LoginVModel : BViewModel<LoginRepository>() {
         //todo:
         if(showType){//验证码登录
 
-            repository().login(userName, code)
+            repository().loginCode(phone, code)
 
         }else{//密码登录
-            repository().login(userName, passWord)
+            repository().login(phone, passWord)
 
         }
 

+ 32 - 1
app/src/main/java/com/quansu/heifengwuliu/vmodel/OneLoginVModel.kt

@@ -1,16 +1,22 @@
 package com.quansu.heifengwuliu.vmodel
 
+import com.quansu.heifengwuliu.activity.HomeActivity
+import com.quansu.heifengwuliu.model.LoginBean
+import com.quansu.heifengwuliu.model.SendSmsBean
 import com.quansu.heifengwuliu.repository.OneLoginRepository
+import com.quansu.heifengwuliu.utils.WeChatUtil
+import com.quansu.heifengwuliu.utils.net.NetEngine
+import com.tencent.mmkv.MMKV
 import com.yanzhenjie.permission.AndPermission
 import com.yanzhenjie.permission.runtime.Permission
 import com.ysnows.base.base.BViewModel
 import com.ysnows.base.ccretrofit.CCRetrofit
 import com.ysnows.base.route.IJpush
+import com.ysnows.base.utils.UiSwitch
 
 open class OneLoginVModel : BViewModel<OneLoginRepository>() {
 
     fun clickLogin() {
-        toast("一键登录开始")
         AndPermission.with(repository().context)
                 .runtime()
                 .permission(Permission.WRITE_EXTERNAL_STORAGE,
@@ -30,9 +36,34 @@ open class OneLoginVModel : BViewModel<OneLoginRepository>() {
     }
 
 
+
     fun login(token: String) {
         repository().login(token)
     }
 
+    fun wxLogin(){
+
+        //微信登录
+        WeChatUtil.setWXLoigin(repository().context)
+
+    }
+
+    fun oneLogin(code:String){
+        repository().lreq(NetEngine.service.jiguangLogin(code))
+                .doOnNext() { res ->
+                    if (res.ok(true)) {
+                        //保存token
+
+                        var bean: LoginBean =res.data() as LoginBean;
+
+                        MMKV.defaultMMKV().putString("token",bean.TOKEN)
+
+                        UiSwitch.single(repository().context,HomeActivity::class.java)
+
+                    }
+                }
+                .subscribe()
+    }
+
 
 }

+ 9 - 16
app/src/main/java/com/quansu/heifengwuliu/vmodel/RegisterVModel.kt

@@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData
 import com.quansu.heifengwuliu.BR
 import com.quansu.heifengwuliu.R
 import com.quansu.heifengwuliu.config.ConfigMMKV
+import com.quansu.heifengwuliu.model.SendSmsBean
 import com.quansu.heifengwuliu.repository.RegisterRepository
 import com.quansu.heifengwuliu.utils.net.NetEngine
 import com.ysnows.base.base.BViewModel
@@ -23,7 +24,6 @@ open class RegisterVModel : BViewModel<RegisterRepository>() {
 
 
 
-
     override fun init() {
         super.init()
         timeStart = MMKVManager.instance().decodeLong(ConfigMMKV.REGISTER_TIME_START, 60)
@@ -56,19 +56,7 @@ open class RegisterVModel : BViewModel<RegisterRepository>() {
         }
 
 
-//    @Bindable
-//    open var passWord: String? = null
-//        set(value) {
-//            field = value
-//            notifyPropertyChanged(BR.passWord)
-//        }
-//
-//    @Bindable
-//    open var passWordAgain: String? = null
-//        set(value) {
-//            field = value
-//            notifyPropertyChanged(BR.passWordAgain)
-//        }
+
 
 
     fun register() {
@@ -77,10 +65,10 @@ open class RegisterVModel : BViewModel<RegisterRepository>() {
 
        // var ss=showType.value//choseType
 
-        var type=if(showType.value!!)"1" else "2"
+        var type=if(showType.value!!)"2" else "1"
 
         repository()
-                .register(phone, code, userName, type)
+                .register(userName,phone, code, type)
                 ?.doOnNext() {
                     toast(it.msg())
                 }
@@ -106,6 +94,9 @@ open class RegisterVModel : BViewModel<RegisterRepository>() {
         repository().lreq(NetEngine.service.getRegisterCode(phone))
                 .doOnNext() { res ->
                     if (res.ok(true)) {
+                        var bean: SendSmsBean = res.data() as SendSmsBean
+
+                        code=bean.code
                         startTimer(start)
                     }
                 }
@@ -145,6 +136,8 @@ open class RegisterVModel : BViewModel<RegisterRepository>() {
 
         const val getShow = true
 
+
+
     }
 
     private fun disposeTimer() {

+ 82 - 0
app/src/main/java/com/quansu/heifengwuliu/wxapi/WXEntryActivity.kt

@@ -0,0 +1,82 @@
+package com.quansu.heifengwuliu.wxapi
+
+import android.app.Activity
+import android.os.Bundle
+import android.util.Log
+import com.hwangjr.rxbus.RxBus
+import com.quansu.heifengwuliu.config.ConfigRx
+import com.quansu.heifengwuliu.utils.WeChatUtil
+import com.tencent.mm.opensdk.constants.ConstantsAPI
+import com.tencent.mm.opensdk.modelbase.BaseReq
+import com.tencent.mm.opensdk.modelbase.BaseResp
+import com.tencent.mm.opensdk.modelmsg.SendAuth
+import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler
+import com.tencent.mm.opensdk.openapi.WXAPIFactory
+import com.ysnows.base.utils.Toasts
+import kotlin.math.log
+
+/**
+ *Created by shihuiyun
+ *on 2020/9/10
+ */
+class WXEntryActivity : Activity() , IWXAPIEventHandler{
+
+    override fun onResp(p0: BaseResp?) {
+
+//    override fun onResp(p0: BaseResp) {
+        //微信主动请求我们
+        prompt()
+    }
+
+    override fun onReq(baseResp: BaseReq?) {
+
+//    override fun onReq(baseResp: BaseReq) {
+
+        Log.e("-shy-", "wxcode=: "+baseResp.hashCode())
+
+        when (baseResp.hashCode()) {
+            BaseResp.ErrCode.ERR_OK -> {
+                if (baseResp is SendAuth.Resp) {
+                    //微信登录的回调
+                    val newResp = baseResp as SendAuth.Resp
+                    //获取微信传回的code
+                    val code = newResp.code
+
+                    Log.e("-shy-", "wxcode1=: "+code)
+                    RxBus.get().post(ConfigRx.ADD_SEND_CODE, code)
+
+                    return
+                }
+                if (baseResp?.getType() == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
+                    Toasts.toast(this@WXEntryActivity, "分享成功")
+                }
+            }
+            BaseResp.ErrCode.ERR_USER_CANCEL -> {
+            }
+            BaseResp.ErrCode.ERR_AUTH_DENIED -> {
+            }
+            else -> {
+            }
+        }
+
+        prompt()
+    }
+
+    fun prompt() {
+        finish()
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        Log.e("onCreate", "onCreate: " )
+        RxBus.get().register(this)
+        val mWXApi = WXAPIFactory.createWXAPI(this, WeChatUtil.WECHAT_APP_ID, true)
+        mWXApi.handleIntent(intent, this)
+
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+        RxBus.get().unregister(this)
+    }
+}

+ 4 - 4
app/src/main/res/layout/activity_login.xml

@@ -70,9 +70,9 @@
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:background="@null"
-                android:hint="@string/please_input_user_name"
+                android:hint="@string/please_input_user_phone"
                 android:inputType="phone"
-                android:text="@={vm.userName}"
+                android:text="@={vm.phone}"
                 android:textSize="@dimen/sp_15" />
 
         </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout >
@@ -108,7 +108,6 @@
                 android:layout_height="match_parent"
                 android:background="@null"
                 android:hint="@string/please_input_code"
-                android:inputType="textPassword"
                 android:text="@={vm.code}"
                 android:textSize="@dimen/sp_15" />
 
@@ -122,7 +121,8 @@
                 android:layout_height="30dp"
                 android:layout_marginLeft="24dp"
                 android:gravity="center_vertical"
-                android:text="获取验证码"
+                android:onClick="@{v->vm.getSmsCode(1)}"
+                android:text="@{vm.codeTip,default=@string/get_sms_code}"
                 android:textColor="#4B3200"
                 android:textSize="10sp" />
 

+ 2 - 0
app/src/main/res/layout/activity_onelogin.xml

@@ -85,6 +85,8 @@
             app:layout_constraintRight_toRightOf="parent"
             app:layout_constraintBottom_toBottomOf="parent"
             android:layout_marginBottom="50dp"
+            android:onClick="@{v->vm.wxLogin()}"
+
             android:layout_height="wrap_content">
 
             <ImageView

+ 1 - 2
app/src/main/res/layout/activity_register.xml

@@ -65,8 +65,7 @@
                 android:layout_height="match_parent"
                 android:background="@null"
                 android:hint="@string/please_input_user_name"
-                android:inputType="phone"
-                android:text="@={vm.phone}"
+                android:text="@={vm.userName}"
                 android:textSize="@dimen/sp_15" />
 
         </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout >

+ 2 - 0
base/build.gradle

@@ -42,5 +42,7 @@ android {
 dependencies {
     api fileTree(include: ['*.jar'], dir: 'libs')
     implementation 'com.billy.android:cc:2.1.5'
+    debugImplementation 'com.readystatesoftware.chuck:library:1.1.0'
+    releaseImplementation 'com.readystatesoftware.chuck:library-no-op:1.1.0'
 
 }

+ 3 - 1
base/src/main/java/com/ysnows/base/base/BRepository.kt

@@ -2,6 +2,7 @@ package com.ysnows.base.base
 
 import android.content.Context
 import android.os.Bundle
+import android.util.Log
 import com.socks.library.KLog
 import com.trello.rxlifecycle2.components.RxFragment
 import com.trello.rxlifecycle2.components.support.RxAppCompatActivity
@@ -114,6 +115,7 @@ open class BRepository : IRepository {
                     .subscribe(object : Observer<T> {
                         override fun onSubscribe(d: Disposable) {}
                         override fun onNext(iResponse: T) {
+
                             if (iResponse?.code() == NetCode.CODE_OFFLINE) {
                                 if (pageReq) {
                                     bView?.loadService?.showCallback(ToLoginCallback::class.java)
@@ -174,4 +176,4 @@ open class BRepository : IRepository {
     override fun toast(msgId: Int) {
         Toasts.toast(view()!!.context(), msgId)
     }
-}
+}

+ 1 - 1
base/src/main/java/com/ysnows/base/net/BHeaderInterceptor.java

@@ -18,7 +18,7 @@ public class BHeaderInterceptor implements Interceptor {
         Request request = chain.request().newBuilder()
                 .addHeader("User-Agent", "type/android;app_version_code/" + BuildConfig.VERSION_CODE + ";app_version_name/" + BuildConfig.VERSION_NAME + ";phone_brand/" + Build.BRAND + ";phone_model/" + Build.MODEL + ";system_version_code/" + Build.VERSION.SDK_INT + ";system_version_name/" + Build.VERSION.RELEASE)
                 .addHeader("Content-Type", "application/json")
-                .addHeader("token", MMKV.defaultMMKV().decodeString("token", ""))
+                .addHeader("X-TOKEN", MMKV.defaultMMKV().decodeString("token", ""))
                 .build();
 
         return chain.proceed(request);

+ 4 - 0
base/src/main/java/com/ysnows/base/net/NetEngine.java

@@ -1,6 +1,9 @@
 package com.ysnows.base.net;
 
 
+import com.readystatesoftware.chuck.ChuckInterceptor;
+import com.ysnows.base.base.BApp;
+
 import java.util.WeakHashMap;
 import java.util.concurrent.TimeUnit;
 
@@ -45,6 +48,7 @@ public class NetEngine {
                     .writeTimeout(156760, TimeUnit.MILLISECONDS)
                     .connectTimeout(15676, TimeUnit.MILLISECONDS)
                     .retryOnConnectionFailure(true)
+                   // .addInterceptor(new ChuckInterceptor( BApp.instance()))
                     .cookieJar(new BCookieJar())
                     .addInterceptor(new BHeaderInterceptor());
 

+ 0 - 13
base/src/main/java/com/ysnows/base/route/HeiFengName.kt

@@ -1,13 +0,0 @@
-package com.ysnows.base.route
-
-import com.billy.cc.core.component.CCResult
-import com.ysnows.base.ccretrofit.IRoute
-import com.ysnows.base.ccretrofit.annotation.Param
-import io.reactivex.Observable
-
-interface HeiFengName : IRoute {
-
-    fun setLogin(@Param("token") token: String): Observable<CCResult>
-    fun isError(@Param("code") code: Int,@Param("msg") msg: String):Observable<CCResult>
-
-}

+ 4 - 4
base/src/main/java/com/ysnows/base/route/IApp.kt

@@ -6,7 +6,7 @@ import com.ysnows.base.ccretrofit.annotation.Param
 import io.reactivex.Observable
 
 interface IApp : IRoute {
-    fun todoList(): Observable<CCResult>
-    fun settings(): Observable<CCResult>
-    fun translate(@Param("query") query: String?): Observable<CCResult>
-}
+    fun setLogin(@Param("token") token: String): Observable<CCResult>
+    fun isError(@Param("code") code: Int,@Param("msg") msg: String):Observable<CCResult>
+
+}

+ 1 - 1
jpush/build.gradle

@@ -14,7 +14,7 @@ android {
         multiDexEnabled true
         manifestPlaceholders = [
                 JPUSH_PKGNAME : 'com.quansu.heifengwuliu',
-                JPUSH_APPKEY : "30244e1e645c855996b5e516",//值来自开发者平台取得的AppKey
+                JPUSH_APPKEY : "fe6707d0979ba5e2059b8fb9",//值来自开发者平台取得的AppKey
                 JPUSH_CHANNEL: "default_developer",
         ]
         ndk {

+ 6 - 3
jpush/src/main/java/com/quansu/jpush/componnent/CpJpush.kt

@@ -7,7 +7,7 @@ import com.billy.cc.core.component.CCResult
 import com.billy.cc.core.component.IComponent
 import com.ysnows.base.ccextension.BIComponent
 import com.ysnows.base.ccretrofit.CCRetrofit
-import com.ysnows.base.route.HeiFengName
+import com.ysnows.base.route.IApp
 
 
 /**
@@ -28,6 +28,9 @@ class CpJpush : BIComponent() , IComponent  {
         return false
     }
     fun isLogin(cc: CC): Boolean {
+
+        Log.d("jpush", "一键登录开始")
+
         val uiConfig = JVerifyUIConfig.Builder()
                 .setAuthBGImgPath("main_bg")
                 .setNavColor(-0x14208e)
@@ -74,14 +77,14 @@ class CpJpush : BIComponent() , IComponent  {
             if (code == 6000) {
 
                 CCRetrofit.instance()
-                        .create(HeiFengName::class.java)
+                        .create(IApp::class.java)
                         .setLogin(content)
                         .subscribe()
                 Log.d("shy", "code=$code, token=$content ,operator=$operator")
             } else {
                 Log.d("shy", "code=$code, message=$content")
                 CCRetrofit.instance()
-                        .create(HeiFengName::class.java)
+                        .create(IApp::class.java)
                         .isError(code, content)
                         .subscribe()
             }