zoukankan      html  css  js  c++  java
  • React Native之微信分享(iOS Android)

    React Native之微信分享(iOS Android)

       在使用React Native开发项目的时候,基本都会使用到微信好友或者微信朋友圈分享功能吧,那么今天我就带大家实现以下RN微信好友以及朋友圈的分享功能。

    一,应用申请审核

     大家需要去微信开发平台去注册账号并且创建一个移动应用。(地址:https://open.weixin.qq.com),然后根据流程申请即可。但是需要注意的是Android需要获取签名信息:

      下载安装上面的签名信息包apk,然后在上面输入android项目的包名,点击获取签名信息即可。android项目的包名路径:android/app/build.gradle中的applicationId标签数据。

    二,Android安装配置

        react-native-wechat库不仅支持微信分享,还支持微信登录,收藏以及微信支付的。但是登录,支付之类的功能需要开通开发者认证权限,需要300元一年。

        2.1,npm install react-native-wechat --save

        2.2,配置方法

         1,在android/settings.gradle文件中添加如下代码:

    1  include ':RCTWeChat'
    2  project(':RCTWeChat').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-wechat/android')

        2,在android/app/build.gradle文件中的dependencies标签中添加模块依赖:

    1  ...
    2   
    3 dependencies {
    4  
    5    ...
    6  
    7    implementation project(':RCTWeChat')    // Add this line only.
    8  
    9 }

        3,在MainActivity.java文件中添加如下代码:

     1 import com.theweflex.react.WeChatPackage; // Add this line before public class MainActivity
     2 
     3   ...
     4 
     5 @Override
     6 protected List<ReactPackage> getPackages() {
     7     return Arrays.<ReactPackage>asList(
     8         new MainReactPackage()
     9         , new WeChatPackage()        // Add this line
    10     );
    11 }

    以上是手动配置的方法,当然也可一键配置:npm link react-native-wechat

    4,在android项目中创建wxapi包名,com目录下创建wxapi,在该包名底下创建WXEntryActivity.java类,该类用于去微信获取请求以及响应。

     1 package your.package.wxapi;
     2  
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5  
     6 import com.theweflex.react.WeChatModule;
     7  
     8 public class WXEntryActivity extends Activity{
     9     @Override
    10     protected void onCreate(Bundle savedInstanceState) {
    11         super.onCreate(savedInstanceState);
    12         WeChatModule.handleIntent(getIntent());
    13         finish();
    14     }
    15 }

    5,在AndroidManifest.xml文件中添加刚刚创建的Actiivty的配置

     1 <manifest>
     2   ...
     3   <application>
     4     ...
     5     <!-- 微信Activity -->
     6     <activity
     7       android:name=".wxapi.WXEntryActivity"
     8       android:label="@string/app_name"
     9       android:exported="true"
    10       />
    11   </application>
    12 </manifest>

    6,混淆设置,在proguard-rules.pro中添加如下代码,当然如果不混淆就不安全啦

    1 -keep class com.tencent.mm.sdk.** {
    2    *;
    3 }

    三,ios安装配置

        1,在xcode中添加部分库依赖(Link Binary With Libraries) 在没有这些库的情况下:

    • SystemConfiguration.framework
    •  CoreTelephony.framework
    •  libsqlite3.0
    •  libc++
    •  libz

        2,选中Targets-info配置中URL Types中配置刚申请下来的appid

         3,为了iOS9.0的支持,在Targets-info中的Custom iOS Traget Properties标签中添加LSApplicationQueriesSchemes字段,值分别为wechat和weixin

         4,接下来需要在APPDelete.m文件中做一下Linking的处理配置

    1 #import <React/RCTLinkingManager.h>
    2 ...
    3 
    4 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    5   sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    6 {
    7   return [RCTLinkingManager application:application openURL:url
    8                             sourceApplication:sourceApplication annotation:annotation];
    9 }

    四,react-native-wechat分享实例

    上面我们已经把基本安装配置完成了,下面我们通过实例来进行演示一下,主要演示分享到好友/朋友圈的链接以及图片,关于更多的分享实例例如文件,图片,视频,语言,文本等等可以查看项目的说明文件即可。

    分享实例步骤:

    • 注册应用
    • 好友/朋友圈分享
    • Android测试应用需要打包测试
    • iOS版本直接测试即可,代码和下面一样

       3.1,注册应用

    1 //应用注册
    2  WeChat.registerApp(appid);

       3.2,好友/朋友圈分享

          1,图片分享

           提到图片分享 在这儿就不得不讲到屏幕截图组件react-native-view-shot的简单使用       

     1 import * as WeChat from 'react-native-wechat';
     2 import ViewShot, { captureScreen, captureRef } from "react-native-view-shot";
     3 
     4 ...
     5 
     6 captureScreen({
     7                 format: "jpg",
     8                 quality: 0.8
     9             }).then(
    10                 uri => {
    11                     let Imageuri = (uri.toLowerCase()).includes('file://')?uri:'file://'+uri
    12                     self.setState({ Imageuri: Imageuri })
    13                 },
    14                 error => console.log("Oops, snapshot failed==" + error)
    15             );

          分享给好友/群聊

     1 sharetoFrends = () => {
     2         let self = this; 
     3         WeChat.isWXAppInstalled()
     4             .then((isInstalled) => {
     5                 if (isInstalled) {
     6                     WeChat.shareToSession({
     7                         type: 'imageFile',
     8                         title: '邀请好友',
     9                         description: '',
    10                         imageUrl: self.state.Imageuri // require the prefix on both iOS and Android platform                          
    11                     })
    12                         .catch((error) => {
    13                             console.log(JSON.stringify(error));
    14                         });
    15                 } else {
    16                     Toast.show('您还没有安装微信,请安装微信之后再试');
    17                 }
    18             });
    19     }

             分享到朋友圈

     1 sharetoPyq = () => {
     2         let self = this;
     3         WeChat.isWXAppInstalled()
     4             .then((isInstalled) => {
     5                 if (isInstalled) {
     6                     WeChat.shareToTimeline({
     7                         type: 'imageFile',
     8                         title: '邀请好友',
     9                         description: '',
    10                         imageUrl: self.state.Imageuri // require the prefix on both iOS and Android platform                          
    11                     })
    12                         .catch((error) => {
    13                             console.log(JSON.stringify(error));
    14                         });
    15                 } else {
    16                     Toast.show('您还没有安装微信,请安装微信之后再试');
    17                 }
    18             });
    19 
    20     }

     2,图文链接分享

          分享给好友/群聊

     1  // 分享到好友与群聊
     2     sharetoFrends = () => {
     3         WeChat.isWXAppInstalled()
     4             .then((isInstalled) => {
     5                 if (isInstalled) {
     6                     WeChat.shareToSession({
     7                         title: 'React Native之TextInput的介绍与使用(富文本封装与使用实例,常用输入框封装与使用实例)',
     8                         description: 'TextInput是一个允许用户在应用中通过键盘输入文本的基本组件。',
     9                        
    10  thumbImage:'http://pic.58pic.com/58pic/10/97/02/30a58PICH7N.jpg',
    11                         type: 'news',
    12                         webpageUrl: 'https://www.cnblogs.com/jackson-zhangjiang/p/9524842.html'
    13                     })
    14                         .catch((error) => {
    15                             console.log(JSON.stringify(error));
    16                         });
    17                 } else {
    18                     Toast.show('您还没有安装微信,请安装微信之后再试');
    19                 }
    20             });
    21     }

          分享到朋友圈

     1 // 分享到朋友圈
     2     sharetoPyq = () => {
     3         WeChat.isWXAppInstalled()
     4             .then((isInstalled) => {
     5                 if (isInstalled) {
     6                     WeChat.shareToTimeline({
     7                         title: 'React Native之FlatList的介绍与使用实例',
     8                         description: 'FlatList高性能的简单列表组件',
     9                         thumbImage: http://pic.58pic.com/58pic/10/97/02/30a58PICH7N.jpg'',
    10                         type: 'news',
    11                         webpageUrl: 'https://www.cnblogs.com/jackson-zhangjiang/p/9523927.html'
    12                     })
    13                         .catch((error) => {
    14                             console.log(JSON.stringify(error));
    15                         });
    16                 } else {
    17                     Toast.show('您还没有安装微信,请安装微信之后再试');
    18                 }
    19             });
    20 
    21     }

      监听状态:addListener(eventType, listener[, context])

     1 //监听分享状态
     2         // 'SendMessageToWX.Resp' 分享监听字段
     3         // 'PayReq.Resp'          支付监听字段
     4         // 'SendAuth.Resp'        登录监听字段
     5         wechat.addListener(
     6             'SendMessageToWX.Resp',
     7             (response) => {
     8                 if (parseInt(response.errCode) === 0) {
     9                     alert('分享成功');
    10                 } else {
    11                     alert('分享失败');
    12                 }
    13             }
    14         );
    pay(data) : 微信支付
     1 const result = await WeChat.pay(
     2   {
     3     partnerId: '',  // 商家向财付通申请的商家id
     4     prepayId: '',   // 预支付订单
     5     nonceStr: '',   // 随机串,防重发
     6     timeStamp: '',  // 时间戳,防重发
     7     package: '',    // 商家根据财付通文档填写的数据和签名
     8     sign: ''        // 商家根据微信开放平台文档对数据做的签名
     9   }
    10 );

    五,react-native打开其他app

    1,常用URL Scheme

    QQ: mqq:// 

    微信: weixin:// 
    新浪微博: weibo:// (sinaweibo://) 
    腾讯微博: tencentweibo:// 
    淘宝: taobao:// 
    支付宝: alipay:// 
    美团: imeituan:// 
    知乎: zhihu:// 
    优酷: youku://

    2,配置Scheme白名单(仅ios,Android平台不需要)

    3,Linking跳转

     1 import { Linking } from 'react-native';
     2  
     3  
     4 // 2、跳转代码
     5 Linking.canOpenURL('weixin://').then(supported => { // weixin://  alipay://
     6      if (supported) {
     7         return Linking.openURL('weixin://');
     8      } else {
     9      }
    10 });
  • 相关阅读:
    2月4日学习日志
    2月3日学习日志
    2月2日学习日志
    2月1日学习日志
    Result Maps collection already contains value for ***
    mapreduce入门程序之---wordcount
    利用Git上传项目到github以及遇到的问题
    看100篇架构设计的文章,不如重构一次代码
    面试中的微服务架构
    分布式架构中数据一致性常见的几个问题
  • 原文地址:https://www.cnblogs.com/jackson-yqj/p/9546850.html
Copyright © 2011-2022 走看看