zoukankan      html  css  js  c++  java
  • 关于使用微信登录第三方APP的实现(Android版)

    使用微信登录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文件夹中,就一个文件:

    libammsdk.jar

    调用微信,申请用户授权:

    //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文件,输入类似下面的代码:

    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中加入下面的代码:

    <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

    得到下面的数据:

    { 
    "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

    得到的数据为:

    { 
    "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中。

  • 相关阅读:
    2.22
    LG P7077 函数调用
    2020/10/30 模拟赛 序列
    2020/10/27 模拟赛 数列
    2020/10/23 模拟赛 chip
    2020/10/23 模拟赛 escape
    2020/10/23 模拟赛 center
    LOJ#6581. 「ICPC World Finals 2019」断头路探测者
    LG P1587 [NOI2016]循环之美
    LG P4156 [WC2016]论战捆竹竿
  • 原文地址:https://www.cnblogs.com/lenkevin/p/5498331.html
Copyright © 2011-2022 走看看