微信登录android原生接入详解

接入流程

  1. sdk 下载 将 wechat-sdk-android-with-mta-1.0.2.jar包文件放到 lib目录下面
  2. 注册 sdkapi 在AppActivity添加方法regToWx
public static final String APP_ID = "xxxxxxxxxxxxxxx";
    public static final String  APP_SECRET =  "yyyyyyyyyyyyyyyyyyyyyyy";
	public  static IWXAPI api;
    public static AppActivity app = null;
	private  void regToWx(){
		
        api = WXAPIFactory.createWXAPI(this,APP_ID,true);
		api.registerApp(APP_ID);
	}

在oncreate 中调用regToWx方法

  1. 发送授权请求 在AppActivity添加方法 sendAuthRequest
public static void  sendAuthRequest()
	{
		final SendAuth.Req req = new SendAuth.Req();
		req.scope = "snsapi_userinfo";
		req.state = "wechat_sdk_demo_test";
		boolean  re = api.sendReq(req);
        Log.v("sendAuthRequest",String.valueOf(re));
       
	}

该方法是静态方法 方便在js中调用

  1. 添加授权回调文件 WXEntryActivity 这个文件一定要在包名对应的目录下的wxapi 文件夹下面包名修改在manifest 文件package 项,同时在manifest文件添加activity
<activity android:name="com.gbank.android.wxapi.WXEntryActivity"
                  android:exported="true" 
                  android:launchMode="singleTop"
                  android:theme="@android:style/Theme.NoDisplay">
</activity>

WXEntryActivity.java 文件内容详见代码

  1. 授权回调方法成功后接受 code
public void onResp(BaseResp baseResp) {//授权回调
        if (baseResp != null) {
            resp = baseResp;
            code = ((SendAuth.Resp) baseResp).code; 
            Log.v(TAG,"code"+code);
            
        }
    }
  1. 通过code 获取access_token
private void getAccessToken(final String code) {//获取access_token

        String serverURL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
                + AppActivity.APP_ID //
                + "&secret="
                + AppActivity.APP_SECRET //
                + "&code="
                + code
                + "&grant_type=authorization_code";
       
        JSONObject jsonResult = null;
        String result = null;
        HttpGet httpRequest = new HttpGet(serverURL);
        try { 
                HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);// 发出http请求
                if (httpResponse.getStatusLine().getStatusCode() == 200)
                {   
                    
                    result = EntityUtils.toString(httpResponse.getEntity());// 获取相应的字符串

                    jsonResult = new JSONObject(result);
                    
                    if (null != jsonResult) {
                        String openid = jsonResult.getString("openid").toString().trim();
                        String access_token = jsonResult.getString("access_token").toString().trim();
                        Log.i(TAG, "openid = " + openid);
                        Log.i(TAG, "access_token = " + access_token);
                        

                    }

                }
            
        } catch (IOException e) {  
            e.printStackTrace();  
        } catch (JSONException e) {
            e.printStackTrace();
        }  
        
                
    }

拿到token 后与服务器做验证即可

注意事项

  1. 更换 APP_ID 和 APP_SECRET 在 AppActivity.java 文件中
  2. 修改开放平台签名要用 Gen_Signature_Android2.apk工具获取二次签名串.工具在工程目录下
  3. 修改包名一定要更改WXEntryActivity.java 文件路径与之对应
  4. 游戏中调用方法已经封装在NativeWrapper.js 里面了放调用。代码示例:
let NativeWrapper = require("NativeWrapper");
NativeWrapper.sendAuthRequest();


需要源码的发邮件我