基于react native的原生iOS 微信登录

基于react native的原生iOS 微信登录

    • 引入SDK:WechatOpenSDK-XCFramework.xcframework
    • ios 创建CustomerWxLogin类
      • CustomerWxLogin.h
      • CustomerWxLogin.m
    • react native端调用
      • 创建wxLogin.js用于架起桥梁连接ios原生代码
      • 在页面中使用

微信open SDK

引入SDK:WechatOpenSDK-XCFramework.xcframework

xcode配置请按照ios接入指南

ios 创建CustomerWxLogin类

CustomerWxLogin.h

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <React/RCTEventEmitter.h>
#import <React/RCTBridgeModule.h>
#import <WXApi.h>@interface CustomerWxLogin : RCTEventEmitter <RCTBridgeModule, WXApiDelegate>@end

CustomerWxLogin.m

#import "CustomerWxLogin.h"
#import "WXApiObject.h"
#import <React/RCTEventDispatcher.h>
#import <React/RCTBridge.h>
#import <React/RCTLog.h>#define APP_ID @"wx"
#define UNIVERSAL_LINK @"https://xxx.com/"@implementation CustomerWxLogin#define NOT_REGISTERED (@"registerApp required.")
#define INVOKE_FAILED (@"WeChat API invoke returns false.")RCT_EXPORT_MODULE();- (instancetype)init
{self = [super init];if (self) {[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:@"RCTOpenURLNotification" object:nil];}return self;
}- (void)dealloc
{[[NSNotificationCenter defaultCenter] removeObserver:self];
}- (BOOL)handleOpenURL:(NSNotification *)aNotification
{NSString * aURLString =  [aNotification userInfo][@"url"];NSURL * aURL = [NSURL URLWithString:aURLString];if ([WXApi handleOpenURL:aURL delegate:self]){return YES;} else {return NO;}
}- (dispatch_queue_t)methodQueue
{return dispatch_get_main_queue();
}+ (BOOL)requiresMainQueueSetup {return YES;
}//微信登陆
RCT_EXPORT_METHOD(sendAuthRequest:(NSString *)scope:(NSString *)state:(RCTResponseSenderBlock)callback)
{// 注册微信[WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];SendAuthReq* req = [[SendAuthReq alloc] init];req.scope = scope;req.state = state;[WXApi sendReq:req completion:^(BOOL success) {callback(@[success ? [NSNull null] : INVOKE_FAILED]);}];
}#pragma mark - wx callback-(void) onResp:(BaseResp*)resp
{if ([resp isKindOfClass:[SendAuthResp class]]) {SendAuthResp *authResp = (SendAuthResp *)resp;NSString *authCode = authResp.code;[self sendEventWithName:@"WxLoginSuccess" body:@{@"code": authCode}];}
}@end

react native端调用

创建wxLogin.js用于架起桥梁连接ios原生代码

import { NativeEventEmitter, NativeModules } from 'react-native';let { WeChat, CustomerWxLogin } = NativeModules;if (WeChat == null) {WeChat = CustomerWxLogin;
}const WeChatEmitter = new NativeEventEmitter(WeChat);/*** @method sendAuthRequest* @param {Array} scopes - the scopes for authentication.* @return {Promise}*/
export function sendAuthRequest(scopes, state) {return new Promise((resolve, reject) => {WeChat.sendAuthRequest(scopes, state, () => {WeChatEmitter.addListener('WxLoginSuccess', (events) => {resolve(events)})});});
}

在页面中使用

import * as WeChat from '../../common/js/wxLogin';//微信授权登录WeChat.sendAuthRequest('snsapi_userinfo', 'wechat_sdk_demo').then(response => {console.log("[处理授权登录后的结果]", response.code)})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 与Android 原生通信的3种基本方式的使用

一、Flutter 与 原生通信的三种基本方式以及使用场景 1.MethodChannel 主要是用于Flutter调用原生的方法(执行一个原生的行为更合适) 2.BasicMessageChannel 用于Flutter Native双向流式通信 3.EventChannel 主要用于Native平台单独向Flutter发送事件消息流,更强调单向用…

小程序项目思路分享爬虫

小程序项目思路分享爬虫 具体需求&#xff1a; 有这几个就行&#xff0c;门店名称门店地址门店类型&#xff0c;再加上省、市、县/区门店名称&#xff1a;storeName 门店地址&#xff1a;storeAddress 程序运行&#xff1a; honor_spider获取经纬度信息。 经纬度——>详…

「PHP系列」PHP 命名空间详解

文章目录 一、PHP命名空间1. 声明命名空间2. 使用命名空间3. 命名空间的作用范围4. 子命名空间5. 全局命名空间和非命名空间代码6. 命名空间与自动加载 二、PHP命名空间使用1. 基本使用2. 子命名空间3. 全局函数和常量4. 结合自动加载 三、相关链接 一、PHP命名空间 PHP 的命名…

Ubuntu配置VScode的C++环境

在Ubuntu系统下配置C环境&#xff0c;并运行helloworld 1. 下载VScode 我这里使用的是星火应用商店&#xff0c;在商店里面可以直接下载安装 http://spark-app.store/ 2.创建文件夹 3.启动VScode并打开该文件夹 4.安装以下几个扩展 PS&#xff1a;Clang这个插件别安装&…

【电路笔记】-逻辑或非门

逻辑或非门 文章目录 逻辑或非门1、概述2、晶体管逻辑或非门3、数字逻辑或非门类型4、通用或非门逻辑或非门是数字逻辑或门与反相器或非门串联的组合。 1、概述 或非(Not-OR)门的输出通常为逻辑电平“1”,并且仅当其任何输入处于逻辑电平“1”时才变为“低”至逻辑电平“0”…

