转自:http://my.oschina.net/crazymus/blog/521164
使用微信登录APP,免去注册过程,现在已经有很多的类似应用了。集成该功能过程不复杂,但还是有一些地方需要注意的。
开始之前,需要做下面的准备工作。
1、到微信开放平台注册你的APP,并申请开通微信登录的权限。参考这里:
2、下载Android SDK和签名查看工具,请参考:
3、获取到APP的签名,并填写到微信开放平台。
下面开始进入主题:
引入微信登录相关SDK到项目的lib文件夹中,就一个文件:
1
|
libammsdk.jar
|
调用微信,申请用户授权:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//api注册
api = WXAPIFactory.createWXAPI(
this
,
"APP_ID"
,
true
);
api.registerApp(
"APP_ID"
);
SendAuth.Req req =
new
SendAuth.Req();
//授权读取用户信息
req.scope =
"snsapi_userinfo"
;
//自定义信息
req.state =
"wechat_sdk_demo_test"
;
//向微信发送请求
api.sendReq(req);
|
将APP_ID替换成你在微信开放平台申请到的,上面的代码就可以调起微信了。
授权成功后,微信会返回一个code,下面介绍如何接收微信回传的信息。
在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity.java文件,输入类似下面的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package
你的包名.wxapi;
public
class
WXEntryActivity
extends
Activity
implements
IWXAPIEventHandler{
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
//注册API
api = WXAPIFactory.createWXAPI(
this
,
"APP_ID"
);
api.handleIntent(getIntent(),
this
);
}
@Override
public
void
onResp(BaseResp resp) {
if
(resp
instanceof
SendAuth.Resp){
SendAuth.Resp newResp = (SendAuth.Resp) resp;
//获取微信传回的code
String code = newResp.code;
}
}
}
|
在AndroidManifest.xml中加入下面的代码:
1
|
<activity android:exported=
"true"
android:launchMode=
"singleTop"
android:name=
".wxapi.WXEntryActivity"
android:theme=
"@android:style/Theme.NoDisplay"
/>
|
修复WXEntryActivity中的错误,在onResp方法中获取到code,然后通过下面的接口获取到token和openid:
得到下面的数据:
1
2
3
4
5
6
7
8
|
{
"access_token"
:
"ACCESS_TOKEN"
,
"expires_in"
:7200,
"refresh_token"
:
"REFRESH_TOKEN"
,
"openid"
:
"OPENID"
,
"scope"
:
"SCOPE"
,
"unionid"
:
"o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
|
openid可以作为用户的唯一标识,将openid保存下来,就可以实现登录状态的检查了。
如果需要获取用户的信息,例如昵称,头像,可以使用下面的接口:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
得到的数据为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
{
"openid"
:
"OPENID"
,
"nickname"
:
"NICKNAME"
,
"sex"
:1,
"province"
:
"PROVINCE"
,
"city"
:
"CITY"
,
"country"
:
"COUNTRY"
,
"headimgurl"
:
"http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0"
,
"privilege"
:[
"PRIVILEGE1"
,
"PRIVILEGE2"
],
"unionid"
:
" o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
|
更多的接口使用,请参考:
可能的问题:
1、无法调起微信。
可能的原因是签名错误,请检查签名。
2、无法接受到微信回传的信息
可能的原因是没有把WXEntryActivity加入到AndroidManifest.xml中。