Android App實現第三方微信登錄

                         Android App實現第三方微信登錄

 

1、下載微信官方最新sdk,集成到app。如下圖:

Android App實現第三方微信登錄 - 好靈敏 - 好靈敏的空間

 

 

2、註冊到微信

可以在app的某個ActivityonCreate方法中註冊,這裏也可以在appapplicationonCreate()方法中註冊,這樣,在整個app的中都可以使用。例如:

public class CarApplication  extends Application{

…… …… ……

public static IWXAPI api;

public void onCreate() {

//註冊微信

api = WXAPIFactory.createWXAPI(this, 你的應用在微信上申請的app_id”true); 

api.registerApp(你的應用在微信上申請的app_id”);

…… …… ……

}

}

 

3、在app的包名目錄下新建一個wxapi目錄,然後在此目錄下新建WXEntryActivity.java文件,如下,app的包名爲carjob.com.cn,新建的wxapi目錄如下。注意:一定是包名目錄下新建,不要在其他目錄新建,否則WXEntryActivity.java裏的public void onResp(BaseResp resp)方法不會被調用

Android App實現第三方微信登錄 - 好靈敏 - 好靈敏的空間

 

WXEntryActivity繼承Activity,實現IWXAPIEventHandler,並重寫protected void onNewIntent(Intent intent)public void onReq(BaseReq arg0)public void onResp(BaseResp resp)方法。WXEntryActivity.java文件可以見最後附錄。

 

4、發送微信登錄的請求

app中點擊某一個view,發送微信登錄的請求如下:

final SendAuth.Req req = new SendAuth.Req();

req.scope = "snsapi_userinfo";

req.state = "carjob_wx_login";

CarApplication.api.sendReq(req);

其中,CarApplication.api就是第2步中註冊的IWXAPI對象。

請求成功後,可拉起微信的授權登錄頁面,如下。用戶點擊“確認登錄”後,SDK通過SendAuthResp返回數據給調用方(即app),此時WXEntryActivity中的public void onResp(BaseResp resp)方法被調用(微信、朋友圈分享成功後,此方法同樣會被調用),微信登錄的返回值說明如下。這裏app可以做相關的處理,見WXEntryActivity.java文件中的處理,取code爲下一步獲取access_tokenopenid等信息做準備。此處獲取code的方法:

public void onResp(BaseResp resp) {

switch (resp.errCode) {

case BaseResp.ErrCode.ERR_OK:

String code = ((SendAuth.Resp) resp).code; //即爲所需的code

break;

…… …… …… 

}

}

Android App實現第三方微信登錄 - 好靈敏 - 好靈敏的空間

 

Android App實現第三方微信登錄 - 好靈敏 - 好靈敏的空間

 

 

 

5、通過code獲取access_token

獲取上一步中的code後,調用以下接口獲取access_token,官方指出用Get方式請求。

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

請求參數說明







appid應用唯一標識,在微信開放平臺提交應用審覈通過後獲得

secret應用密鑰AppSecret,在微信開放平臺提交應用審覈通過後獲得

code填寫第一步獲取的code參數

grant_typeauthorization_code

返回說明

正確的返回:


"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE" 
}

返回參數說明:

access_token接口調用憑證

expires_inaccess_token接口調用憑證超時時間,單位(秒)

refresh_token用戶刷新access_token

openid授權用戶唯一標識

scope用戶授權的作用域,使用逗號(,)分隔

 

6、獲得access_tokenopenid後,app就可以根據自己的規則與互自己的server進行交互。

 

7、微信請求的一般流程如下:

Android App實現第三方微信登錄 - 好靈敏 - 好靈敏的空間

 

 

 

附錄:

WXEntryActivity.java

 

package carjob.com.cn.wxapi;

import carjob.com.cn.CarApplication;

import carjob.com.cn.newversion.MyResumeLoginView;

import carjob.com.cn.search.SharedPreferencesclass;

import carjob.com.cn.util.SharedPreferenceUtil;

 

import com.tencent.mm.sdk.constants.ConstantsAPI;

import com.tencent.mm.sdk.modelbase.BaseReq;

import com.tencent.mm.sdk.modelbase.BaseResp;

import com.tencent.mm.sdk.modelmsg.SendAuth;

import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;

 

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.widget.Toast;

 

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

private Context context = WXEntryActivity.this;

 

private void handleIntent(Intent paramIntent) {

CarApplication.api.handleIntent(paramIntent, this);

}


@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

handleIntent(getIntent());

}


@Override

protected void onNewIntent(Intent intent) {

// TODO Auto-generated method stub

super.onNewIntent(intent);

setIntent(intent);

handleIntent(intent);

}


@Override

public void onReq(BaseReq arg0) {

// TODO Auto-generated method stub

finish();

}

 

@Override

public void onResp(BaseResp resp) {

// TODO Auto-generated method stub

switch (resp.errCode) {

case BaseResp.ErrCode.ERR_OK:

if (ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX == resp.getType()) {

Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();

break;

}

String code = ((SendAuth.Resp) resp).code;

new SharedPreferencesclass(49, code, context);

        System.out.println("微信確認登錄返回的code" + code);

        Toast.makeText(context, "微信確認登錄返回的code" + code, Toast.LENGTH_LONG).show();

MyResumeLoginView.loginHandler.sendEmptyMessage(MyResumeLoginView.WEIXIN_LOGIN_SUCCESS);

        break;

case BaseResp.ErrCode.ERR_USER_CANCEL:

break;

case BaseResp.ErrCode.ERR_AUTH_DENIED:

break;

default:

break;

}

finish();

}


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章