yorkie / react-native-wechat

🚀 WeChat login, share, favorite and payment for React-Native on iOS and Android platforms (QQ: 336021910)
https://npmjs.org/package/react-native-wechat
MIT License
2.91k stars 713 forks source link

微信小程序分享教程 #481

Open wuweijian1997 opened 5 years ago

wuweijian1997 commented 5 years ago

1.下载 这个库的代码,复制全部文件覆盖掉/node_modules/react-native-wechat目录下的所有文件。 2.拿到小程序的原始ID,不是appid。公众平台-设置-基本设置-原始ID image 3.

  wechat.shareToSession({
            type: 'mini',
            title: "标题",
            thumbImage: "https://cdn2.jianshu.io/assets/web/gupao-43e5e6af6d2d1b2639ab8da6cdcdd1ed.png",
            description: "description",
            webpageUrl: "https://www.baidu.com",
            userName: 'gh_a.',//小程序原始ID
            path: '/pages/index/index',  //小程序页面路径
            miniProgramType: 2, //0-发布,1-开发,2-测试。好像是这个,不是很确定
            withShareTicket: false,
        }).then((res)=>{
            Alert.alert('分享成功')
        }).catch((clickErr)=>{
        })

PS: 感觉RN要凉啊,开发起来难受的一批。

daixianceng commented 5 years ago

希望能合并到主项目中

wuweijian1997 commented 5 years ago

@ wuweijian1997你这个覆盖了支付调不起来啊

你是小程序能分享,支付掉不起来?

daixianceng commented 5 years ago

试了下,分享mini类型无反应,小米8,androidx

yorkie commented 5 years ago

@wuweijian1997 多谢你的分享,已经把该 issue 置顶了,不合并到 master 的原因主要是后来 PR 的作者应该都没有更新了,希望哪位有毅力的作者可以把某个 PR 做下去 :)

wuweijian1997 commented 5 years ago

试了下,分享mini类型无反应,小米8,androidx

1.先确认微信登录,分享好友能不能用,如果不能用说明是微信这边就没配好。 2.小程序的id有没有错,不是appid,是原始id,看上面的图。 3.无反应肯定有错误码的,测试环境可以console,真机上面拿到错误信息放到Text里,拿到错误码到issue里面搜错误码,大致能解决你的问题。 4.没用过Androidx,不太了解是否有区别。

daixianceng commented 5 years ago

@wuweijian1997 我解决了,我把puti94/react-native-wechat项目clone下来,然后将node_modules/react-native-wechat完全删掉,复制刚刚clone的整个文件夹到node_modules,然后运行npm run android重装一遍

daixianceng commented 5 years ago

@puti94作者并没有将两个bug合入进去,希望有大侠进行PR,现整理如下:

替换为支持分享小程序的库 puti94/react-native-wechat

#c5a628e70df38e886aec45f6cac6806313eef1cd

protected void onNewResultImpl(Bitmap bitmap) {
    if (bitmap != null) {
        if (bitmap.getConfig() != null) {
            bitmap = bitmap.copy(bitmap.getConfig(), true);
            imageCallback.invoke(bitmap);
        } else {
            bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
            imageCallback.invoke(bitmap);
        }
    }
}

#797b22a436b7377fa5d6eabdcc0ab5299f0dadd3

if (self.appId && r) {
    [body addEntriesFromDictionary:@{@"appid":self.appId, @"code":r.code}];
    [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body];
}
Koppel-Zhou commented 5 years ago

我将 @puti94 的分享小程序功能代码加入了本库的最新版本(2019/08/16)。链接如下: 🔗:https://github.com/Koppel-Zhou/react-native-wechat


以下部分与本库不同 android/src/main/java/com/theweflex/react/WeChatModule.java中

