登录微信用android设备,Android 之微信登录
準備工作
需要在微信開放平臺注冊登錄賬戶。還得辦理開發(fā)者資質認證,審核費用為300元。
2.在微信開放平臺創(chuàng)建移動應用,填寫相關信息后提交審核。
簡述業(yè)務流程
1.獲取appId和secret
2.通過appId和secret調微信接口獲取 code
3.通過code和getAccessToken()方法再獲取accessToken和 openId。(通過 unionId即可區(qū)分微信用戶實現登錄)
4.當然也可以通過 unionId與 用戶手機號進行綁定。
5.通過access_token和openid調用api.weixin.qq.com/sns/userinfo接口獲取微信昵稱、性別等信息。
微信開放平臺獲取應用AppID及AppSecret
注意事項:
a.若遇到重名,請發(fā)起申訴;
b.在注冊流程中請不要開通應用微信支付;
c.在注冊流程中填寫的包名、簽名應與騰訊開放平臺后臺保持一致。
2.點擊“管理中心”或“移動應用開發(fā)-查看更多-創(chuàng)建應用”
image.png
進入創(chuàng)建移動應用流程。
3.填寫對應信息完成注冊
Step1
填寫基本信息
Step2
填寫簽名和包名
Step3
提交審核
注冊后等待審核。審核將于7天內完成;
集成流程
Step1:在 app 下的build.gradle里添加依賴即可
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
Step2:在包名路徑下,新建wxapi文件夾,再新建一個WXEntryActivity。(路徑文件名必須和創(chuàng)建移動應用時填寫的包名保持一致)
創(chuàng)建包與文件
Step3:打開WXEntryActivity
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler
重寫兩個方法:
@Override
public void onReq(BaseReq baseReq) {
}
//請求回調結果處理
//向微信開放平臺發(fā)起請求后,在此接收回調數據
@Override
public void onResp(BaseResp baseResp) {
}
Step4:打開 MainActivity 或者 LoginActivity
//注冊api
private void regToWx() {
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
api.registerApp(APP_ID);
}
//先判斷用戶手機是否安裝了微信客戶端
if (!api.isWXAppInstalled()) {
Toast.makeText(MainActivity.this, "您的設備未安裝微信客戶端", Toast.LENGTH_SHORT).show();
} else {
//向微信開放平臺發(fā)起請求
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_demo_test";
api.sendReq(req);
}
Step5:在onRep()方法里獲取回調,拿到返回的參數 code
//請求回調結果處理
@Override
public void onResp(BaseResp baseResp) {
//登錄回調
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
String code = ((SendAuth.Resp) baseResp).code;
//獲取accesstoken
getAccessToken(code);
Log.d("fantasychongwxlogin", code.toString()+ "");
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED://用戶拒絕授權
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL://用戶取消
finish();
break;
default:
finish();
break;
}
}
Step6:根據返回碼,如果請求成功會返回BaseResp.ErrCode.ERR_OK:相等的值,然后通過code和getAccessToken()方法再獲取accessToken。
private void getAccessToken(String code) {
createProgressDialog();
//獲取授權
StringBuffer loginUrl = new StringBuffer();
loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token")
.append("?appid=")
.append("wx45ccf8958a0a24c7")
.append("&secret=")
.append("e9c071f3326663856bc6cf02c2d6b657")
.append("&code=")
.append(code)
.append("&grant_type=authorization_code");
Log.d("urlurl", loginUrl.toString());
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
.url(loginUrl.toString())
.get()//默認就是GET請求,可以不寫
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("fan12", "onFailure: ");
mProgressDialog.dismiss();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseInfo= response.body().string();
Log.d("fan12", "onResponse: " +responseInfo);
String access = null;
String openId = null;
try {
JSONObject jsonObject = new JSONObject(responseInfo);
access = jsonObject.getString("access_token");
openId = jsonObject.getString("openid");
} catch (JSONException e) {
e.printStackTrace();
}
getUserInfo(access, openId);
}
});
}
Step7:這里我們在請求之前新建一個progressDialog,避免長時間白屏(因為在進行多次網絡請求)造成卡死的假象
private void createProgressDialog() {
mContext=this;
mProgressDialog=new ProgressDialog(mContext);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//轉盤
mProgressDialog.setCancelable(false);
mProgressDialog.setCanceledOnTouchOutside(false);
mProgressDialog.setTitle("提示");
mProgressDialog.setMessage("登錄中,請稍后");
mProgressDialog.show();
}
Step8:如果請求成功,我們通過JSON解析獲取access和token值,再通過getUserInfo(access, openId)方法獲取用戶信息
@Override
protected void onResume() {
super.onResume();
SharedPreferences sp= getSharedPreferences("userInfo", MODE_PRIVATE);
String responseInfo= sp.getString("responseInfo", "");
if (!responseInfo.isEmpty()){
try {
JSONObject jsonObject = new JSONObject(responseInfo);
nickname = jsonObject.getString("nickname");
headimgurl = jsonObject.getString("headimgurl");
} catch (JSONException e) {
e.printStackTrace();
}
tv.setText("昵稱:"+ nickname+ "\n"+ "頭像:"+ headimgurl);
SharedPreferences.Editor editor= getSharedPreferences("userInfo", MODE_PRIVATE).edit();
editor.clear();
editor.commit();
}
}
總結
以上是生活随笔為你收集整理的登录微信用android设备,Android 之微信登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端面试手写题
- 下一篇: android sina oauth2.