1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 【React-Native】集成微信官方安卓端SDK 实现微信登录 发送/分享小程序消息等功能

【React-Native】集成微信官方安卓端SDK 实现微信登录 发送/分享小程序消息等功能

时间:2020-03-28 03:24:11

相关推荐

【React-Native】集成微信官方安卓端SDK 实现微信登录 发送/分享小程序消息等功能

github地址:/afresh/react-native-wechat-android

网上已有成熟的第三方插件react-native-wechat(以下简称RNW),本项目是由该插件源码移植过来的,并在原插件基础上实现导入官方SDK和发送小程序消息的功能。

本项目基于android端移植开发,有兴趣的同学可自行探索ios端移植。

目录

准备工作

接入SDK

阅读微信Android接入指南

签名生成工具

代码移植

安卓原生移植

WeChatModule.java

WeChatPackage.java

添加WeChatPackage包

React Native 代码移植

安装events插件

wechat.js

使用说明

原RNW的API

API Documentation

微信登录和发送小程序示例

App.js

准备工作

想要使用微信登录、支付、分享收藏消息、拉起小程序等功能,必须在微信开放平台创建移动应用,如需拉起小程序,还须关联小程序并授权APP跳转小程序,详细操作此处不做多说。

接入SDK

阅读微信Android接入指南

在开放平台应用详情页获取到AppID。在RN项目的 /android/app/build.gradle 文件中添加依赖

