Pārlūkot izejas kodu

集成三方登陆

316044749 7 gadi atpakaļ
vecāks
revīzija
e987987d95

+ 88 - 17
app/src/main/java/com/ynstkz/shitu/android/activity/LoginActivity.java

@@ -1,11 +1,11 @@
 package com.ynstkz.shitu.android.activity;
 
+import android.app.ProgressDialog;
 import android.content.Intent;
 import android.os.Build;
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 import android.widget.EditText;
@@ -63,7 +63,7 @@ public class LoginActivity extends TitleBarActivity {
     @Bind(R.id.rl_login_sina)
     RelativeLayout rlLoginSina;
 
-    private UmengLoginHelper mLogin;
+    private ProgressDialog progressDialog;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -137,7 +137,7 @@ public class LoginActivity extends TitleBarActivity {
         rlLoginWx.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                threeLogin(UmengLoginHelper.WX);
+                threeAuthorization(UmengLoginHelper.WX);
             }
         });
 
@@ -147,7 +147,7 @@ public class LoginActivity extends TitleBarActivity {
         rlLoginQq.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                threeLogin(UmengLoginHelper.QQ);
+                threeAuthorization(UmengLoginHelper.QQ);
             }
         });
 
@@ -157,7 +157,7 @@ public class LoginActivity extends TitleBarActivity {
         rlLoginSina.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View view) {
-                threeLogin(UmengLoginHelper.SINA);
+                threeAuthorization(UmengLoginHelper.SINA);
             }
         });
     }
