关于使用微信登录第三方APP的实现(Android版)

转自:http://my.oschina.net/crazymus/blog/521164

使用微信登录APP,免去注册过程,现在已经有很多的类似应用了。集成该功能过程不复杂,但还是有一些地方需要注意的。

开始之前,需要做下面的准备工作。

1、到微信开放平台注册你的APP,并申请开通微信登录的权限。参考这里:

https://open.weixin.qq.com//

2、下载Android SDK和签名查看工具,请参考:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN/

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:

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

得到下面的数据:

?
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"
 
}

更多的接口使用,请参考:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&lang=zh_CN

 

可能的问题:

1、无法调起微信。

可能的原因是签名错误,请检查签名。

2、无法接受到微信回传的信息

可能的原因是没有把WXEntryActivity加入到AndroidManifest.xml中。


猜你喜欢

转载自blog.csdn.net/songlinjiang/article/details/51057880
今日推荐