欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android微信第三方登錄(個(gè)人筆記)

 更新時(shí)間:2016年12月12日 15:18:43   作者:丶貳九  
這篇文章主要為大家詳細(xì)介紹了Android微信第三方登錄的具體過程,個(gè)人筆記分享,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

今天在寫微信登錄,花了半天時(shí)間搞定、然后寫下自己的筆記,希望幫助更多的人。歡迎各位指教。

微信授權(quán)登錄,官方說的不是很清楚、所以導(dǎo)致有一部分的坑。

微信注冊(cè)應(yīng)用平臺(tái)的應(yīng)用簽名,下載 微信簽名生成工具 輸入項(xiàng)目的packageName也可以查看到。

注意:debug、Release 一定要區(qū)分,因?yàn)?種生成的微信簽名不一致,會(huì)導(dǎo)致沒有跳轉(zhuǎn)、回調(diào)。。。。一般在微信開發(fā)者上面注冊(cè)的是正式環(huán)境打包好的、)

 

 

申請(qǐng)微信開發(fā)者賬號(hào)、應(yīng)用申請(qǐng)省略。 

 1. AndroidManifest.xml 權(quán)限

<!-- 微信權(quán)限-->
<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 


 2.在圖一按鈕上面,加上微信跳轉(zhuǎn)方法、也就是啟動(dòng)微信登錄的方法

private void loginToWeiXin(){
  IWXAPI mApi = WXAPIFactory.createWXAPI(this, WXEntryActivity.WEIXIN_APP_ID, true);
  mApi.registerApp(WXEntryActivity.WEIXIN_APP_ID);

  if (mApi != null && mApi.isWXAppInstalled()) {
   SendAuth.Req req = new SendAuth.Req();
   req.scope = "snsapi_userinfo";
   req.state = "wechat_sdk_demo_test_neng";
   mApi.sendReq(req);
  } else
   Toast.makeText(this, "用戶未安裝微信", Toast.LENGTH_SHORT).show();
 }

3.在你的包名相應(yīng)目錄下新建一個(gè)wxapi目錄,并在該wxapi目錄下新增一個(gè)WXEntryActivity類,該類繼承自Activity

 package(項(xiàng)目報(bào)名).wxapi.WXEntryActivity.Java

回調(diào)方法onResp() 方法沒有觸發(fā)回調(diào)、請(qǐng)監(jiān)測(cè)WXEntryActivity onCreate中是否調(diào)用此方法  mApi.handleIntent(this.getIntent(), this);

package com.xxx.xxxx.android.wxapi;
/**
 * 微信登錄頁(yè)面
 * @author kevin_chen 2016-12-10 下午19:03:45
 * @version v1.0
 */
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
 private static final String APP_SECRET = "填寫自己的AppSecret";
 private IWXAPI mWeixinAPI;
 public static final String WEIXIN_APP_ID = "填寫自己的APP_id";
 private static String uuid;


 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  mWeixinAPI = WXAPIFactory.createWXAPI(this, WEIXIN_APP_ID, true);
  mWeixinAPI.handleIntent(this.getIntent(), this);
 }

 @Override
 protected void onNewIntent(Intent intent) {
  super.onNewIntent(intent);
  setIntent(intent);
  mWeixinAPI.handleIntent(intent, this);//必須調(diào)用此句話
 }

 //微信發(fā)送的請(qǐng)求將回調(diào)到onReq方法
 @Override
 public void onReq(BaseReq req) {
  LogUtils.log("onReq");
 }

 //發(fā)送到微信請(qǐng)求的響應(yīng)結(jié)果
 @Override
 public void onResp(BaseResp resp) {
  LogUtils.log("onResp");
  switch (resp.errCode) {
  case BaseResp.ErrCode.ERR_OK:
   LogUtils.log("ERR_OK");
   //發(fā)送成功
   SendAuth.Resp sendResp = (SendAuth.Resp) resp;
   if (sendResp != null) {
    String code = sendResp.code;
    getAccess_token(code);
   }
   break;
  case BaseResp.ErrCode.ERR_USER_CANCEL:
   LogUtils.log("ERR_USER_CANCEL");
   //發(fā)送取消
   break;
  case BaseResp.ErrCode.ERR_AUTH_DENIED:
   LogUtils.log("ERR_AUTH_DENIED");
   //發(fā)送被拒絕
   break;
  default:
   //發(fā)送返回
   break;
  }

 }

 /**
  * 獲取openid accessToken值用于后期操作
  * @param code 請(qǐng)求碼
  */
 private void getAccess_token(final String code) {
  String path = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
    + WEIXIN_APP_ID
    + "&secret="
    + APP_SECRET
    + "&code="
    + code
    + "&grant_type=authorization_code";
  LogUtils.log("getAccess_token:" + path);
  //網(wǎng)絡(luò)請(qǐng)求,根據(jù)自己的請(qǐng)求方式
  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {
   @Override
   public void onSuccess(String result) {
    LogUtils.log("getAccess_token_result:" + result);
    JSONObject jsonObject = null;
    try {
     jsonObject = new JSONObject(result);
     String openid = jsonObject.getString("openid").toString().trim();
     String access_token = jsonObject.getString("access_token").toString().trim();
     getUserMesg(access_token, openid);
    } catch (JSONException e) {
     e.printStackTrace();
    }

   }

   @Override
   public void onError(String errorMessage) {

   }
  });
 }


 /**
  * 獲取微信的個(gè)人信息
  * @param access_token
  * @param openid
  */
 private void getUserMesg(final String access_token, final String openid) {
  String path = "https://api.weixin.qq.com/sns/userinfo?access_token="
    + access_token
    + "&openid="
    + openid;
  LogUtils.log("getUserMesg:" + path);
  //網(wǎng)絡(luò)請(qǐng)求,根據(jù)自己的請(qǐng)求方式
  VolleyRequest.get(this, path, "getAccess_token", false, null, new VolleyRequest.Callback() {
   @Override
   public void onSuccess(String result) {
    LogUtils.log("getUserMesg_result:" + result);
    JSONObject jsonObject = null;
    try {
     jsonObject = new JSONObject(result);
     String nickname = jsonObject.getString("nickname");
     int sex = Integer.parseInt(jsonObject.get("sex").toString());
     String headimgurl = jsonObject.getString("headimgurl");
     
     LogUtils.log("用戶基本信息:");
     LogUtils.log("nickname:" + nickname);
     LogUtils.log("sex:" + sex);
     LogUtils.log("headimgurl:" + headimgurl);
    } catch (JSONException e) {
     e.printStackTrace();
    }
    finish();
   }

   @Override
   public void onError(String errorMessage) {

   }
  });
 }

}

5.在 AndroidManifest.xml 設(shè)置注冊(cè)微信的頁(yè)面

當(dāng)授權(quán)時(shí)候進(jìn)入WXEntryActivity、當(dāng)前背景可能是黒或白,為了不影響用戶體驗(yàn),可以把當(dāng)前Activity設(shè)置為透明:

android:theme="@android:style/Theme.Translucent"

<!--注冊(cè)微信回調(diào) WXEntryActivity -->
<activity
 android:name=".wxapi.WXEntryActivity"
 android:exported="true"
 android:label="@string/app_name"
 android:launchMode="singleTop"
 android:theme="@android:style/Theme.Translucent" /> 

具體可參考:微信授權(quán)登錄取用戶信息步驟

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論