react-native-wechat (react-native 微信分享盒件、支付)

(一)前言

React Native開發(fā)使用到微信好友或者微信朋友圈分享功能,閑來沒事寫一下舱禽,需要的可以看下

(二)應(yīng)用申請審核

首先微信開發(fā)平臺(tái)去注冊賬號(hào)并且創(chuàng)建一個(gè)移動(dòng)應(yīng)用炒刁。(地址:https://open.weixin.qq.com)

333.png

91C99A79-B61F-4C25-8DFE-E75A4E675B1D.png

將所必填的信息填寫完整,應(yīng)用名稱以及中英文(英文是選填的)的信息誊稚,移動(dòng)應(yīng)用圖標(biāo)分別為28x28何108x108的png格式圖標(biāo)翔始。

35D07917-5C6C-45C5-BED9-603EF65A9A5B.png

繼續(xù)點(diǎn)擊下一步填寫iOS項(xiàng)目的bundle ID以及android項(xiàng)目的包名和應(yīng)用簽名罗心。請注意應(yīng)用簽名獲取需要安裝一下獲取簽名信息的APK包,同時(shí)你的android應(yīng)用也需要打包以后安裝在手機(jī)上面城瞎,這樣再去獲取渤闷。具體獲取方式見下面的圖

03ED3C36-033C-4474-B3F9-36CB0593A654.png

下載獲取第三方應(yīng)用的簽名信息apk

下載安裝上面的簽名信息包apk,然后在上面輸入android項(xiàng)目的包名,點(diǎn)擊獲取簽名信息

android項(xiàng)目的包名路徑:android/app/build.gradle中的applicationId標(biāo)簽數(shù)據(jù)脖镀。

把上面的簽名信息填寫到下面的網(wǎng)頁上面,點(diǎn)擊提交審核即可飒箭。然后就是等待吧,官方說是7個(gè)工作日蜒灰,不過一般也就是幾個(gè)小時(shí)就可以通過審核了吧补憾。

5DCFCDB9-E647-478F-9CCE-C057E3181E07.png
(三)安裝配置微信分享庫

官放項(xiàng)目地址:https://github.com/weflex/react-native-wechat 該庫不僅支持微信分享,還支持微信登錄卷员,收藏以及微信支付的盈匾。但登錄,支付之類的功能需要開通開發(fā)者認(rèn)證權(quán)限毕骡,需要300元一年削饵。

3.1.進(jìn)入根目錄安裝:
npm install react-native-wechat --save

3.2.Android版本安裝配置方法

在android/settings.gradle文件下添加以下代碼:
include ':RCTWeChat'
project(':RCTWeChat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android')
在android/app/build.gradle的dependencies部分添加以下代碼:
dependencies {
  compile project(':RCTWeChat')   
}
在MainActivity.java或者M(jìn)ainApplication.java(我是配置了在這個(gè)文件內(nèi))文件中添加以下代碼:
import com.theweflex.react.WeChatPackage;

@Override
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
   ...
    new WeChatPackage()       
  );
}

如下圖所示:


7E5148D1-761C-46DE-BC8B-412CB818A00D.png

創(chuàng)建名為'wxapi'的文件夾,并在文件夾內(nèi)創(chuàng)建WXEntryActivity.java未巫,用于獲得微信的授權(quán)和分享權(quán)限窿撬。
WXEntryActivity.java代碼:

package your.package.wxapi;

import android.app.Activity;
import android.os.Bundle;
import com.theweflex.react.WeChatModule;

public class WXEntryActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WeChatModule.handleIntent(getIntent());
    finish();
  }
}

創(chuàng)建名為'wxapi'的文件夾,并在文件夾內(nèi)創(chuàng)建WXPayEntryActivity.java叙凡,用于獲得微信的授權(quán)和支付權(quán)限劈伴。
WXPayEntryActivity.java代碼

package your.package.wxapi;

import android.app.Activity;
import android.os.Bundle;
import com.theweflex.react.WeChatModule;

public class WXPayEntryActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WeChatModule.handleIntent(getIntent());
    finish();
  }
}

在AndroidManifest.xml添加聲明
<manifest>
  <application>
    <activity
      android:name=".wxapi.WXEntryActivity"
      android:label="@string/app_name"
      android:exported="true"
    />
    <activity
      android:name=".wxapi.WXPayEntryActivity"
      android:label="@string/app_name"
      android:exported="true"
    />
  </application>
</manifest>
在proguard-rules.pro中添加(代碼為混淆設(shè)置):
-keep class com.tencent.mm.sdk.** {
   *;
}