@@ -187,14 +187,7 @@ public class LoginActivity extends TitleBarActivity {
                 if (loginBean != null) {
                     if ("200".equals(loginBean.getCode())) {
                         if (loginBean.getData() != null) {
-
-                            SharedPreferencesUtils.setLogin(true);
-                            SharedPreferencesUtils.saveToken(loginBean.getData().getToken());
-                            SharedPreferencesUtils.saveUserId(loginBean.getData().getUserId());
-
-                            showToast(loginBean.getMsg());
-                            EventBus.getDefault().post(new LoginEvent());
-                            finish();
+                            loginSuccess(loginBean);
                         }
                     } else {
                         showToast(loginBean.getMsg());
@@ -205,14 +198,24 @@ public class LoginActivity extends TitleBarActivity {
     }
 
     /**
-     *
+     *第三方登陆
      */
-    private void threeLogin(String type){
+    private void threeAuthorization(final String type){
 
-        mLogin = new UmengLoginHelper(LoginActivity.this, new UmengLoginHelper.Callback() {
+        progressDialog = new ProgressDialog(this);
+        progressDialog.setMessage("正在请求授权...");
+        progressDialog.show();
+
+        UmengLoginHelper mLogin = new UmengLoginHelper(LoginActivity.this, new UmengLoginHelper.Callback() {
             @Override
             public void onComplete(Map<String, String> data) {
-                Log.d("login", data.toString());
+                if(type.equals(UmengLoginHelper.QQ)){
+                    thirdLogin(data.get("uid"), "qq");
+                } else if (type.equals(UmengLoginHelper.WX)){
+                    thirdLogin(data.get("uid"), "weixin");
+                } else if (type.equals(UmengLoginHelper.QQ)) {
+                    thirdLogin(data.get("uid"), "weibo");
+                }
             }
 
             @Override
@@ -229,6 +232,72 @@ public class LoginActivity extends TitleBarActivity {
     }
 
     /**
+     * 三方登陆
+     * @param thirdId
+     * @param thirdType
+     */
+    private void thirdLogin(final String thirdId, final String thirdType){
+
+        if(progressDialog != null){
+            progressDialog.setMessage("正在登录...");
+        }
+
+        RequestGroup.thirdLogin(thirdId, thirdType, new Callback() {
+            @Override
+            public Object parseNetworkResponse(Response response, int id) throws Exception {
+                return new Gson().fromJson(response.body().string(), LoginBean.class);
+            }
+
+            @Override
+            public void onError(Call call, Exception e, int id) {
+                if(progressDialog != null){
+                    progressDialog.dismiss();
+                }
+                showToast(e.getMessage());
+            }
+
+            @Override
+            public void onResponse(Object response, int id) {
+                if(progressDialog != null){
+                    progressDialog.dismiss();
+                }
+                LoginBean loginBean = (LoginBean)response;
+                if(loginBean != null){
+                    if("200".equals(loginBean.getCode())){
+                        if(loginBean.getData() != null){
+                            boolean isBind = loginBean.getData().isIsBind();
+                            if(isBind){
+                                loginSuccess(loginBean);
+                            } else {
+                                Intent intent = new Intent(LoginActivity.this, RegisterActivity.class);
+                                intent.putExtra("thirdId", thirdId);
+                                intent.putExtra("thirdType", thirdType);
+                                startActivity(intent);
+                            }
+                        }
+                    } else {
+                        showToast(loginBean.getMsg());
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * 登陆成功
+     * @param loginBean
+     */
+    private void loginSuccess(LoginBean loginBean){
+        SharedPreferencesUtils.setLogin(true);
+        SharedPreferencesUtils.saveToken(loginBean.getData().getToken());
+        SharedPreferencesUtils.saveUserId(loginBean.getData().getUserId());
+
+        showToast(loginBean.getMsg());
+        EventBus.getDefault().post(new LoginEvent());
+        finish();
+    }
+
+    /**
      * 校验数据
      *
      * @param userName
@@ -247,6 +316,8 @@ public class LoginActivity extends TitleBarActivity {
         return true;
     }
 
+
+
     @Subscribe(threadMode = ThreadMode.MAIN)
     public void onMessageEvent(RegisterSuccessEvent event) {
         finish();

+ 8 - 1
app/src/main/java/com/ynstkz/shitu/android/activity/RegisterActivity.java

@@ -45,6 +45,8 @@ public class RegisterActivity extends TitleBarActivity implements VerifyCodeCall
     TextView tvVerifycode;
 
     String phoneNumber;
+    private String thirdId;
+    private String thirdType;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -68,7 +70,8 @@ public class RegisterActivity extends TitleBarActivity implements VerifyCodeCall
     }
 
     private void initData() {
-
+        thirdId = getIntent().getStringExtra("thirdId");
+        thirdType = getIntent().getStringExtra("thirdType");
     }
 
     private void setListener() {
@@ -125,6 +128,10 @@ public class RegisterActivity extends TitleBarActivity implements VerifyCodeCall
     private void nextEvent(String phoneNumber) {
         Intent intent = new Intent(RegisterActivity.this, RegisterSubmitActivity.class);
         intent.putExtra("phoneNumber", phoneNumber);
+        if(!TextUtils.isEmpty(thirdId) && !TextUtils.isEmpty(thirdType)){
+            intent.putExtra("thirdId", thirdId);
+            intent.putExtra("thirdType", thirdType);
+        }
         startActivity(intent);
     }
 

+ 42 - 1
app/src/main/java/com/ynstkz/shitu/android/activity/RegisterSubmitActivity.java

@@ -14,6 +14,7 @@ import android.widget.TextView;
 import com.common.library.okhttp.callback.Callback;
 import com.google.gson.Gson;
 import com.ynstkz.shitu.android.R;
+import com.ynstkz.shitu.android.base.BaseBean;
 import com.ynstkz.shitu.android.base.TitleBarActivity;
 import com.ynstkz.shitu.android.bean.RegisterBean;
 import com.ynstkz.shitu.android.data.RequestGroup;
@@ -48,6 +49,8 @@ public class RegisterSubmitActivity extends TitleBarActivity {
     Button btnRegister;
 
     private String phoneNumber;
+    private String thirdId;
+    private String thirdType;
 
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -72,6 +75,8 @@ public class RegisterSubmitActivity extends TitleBarActivity {
 
     private void initData(){
         phoneNumber = getIntent().getStringExtra("phoneNumber");
+        thirdId = getIntent().getStringExtra("thirdId");
+        thirdType = getIntent().getStringExtra("thirdType");
     }
 
     private void setListener(){
@@ -126,7 +131,11 @@ public class RegisterSubmitActivity extends TitleBarActivity {
                             SharedPreferencesUtils.saveToken(bean.getData().getToken());
                             SharedPreferencesUtils.saveUserId(bean.getData().getUserId());
 
-                            finish();
+                            if(!TextUtils.isEmpty(thirdId) && !TextUtils.isEmpty(thirdType)){
+                                thirdBind(thirdId, thirdType);
+                            } else {
+                                finish();
+                            }
                         }
                     } else {
                         showToast(bean.getMsg());
@@ -171,4 +180,36 @@ public class RegisterSubmitActivity extends TitleBarActivity {
         }
         return true;
     }
+
+    /**
+     * 三方账号绑定
+     * @param thirdId
+     * @param thirdType
+     */
+    private void thirdBind(String thirdId, String thirdType){
+
+        RequestGroup.thirdBind(thirdId, thirdType, new Callback() {
+            @Override
+            public Object parseNetworkResponse(Response response, int id) throws Exception {
+                return new Gson().fromJson(response.body().string(), BaseBean.class);
+            }
+
+            @Override
+            public void onError(Call call, Exception e, int id) {
+                showToast(e.getMessage());
+                finish();
+            }
+
+            @Override
+            public void onResponse(Object response, int id) {
+                BaseBean baseBean = (BaseBean)response;
+                if(baseBean != null){
+                    if("200".equals(baseBean.getCode())){
+                        finish();
+                    }
+                    showToast(baseBean.getMsg());
+                }
+            }
+        });
+    }
 }

+ 1 - 1
app/src/main/java/com/ynstkz/shitu/android/application/STApplication.java

@@ -42,6 +42,6 @@ public class STApplication extends Application{
     private void registThreeLoginConfig(){
         PlatformConfig.setWeixin(Constants.WX_KEY, Constants.WX_SECRET);
         PlatformConfig.setSinaWeibo(Constants.SINA_KEY, Constants.SINA_SECRET,"http://www.ynstkz.com");
-        PlatformConfig.setQQZone(Constants.QQ_KEY, Constants.QQ_SECRET);
+        PlatformConfig.setQQZone(Constants.QQ_ID, Constants.QQ_KEY);
     }
 }

+ 1 - 1
app/src/main/java/com/ynstkz/shitu/android/application/STSign.java

@@ -154,6 +154,6 @@ public class STSign {
     public static void logout(){
         EventBus.getDefault().post(new LogoutEvent());
         SharedPreferencesUtils.setLogin(false);
-        Cache.clean("UserBean");
+        Cache.clean(Constants.CACHE_USER_KEY);
     }
 }

+ 5 - 0
app/src/main/java/com/ynstkz/shitu/android/base/BaseFragment.java

@@ -11,6 +11,7 @@ import android.view.ViewGroup;
 
 import com.muddzdev.styleabletoastlibrary.StyleableToast;
 import com.ynstkz.shitu.android.application.STApplication;
+import com.ynstkz.shitu.android.data.SharedPreferencesUtils;
 
 /**
  * 作者:fuchangle on 2018/1/29 11:38
@@ -32,4 +33,8 @@ public class BaseFragment extends Fragment{
                 .backgroundColor(Color.BLACK)
                 .show();
     }
+
+    protected boolean isLogin(){
+        return SharedPreferencesUtils.isLogin();
+    }
 }

+ 9 - 0
app/src/main/java/com/ynstkz/shitu/android/bean/LoginBean.java

@@ -36,6 +36,7 @@ public class LoginBean extends BaseBean{
         private String userName;
         private String userId;
         private String token;
+        private boolean isIsBind = true;
 
         public String getUserName() {
             return userName;
@@ -60,5 +61,13 @@ public class LoginBean extends BaseBean{
         public void setToken(String token) {
             this.token = token;
         }
+
+        public boolean isIsBind() {
+            return isIsBind;
+        }
+
+        public void setIsBind(boolean isBind) {
+            isIsBind = isBind;
+        }
     }
 }

+ 2 - 2
app/src/main/java/com/ynstkz/shitu/android/common/Constants.java

@@ -20,9 +20,9 @@ public class Constants {
     public static final String KM_LONGITUDE = "102.722247";
     public static final String KM_LATITUDE = "25.015298";
 
-    public static final String QQ_KEY = "1106743412";
+    public static final String QQ_ID = "1106743412";
 
-    public static final String QQ_SECRET = "KEYaREJsqSU3Ep4msfM";
+    public static final String QQ_KEY = "aREJsqSU3Ep4msfM";
 
     public static final String WX_KEY = "wxdef12ce6777b9477";
 

+ 26 - 1
app/src/main/java/com/ynstkz/shitu/android/data/RequestGroup.java

@@ -275,7 +275,7 @@ public class RequestGroup {
         Map<String, String> params = getSystemParams();
         params.put("pageNumber",pageNumber);
         if(!TextUtils.isEmpty(lon)){
-            params.put("location", lon);
+            params.put("lon", lon);
         }
         if(!TextUtils.isEmpty(lat)){
             params.put("lat", lat);
@@ -401,4 +401,29 @@ public class RequestGroup {
                 SharedPreferencesUtils.getToken()).params(params).build().execute(callback);
     }
 
+    /**
+     * 三方登陆
+     * @param thirdId
+     * @param thirdType
+     * @param callback
+     */
+    public static void thirdLogin(String thirdId, String thirdType, Callback callback){
+        Map<String, String> params = getSystemParams();
+        params.put("thirdId", thirdId);
+        params.put("thirdType", thirdType);
+        OkHttpUtils.postString().url(UrlCat.URL_THIRD_QQ).content(new Gson().toJson(params)).build().execute(callback);
+    }
+
+    /**
+     * 第三方账号绑定
+     * @param thirdId
+     * @param thirdType
+     */
+    public static void thirdBind(String thirdId, String thirdType, Callback callback){
+        Map<String, String> params = getSystemParams();
+        params.put("thirdId", thirdId);
+        params.put("thirdType", thirdType);
+        OkHttpUtils.postString().url(UrlCat.URL_THIRD_BIND).addHeader(KEY_TOKEN,
+                SharedPreferencesUtils.getToken()).content(new Gson().toJson(params)).build().execute(callback);
+    }
 }

+ 9 - 0
app/src/main/java/com/ynstkz/shitu/android/data/UrlCat.java

@@ -158,6 +158,15 @@ public class UrlCat {
      */
     public static final String URL_COLLECT_CANCEL = HOST + "api/collect/cancel";
 
+    /**
+     * 三方登陆
+     */
+    public static final String URL_THIRD_QQ = HOST + "api/user/login/third";
+
+    /**
+     * 第三方账号绑定
+     */
+    public static final String URL_THIRD_BIND = HOST + "api/third/bind";
 }
 
 

+ 5 - 4
app/src/main/java/com/ynstkz/shitu/android/fragment/UserCenterFragment.java

@@ -92,7 +92,9 @@ public class UserCenterFragment extends BaseFragment {
         gvMine.setAdapter(userCenterOptionGridAdapter);
         userCenterOptionGridAdapter.notifyDataSetChanged();
 
-        getUserInfo();
+        if(isLogin()){
+            getUserInfo();
+        }
     }
 
     private void setListener() {
@@ -175,7 +177,8 @@ public class UserCenterFragment extends BaseFragment {
 
             @Override
             public void onError(Call call, Exception e, int id) {
-                showToast(getString(R.string.error_msg));
+                showToast(getString(R.string.token_error));
+                STSign.logout();
             }
 
             @Override
@@ -185,8 +188,6 @@ public class UserCenterFragment extends BaseFragment {
                     if("200".equals(userInfoBean.getCode())){
                         initUserInfo(userInfoBean);
                         STSign.getInstance().setUserInfo(userInfoBean);
-                    } else if ("401".equals(userInfoBean.getCode())){
-                        STSign.logout();
                     }
                 }
             }

+ 1 - 0
app/src/main/res/values/strings.xml

@@ -11,4 +11,5 @@
     <string name="nodata_collect">亲,你还没有收藏哦~</string>
     <string name="nodata_comment">亲,你还没有评论哦~</string>
 
+    <string name="token_error">登录过期,请重新登录</string>
 </resources>