react-native-wechat icon indicating copy to clipboard operation
react-native-wechat copied to clipboard

Integrate the new SDK to support mini program

Open little-snow-fox opened this issue 5 years ago • 43 comments

使用全新的 wechat SDK,更换掉目前年份已久的SDK。

重写大部分接口,包含微信登陆、注册SDK、分享文本、分享图片、分享视频、分享网页、分享小程序、跳转到小程序等接口,并且以上接口在 IOS 和 Android 下通过简单的测试。

由于本次更新核心代码几乎重写,所以请谨慎合并,避免影响正在使用该库的用户,特别是他们的生产环境。

little-snow-fox avatar Oct 13 '19 16:10 little-snow-fox

大佬喝茶

gdoudeng avatar Oct 14 '19 04:10 gdoudeng

重写大部分接口,包含微信登陆、注册SDK、分享文本、分享图片、分享视频、分享网页、分享小程序、跳转到小程序等接口,并且以上接口在 IOS 和 Android 下通过简单的测试。

能否只是在原代码基础上新增:升级 SDK、分享小程序以及跳转小程序,这样的话 PR 会更容易被合并进来。

yorkie avatar Oct 14 '19 05:10 yorkie

确实,方法名称与用法的变更对已使用该库的用户影响相当大,这也是我迟迟不肯推送合并的原因。 为了与微信官方文档用法保持一致,而没沿用该库原来的方法名称和用法,确实是我考虑不周,这需要专门花时间来处理。 谢谢你抽出宝贵的时间来审查代码~

little-snow-fox avatar Oct 14 '19 12:10 little-snow-fox

如果你愿意,我可以抽时间在你的基础上做修改,不过需要你把我添加为你仓库的 collaborator。

On Mon, Oct 14, 2019, 8:28 PM snowfox [email protected] wrote:

确实方法名称与用法的变更对已使用该库的用户影响相当大,这也是我迟迟不肯推送合并的原因。 为了与微信官方文档用法保持一致,而没沿用该库原来的方法名称和用法,确实是我考虑不周,这需要专门花时间来处理。 谢谢你抽出宝贵的时间来审查代码~

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/yorkie/react-native-wechat/pull/526?email_source=notifications&email_token=AAOYTF4YUTVSKZGAWAVBDZTQORQXNA5CNFSM4JAHSY32YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBEONUA#issuecomment-541648592, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAOYTF2QFI3GSOTH7JQ6TB3QORQXNANCNFSM4JAHSY3Q .

yorkie avatar Oct 14 '19 14:10 yorkie

@yorkie 太好了,很高兴你能够参与。

little-snow-fox avatar Oct 14 '19 14:10 little-snow-fox

@little-snow-fox @M1seRy 我基于这个 PR 的基础,做了一些改动(307ed4e9c822febe8e3e1ca7b2f2e3403a9d2193)主要如下:

  • 根据现有 API 的向后兼容
  • 重构了 Android 部分的实现,将大部分参数相关逻辑移到了 JS 层实现
  • 基于原有基础上,添加了分享小程序与打开小程序的功能

请两位帮忙一起看看,如果没有什么问题,iOS 部分我将在这个 PR 内继续完成。

yorkie avatar Oct 15 '19 08:10 yorkie

我也添加到了 major 标签,这个 PR 合并后,Release 版本需要变更为:2.0.0

I also labeled this PR as major, after this, the next release will be 2.0.0 :)

yorkie avatar Oct 15 '19 08:10 yorkie

@yorkie 关于被微信移除掉的 registerAppWithDescription 方法,我想提出一个兼容性方案,为了不影响正在使用本库的用户,我们可以保留 registerAppWithDescription 接口,然后把它指向 SDK 的 registerApp 方法,并且给出一个 console.warn 警告用户它已经被移除掉。你觉得这样做可以吗?

little-snow-fox avatar Oct 15 '19 16:10 little-snow-fox

@yorkie 关于被微信移除掉的 registerAppWithDescription 方法,我想提出一个兼容性方案,为了不影响正在使用本库的用户,我们可以保留 registerAppWithDescription 接口,然后把它指向 SDK 的 registerApp 方法,并且给出一个 console.warn 警告用户它已经被移除掉。你觉得这样做可以吗?

我觉得没问题,不过我记得 Node.js 有专用的 deprecation 方法,不确定 ReactNative 是否也有类似方法。

yorkie avatar Oct 15 '19 18:10 yorkie

@yorkie 请问你这边修改 JavaScript 接口代码的时候,有修改过 Object-c 和 Java 方面的代码吗?我似乎没看到这方面的修改记录。

little-snow-fox avatar Oct 16 '19 01:10 little-snow-fox

Android 部分的代码有修改过,做了一些简单的抽象,iOS 的暂时没做。

On Wed, Oct 16, 2019, 9:26 AM snowfox [email protected] wrote:

@yorkie https://github.com/yorkie 请问你这边修改 JavaScript 接口代码的时候,有修改过 Object-c 和 Java 方面的代码吗?我似乎没看到这方面的修改记录。

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yorkie/react-native-wechat/pull/526?email_source=notifications&email_token=AAOYTFYRUFB4L6PHJQCSGLTQOZUVLA5CNFSM4JAHSY32YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBKXB6Y#issuecomment-542470395, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAOYTFYF45DQQONFDOLWPYDQOZUVLANCNFSM4JAHSY3Q .

yorkie avatar Oct 16 '19 04:10 yorkie

@yorkie 如果只是修改了 JavaScript 层面的代码,这个库将没法跑起来,因为核心的地方是 object-c 和 java 方面的代码, JavaScript 层的接口方法修改后需要到 IOS 和 Android 目录实现相应功能。。。

little-snow-fox avatar Oct 16 '19 04:10 little-snow-fox

@yorkie 如果只是修改了 JavaScript 层面的代码,这个库将没法跑起来,因为核心的地方是 object-c 和 java 方面的代码, JavaScript 层的接口方法修改后需要到 IOS 和 Android 目录实现相应功能。。。

https://github.com/yorkie/react-native-wechat/commit/307ed4e9c822febe8e3e1ca7b2f2e3403a9d2193#diff-f5be6a637f5cc216645c25e9e3402450L61 可以看这里

yorkie avatar Oct 16 '19 05:10 yorkie

@yorkie 但是我似乎找不到 Object-c 的改动。

little-snow-fox avatar Oct 16 '19 07:10 little-snow-fox

嗯,iOS 的部分我稍后会加上,我们先基于 Android 和 JS 代码的基础来讨论对外的接口,以及浇水层接口的方式是否合适 :)

yorkie avatar Oct 16 '19 09:10 yorkie

嗯,可以放在根文档处

On Wed, Oct 16, 2019, 7:34 PM Kevin [email protected] wrote:

@M1seRy commented on this pull request.

In ios/README.txt https://github.com/yorkie/react-native-wechat/pull/526#discussion_r335421226 :

@@ -0,0 +1,114 @@

+重要!

可以的,但我希望有个地方可以记录当前的 SDK 版本号。

根目录的 README.md 里有相应的 SDK 版本的。

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yorkie/react-native-wechat/pull/526?email_source=notifications&email_token=AAOYTFZM7BB6GTT7P7PLEHDQO334XA5CNFSM4JAHSY32YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCID536Y#discussion_r335421226, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAOYTF5ILW3JEQ2UN3F3G73QO334XANCNFSM4JAHSY3Q .

yorkie avatar Oct 16 '19 13:10 yorkie

@little-snow-fox @yorkie

android / src / main 下的 AndroidManifest.xml 也是比较旧了,查看文档后发现这三个配置是非必须,可移除?

<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"/>

[1] AndroidManifest.xml 设置

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

https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Access_Guide/Android.html

0xinhua avatar Oct 17 '19 05:10 0xinhua

@M1seRy @little-snow-fox 已经修复了上述问题,请帮忙再看一下哦。

yorkie avatar Oct 17 '19 06:10 yorkie

@yorkie 关于被微信移除掉的 registerAppWithDescription 方法,我想提出一个兼容性方案,为了不影响正在使用本库的用户,我们可以保留 registerAppWithDescription 接口,然后把它指向 SDK 的 registerApp 方法,并且给出一个 console.warn 警告用户它已经被移除掉。你觉得这样做可以吗?

我觉得没问题,不过我记得 Node.js 有专用的 deprecation 方法,不确定 ReactNative 是否也有类似方法。

@yorkie ReactNative 的 deprecation 提示使用的是 yellowBox , 能将消息提示在页面上。

0xinhua avatar Oct 18 '19 06:10 0xinhua

直接显示在页面上是不是不太好,他那个应该是给应用去用的吧?

yorkie avatar Oct 18 '19 06:10 yorkie

@M1seRy @little-snow-fox 已经修复了上述问题,请帮忙再看一下哦。

Android 部分看起来没大问题。

little-snow-fox avatar Oct 19 '19 15:10 little-snow-fox

直接显示在页面上是不是不太好,他那个应该是给应用去用的吧?

就是 RN 一个的 Warning 提示功能(如下图),这块我觉得可以先用 console.warn 吧。

~~!代码没有发现有其它什么问题。~~

这几天升级我的 Android Studio 出现问题,解决后我会重新再跑一下Android 部分代码。

yellowbox.png

0xinhua avatar Oct 20 '19 02:10 0xinhua

好的,我有空把 iOS 的代码也更新上去,辛苦了,用 console.warn 也可以。

On Sun, Oct 20, 2019, 10:48 AM wuxinhua [email protected] wrote:

直接显示在页面上是不是不太好,他那个应该是给应用去用的吧?

就是 RN 一个的 Warning 提示功能(如下图),这块我觉得可以先用 console.warn 吧。

代码没有发现有其它什么问题。

