package com.emop.client; import static com.emop.client.Constants.TAG_EMOP; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.webkit.CookieSyncManager; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; import android.widget.TextView; import com.emop.client.io.ApiResult; import com.emop.client.io.QQClient; import com.tencent.tauth.TencentOpenAPI; import com.tencent.tauth.bean.UserInfo; import com.tencent.tauth.http.Callback; public class QQLoginActivity extends BaseActivity { private static final String CALLBACK = "taodianhuoqqauth://tauth.qq.com/"; public String mAppid = "100366010";//申请时分配的appid public String mAccessToken, mOpenId; private String scope = "get_simple_userinfo,get_user_profile,add_share,get_info";//授权范围 private boolean isLogin = false; private ProgressBar processBar = null; private TextView titleView = null; private WebView web = null; private Bundle authInfo = new Bundle(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web_view); processBar = (ProgressBar)findViewById(R.id.progressbar_loading); processBar.setVisibility(View.GONE); titleView = (TextView)findViewById(R.id.title); titleView.setText("QQ登录"); this.web = (WebView)findViewById(R.id.web); web.setWebViewClient(new QQWebClient()); web.setVerticalScrollBarEnabled(false); web.setHorizontalScrollBarEnabled(false); web.getSettings().setJavaScriptEnabled(true); web.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); CookieSyncManager.createInstance(this); WebView.enablePlatformNotifications(); //registerIntentReceivers(); } public void onResume(){ super.onResume(); String url = "https://graph.qq.com/oauth2.0/authorize?response_type=token&display=mobile&client_id=" + mAppid+ "&redirect_uri=" + CALLBACK + "&scope=" + scope; isLogin = false; web.loadUrl(url); } @Override protected void onDestroy() { super.onDestroy(); } class QQWebClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d(TAG_EMOP, "QQ onPage: " + url); if(url.startsWith("http://qzs.qq.com/open/mobile/")){ processLoginResult(url); }else { super.onPageStarted(view, url, favicon); processBar.setVisibility(View.VISIBLE); } } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d(TAG_EMOP, "shouldOverride URL: " + url); if(url != null){ if(url.startsWith("taodianhuoqqauth:")){ //finish(); return true; }else if(url.startsWith("http://qzs.qq.com/open/mobile/")){ processLoginResult(url); } } return false; } @Override public void onPageFinished(WebView view, String url) { Log.d(TAG_EMOP, "onPageFinished URL: " + url); super.onPageFinished(view, url); processBar.setVisibility(View.GONE); } } private void processLoginResult(String url){ processBar.setVisibility(View.VISIBLE); Log.d(TAG_EMOP, "processLoginResult URL: " + url); //http://qzs.qq.com/open/mobile/login/proxy.html?#&openid=0676BB8860070788A73655A5554D6347&appid=100366010&access_token=5C30FF074AA3BFC27EAFF5745155814D&key=9b84ea6e58a2ab7a8080bb8af725530c&expires_in=7776000 Uri uri = Uri.parse(url); String ret = uri.getFragment(); if(ret == null) return; String[] kv = ret.split("&"); for (String each : kv) { String[] ss = each.split("="); if (ss != null && ss.length == 2) { authInfo.putString(ss[0], ss[1]); } } Log.d(Constants.TAG_EMOP, "qq ok, open id:" + authInfo.getString("openid")); Log.d(Constants.TAG_EMOP, "qq ok, access_token:" + authInfo.getString("access_token")); mOpenId = authInfo.getString("openid"); mAccessToken = authInfo.getString("access_token"); if(!isLogin && mOpenId != null && mAccessToken != null){ isLogin = true; new GetUserInfoTask(mOpenId, mAccessToken).start(); } } class GetUserInfoTask extends Thread{ private String uid = null; private String accessToken = null; public GetUserInfoTask(String uid, String accessToken){ this.uid = uid; this.accessToken = accessToken; } @Override public void run(){ QQClient qq = new QQClient(QQLoginActivity.this); qq.appId = mAppid; qq.openId = mOpenId; qq.accessToken = mAccessToken; ApiResult qqResult = qq.userInfo(); String nick = qqResult.getString("data.nick"); if(nick == null){ qqResult = qq.userSimpleInfo(); nick = qqResult.getString("nickname"); } if(nick == null){ nick = "unkown"; } Log.d(Constants.TAG_EMOP, "用户信息:" + nick); client.saveRefUser(QQLoginActivity.this, Constants.AUTH_REF_QQ, mOpenId, nick); ApiResult r = client.bindUserInfo("qq", uid, accessToken); if(r != null && r.isOK){ String status = r.getString("data.user_status"); if(status != null && status.trim().equals("2001")){ client.saveLoginUser(QQLoginActivity.this, r.getString("data.user_id")); }else { } }else { showToast("啊哦,网速不给力啊~" + r.errorMsg()); } finish(); } } }