ios配置

自動(dòng)配置執(zhí)行以下命令:
react-native link react-native-wechat
react-native-wechat ios dependency
本人不推薦自動(dòng)配置,因?yàn)闀?huì)報(bào)以下錯(cuò)誤:

99836874C019220D17AA109CA4B4F5A4.jpg

接下來看手動(dòng)配置方法:
1.點(diǎn)擊Libraries右側(cè)的ADD Files to
屏幕快照 2018-02-05 上午10.04.14.png

選擇如下內(nèi)容:
0C055476-FF19-41DC-9CD4-FC82CDACDA7B.png

2.在工程Build Phases ? Link Binary With Libraries中添加libRCTWeChat.a


C9352A2F-B689-4273-9C04-91D51AC39B26.png

3.在工程target的Build Phases->Link Binary with Libraries中加入下面庫文件:


2B9E893E-DB71-423A-9270-D4C64219FF5F.png
SystemConfiguration.framework
CoreTelephony.framework
libsqlite3.0
libc++
libz

4.在TARGETS 下項(xiàng)目名 -> info ,添加我們申請得到的微信 AppId填寫在 "URL type"的"URL Schema"處握爷,ldentifier填寫為:weixin


B82A7741-D712-49AC-B668-2B5AC5EE6280.png

5.iOS9 以上跛璧,添加 微信白名單


4FA96B25-E505-41C3-81AA-D655152D3DC7.png

6.在項(xiàng)目的AppDelegate.m添加以下代碼,啟動(dòng)[LinkingIOS]
#import <React/RCTLinkingManager.h>

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
  return [RCTLinkingManager application:application openURL:url
                            sourceApplication:sourceApplication annotation:annotation];
}

配置完成了新啼,累死寶寶了~~~
接下來就是運(yùn)用:

在組件內(nèi)引入:
import * as WeChat from 'react-native-wechat'

并且在構(gòu)造函數(shù)內(nèi)添加你的appid:
WeChat.registerApp('你的appid');
如下圖:

A586CFCA-6BA4-42C1-A2EC-EED5AB0A0CB2.png

然后就是點(diǎn)擊分享了:

先自定義一個(gè)組件(為了復(fù)用追城,縮減代碼):
class OButton extends Component {
    render() {
        return (
            <TouchableHighlight
                style={styles.button}
                underlayColor="#a5a5a5"
                onPress={this.props.onPress}>
                <Text style={styles.buttonText}>{this.props.text}</Text>
            </TouchableHighlight>
        );
    }
}

使用組件:


                <View style={{margin:20}}>
                    <Text style={styles.welcome}>
                        微信分享
                    </Text>
                    <OButton text='微信好友分享的文本'
                                  onPress={() => {
                                      WeChat.isWXAppInstalled()
                                          .then((isInstalled) => {
                                              if (isInstalled) {
                                                  WeChat.shareToSession({type: 'text', description: '測試微信好友分享的文本內(nèi)容'})
                                                      .catch((error) => {
                                                          Alert.alert(error.message);
                                                      });
                                              } else {
                                                  Alert.alert('請安裝微信');
                                              }
                                          });
                                  }}
                    />
                    <OButton text='微信好友分享鏈接'
                                  onPress={() => {
                                      WeChat.isWXAppInstalled()
                                          .then((isInstalled) => {
                                              if (isInstalled) {
                                                  WeChat.shareToSession({
                                                      title:'微信好友測試的鏈接',
                                                      description: '分享的標(biāo)題內(nèi)容',
                                                      thumbImage: '分享的標(biāo)題圖片',
                                                      type: 'news',
                                                      webpageUrl: '分享的鏈接'
                                                  })
                                                      .catch((error) => {
                                                          Alert.alert(error.message);
                                                      });
                                              } else {
                                                  Alert.alert('請安裝微信');
                                              }
                                          });
                                  }}
                    />
                    <OButton text='微信朋友圈分享的文本'
                                  onPress={() => {
                                      WeChat.isWXAppInstalled()
                                          .then((isInstalled) => {
                                              if (isInstalled) {
                                                  WeChat.shareToTimeline({type: 'text', description: '測試微信朋友圈分享的文本內(nèi)容'})
                                                      .catch((error) => {
                                                          Alert.alert(error.message);
                                                      });
                                              } else {
                                                  Alert.alert('請安裝微信');
                                              }
                                          });
                                  }}
                    />
                    <OButton text='微信朋友圈分享的鏈接'
                                  onPress={() => {
                                      WeChat.isWXAppInstalled()
                                          .then((isInstalled) => {
                                              if (isInstalled) {
                                                  WeChat.shareToTimeline({
                                                      title:'分享的標(biāo)題',
                                                      description: '分享的標(biāo)題內(nèi)容',
                                                      thumbImage: '分享的標(biāo)題圖片',
                                                      type: 'news',
                                                      webpageUrl: '分享的鏈接'
                                                  })
                                                      .catch((error) => {
                                                          Alert.alert(error.message);
                                                      });
                                              } else {
                                                  Alert.alert('請安裝微信');
                                              }
                                          });
                                  }}
                    />

                 <OButton text='微信支付'
                                 onPress={() => {
                                      WeChat.isWXAppInstalled()
                                            .then((isInstalled) => {
                                                   if (isInstalled) {
                                                        WeChat.pay({
                                                            partnerId: 'xxxxxx',  // 商家向財(cái)付通申請的商家id
                                                            prepayId: 'xxxxxx',   // 預(yù)支付訂單
                                                            nonceStr:'xxxxxx',   // 隨機(jī)串,防重發(fā)
                                                            timeStamp: 'xxxxxxx'    ,  // 時(shí)間戳燥撞,防重發(fā).
                                                            package: 'Sign=WXPay',    // 商家根據(jù)財(cái)付通文檔填寫的數(shù)據(jù)和簽名
                                                            sign: 'xxxxxxxxx'       // 商家根據(jù)微信開放平臺(tái)文檔對數(shù)據(jù)做的簽名
                                                            }).then((requestJson)=>{
                                                                      //支付成功回調(diào)                                           
                                                                      if (requestJson.errCode=="0"){
                                                                       //回調(diào)成功處理
                                                                      }
                                                                  }).catch((err)=>{
                                                                      Alert.alert('支付失敗')
                                                                  })
                                                    } else {
                                                        Alert.alert('請安裝微信');
                                                    }
                                             });
                                            
                                    }}
                         />
                </View>