BaseBitmapDataSubscriber dataSubscriber = new BaseBitmapDataSubscriber() {
  @Override
  protected void onNewResultImpl(Bitmap bitmap) {
    if (bitmap != null) {
      if (bitmap.getConfig() != null) {
        bitmap = bitmap.copy(bitmap.getConfig(), true);
        imageCallback.invoke(bitmap);
      } else {
        bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
        imageCallback.invoke(bitmap);
      }
    } else {
      throw new Exception("Empty bitmap");
    }
  }
  @Override
  protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
    imageCallback.invoke(null);
  }
};

改为了

BaseBitmapDataSubscriber dataSubscriber = new BaseBitmapDataSubscriber() {
  @Override
  protected void onNewResultImpl(Bitmap bitmap) {
    try {
      if (bitmap != null) {
        if (bitmap.getConfig() != null) {
          bitmap = bitmap.copy(bitmap.getConfig(), true);
          imageCallback.invoke(bitmap);
        } else {
          bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
          imageCallback.invoke(bitmap);
        }
      } else {
        new Exception("Empty bitmap");
      }
    } catch (Exception error) {
      throw error;
    }
  }
  @Override
  protected void onFailureImpl(DataSource<CloseableReference<CloseableImage>> dataSource) {
    imageCallback.invoke(null);
  }
};

因两库不一致处较多,本人在合并代码时根据实际情况亦做了部分修改,经由真机测试各功能正常

saigyouyou commented 5 years ago

小程序唤起app要怎么做? 测试发现app在后台的时候可以调起来,但是不在的时候就不行

vivi19 commented 5 years ago

太感谢分享了 love u

gaoyunch commented 5 years ago

Android分享小程序卡片正常,IOS分享小程序卡片报错 WeChat API invoke returns false,这是为什么?

gaoyunch commented 5 years ago

IOS去除hdImageData这个属性可以正常发送小程序卡片

wuweijian1997 commented 5 years ago

IOS去除hdImageData这个属性可以正常发送小程序卡片

我也碰到过这个问题,hdImageData文件太大了,好像iOS图片超过200kb就会出现这个问题,Android是没问题的,只要压缩一下图片文件就可以了

asasugar commented 5 years ago

@wuweijian1997 报红 RCTWeChat.isWXAppSupportApi got 1 arguments, expected 2 link过,用原作者版本是没问题,替换成 puti94/react-native-wechat之后

wuweijian1997 commented 5 years ago

@wuweijian1997 报红 RCTWeChat.isWXAppSupportApi got 1 arguments, expected 2 link过,用原作者版本是没问题,替换成 puti94/react-native-wechat之后

没碰到过这个问题,不要覆盖,直接把原来的react-native-wechat删掉,然后复制进去

asasugar commented 4 years ago

@puti94作者并没有将两个bug合入进去,希望有大侠进行PR,现整理如下:

替换为支持分享小程序的库 puti94/react-native-wechat

  • node_modules/react-native-wechat/android/下面查找new ResizeOptions(100, 100)替换为new ResizeOptions(500, 400)
  • node_modules/react-native-wechat/android/src/main/java/com/theweflex/react/WeChatModule.java:329替换为下列代码:

#c5a628e70df38e886aec45f6cac6806313eef1cd

protected void onNewResultImpl(Bitmap bitmap) {
    if (bitmap != null) {
        if (bitmap.getConfig() != null) {
            bitmap = bitmap.copy(bitmap.getConfig(), true);
            imageCallback.invoke(bitmap);
        } else {
            bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
            imageCallback.invoke(bitmap);
        }
    }
}
  • node_modules/react-native-wechat/ios/RCTWeChat.m:400替换为下列代码:

#797b22a436b7377fa5d6eabdcc0ab5299f0dadd3

if (self.appId && r) {
    [body addEntriesFromDictionary:@{@"appid":self.appId, @"code":r.code}];
    [self.bridge.eventDispatcher sendDeviceEventWithName:RCTWXEventName body:body];
}

这个clone跟下载都好慢,你要不要自己建个新仓库

lilixiang5473 commented 4 years ago

你们分享的图片是不是很糊?我这里分享出去的图片特别糊