OpenHarmony应用开发引入开源C/C++库---之Har包里的NDK

Har 包 HAR&#xff08;Harmony Archive&#xff09;是静态共享包&#xff0c;可以包含代码、C 库、资源和配置文件。通过 HAR 可以实现多个模块或多个工程共享 ArkUI 组件、资源等相关代码。HAR 不同于 HAP&#xff0c;不能独立安装运行在设备上&#xff0c;只能作为应用模块…

力扣HOT100 - 73. 矩阵置零

解题思路&#xff1a; 题目要求使用原地算法 在原地算法中&#xff0c;输入数据通常在内存中直接被修改&#xff0c;而不需要额外的辅助数据结构来存储中间结果。原地算法的一个常见应用是在数组或列表上进行操作&#xff0c;而不是创建新的数组或列表来存储结果。 class So…

bash的login shell与non-login shell,以及各自的初始化过程

识别login shell与non-login shell login shell 可能是以-开头的 [almalinuxVM-AlmaLinux8-tmpl-wanlinwang ~]$ echo $0 -bash # "-" is the first character. Therefore, this is a login shell.或者以--login启动的bash [almalinuxVM-AlmaLinux8-tmpl-wanlinw…

Python自动打开Excel文件

导入必要的模块 import os import subprocess编写打开文件的函数 def open_file(file_path):"""打开指定路径下的文件。参数&#xff1a;file_path (str): 文件的路径。"""if os.name "nt": # 如果是 Windows 系统os.startfile(fi…

js面试---数据类型

1、js有哪些数据类型&#xff1f;有什么区别 js一共有Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt&#xff0c;八种数据类型。 Symbol&#xff1a;ES6新增数据类型&#xff0c;代表创建后独一无二且不可变的数据类型&#xff0c;主要是为了解决可能出现…

【截至2023年底】语言模型的发展

什么是大语言模型LLM&#xff1f;ChatGPT、LLAMA各自有什么优势&#xff1f; from&#xff1a; https://www.youtube.com/watch?vt6qBKPubEEo github&#xff1a; https://github.com/Mooler0410/LLMsPracticalGuide 来自这篇survey&#xff0c;但据说还在更新&#xff0c;到…

数据结构——线性表(顺序存储结构)

语言&#xff1a;C语言软件&#xff1a;Visual Studio 2022笔记书籍&#xff1a;数据结构——用C语言描述如有错误&#xff0c;感谢指正。若有侵权请联系博主 一、线性表的逻辑结构 线性表是n个类型相同的数据元素的有限序列&#xff0c;对n>0&#xff0c;除第一元素无直接…

设置MariaDB,创建新库,新用户并授权其可以从任何主机登录

OS:CENTOS 7 1、从系统进入MariaDB # mysql -u root -p 这里的root是指MariaDB的管理员用户&#xff0c;和系统的root不搭边&#xff0c;只是同名而已。 2、看下有哪些库、用户 MariaDB [(none)]> show databases; MariaDB [(none)]>select user,host from mysql.us…

MySQL:关于数据库的一些练习题

文章目录 前面的内容已经把数据库的一些必要知识已经储备好了&#xff0c;因此下面就对于这些语句进行一些练习&#xff1a; 批量插入数据 insert into actor values (1, PENELOPE, GUINESS, 2006-02-15 12:34:33), (2, NICK, WAHLBERG, 2006-02-15 12:34:33);SQL202 找出所有…

学习R语言第二天

R语言可以做什么 1.数据分析 R语言如何使用 1. 请看我的操作方式 2. 如何获取当前路径 -- 获取当前路径 > getwd() [1] "E:/R/RWorkSpace/day01" -- 修改当前路径 > setwd(dir "E:/R") > getwd() [1] "E:/R" 3.查看当下数据值的信…

java的this关键字 and 构造器

文章目录 构造器构造器的特点this关键字举个例子吧其他链接 不难理解&#xff0c;so easy!!! 构造器 People people new People(); // People类型&#xff1a;决定着对象的类型&#xff08;在内存中的构造形式&#xff09; // people对象名称&#xff0c;在栈内存当中 // new…

UT单元测试

Tips&#xff1a;在使用时一定要注意版本适配性问题 一、Mockito 1.1 Mock的使用 Mock 的中文译为仿制的&#xff0c;模拟的&#xff0c;虚假的。对于测试框架来说&#xff0c;即构造出一个模拟/虚假的对象&#xff0c;使我们的测试能顺利进行下去。 Mock 测试就是在测试过程…

Android 允许其他应用读取本应用的私有目录

在Android中&#xff0c;应用默认是封闭的&#xff0c;不允许其他应用访问自己的私有目录。但是&#xff0c;如果你想要让其他应用能够访问你的应用中的某些文件&#xff0c;你可以使用FileProvider类来实现这一功能。 以下是使用FileProvider的步骤&#xff1a; 1. 在你的应…

SAP Fiori开发中的JavaScript基础知识12 - 闭包,模块模式,回调函数

1. 前言 本文将介绍JavaScript中几个高阶的知识点&#xff1a;闭包&#xff0c;模块和回调。 2. 闭包 在JavaScript中&#xff0c;闭包是一个非常强大的特性&#xff0c;它允许函数记住并访问它的词法作用域&#xff0c;即使它在词法作用域之外执行。 简单来说&#xff0c;…

【CVE-2023-38831】进行钓鱼攻击的研究

本文仅仅是对相关漏洞利用的学习记录&#xff0c;请各位合法合规食用&#xff01; WinRAR是一款文件压缩器,该产品支持RAR、ZIP等格式文件的压缩和解压等。WinRAR在处理压缩包内同名的文件与文件夹时代码执行漏洞,攻击者构建由恶意文件与非恶意文件构成的特制压缩包文件,诱导受…