Android App实现第三方微信登录

Android App实现第三方微信登录

1、下载微信官方最新的sdk,集成到app。如下图:

2、注册到微信

可以在app的某个Activity的onCreate方法中注册,这里也可以在app的application的onCreate()方法中注册,这样,在整个app的中都可以使用。例如:

public class CarApplication  extends Application{

…… …… ……

public static IWXAPI api;

public void onCreate() {

//注册微信

api = WXAPIFactory.createWXAPI(this, “你的应用在微信上申请的app_id”, true);

api.registerApp(“你的应用在微信上申请的app_id”);

…… …… ……

}

}

3、在app的包名目录下新建一个wxapi目录,然后在此目录下新建WXEntryActivity.java文件,如下,app的包名为carjob.com.cn,新建的wxapi目录如下。(注意:一定是包名目录下新建,不要在其他目录新建,否则WXEntryActivity.java里的public void onResp(BaseResp resp)方法不会被调用)

WXEntryActivity继承Activity,实现IWXAPIEventHandler,并重写protected void onNewIntent(Intent intent)、public void onReq(BaseReq arg0)、public void onResp(BaseResp resp)方法。WXEntryActivity.java文件可以见最后附录。

4、发送微信登录的请求

app中点击某一个view,发送微信登录的请求如下:

final SendAuth.Req req = new SendAuth.Req();

req.scope = "snsapi_userinfo";

req.state = "carjob_wx_login";

CarApplication.api.sendReq(req);

其中,CarApplication.api就是第2步中注册的IWXAPI对象。

请求成功后,可拉起微信的授权登录页面,如下。用户点击“确认登录”后,SDK通过SendAuth的Resp返回数据给调用方(即app),此时WXEntryActivity中的public void onResp(BaseResp resp)方法被调用(微信、朋友圈分享成功后,此方法同样会被调用),微信登录的返回值说明如下。这里app可以做相关的处理,见WXEntryActivity.java文件中的处理,取code为下一步获取access_token和openid等信息做准备。此处获取code的方法:

public void onResp(BaseResp resp) {

switch (resp.errCode) {

case BaseResp.ErrCode.ERR_OK:

String code = ((SendAuth.Resp) resp).code; //即为所需的code

break;

…… …… ……

}

}

5、通过code获取access_token

获取上一步中的code后,调用以下接口获取access_token,官方指出用Get方式请求。

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

请求参数说明:

appid:应用唯一标识,在微信开放平台提交应用审核通过后获得。

secret:应用密钥AppSecret,在微信开放平台提交应用审核通过后获得。

code:填写第一步获取的code参数。

grant_type:填authorization_code。

返回说明

正确的返回:


"access_token":"ACCESS_TOKEN", 
"expires_in":7200, 
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID", 
"scope":"SCOPE" 
}

返回参数说明:

access_token:接口调用凭证。

expires_in:access_token接口调用凭证超时时间,单位(秒)。

refresh_token:用户刷新access_token。

openid:授权用户唯一标识。

scope:用户授权的作用域,使用逗号(,)分隔

6、获得access_token、openid后,app就可以根据自己的规则与互自己的server进行交互。

7、微信请求的一般流程如下:

附录:

WXEntryActivity.java

package carjob.com.cn.wxapi;

import carjob.com.cn.CarApplication;

import carjob.com.cn.newversion.MyResumeLoginView;

import carjob.com.cn.search.SharedPreferencesclass;

import carjob.com.cn.util.SharedPreferenceUtil;

import com.tencent.mm.sdk.constants.ConstantsAPI;

import com.tencent.mm.sdk.modelbase.BaseReq;

import com.tencent.mm.sdk.modelbase.BaseResp;

import com.tencent.mm.sdk.modelmsg.SendAuth;

import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;

import android.app.Activity;

import android.content.Context;

import android.content.Intent;

import android.os.Bundle;

import android.widget.Toast;

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {

private Context context = WXEntryActivity.this;

private void handleIntent(Intent paramIntent) {

CarApplication.api.handleIntent(paramIntent, this);

}

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

handleIntent(getIntent());

}

@Override

protected void onNewIntent(Intent intent) {

// TODO Auto-generated method stub

super.onNewIntent(intent);

setIntent(intent);

handleIntent(intent);

}

@Override

public void onReq(BaseReq arg0) {

// TODO Auto-generated method stub

finish();

}

@Override

public void onResp(BaseResp resp) {

// TODO Auto-generated method stub

switch (resp.errCode) {

case BaseResp.ErrCode.ERR_OK:

if (ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX == resp.getType()) {

Toast.makeText(context, "分享成功", Toast.LENGTH_LONG).show();

break;

}

String code = ((SendAuth.Resp) resp).code;

new SharedPreferencesclass(49, code, context);

System.out.println("微信确认登录返回的code:" + code);

Toast.makeText(context, "微信确认登录返回的code:" + code, Toast.LENGTH_LONG).show();

MyResumeLoginView.loginHandler.sendEmptyMessage(MyResumeLoginView.WEIXIN_LOGIN_SUCCESS);

break;

case BaseResp.ErrCode.ERR_USER_CANCEL:

break;

case BaseResp.ErrCode.ERR_AUTH_DENIED:

break;

default:

break;

}

finish();

}

}

