封装iOS原生模块供ReactNative使用.

React Native支持在其基础上编写原生代码, 具有访问平台所有的能力.在日常开发中,github上很多的RN组件已经满足了大家的使用.如果有不支持你需要的原生特性的需求出现,就需要自己该特性的封装.

参考rn中文网.在React Native中,一个“原生模块”就是一个实现了“RCTBridgeModule”协议的Objective-C类,其中RCT是ReaCT的缩写.

本文按照一个调用本地通讯录的示例来说明.

大家需要新建一个静态文件库


组件名称MailList  在.h文件中


.m文件

为了实现RCTBridgeModule协议,你的类需要包含RCT_EXPORT_MODULE()宏。这个宏也可以添加一个参数用来指定在Javascript中访问这个模块的名字。如果你不指定,默认就会使用这个Objective-C类的名字。

在这里我们指定改类名


然后我们需要声明给Javascript导出的方法,声明通过RCT_EXPORT_METHOD()宏来实现:


我是把需要js传递的参数放入字典中了, 如果没有参数

RCT_EXPORT_METHOD(getMailList:(RCTResponseSenderBlock)sucessCallback :(RCTResponseSenderBlock)failCallback)

{

   //写入你调用原生通讯录的代码

   //展示原生通讯录界面 需要你获取当前的控制器 , 然后把通讯录界面展示在当前控制器上

}

然后再静态库中配置路径




路径输入 $(SRCROOT)/../../react-native/React, 选择recurvise


然后我们新建一个文件夹名称


按照官方命名规范,插件名称都是小写.

然后再该文件夹中,需要我们新建一个iOS文件夹和一个index.js文件

iOS 文件夹放入你写的插件内容


index.js 导出该插件


package.json 通过npm init 自动生成.

然后我们可以将该插件复制到RN工程 的node_modules中


然后大家通过react-native link  xxx(插件全称) 命令集成进工程中,

也可以手动导入,在Libraries中 选择Add Files to "工程名", 选择node_modules中要导入的插件mailList.xcodeproj添加进来,

然后Build Phases中添加静态.a文件进去




最终我们在RN工程中可以通过js调用


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native封装原生第三方SDK的步骤如下: 1. 创建一个原生模块Native Module),以便React Native应用程序可以与原生代码进行交互。对于iOS,你需要创建一个Objective-C或Swift类;对于Android,你需要创建一个Java类。 2. 在原生模块中编写代码,调用第三方SDK的API并将其封装为JavaScript可以调用的函数。你可以使用React Native的RCT_EXPORT_MODULE宏将该模块导出到JavaScript中。例如,下面是一个在iOS封装Facebook SDK的例子: ```objective-c #import <FBSDKCoreKit/FBSDKCoreKit.h> #import <React/RCTBridgeModule.h> @interface MyFacebookModule : NSObject <RCTBridgeModule> @end @implementation MyFacebookModule RCT_EXPORT_MODULE(); RCT_EXPORT_METHOD(login:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; [loginManager logInWithPermissions:@[@"public_profile", @"email"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { if (error) { reject(@"login_error", error.localizedDescription, error); } else if (result.isCancelled) { reject(@"login_cancelled", @"User cancelled login", nil); } else { resolve(result.token.tokenString); } }]; } @end ``` 这个模块导出了一个名为`login`的函数,该函数会登录Facebook,并返回一个Promise,该Promise将在登录成功后解析为一个Facebook访问令牌,或在登录失败时拒绝。 3. 在JavaScript中导入原生模块,并使用它提的函数。例如,你可以使用以下代码在React Native应用程序中调用上述iOS模块: ```javascript import { NativeModules } from 'react-native'; const { MyFacebookModule } = NativeModules; MyFacebookModule.login() .then(token => console.log(`Facebook access token: ${token}`)) .catch(error => console.error(`Failed to login: ${error}`)); ``` 这个代码导入了名为`MyFacebookModule`的原生模块,并调用其`login`函数。当该函数返回时,它会返回一个Promise,你可以使用该Promise来处理成功或失败的情况。 通过将原生第三方SDK封装React Native模块中,你可以轻松地在React Native应用程序中使用该SDK,并将其与JavaScript代码无缝集成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值