安裝
- 終端運作
添加依賴npm install react-native-wechat --save
react-native link
安卓
- 檢查配置
- 在android/settings.gradle檔案中添加如下代碼:
include ':react-native-wechat' project(':react-native-wechat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android')
- 特别說明一下,
這是新版本中link後的寫法,官方文檔中include ':react-native-wechat'
這種是老版本寫法,意思是一樣的,對于我們這種安卓小白來說,千萬不要傻到兩種都寫,這樣會報重複引包的錯誤include ':RCTWeChat'
- 特别說明一下,
- 在android/settings.gradle檔案中添加如下代碼:
- 在android/app/build.gradle檔案中的dependencies标簽中添加子產品依賴
//同樣注意react-native-wechat和:RCTWeChat寫一種就可以 dependencies { ··· compile project(':react-native-wechat') }
- 在MainActivity.java或者MainApplication.java檔案中添加以下代碼:
import com.theweflex.react.WeChatPackage; @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new WeChatPackage() // Add this line ); }
- 在應用程式包中建立一個名為'wxapi'的包,并在其中建立一個名為'WXEntryActivity'的類。以便可以獲得微信的授權和分享權限。
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(); } }
- 在應用程式包中建立一個名為“wxapi”的包,并在其中建立一個名為“WXPayEntryActivity”的類。 以便可以獲得微信支付權限。
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中添加:
-keep class com.tencent.mm.sdk.** { *; }
iOS
- 如果link不成功手動檢查下一下配置(第三方庫手動添加依賴的方法)
- 将
拖入到xcode中的Libraries檔案夾中/node_modules/react-native-wechat/ios/RCTWeChat.xcodeproj
- 然後點選築工程項目檔案(原項目的.xcodeproj檔案的那個),然後選擇
頁籤。然後将剛剛添加的庫中的Products檔案夾中的.a庫拖動到Build Phases
中Link Binary With Libraries
- 在
添加如下如路徑TARGETS-> BUILD SETTINGS -> Search Paths -> Header Search Paths
$(SRCROOT)/../node_modules/react-native-wechat/ios
- 将
- 添加依賴庫
SystemConfiguration.framework CoreTelephony.framework libsqlite3. libc++ libz
- 選中
配置中Targets/info
中配置剛申請下來的URL Schema
appid
- 為了
的支援,添加 微信白名單,在iOS9.0
中的Targets/info
标簽中添加Custom iOS Traget Properties
字段,值分别為LSApplicationQueriesSchemes
t和wecha
,也可以直接編輯weixin
檔案,添加源碼info.plist
<key>LSApplicationQueriesSchemes</key> <array> <string>weixin</string> <string>wechat</string> </array>
- 在你項目的AppDelegate.m添加以下代碼,啟動[LinkingIOS]
#import <React/RCTLinkingManager.h> -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { //支付寶 if([[sourceApplication substringToIndex:] isEqualToString:@"com.alipay"]){ [AlipayModule handleCallback:url]; return YES; } //微信 return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; }
JS方法
-
注冊微信SDKregisterApp(appid)
-
微信背景注冊的APPIDappid
- 建議在應用啟動時初始化,初始化之前無法使用此子產品的其他方法。WeChat子產品隻需要初始化一次
import * as WeChat from 'react-native-wechat'; componentDidMount (){ wechat.registerApp('your appid') }
-
-
檢查是否安裝微信isWXAppInstalled()
-
檢查是否支援微信開放接口isWXAppSupportApi()
-
擷取微信SDK版本getApiVersion()
-
打開微信openWXApp()
-
微信登入授權請求sendAuthRequest([scope[, state]])
-
應用授權作用域,如擷取使用者個人資訊則填寫scope
snsapi_userinfo
-
用于保持請求和回調的狀态,授權請求後原樣帶回給第三方。該參數可用于防止csrf攻擊(跨站請求僞造攻擊),建議第三方帶上該參數,可設定為簡單的随機數加session進行校驗state
let scope = 'snsapi_userinfo'; let state = 'wechat_sdk_demo'; wechat.sendAuthRequest(scope,state) .then(res=>{ )
-
-
分享朋友圈,shareToTimeline(data)
分享好友shareToSession(data)
WeChat.shareToTimeline({ type: 'news', title: '标題', description: '描述', thumbImage: '圖檔' webpageUrl:'連結' });
-
微信支付pay(data)
WeChat.pay({ appId: '', //應用id partnerId: '', // 商家向财付通申請的商家id prepayId: '', // 預支付訂單 nonceStr: '', // 随機串,防重發 timeStamp: '', // 時間戳,防重發 package: '', // 商家根據财付通文檔填寫的資料和簽名 sign: '', // 商家根據微信開放平台文檔對資料做的簽名 }).then((requestJson)=>{ //支付成功回調 console.log(requestJson); }).catch((err)=>{ console.log(err); })
-
監聽addListener(eventType, listener[, context])
//監聽分享狀态 wechat.addListener( 'SendMessageToWX.Resp', (response) => { if (parseInt(response.errCode) === ) { toastShort('分享成功'); } else { toastShort('分享失敗'); } } );
-
和once(eventType, listener[, context])
類似,但是被調用一次後會被移除addListener
-
移除所有監聽事件removeAllListeners()