微信业务相关(二) —— 微信SDK V1.8.6版本更新问题(一)

版本记录

版本号 时间
V1.0 2019.12.28 星期日

前言

很多app都有支付和提现功能,而移动支付中支付宝、微信无疑是国内重要的支付平台和工具,最近有一个项目需要增加微信支付功能,很久没有集成了,所以最近又重新集成并整理了下,希望对大家有所帮助。感兴趣的可以看下面几篇文章。
1. 微信业务相关(一) —— 微信支付集成(一)

需要环境

首先看下需要的环境配置

  • SDK版本: SDK1.8.6或以上
  • 微信版本: 7.0.7或以上
  • 系统版本: iOS12或以上

建议开发者接入新版本SDK, 覆盖测试微信7.0.7或以上版本、iOS12或13,以验证所使用的接口的功能性和可用性。


SDK更新内容

1. 内容更新

2019年下半年微信的SDK更新了,主要是更新了下面几个地方。

  • 新增支持Universal Links进行安全性验证
    • 在iOS9之前,要在浏览器中唤醒APP,我们通常使用scheme。这种方式需要提前判断系统中是否安装了能够响应此schemeApp。当用户点击Universal Links时,iOS会将链接直接重定向到您的应用程序,而无需通过Safari或您的网站进行路由。

2. API的更改

  • 相关的注册等接口进行了更改。
  • 发送请求的接口进行了更改。

我们需要更改什么?

关于如何配置Universal Links等这里就不多说了,大家可以去网站上进行搜索参考别人的配置即可。

大家的App应该不是第一版,所以这里就只说更改,不说已有的集成流程了。

1. 微信开发平台新增Universal Links配置

在维信开发平台上新增了Universal Links这一栏,这里需要我们添加Universal Links。这样微信就可以根据这个Universal Links找到我们的App。

请到 开发者应用登记页面 进行登记,登记并选择移动应用进行设置后,将获得AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。

2. 新增URL scheme

在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“LSApplicationQueriesSchemes“添加weixinweixinULAPI

这里weixinULAPI是新增的。

3. 重写AppDelegate的continueUserActivity方法

xcode中重写continueUserActivity的方法,如下所示:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRest
oring>> * __nullable restorableObjects))restorationHandler {
  return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

需要注意的是:这个是官网的例子,但是不一定这么写,有可能你们的逻辑比这个复杂多了,你设置代理的地方也可能不是UIApplication,所以这里还是要灵活的进行处理。

4. 相关API的更改

1) 关于微信注册API的更改

微信注册的API在1.8.6中进行了更改。

1.8.6版本

/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
 *
 * 需要在每次启动第三方应用程序时调用。
 * @attention 请保证在主线程中调用此函数
 * @param appid 微信开发者ID
 * @param universalLink 微信开发者Universal Link
 * @return 成功返回YES,失败返回NO。
 */
+ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;

旧版本

/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
 *
 * 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现,默认开启MTA数据上报。
 * iOS7及以上系统需要调起一次微信才会出现在微信的可用应用列表中。
 * @attention 请保证在主线程中调用此函数
 * @param appid 微信开发者ID
 * @param typeFlag 应用支持打开的文件类型
 * @return 成功返回YES,失败返回NO。
 */
+(BOOL) registerApp:(NSString *)appid;

/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
 *
 * 需要在每次启动第三方应用程序时调用。第一次调用后,会在微信的可用应用列表中出现。
 * iOS7及以上系统需要调起一次微信才会出现在微信的可用应用列表中。
 * @attention 请保证在主线程中调用此函数
 * @param appid 微信开发者ID
 * @param isEnableMTA 是否支持MTA数据上报
 * @return 成功返回YES,失败返回NO。
 */
+(BOOL) registerApp:(NSString *)appid enableMTA:(BOOL)isEnableMTA;


/*! @brief WXApi的成员函数,向微信终端程序注册应用支持打开的文件类型。
 *
 * 需要在每次启动第三方应用程序时调用。调用后并第一次成功分享数据到微信后,会在微信的可用应用列表中出现。
 * @see registerApp
 * @param typeFlag 应用支持打开的数据类型, enAppSupportContentFlag枚举类型 “|” 操作后结果
 */
+(void) registerAppSupportContentFlag:(UInt64)typeFlag;

先看下1.8.6版本的注册API,新的版本只有一个注册方法,删除了MTA机制。旧版本有三个方法。

2) 发送请求的更改

发送请求的API也进行了更改。

1.8.6版本

/*! @brief 发送请求到微信,等待微信返回onResp
 *
 * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
 * SendAuthReq、SendMessageToWXReq、PayReq等。
 * @param req 具体的发送请求。
 * @param completion 调用结果回调block
 */
+ (void)sendReq:(BaseReq *)req completion:(void (^ __nullable)(BOOL success))completion;

/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
 *
 * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
 * @param req 具体的发送请求。
 * @param viewController 当前界面对象。
 * @param delegate  WXApiDelegate对象,用来接收微信触发的消息。
 * @param completion 调用结果回调block
 */
+ (void)sendAuthReq:(SendAuthReq *)req viewController:(UIViewController*)viewController delegate:(nullable id<WXApiDelegate>)delegate completion:(void (^ __nullable)(BOOL success))completion;

旧版本

/*! @brief 发送请求到微信,等待微信返回onResp
 *
 * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
 * SendAuthReq、SendMessageToWXReq、PayReq等。
 * @param req 具体的发送请求,在调用函数后,请自己释放。
 * @return 成功返回YES,失败返回NO。
 */
+(BOOL) sendReq:(BaseReq*)req;

/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
 *
 * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
 * @param req 具体的发送请求,在调用函数后,请自己释放。
 * @param viewController 当前界面对象。
 * @param delegate  WXApiDelegate对象,用来接收微信触发的消息。
 * @return 成功返回YES,失败返回NO。
 */
+(BOOL) sendAuthReq:(SendAuthReq*)req viewController:(UIViewController*)viewController delegate:(id<WXApiDelegate>)delegate;

通过对比,可以看见,旧的API是返回BOOL类型的参数表示是否成功。而新的API是返回一个完成的completion block,返回的是success是否成功的值。


分享跳转二次问题

当用户首次使用新版本SDK发起分享时,将会出现如下交互流程:从App拉起微信-出现“正在连接”页面-返回App-重新打开微信。以上是新的安全验证流程,每个用户在首次使用时会出现上述跳转。

首先要说明的是这个不是问题。关于官网已经给了说明,第一次分享就会出现这个页面,下次就不会了。

只会弹出来一次

不是问题,所以不用管。

参考文章

1. Universal Links-- 微信支付(1.8.6)
2. 关于openSDK1.8.6的更新说明 - 微信官方平台

后记

本篇主要讲述了微信支付集成之V1.8.6版本SDK更新,感兴趣的给个赞或者关注~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容