dependencies {compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'}

在 /android/app/src/main/AndroidManifest.xml 文件中添加必要的权限

<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

签名生成工具

访问Android资源下载,下载签名生成工具。

将签名生成工具安装到android调试机(已安装需要签名的APP)上,打开 -> 填写包名com.[wechat_android]-> 生成签名,再将签名和包名填写到微信开放平台。

代码移植

安卓原生移植

WeChatModule.java

添加文件 /android/app/src/main/java/com/[wechat_android]/WeChatModule.java

[wechat_android]为包名。

对RNW源码进行了修改:SDK导入的修改及新增发送小程序消息功能

package com.[wechat_android]; //todo: 换成你的包名import com.tencent.mm.opensdk.modelbase.BaseReq;import com.tencent.mm.opensdk.modelbase.BaseResp;import com.tencent.mm.opensdk.modelmsg.SendAuth;import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;import com.tencent.mm.opensdk.modelmsg.WXFileObject;import com.tencent.mm.opensdk.modelmsg.WXImageObject;import com.tencent.mm.opensdk.modelmsg.WXMediaMessage;import com.tencent.mm.opensdk.modelmsg.WXMusicObject;import com.tencent.mm.opensdk.modelmsg.WXTextObject;import com.tencent.mm.opensdk.modelmsg.WXVideoObject;import com.tencent.mm.opensdk.modelmsg.WXWebpageObject;import com.tencent.mm.opensdk.modelmsg.WXMiniProgramObject;import com.tencent.mm.opensdk.modelpay.PayReq;import com.tencent.mm.opensdk.modelpay.PayResp;import com.tencent.mm.opensdk.openapi.IWXAPI;import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;import com.tencent.mm.opensdk.openapi.WXAPIFactory;if (type.equals("miniProgram")) {__jsonToMiniProgramMedia(data, new MediaObjectCallback() {@Overridepublic void invoke(@Nullable WXMediaMessage.IMediaObject mediaObject, @Nullable Bitmap bitmap) {if (mediaObject == null) {callback.invoke(INVALID_ARGUMENT);} else {thumbImage = bitmap;WeChatModule.this._share(scene, data, thumbImage, mediaObject, callback);}}});return;}private void __jsonToMiniProgramMedia(ReadableMap data, final MediaObjectCallback callback) {if (!data.hasKey("imageUrl")) {callback.invoke(null, null);return;}String imageUrl = data.getString("imageUrl");Uri imageUri;try {imageUri = Uri.parse(imageUrl);// Verify scheme is set, so that relative uri (used by static resources) are not// handled.if (imageUri.getScheme() == null) {imageUri = getResourceDrawableUri(getReactApplicationContext(), imageUrl);}} catch (Exception e) {imageUri = null;}if (imageUri == null) {callback.invoke(null, null);return;}this._getImage(imageUri, null, new ImageCallback() {@Overridepublic void invoke(@Nullable Bitmap bitmap) {WXMiniProgramObject ret = new WXMiniProgramObject();ret.webpageUrl = data.getString("webpageUrl");ret.userName = data.getString("userName");ret.path = data.getString("path");callback.invoke(bitmap == null ? null : ret, bitmap);}});}

WeChatPackage.java

添加文件 /android/app/src/main/java/com/[wechat_android]/WeChatPackage.java

无需修改,直接复制RNW的。

添加WeChatPackage包

在文件 /android/app/src/main/java/com/wechat_android/MainApplication.java 中添加WeChatPackage包。

@Overrideprotected List<ReactPackage> getPackages() {return Arrays.<ReactPackage>asList(new MainReactPackage(),new WeChatPackage() //todo: 添加包);}

React Native 代码移植

安装events插件

npm install events --save

wechat.js

添加文件 ./wechat.js

无需修改,直接复制RNW的。

使用说明

原RNW的API

API Documentation

微信登录和发送小程序示例

App.js

/*** Sample React Native App* /facebook/react-native* @flow*/import React, { Component } from 'react';import {StyleSheet,Text,View,TouchableOpacity} from 'react-native';import * as WeChat from './wechat';let resolveAssetSource = require('resolveAssetSource');export default class App extends Component {componentDidMount() {WeChat.registerApp('appid'); //应用唯一标识,在微信开放平台提交应用审核通过后获得};_sendAuthRequest = () => {let scope = 'snsapi_userinfo'; //应用授权作用域,如获取用户个人信息则填写snsapi_userinfolet state = 'wechat_sdk_demo'; //用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验//判断微信是否安装WeChat.isWXAppInstalled().then((isInstalled) => {if (isInstalled) {//发送授权请求WeChat.sendAuthRequest(scope, state).then(responseCode => {//todo: 返回code码,通过code获取access_token// this.getAccessToken(responseCode.code);// 暂无this.getAccessToken方法,此方法为调用 通过code获取access_token 的微信接口// 详情请见https://open./cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&token=cff29f44fb9601cce318ec1c733dfd17c0a8de3b&lang=zh_CN}).catch(err => {console.log('登录授权发生错误:', err.message);})} else {console.log('没有安装微信,请先安装微信客户端在进行登录');}})};_shareToSession = () => {//判断微信是否安装WeChat.isWXAppInstalled().then((isInstalled) => {if (isInstalled) {//发送授权请求let imageResource = require('./icon64_wx_logo.png'); //小程序消息封面图片,小于128kWeChat.shareToSession({type: 'miniProgram',webpageUrl: "https://open./", //兼容低版本的网页链接userName: "gh_xxx", //小程序原始idpath: "/pages/media", //小程序页面路径title: '微信小程序消息', //小程序消息titledescription: '发送微信小程序消息给好友', //小程序消息descmediaTagName: '小程序消息',messageAction: undefined,messageExt: undefined,imageUrl: resolveAssetSource(imageResource).uri //小程序消息封面图片,小于128k}).then(result => {console.log('成功发送微信小程序消息给好友', result);}).catch(err => {console.log('发送微信小程序消息发生错误:', err.message);})} else {console.log('没有安装微信,请先安装微信客户端在进行登录');}})};render() {return (<View style={styles.container}><Text style={styles.welcome}>Welcome to WeChat for Android!</Text>{/* 微信登录demo */}<TouchableOpacity onPress={() => {this._sendAuthRequest()}}><Text style={styles.instructions}>To Login</Text></TouchableOpacity>{/* 发送小程序消息到好友 */}<TouchableOpacity onPress={() => {this._shareToSession()}}><Text style={styles.instructions}>To Share Mini</Text></TouchableOpacity></View>);}}const styles = StyleSheet.create({container: {flex: 1,justifyContent: 'center',alignItems: 'center',backgroundColor: '#F5FCFF',},welcome: {fontSize: 20,textAlign: 'center',margin: 10,},instructions: {textAlign: 'center',color: '#333333',marginBottom: 5,},});

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。