react-native 微信登录-android

android 微信登录

1 导入微信依赖

在 android/app/build.gradle 文件中添加依赖:

dependencies {
    api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
2 添加权限

在android/app/src/main/AndroidManifest.xml 中添加必要的权限支持(其中网络权限如果没有使用扫码登录功能非必要;后三个权限,如果没有使用 mta,也非必要,即使有使用 mta,去掉也不影响功能):

<uses-permission android:name="android.permission.INTERNET" />

<!-- for mta statistics, not necessary-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
3 创建包名

在android/app/src/main/java/com/项目名/下创建包名 wxapi(个人确定),后续创建的java文件都放在这个文件夹下。

4 创建 demoModule.java

此处需要用到的api可以参考react-native-wechat的WeChatModule.java

class WxModule extends ReactContextBaseJavaModule {
  private IWXAPI api = null;
  static String APP_ID = "";
  static Promise promise = null;
  private final static String NOT_REGISTERED = "registerApp required.";
  WxModule(ReactApplicationContext reactContext) {
    super(reactContext);
    api = WXAPIFactory.createWXAPI(reactContext, null);
  }
  @Override
  public String getName() {
    return "Wxapp";  //此处Wxapp是react-native js中调用名
  }
  @ReactMethod
  public void registerApp(String APP_ID) { // 向微信注册
    WxModule.APP_ID = APP_ID;
    api.registerApp(APP_ID);
  }
   @ReactMethod
    public void openWXApp(Promise promise) {
        if (api == null) {
           promise.reject(NOT_REGISTERED);
            return;
        }
         WxModule.promise = promise;
         api.openWXApp();//打开微信
    }
    @ReactMethod
    public void sendAuthRequest(String scope, String state, Promise promise) {
        if (api == null) {
            promise.reject(NOT_REGISTERED);
            return;
        };
        DemoModule.promise= promise;
       // send oauth request
        SendAuth.Req req = new SendAuth.Req();
        req.scope = scope;
        req.state = state;
        api.sendReq(req); //获取用户信息
    }
  @ReactMethod
  public void isSupported(Promise promise) { // 判断是否支持调用微信SDK
    boolean isSupported = api.isWXAppInstalled();
    promise.resolve(isSupported);
  }

}

5创建WXEntryActivity.java

注意点:必须是这个名字。不然微信的回调执行会没有响应。

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
	
    private static final String TAG = "WXEntryActivity";
    private IWXAPI api;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    	api = WXAPIFactory.createWXAPI(this, WxModule.APP_ID);
        api.handleIntent(getIntent(), this);
    }

	@Override
	protected void onNewIntent(Intent intent) {
		super.onNewIntent(intent);
		setIntent(intent);
        api.handleIntent(intent, this);
	}

	@Override
	public void onReq(BaseReq req) {
	}

	@Override
	public void onResp(BaseResp baseResp) {
		Log.d("baseResp",baseResp.toString());
	  WritableMap map = Arguments.createMap();
      map.putInt("errCode", baseResp.errCode);
      map.putString("errStr", baseResp.errStr);
      map.putString("openId", baseResp.openId);
      map.putString("transaction", baseResp.transaction);

      if (baseResp instanceof SendAuth.Resp) {
          SendAuth.Resp resp = (SendAuth.Resp) (baseResp);
          map.putString("type", "SendAuth.Resp");
          map.putString("code", resp.code);
          map.putString("state", resp.state);
          map.putString("url", resp.url);
          map.putString("lang", resp.lang);
          map.putString("country", resp.country);
      } else if (baseResp instanceof SendMessageToWX.Resp) {
          SendMessageToWX.Resp resp = (SendMessageToWX.Resp) (baseResp);
          map.putString("type", "SendMessageToWX.Resp");
      } else if (baseResp instanceof PayResp) {
          PayResp resp = (PayResp) (baseResp);
          map.putString("type", "PayReq.Resp");
          map.putString("returnKey", resp.returnKey);
      }
		demoModule.promise.resolve(map);
	}
}
6创建DemoPackage.java
public class DemoPackage implements ReactPackage {
  @Override
  public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
    return Collections.emptyList();
  }
  @Override
  public List<NativeModule> createNativeModules(
          ReactApplicationContext reactContext) {
    List<NativeModule> modules = new ArrayList<>();
    modules.add(new DemoModule(reactContext));
    return modules;
  }
}
7注册模块

在android/app/src/main/java/com/项目名/MainApplication.java 中注册DemoPackage()

@Override
        protected List<ReactPackage> getPackages() {
          @SuppressWarnings("UnnecessaryLocalVariable")
          List<ReactPackage> packages = new PackageList(this).getPackages();
           packages.add(new WxPackage());
          return packages;
        }

8调用activity

创建WXEntryActivity文件后需要AndroidManifest.xml文件添加exported、taskAffinity及launchMode属性,其中exported设置为true,taskAffinity设置为你的包名,launchMode设置为singleTask

<activity
    android:name="你的包名.wxapi.WXEntryActivity"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:exported="true"
    android:taskAffinity="填写你的包名"
    android:launchMode="singleTask">
</activity>
8 react-native 中调用模块
import {NativeModules} from 'react-native'
	
NativeModules.Wxapp.registerApp('appid')
NativeModules.Wxapp.isSupported().then((result) => {
    console.log(result,'是否安装微信')
}).catch((err) => {
  console.log(err,'检测是否安装微信错误')
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斤斤丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值