Android App实现第三方微信登录相关推荐

  1. APP调用第三方(微信)登录(最详细的实现流程)

    最近使用weexplus做了个app 用户需要的是可以使用第三方微信实现登录(虽然网上有很多相关的什么申请开发者账户.appid.openid等资料:但是都是讲的中间的那一部分请原谅我是个菜鸟,脑补开 ...

  2. android 第三方登录界面,Android App集成第三方登录与换肤指南

    Android App集成第三方登录与换肤指南 文档编辑 概述 本文主要是介绍了如何通过开源框架快速支持QQ和微信登录,并介绍了如何实现app快速换肤 QQ登录接入 APP要支持QQ登录,需要先到腾讯 ...

  3. 巧用第三方快速开发Android App 热门第三方SDK及框架

    巧用第三方快速开发Android App 热门第三方SDK及框架 历经大半年的时间,终于是把这门课程给录制出来了,也就在今天,正式在慕课网上上线了 项目地址:巧用第三方快速开发Android App ...

  4. android登录操作代码,Android Studio实现第三方QQ登录操作代码

    来看看效果图吧 实现QQ登录了, 新建一个项目工程 ,然后把我们刚才下载的SDK解压将jar文件夹中的jar包拷贝到我们的项目libs中 导入一个下面架包就可以 项目结构如下 打开我们的清单文件And ...

  5. iOS第三方微信登录时不走回调方法

    ios 开发中第三方微信登录时,使用真机测试,授权登录按钮点击后不走微信demo的 -(void)onResp:(BaseResp*)resp 回调方法不走,无法判断是否成功 查看网上一些解决方法,自 ...

  6. uni-app关于小程序及app端第三方微信登陆问题(app端如何取得code值)

    加强安全保护,防止部分应用邀请新用户有奖励而产生的刷号行为,和后端配合,不从前端传openid,取得相应的code值给后端,后端再去拿到openid获取用户信息. 1.第三方微信登陆,主要是在获取co ...

  7. android app调用第三方地图路线规划导航(百度,高德,腾讯)

    android app调用第三方地图路线规划导航(百度,高德,腾讯) 因为直接使用高德的sdk提供的导航被投诉说不准,所以需要接第三方. 把BAT系的地图都接上了,有兄弟找到其他的地图调用方法告诉下小 ...

  8. Android APP跳转微信小程序和APP跳转支付宝小程序传参

    Android APP跳转微信小程序和APP跳转支付宝小程序传参 微信开放文档链接 MINIPROGRAM_TYPE_PREVIEW:体验版. MINIPROGRAM_TYPE_TEST:开发版 MI ...

  9. Android App拉起微信小程序提示bad_param

    Android App拉起微信小程序提示bad_param,主要是因为req.userName的值传错,req.userName的值是小程序的原始ID,而不是appId,小程序之间的跳转是appId. ...

最新文章

  1. 陷阱太多!究竟该如何应对逆袭神器期权?某程序员历经4次上市公司,终于顿悟!...
  2. 基于 GraphQL 实践的一点思考
  3. 如何查阅资料,解决问题(个人的小看法)
  4. 在vim粘贴系统剪切板里的内容
  5. C语言实现线索二叉树Threaded Binary Tree (附完整源码)
  6. vue标准时间改为时间戳_正确的济南初中寒假放假时间安排出来啦!家长速戳→...
  7. 列表合并变种题,map()函数扩展
  8. (10)FPGA专业术语(第2天)
  9. php不能连接远程mysql_无法远程连接mysql怎么办
  10. Cesium 已知两点,计算以一个点为圆心,将另一个点旋转一定度数后的新点的坐标/position_A绕position_B逆时针旋转angle度(角度)得到新点 function rotatedPo
  11. vscode主题 webstorm_vscode/webstorm快捷键
  12. 前端常用素材网站整理
  13. X360吉他英雄4鼓套装 1 TB硬盘入手
  14. 嵌入式和java工资对比_嵌入式和java哪个前景好
  15. 小猿日记 - 程序猿的日常日记(3)
  16. 7z001怎么解压在安卓手机上面_安卓手机用户换iPhone11怎么转移手机便签内容?...
  17. [大话设计模式C++版] 第17章 在NBA我需要翻译 —— 适配器模式
  18. 决策树(ID3,C4.5和CART)介绍、说明、联系和区别
  19. 本科、硕士和博士有何区别?
  20. 为什么需要api产品经理

热门文章

  1. java后台两个表关联查询_Java Criteria表关联查询(两个表未定义关联关系)
  2. 软件测试培训哪里好,培训出来的工资一般是多少?
  3. LaTeX写中文文章的模板 --- 添加中英文摘要,引入图片、参考文献、多张图片并排,去掉日期
  4. [附源码]计算机毕业设计Python大学生心理健康测评系统(程序+源码+LW文档)
  5. PowerDesigner数据库设计与建模。数据库中设计一对一、一对多、多对多、依赖关系、继承关系。
  6. macOS FTP服务器架设
  7. cocos creator小游戏加载跨域头像
  8. Windows中使用reg命令编辑注册表
  9. 计算机中agp显卡的原理,AGP显卡
  10. IDEA 启动时生成图案