[image: yellowbox.png] https://camo.githubusercontent.com/44e3fa107ca2b6a16c1acc8b1e650419ed549bf9/68747470733a2f2f692e6c6f6c692e6e65742f323031392f31302f32302f6355476b484b71365877736a4672742e706e67

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yorkie/react-native-wechat/pull/526?email_source=notifications&email_token=AAOYTF55ST6C7XT5B2L4TQLQPPBGNA5CNFSM4JAHSY32YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEBYBB4Y#issuecomment-544215283, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAOYTF4WEMQOYLCUJBUNYBDQPPBGNANCNFSM4JAHSY3Q .

yorkie avatar Oct 20 '19 06:10 yorkie

@little-snow-fox @M1seRy iOS + Android + JS 部分代码都更新完毕,请再帮忙看看哈。

yorkie avatar Oct 22 '19 06:10 yorkie

@yorkie ios编译提示这些错误:

/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:69:39: error: expected ')'
- (BOOL)createImageRequest:(NSString *url) (RCTImageLoaderCompletionBlock)callback
                                      ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:69:28: note: to match this '('
- (BOOL)createImageRequest:(NSString *url) (RCTImageLoaderCompletionBlock)callback
                           ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:69:44: error: expected identifier
- (BOOL)createImageRequest:(NSString *url) (RCTImageLoaderCompletionBlock)callback
                                           ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:69:44: error: expected method body
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:260:53: error: expected method body
- (BOOL)sendShareRequestWithMedia:(NSObject *)media (NSDictionary *)data (RCTResponseSenderBlock)callback
                                                    ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:287:51: error: expected method body
- (BOOL)sendShareRequestWithText:(NSString *)text (RCTResponseSenderBlock)callback
                                                  ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:262:30: error: array subscript is not an integer
    NSString *thumbURL = data[@"thumbImageUrl"];
                             ^~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:262:26: error: use of undeclared identifier 'data'
    NSString *thumbURL = data[@"thumbImageUrl"];
                         ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:268:26: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestInternal:text:media:thumb:data:callback:'
            return [self sendShareRequestInternal:NO
                    ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:265:15: error: no visible @interface for 'RCTWeChat' declares the selector 'createImageRequest:callback:'
        [self createImageRequest:thumbURL callback:^(NSError *err, UIImage *image) {
         ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:278:22: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestInternal:text:media:thumb:data:callback:'
        return [self sendShareRequestInternal:NO
                ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:289:18: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestInternal:text:media:thumb:data:callback:'
    return [self sendShareRequestInternal:YES
            ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:310:25: error: implicit conversion of 'int' to 'NSString * _Nonnull' is disallowed with ARC
        req.text = text || @"";
                   ~~~~~^~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:310:18: warning: incompatible integer to pointer conversion assigning to 'NSString * _Nonnull' from 'int' [-Wint-conversion]
        req.text = text || @"";
                 ^ ~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:310:28: warning: implicit boolean conversion of Objective-C object literal always evaluates to true [-Wobjc-literal-conversion]
        req.text = text || @"";
                        ~~ ^~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:347:16: error: incompatible block pointer types assigning to 'void (^__strong)(BOOL)' from 'BOOL (^)(BOOL)'
    completion = ^( BOOL success )
               ^ ~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:359:11: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestWithText:callback:'
    [self sendShareRequestWithText:data[@"text"] callback:callback];
     ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:383:19: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestInternal:text:media:thumb:data:callback:'
            [self sendShareRequestInternal:NO
             ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:377:11: error: no visible @interface for 'RCTWeChat' declares the selector 'createImageRequest:callback:'
    [self createImageRequest:url callback:^(NSError *err, UIImage *image) {
     ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:400:11: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestWithMedia:data:callback:'
    [self sendShareRequestWithMedia:media data:data callback:callback];
     ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:409:11: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestWithMedia:data:callback:'
    [self sendShareRequestWithMedia:media data:data callback:callback];
     ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:417:11: error: no visible @interface for 'RCTWeChat' declares the selector 'sendShareRequestWithMedia:data:callback:'
    [self sendShareRequestWithMedia:media data:data callback:callback];
     ~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
9 warnings and 20 errors generated.

tza17313 avatar Oct 23 '19 07:10 tza17313

@yorkie ios编译提示这些错误:

/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:69:39: error: expected ')'
- (BOOL)createImageRequest:(NSString *url) (RCTImageLoaderCompletionBlock)callback
                                      ^
/RN_project_path/node_modules/react-native-wechat/ios/RCTWeChat.m:69:28: note: to match this '('
...
...

@tza17313 Thanks.

0xinhua avatar Oct 23 '19 15:10 0xinhua

请问一下,有进展吗?

KingAmo avatar Oct 29 '19 01:10 KingAmo

请问一下,有进展吗?

@KingAmo 目前还在修改代码、测试阶段,距离发版还有一段时间。: )

0xinhua avatar Oct 30 '19 04:10 0xinhua

最新的提交里修改了一些 iOS 上的错误,不过还有一些库依赖问题。

yorkie avatar Nov 06 '19 12:11 yorkie

大佬们,什么时候能支持跳转小程序啊

snail714 avatar Dec 15 '19 04:12 snail714