收藏
回答

微信SDK 1.8.9,通过小程序唤起App,唤起成功,handleOpenURL返回nil?

微信SDK 1.8.9,iOS App分享给微信好友,微信好友通过小程序点击打开App,能后唤起App,但是[WXApi handleOpenURL:url delegate:self]方法返回nil,onReq:(BaseReq *)req方法不回掉,无法获取到微信小程序传回的参数。请问该如何解决?我看论坛中也有相似的问题,然而并没有解决办法。

注:universalLink配置正确,且通过[WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {}];方法验证通过。

微信版本:8.0.2,iOS版本 13.4.1

微信版本:8.0.4,iOS版本:14.4.2

从微信点击打开App后的日志打印依次如下:

xlog:clear property list

wxlog:command:2040

wxlog:Error:data[{length = 0, bytes = 0x}] is empty

wxlog:Error:idPaste is nil

wxlog:Error:pasteDictionary is nil

wxlog:Error:dict is nil

wxlog:appdata is nil,

wxlog:Error:data[{length = 0, bytes = 0x}] is empty

wxlog:Error:idPaste is nil

wxlog:Error:pasteDictionary is nil

wxlog:Error:dict is nil

wxlog:appdata is nil,



最后一次编辑于  2021-04-28
回答关注问题邀请回答
收藏

1 个回答

  • 咖啡凉了
    咖啡凉了
    2022-09-21

    handleOpenURl 方法在不同地方调用过多次,可能多个不同的插件使用了微信,微信拉起APP传参的实现方法是使用iOS的剪切板

    然而,微信在handleOpenURL调用时,会清空剪切版

    导致第二次调用handleOpenURL的方法返回false,

    同时也无法监听到回调。相关错误日志如上。

    其中你的第一行打印日志:clear properList,已经清理了剪切版,后续再调用handleOpenURl,就会失败,return false

    解决方法是通过保存剪切版信息,向下传递

    override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool

    方法中先保存剪切版,在低啊用一次handleOpenURL之后,再给剪切版重新附上值

    let board = UIPasteboard.general.items
            // 微信handle使用剪切板之后会清空
            super.application(app, open: url, options: options)
    
            // 为了后续的微信handle可以正常使用,重新复制剪切板
            UIPasteboard.general.setItems(board)
            WXApi.handleOpen(url, delegate: self)
    
    2022-09-21
    有用
    回复
登录 后发表内容