package com.swifty.fillcolor.util; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.widget.Toast; import com.google.gson.Gson; import com.swifty.fillcolor.MyApplication; import com.swifty.fillcolor.broadcast.LoginSuccessBroadcast; import com.swifty.fillcolor.broadcast.LogoutSuccessBroadcast; import com.swifty.fillcolor.controller.main.ThemeListFragment; import com.swifty.fillcolor.controller.main.UserFragment; import com.swifty.fillcolor.factory.MyDialogFactory; import com.swifty.fillcolor.factory.SharedPreferencesFactory; import com.swifty.fillcolor.listener.OnLoginSuccessListener; import com.swifty.fillcolor.R; import com.swifty.fillcolor.model.bean.UserBean; import com.swifty.fillcolor.view.MyProgressDialog; import com.umeng.socialize.bean.SHARE_MEDIA; import com.umeng.socialize.controller.UMServiceFactory; import com.umeng.socialize.controller.UMSocialService; import com.umeng.socialize.controller.listener.SocializeListeners; import com.umeng.socialize.exception.SocializeException; import com.umeng.socialize.facebook.controller.UMFacebookHandler; import com.umeng.socialize.sso.UMQQSsoHandler; import com.umeng.socialize.sso.UMSsoHandler; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; /** * Created by Swifty.Wang on 2015/9/10. */ public class UmengLoginUtil { private static UMSocialService mController; private static OnLoginSuccessListener mOnLoginSuccessListener; private static UmengLoginUtil ourInstance; private AsyncTask asyncTask; public void serverBackgroundLogin(OnLoginSuccessListener mOnLoginSuccessListener) { this.mOnLoginSuccessListener = mOnLoginSuccessListener; asyncTask = new LoginAsyn(); asyncTask.execute(); } public void loginSuccessEvent(Context context, UserBean userBean, MyDialogFactory myDialogFactory) { if (userBean.getUsers() != null) { Toast.makeText(context, context.getString(R.string.loginSuccess), Toast.LENGTH_SHORT).show(); MyApplication.user = userBean.getUsers(); SharedPreferencesFactory.saveString(context, SharedPreferencesFactory.USERSESSION, MyApplication.user.getToken()); MyApplication.userToken = MyApplication.user.getToken(); myDialogFactory.dismissDialog(); LoginSuccessBroadcast.getInstance().sendBroadcast(context); } else { Toast.makeText(context, context.getString(R.string.loginFailed), Toast.LENGTH_SHORT).show(); } } public void loginSuccessEvent(Context context, UserBean userBean) { if (userBean.getUsers() != null) { Toast.makeText(context, context.getString(R.string.loginSuccess), Toast.LENGTH_SHORT).show(); MyApplication.user = userBean.getUsers(); SharedPreferencesFactory.saveString(context, SharedPreferencesFactory.USERSESSION, MyApplication.user.getToken()); MyApplication.userToken = MyApplication.user.getToken(); LoginSuccessBroadcast.getInstance().sendBroadcast(context); } else { Toast.makeText(context, context.getString(R.string.loginFailed), Toast.LENGTH_SHORT).show(); } } public enum LoginMethod { QQ, FACEBOOK, } public static UmengLoginUtil getInstance() { if (ourInstance == null) ourInstance = new UmengLoginUtil(); return ourInstance; } private UmengLoginUtil() { } public UMSocialService qqLogin(final Context context, OnLoginSuccessListener onLoginSuccessListener) { mOnLoginSuccessListener = onLoginSuccessListener; mController = UMServiceFactory.getUMSocialService("com.umeng.login"); //参数1为当前Activity, 参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY. UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler((Activity) context, "1104727259", "NddWVIV3BNdRqh97"); qqSsoHandler.addToSocialSDK(); MyProgressDialog.show(context, null, context.getString(R.string.pullqqloging)); mController.doOauthVerify(context, SHARE_MEDIA.QQ, new SocializeListeners.UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { } @Override public void onError(SocializeException e, SHARE_MEDIA platform) { Toast.makeText(context, "授权错误", Toast.LENGTH_SHORT).show(); MyProgressDialog.DismissDialog(); } @Override public void onComplete(final Bundle value, SHARE_MEDIA platform) { StringBuilder sb = new StringBuilder(); Set<String> keys = value.keySet(); for (String key : keys) { sb.append(key + "=" + value.get(key).toString() + "\r\n"); } L.d("TestData2", sb.toString()); //获取相关授权信息 mController.getPlatformInfo(context, SHARE_MEDIA.QQ, new SocializeListeners.UMDataListener() { @Override public void onStart() { } @Override public void onComplete(int status, Map<String, Object> info) { if (status == 200 && info != null) { StringBuilder sb = new StringBuilder(); Set<String> keys = info.keySet(); for (String key : keys) { sb.append(key + "=" + info.get(key).toString() + "\r\n"); } //do register or login registerToServer(LoginMethod.QQ, value, info); L.d("TestData", sb.toString()); } else { L.d("TestData", "发生错误:" + status); } } }); } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(context, "授权取消", Toast.LENGTH_SHORT).show(); MyProgressDialog.DismissDialog(); } }); return mController; } private void registerToServer(LoginMethod loginMethod, Bundle bundle, Map<String, Object> info) { List<NameValuePair> params = new ArrayList<NameValuePair>(); String ret; switch (loginMethod) { case QQ: params.clear(); params.add(new BasicNameValuePair("type", "qq")); params.add(new BasicNameValuePair("uid", bundle.getString("uid"))); params.add(new BasicNameValuePair("usericon", info.get("profile_image_url").toString())); params.add(new BasicNameValuePair("gender", convertGender(info.get("gender").toString()))); params.add(new BasicNameValuePair("location", info.get("province").toString() + " " + info.get("city").toString())); params.add(new BasicNameValuePair("name", info.get("screen_name").toString())); asyncTask = new RegisterAsyn(); asyncTask.execute(params); break; case FACEBOOK: params.clear(); params.add(new BasicNameValuePair("type", "facebook")); params.add(new BasicNameValuePair("uid", info.get("id").toString())); params.add(new BasicNameValuePair("usericon", info.get("profilePictureUri").toString())); params.add(new BasicNameValuePair("name", info.get("name").toString())); asyncTask = new RegisterAsyn(); asyncTask.execute(params); break; } } private String convertGender(String gender) { if (gender == null) { return null; } if (gender.toLowerCase().trim().equals("male") || gender.toLowerCase().trim().equals("男")) { return "M"; } else { return "F"; } } public UMSocialService faceBookLogin(final Context context, OnLoginSuccessListener onLoginSuccessListener) { mOnLoginSuccessListener = onLoginSuccessListener; mController = UMServiceFactory.getUMSocialService("com.umeng.login"); //参数1为当前Activity, 参数2为开发者在QQ互联申请的APP ID,参数3为开发者在QQ互联申请的APP kEY. UMFacebookHandler mFacebookHandler = new UMFacebookHandler((Activity) context); mFacebookHandler.addToSocialSDK(); MyProgressDialog.show(context, null, context.getString(R.string.pullfacebookloging)); mController.doOauthVerify(context, SHARE_MEDIA.FACEBOOK, new SocializeListeners.UMAuthListener() { @Override public void onStart(SHARE_MEDIA platform) { } @Override public void onError(SocializeException e, SHARE_MEDIA platform) { Toast.makeText(context, "授权错误", Toast.LENGTH_SHORT).show(); MyProgressDialog.DismissDialog(); } @Override public void onComplete(final Bundle value, SHARE_MEDIA platform) { StringBuilder sb = new StringBuilder(); Set<String> keys = value.keySet(); for (String key : keys) { sb.append(key + "=" + value.get(key).toString() + "\r\n"); } L.d("TestData2", sb.toString()); //获取相关授权信息 mController.getPlatformInfo(context, SHARE_MEDIA.FACEBOOK, new SocializeListeners.UMDataListener() { @Override public void onStart() { } @Override public void onComplete(int status, Map<String, Object> info) { if (status == 200 && info != null) { StringBuilder sb = new StringBuilder(); Set<String> keys = info.keySet(); for (String key : keys) { sb.append(key + "=" + info.get(key).toString() + "\r\n"); } //do register or login registerToServer(LoginMethod.FACEBOOK, value, info); L.d("TestData", sb.toString()); } else { L.d("TestData", "发生错误:" + status); } } }); } @Override public void onCancel(SHARE_MEDIA platform) { Toast.makeText(context, "授权取消", Toast.LENGTH_SHORT).show(); MyProgressDialog.DismissDialog(); } }); return mController; } public void onActivityResult(int requestCode, int resultCode, Intent data) { UMSsoHandler ssoHandler = mController.getConfig().getSsoHandler( requestCode); if (ssoHandler != null) { ssoHandler.authorizeCallBack(requestCode, resultCode, data); } } public void logout(Context mContext) { MyApplication.user = null; SharedPreferencesFactory.saveString(mContext, SharedPreferencesFactory.USERSESSION, null); LogoutSuccessBroadcast.getInstance().sendBroadcast(mContext); } class RegisterAsyn extends AsyncTask { @Override protected Object doInBackground(Object[] objects) { MyHttpClient myHttpClient = new MyHttpClient(); List<NameValuePair> params = (List<NameValuePair>) objects[0]; String ret = myHttpClient.executePostRequest(MyApplication.UserRegisterUrl, params); L.e(ret); Gson gson = new Gson(); UserBean userBean = gson.fromJson(ret, UserBean.class); return userBean; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); MyProgressDialog.DismissDialog(); if (UserFragment.getInstance().isAdded() && mOnLoginSuccessListener != null) { mOnLoginSuccessListener.onLoginSuccess((UserBean) o); } } } class LoginAsyn extends AsyncTask { @Override protected Object doInBackground(Object[] objects) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } MyHttpClient myHttpClient = new MyHttpClient(); String ret; UserBean userBean = null; try { ret = myHttpClient.executeGetRequest(MyApplication.UserLoginUrl); L.e(ret); Gson gson = new Gson(); userBean = gson.fromJson(ret, UserBean.class); if (userBean.getUsers() != null) { MyApplication.user = userBean.getUsers(); } } catch (Exception e) { e.printStackTrace(); } return userBean; } @Override protected void onPostExecute(Object o) { super.onPostExecute(o); if (mOnLoginSuccessListener != null) { mOnLoginSuccessListener.onLoginSuccess((UserBean) o); } } } }