根据官方接入指南第一步需要申请AppId,这里我们不对此做介绍。
下面主要介绍Andoid Studio打开微端项目的一些配置及其代码
1、在build.gradle文件中,添加如下依赖即可:
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
这里注意一下,是在app模块下的build.gradle文件添加
2、AndroidManifest.xml 配置
添加必要的权限支持:
<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"/>
3、注册到微信
private
void
regToWx() {
api = WXAPIFactory.createWXAPI(
this
, Constants.APP_ID,
true
);
api.registerApp(Constants.APP_ID);
}
并在注册接收JS消息的方法中调用微信登录授权请求CODE
private
void
setExternalInterfaces() {
launcher.setExternalInterface(
"callNative"
,
new
INativePlayer.INativeInterface() {
@Override
public
void
callback(String s) {
Log.d(
"Egret Launcher"
, s);
getCode();
}
});
}
private
void
getCode(){
final
SendAuth.Req req =
new
SendAuth.Req();
req.scope =
"snsapi_userinfo"
;
req.state =
"none"
;
api.sendReq(req);
}
4、在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
// IWXAPI 是第三方app和微信通信的openapi接口
private IWXAPI api;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 通过WXAPIFactory工厂,获取IWXAPI的实例
api = WXAPIFactory.createWXAPI(this, Constants.APP_ID, false);
api.registerApp(Constants.APP_ID);
//注意:
//第三方开发者如果使用透明界面来实现WXEntryActivity,需要判断handleIntent的返回值,如果返回值为false,则说明入参不合法未被SDK处理,应finish当前透明界面,避免外部通过传递非法参数的Intent导致停留在透明界面,引起用户的疑惑
try {
api.handleIntent(getIntent(), this);
} catch (Exception e) {
e.printStackTrace();
}
Log.i("WXEntryActivity","onCreate");
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
Log.i("WXEntryActivity","onNewIntent");
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq req) {
Log.i("WXEntryActivity","onReq");
switch (req.getType()) {
case ConstantsAPI.COMMAND_GETMESSAGE_FROM_WX:
break;
case ConstantsAPI.COMMAND_SHOWMESSAGE_FROM_WX:
break;
default:
break;
}
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp resp) {
String result = "";
Log.i("WXEntryActivity","onResp");
// Toast.makeText(this, "baseresp.getType = " + resp.getType(), Toast.LENGTH_SHORT).show();
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "用户同意";
if(resp instanceof SendAuth.Resp){
SendAuth.Resp newResp = (SendAuth.Resp)resp;
String code = newResp.code;
Log.i("WXEntryActivity","ok:"+ code);
MainActivity.call(code);
}
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "用户取消";
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = "用户拒绝授权";
break;
case BaseResp.ErrCode.ERR_UNSUPPORT:
result = "暂不支持";
break;
default:
result = "未知错误";
break;
}
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
}
}
注意WXEntryActivity类一定要严格要求在你的包名.wxapi目录下,否则回调接受不到
并在AndroidManifest.xml添加如下配置
<activity
android:name=".wxapi.WXEntryActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:exported="true"
android:launchMode="singleTop">
</activity>
5、获取到code后我这里是送到MainActivity
MainActivity.call(code);
在MainActivity有相应的方法
private static MainActivity activity= null;
public static void call(String code){
activity.callJS(code);
}
public void callJS(String code){
Log.i("MainActivity","call JS:"+code);
launcher.callExternalInterface("callJS", code);
}
将code发送到JS端使用
至此,Android端的微信登录授权配置完成了!
个人博客:http://www.tengewang.cn