Skip to content

兼容iOS

佘小恒 edited this page Oct 17, 2016 · 5 revisions

因为与iOS端提供的API有点区别,在此提供一套封装方案,作为参考:

events.js

'use strict';

import {NativeAppEventEmitter} from 'react-native';


function once(type, listener, context) {
    return NativeAppEventEmitter.once(type, listener, context);
}

function addListener(type, listener, context) {
    return NativeAppEventEmitter.addListener(type, listener, context);
}

function emit() {
    let args = [].slice.call(arguments, 0);
    NativeAppEventEmitter.emit.apply(NativeAppEventEmitter, args);
}

function listeners(type) {
    NativeAppEventEmitter.listeners(type);
}

function removeAllListeners(type) {
    NativeAppEventEmitter.removeAllListeners(type);
}


class Events {

    constructor() {
        this.listeners = [];
    }

    addListener(type, handler, context) {
        let listener = addListener(type, handler, context);
        this.listeners.push(listener);
        return listener;
    }

    removeAll() {
        this.listeners.forEach((listener) => {
            listener.remove();
        });
    }
}

Events.emit                 = emit;
Events.once                 = once;
Events.listeners            = listeners;
Events.addListener          = addListener;
Events.removeAllListeners   = removeAllListeners;

module.exports = Events;

wechat.js

import React, { Platform } from 'react-native';
import wechatIOS from 'react-native-wechat-ios';
import wechatAndroid from 'react-native-wechat-android';
import Events from './events';

let shareOptions;

let android = {
    registerApp(appId,callback){
        wechatAndroid.registerApp(appId,callback);
    },
    openWXApp(callback){
        wechatAndroid.openWXApp(callback);
    },
    share(options,callback){
        shareOptions = {
            title: options.title,
            desc: options.desc,
            thumbSize: 150,
            scene: options.scene,
            type: 3,
            webpageUrl: options.link,
            thumbImage: options.thumbImage,
        };
        wechatAndroid.sendReq(shareOptions,callback);
    },
    addListener(callback) {
        Events.addListener('finishedShare', callback);
    },
    removeAllListeners(){
        Events.removeAllListeners('finishedShare');
    }
}

let ios = {
    registerApp(appId,callback){
        wechatIOS.registerApp(appId,callback);
    },
    openWXApp(callback){
        wechatIOS.openWXApp(callback);
    },
    share(options,callback){
        wechatIOS.sendLinkURL(options,callback);
    },
    addListener(callback) {
        Events.addListener('didRecvMessageResponse', callback);
    },
    removeAllListeners(){
        Events.removeAllListeners('didRecvMessageResponse');
    }
}

let wechat;

if (Platform.OS === 'ios') { 
    wechat = ios;
} else {
    wechat = android;
}

export default wechat;

使用

import React, {Component} from 'react';

import {
    AppRegistry, 
    StyleSheet,
} from 'react-native';

import WeChat from './wechat';

WeChat.registerApp('',(err,res) => {
})

...

Clone this wiki locally