Android集成微信登录

这篇具有很好参考价值的文章主要介绍了Android集成微信登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android集成微信登录

这篇文章给同学们图文详解Android集成微信登录的步骤,通过文章整理的内容,大家只需要几行代码就可以实现微信登录的功能。

一、首先在Application的onCreate中写:

public static IWXAPI sApi;
@Override
public void onCreate() {
 super.onCreate();
 sApi = WXEntryActivity.initWeiXin(this, "**********");
}

二、在需要登录的地方添加:

 //微信登录,跳转至微信授权页面
WXEntryActivity.loginWeixin(mActivitySelf, MyApplication.sApi);

三、下面对具体的集成步骤做详细的描述。

集成步骤:

1、在开放平台注册创建应用,申请登录权限

2、下载sdk或配置依赖,拷贝相关文件到项目工程目录

3、全局初始化微信组件

4、请求授权登录,获取code

5、通过code获取授权口令access_token

6、使用access_token获取用户信息

1. 在开放平台注册创建应用,申请登录权限

android 微信登录,android,微信

需要注意的是:应用签名的部分

android 微信登录,android,微信

需要注意的事关于应用签名这里,可以查看此博客进行获取"http://www.tangchaowang.com/kexuezhishi/3874.html"

注册成功获取到key后配置到MyApplication中,在app目录的building.gradle中添加依赖

" api ‘com.tencent.mm.opensdk:wechat-sdk-android:6.8.0’"

并在包中创建wxapi文件夹,在文件夹中创建WXEntryActivity页面,如果wxapi这个文件夹放的位置不对,将无法登录,微信sdk无法找到登录的Activity授权功能。

接着在AndroidManifest.xml文件中添加:

 <activity
            android:name=".wxapi.WXEntryActivity"
            android:label="@string/app_name"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:taskAffinity="包名" />


3. 全局初始化微信组件

全局初始化微信组件,当然是Application的onCreate里(当然Activity的onCreate也是可以的,为了全局使用微信api对象方便操作):

public static IWXAPI sApi;
public void onCreate() {
        super.onCreate();
sApi = WXEntryActivity.initWeiXin(this, "注册后获得的key");
}

4. 请求授权登录,获取code

为了统一业务的单一原则我把微信相关的都统一封装到了wxapi包下和WXEntryActivity中:

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
    private IWXAPI api;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wx_result);
        api = MyApplication.sApi;
        api.handleIntent(getIntent(), this);
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //解除注册
        EventBus.getDefault().unregister(this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        api.handleIntent(intent, this);
    }

    /**
     * 微信组件注册初始化
     *
     * @param context       上下文
     * @param weixin_app_id appid
     * @return 微信组件api对象
     */
    public static IWXAPI initWeiXin(Context context, @NonNull String weixin_app_id) {
        if (TextUtils.isEmpty(weixin_app_id)) {
            //Toast.makeText(context.getApplicationContext(), "app_id 不能为空", Toast.LENGTH_SHORT).show();
        }
        IWXAPI api = WXAPIFactory.createWXAPI(context, weixin_app_id, true);
        api.registerApp(weixin_app_id);
        return api;
    }

    /**
     * 登录微信
     *
     * @param api 微信服务api
     */
    public static void loginWeixin(Context context, IWXAPI api) {
        // 判断是否安装了微信客户端
        if (!api.isWXAppInstalled()) {
            Toast.makeText(context.getApplicationContext(), "您还未安装微信客户端!", Toast.LENGTH_SHORT).show();
            return;
        }
        // 发送授权登录信息,来获取code
        SendAuth.Req req = new SendAuth.Req();
        // 应用的作用域,获取个人信息
        req.scope = "snsapi_userinfo";
        /**
         * 用于保持请求和回调的状态,授权请求后原样带回给第三方
         * 为了防止csrf攻击(跨站请求伪造攻击),后期改为随机数加session来校验
         */
        req.state = "app_wechat";
        api.sendReq(req);
    }

    @Override
    public void onResp(BaseResp resp) {
        Intent intent;
        int code = resp.errCode;
        switch (code) {
            case BaseResp.ErrCode.ERR_OK:
                String codeWx = ((SendAuth.Resp) resp).code;
                EventBus.getDefault().post(new WxLoginEvent(codeWx));
                finish();
                break;
            default:
                finish();
                break;
        }
    }
    @Override
    public void onReq(BaseReq baseReq) {

    }

    @Subscribe
    public void onEventMainThread(WxLoginEvent event) {
    }
}

第三方通过code进行获取access_token的时候需要用到,code的超时时间为10分钟,一个code只能成功换取一次access_token即失效。code的临时性和一次保障了微信授权登录的安全性。第三方可通过使用https和state参数,进一步加强自身授权登录的安全性。

这样客户端使用的地方只要:

 //微信登录,跳转至微信授权页面
WXEntryActivity.loginWeixin(mActivitySelf, MyApplication.sApi);

5. 通过code获取授权口令access_token

我们在onResp的回调方法中获取了code,然后通过EventBus将code回调给调用微信登录的类,比如LoginActivity:

WxLoginEvent:

public class WxLoginEvent {

    private String code;

    public WxLoginEvent(String wxCode) {
        code = wxCode;
    }

    public String getData() {
        return code;
    }
}

LoginActivity:

