react-native-wechat-lib/docs/build-setup-android.md
2023-02-07 16:00:02 +08:00

3.9 KiB
Raw Blame History

Build Setup for Android

注意

请根据本文档严格配置,否则会导致微信无法回调你的应用,例如授权登录后无法跳回 APP或者小程序无法拉起 APP 如果配置过程有不明白,可以查看 样本工程 在样本工程里搜索 'react-native-wechat-lib support' 便可以找到所有需要添加配置的地方

注册模块

添加到 MainApplication.javaMainActivity.java:

import com.wechatlib.WeChatLibPackage; // Add this line

  @Override
  protected List<ReactPackage> getPackages() {
    @SuppressWarnings("UnnecessaryLocalVariable")
    List<ReactPackage> packages = new PackageList(this).getPackages();
    // Packages that cannot be autolinked yet can be added manually here, for example:
    // packages.add(new MyReactNativePackage());
    packages.add(new WeChatLibPackage()); // Add this line
    return packages;
  }

登录和分享回调

如果您打算集成登录或共享功能,则需要这样做 在应用程序包和类中创建名为 "wxapi" 的包, 命名为 WXEntryActivit

package your.package.wxapi;

import android.app.Activity;
import android.os.Bundle;
import com.wechatlib.WeChatLibModule;

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

Then add the following node to AndroidManifest.xml:

<manifest>
  <application>
    <activity
      android:name=".wxapi.WXEntryActivity"
      android:label="@string/app_name"
      android:exported="true"
    />
  </application>
</manifest>

支付回调

If you are going to integrate payment functionality by using this library, then create a package named also wxapi in your application package and a class named WXPayEntryActivity, this is used to bypass the response to JS level:

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();
  }
}

Then add the following node to AndroidManifest.xml:

<manifest>
  <application>
    <activity
      android:name=".wxapi.WXPayEntryActivity"
      android:label="@string/app_name"
      android:exported="true"
    />
  </application>
</manifest>

如果遇到安卓App拉起小程序后小程序无法返回App的情况需要在AndroidManifest.xml的WXEntryActivity中添加下面这段配置:

android:taskAffinity="your packagename"
android:launchMode="singleTask"

保证跳转后回到你的app的task。 实际上,我的代码如下:

<manifest>
  <application>
    <activity
      android:name=".wxapi.WXEntryActivity"
      android:label="@string/app_name"
      android:exported="true"
      android:taskAffinity="org.xxx.xxx.rnapp"
      android:launchMode="singleTask"
    />
  </application>
</manifest>

关于 Android11

微信将于近期发布 targetSdkVersion 30的客户端版本因Android11系统特性该微信版本在Android 11及以上系统版本的设备上运行时授权登录、分享、微信支付等功能受到影响可能无法正常使用。为了适配 Android 系统新版本特性保证微信功能正常使用请第三方应用2021年11月1日之前进行更新

在自己 React Native 项目的 android/app/src/main/AndroidManifest.xml 中添加:

<queries>
    <!--
      微信 Android 11-更新 openSDK 适配
      参见 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html#jump2
    -->
    <package android:name="com.tencent.mm" />
/queries>