react-native获取当前版本号,iOS和安卓封装代码

最近的更新貌似都是跟原生有关系,
RN的瓶颈就是原生了, 最好iOS和安卓 都要会,
不过如果我iOS和安卓都很厉害 RN是不是很尴尬.....
技术不停更新吧....

小伙伴以后不要找第三方来写这些小功能,自己动手是最快的

先来安卓吧

不会的就直接复制
先创建一个RNToolsManager 类

import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.uimanager.IllegalViewOperationException;

import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;

public class RNToolsManager extends ReactContextBaseJavaModule {

    public RNToolsManager(ReactApplicationContext reactContext) {

        super(reactContext);

    }

    //    重写getName方法声明Module类名称,在RN调用时用到
    @Override
    public String getName() {
        return "RNToolsManager";
    }

    //    声明的方法,外界调用
    @ReactMethod
    public void getAppVersion(Callback successCallback) {
        try {
            PackageInfo info = getPackageInfo();
            if (info != null) {
                successCallback.invoke(info.versionName);
            } else {
                successCallback.invoke("");
            }
        } catch (IllegalViewOperationException e) {

        }
    }

    //    获取 APP 信息
    private PackageInfo getPackageInfo() {
        PackageManager manager = getReactApplicationContext().getPackageManager();
        PackageInfo info = null;
        try {
            info = manager.getPackageInfo(getReactApplicationContext().getPackageName(), 0);
            return info;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            return info;
        }
    }
}

再创建RNToolsPackage

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class RNToolsPackage implements ReactPackage {


    @Override
    public List createViewManagers(ReactApplicationContext reactContext) {
        return Collections.emptyList();
    }

    @Override
    public List createNativeModules(
            ReactApplicationContext reactContext) {
        List modules = new ArrayList<>();

//        添加一个安卓原生的activity模块
        modules.add(new RNToolsManager(reactContext));

        return modules;
    }

}

注册自己封装
MainApplication.java

 @Override
    protected List getPackages() {
      return Arrays.asList(
            new MainReactPackage(),
         ...
            new RNToolsPackage() //添加这里
        ...
      );
    }

安卓搞定,很简单吧

接下来IOS

创建 RNToolsManager类
老办法,不会就直接复制
RNToolsManager.h文件里

#import 
#import 

@interface RNToolsManager : NSObject 

@end

RNToolsManager.m文件里

#import "RNToolsManager.h"
@implementation RNToolsManager

@synthesize bridge = _bridge;

RCT_EXPORT_MODULE(RNToolsManager);
//  对外提供调用方法,Callback
RCT_EXPORT_METHOD(getAppVersion:(RCTResponseSenderBlock)callback)
{
  NSString *version = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];//获取项目版本号
  callback(@[[NSString stringWithFormat:@"%@",version]]);
}

@end

接下来是JS端代码

import { NativeModules} from 'react-native';

NativeModules.RNToolsManager.getAppVersion((event)=>{
           console.log(event);
})

没什么不懂得了吧.

Git就不上了,也没几行代码

你可能感兴趣的:(react-native获取当前版本号,iOS和安卓封装代码)