@Subscribe
    public void onEventMainThread(WxLoginEvent event) {
        //通过Wx回调成功后调用Wx登录接口
        showDialogLoading(R.string.loading);
        wxLogin(event.getData());
    }

LoginActivity:

@Subscribe
    public void onEventMainThread(WxLoginEvent event) {
        //通过Wx回调成功后调用Wx登录接口
        showDialogLoading(R.string.loading);
        wxLogin(event.getData());
    }

接下来就根据我们的业务流程去完成登录微信登录模块文章来源地址https://www.toymoban.com/news/detail-833706.html

到了这里,关于Android集成微信登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio 制作微信,登入界面,输入密码界面,跳转手机登录界面,以及聊天界面

    2.打开Android Studio。 3.选择 \\\"Create New Project\\\"。 4.在 \\\"Create New Project\\\" 对话框中,输入项目名称、选择存储位置等信息。 5.选择最低支持的Android版本,并选择一个适合的活动模板(例如,Empty Activity)。 6.点击 \\\"Finish\\\" 创建新的Android项目。 8.打开 \\\"activity_main.xml\\\" 文件,该文件用于定

    2024年02月07日
    浏览(40)
  • flutter 集成微信登录、分享功能

    1.微信开放平台创建应用 点击“创建移动应用”,填写相关信息后提交审核 审核通过后申请分享和登录的权限 2.ios相关配置 1.Associated Domains: 在xcode中依次点击:左侧根目录Runner--》TARGETS下的Runner--》Signing Capabilities--》+Capability--》添加Associated Domains 在Domains中填写域名,例如

    2024年02月16日
    浏览(30)
  • Android集成Unity(二)

    上一篇给大家分享了Android集成Unity,但那一篇解决的是Unity采用mono打包,但Unity到了2020及以上版本时,官方都是推荐il2cpp打包,所以这一篇就补上之前那一篇的短板 Android与Unity页面反复切换,无闪退 Android端: Android Studio(各大版本都可以,区别不大) Unity端:  Unity3D(各大

    2023年04月09日
    浏览(33)
  • Android集成OpenCV(NDK)

    1.下载OpenCv的动态库(.so) OpenCv官网,这边下载的是4.6.0 2.解压opencv-4.6.0-android-sdk.zip 复制目录 opencv-4.6.0-android-sdkOpenCV-android-sdksdknativejni 的 include 文件夹,和 opencv-4.6.0-android-sdkOpenCV-android-sdksdknativelibsarmeabi-v7a 目录对应的cpu架构类型.项目没有对应目录,手动创建一下. 3.配置

    2024年02月06日
    浏览(33)
  • android app控制ros机器人三(android登录界面)

    接下来是二次开发的具体环节了,由于存在用户需求,用到ros-mobile不多,更偏向于android开发。 用ppt画了简单的展示界面,与用后交流界面的功能布局。先开发一代简易版本的app,后续可以丰富完善。ctrlc+v上线。 登录界面--在ros-mobile基础上增加登录界面,初代版本只设置登

    2024年02月14日
    浏览(92)
  • Android开发 登录注册设计

    用Android Studio 简单的实现登录注册 目录 一、登录界面 activity_login.xml 布局代码: login.java 代码:  二、注册界面  activity_register.xml布局代码: register.java 代码: 三、修改密码(忘记密码 ?) activity_update_password.xml布局代码: UpdatePassword.java 代码: 四、SQLite 与 SharedPreferences 

    2024年02月08日
    浏览(42)
  • Android jar包编译及集成

    Jar包编译和集成有两种编译方式,mk和bp,Android 7版本之后逐渐采用bp格式编译,目前14版本还是兼容mk方式编译,具体写法入下: Android jar包编译 mk: 如果需要打包到systemimg,则需要将此jar包添加到PRODUCT_PACKAGES,此编译指令将jar包添加进了system分区,但是没有预加载,PRODUC

    2024年01月20日
    浏览(37)
  • flutter集成Mob推送(Android)

    Mob推送 Flutter对接文档 1、在pubspec.yaml文件中加入下面依赖 2、导入 MobPush 相关依赖 在项目根目录的build.gradle中添加以下代码: 3、在 /android/app/build.gradle 中添加以下代码: 4、平台相关集成 在项目的/android/app/build.gradle中添加: 5、在MainActivity的onCreate中添加以下代码: SDK API

    2024年02月02日
    浏览(39)
  • Android 集成firebase 推送(FCM)

    1,集成firebase 基础 1googleService文件 2项目级gradle 3app级gradle 4setting  2,推送相关 重点: 源文档:设置 Firebase Cloud Messaging 客户端应用 (Android) (google.com) 1清单文件 4主启动Activity(清单文件里设置 action android:name=\\\"android.intent.action.MAIN\\\" / 的Activity) ==================结束==============

    2024年04月22日
    浏览(28)
  • Android之 集成音视频通话

    一,背景 1.1 最近接收一个即时通讯二开项目,即时通讯部分用的XMPP协议,音视频则是集成的国外的开源免费库jitsi-meet-sdk-2.4.0-4.aar,是基于WebRTC的开源框架。但客户想要微信那种页面的排版,后来经研究jitsi是不能修改UI的,UI部分是用混合框架ReactNative写的,这样难度就大了

    2024年02月12日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包