最后再給大家說一個(gè)小bug,若是出現(xiàn)點(diǎn)擊微信分享閃退問題時(shí)座柱,請檢查你app的簽名是否正確,因?yàn)殚_發(fā)版和公布版的簽名是不一致的物舒,需要改成公布版的色洞,簽名獲取方式微信開放平臺(tái)有apk,也可以給我要。

如果還是閃退冠胯,終極大招;鹬睢!涵叮!清除微信緩存就好了2氧濉!割粮!親測有效6芡搿!舀瓢!

覺得有用的小伙伴點(diǎn)個(gè)關(guān)注和小紅心就行??廷雅,么么噠。

友情提示:在開發(fā)中有遇到RN相關(guān)的技術(shù)問題京髓,歡迎小伙伴加入交流群(620792950)航缀,在群里提問、互相交流學(xué)習(xí)堰怨。交流群也定期更新最新的RN學(xué)習(xí)資料給大家芥玉,謝謝大家支持!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末备图,一起剝皮案震驚了整個(gè)濱河市灿巧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌揽涮,老刑警劉巖抠藕,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒋困,居然都是意外死亡盾似,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門雪标,熙熙樓的掌柜王于貴愁眉苦臉地迎上來零院,“玉大人,你說我怎么就攤上這事村刨∶欧啵” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵烹困,是天一觀的道長玄妈。 經(jīng)常有香客問我,道長髓梅,這世上最難降的妖魔是什么拟蜻? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮枯饿,結(jié)果婚禮上酝锅,老公的妹妹穿的比我還像新娘。我一直安慰自己奢方,他們只是感情好搔扁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布爸舒。 她就那樣靜靜地躺著,像睡著了一般稿蹲。 火紅的嫁衣襯著肌膚如雪扭勉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天苛聘,我揣著相機(jī)與錄音涂炎,去河邊找鬼。 笑死设哗,一個(gè)胖子當(dāng)著我的面吹牛唱捣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播网梢,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼震缭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了战虏?” 一聲冷哼從身側(cè)響起蛀序,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎活烙,沒想到半個(gè)月后徐裸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡啸盏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年重贺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片回懦。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡气笙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出怯晕,到底是詐尸還是另有隱情潜圃,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布舟茶,位于F島的核電站谭期,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吧凉。R本人自食惡果不足惜隧出,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阀捅。 院中可真熱鬧胀瞪,春花似錦、人聲如沸饲鄙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至帆谍,卻和暖如春伪朽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背既忆。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工驱负, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗦玖,地道東北人患雇。 一個(gè)月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像宇挫,于是被迫代替她去往敵國和親苛吱。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容