微信在2019年年底更新了sdk使用universal link进行应用间回调传值,并在2020年年初呼吁开发者更新,同时声明在3.30之后开始对使用旧版本微信sdk的应用开始标注"未认证应用",并在6.1之后逐步限制旧版本sdk的使用.然而很多开发者在更新完sdk之后神奇的发现,新版本的sdk在进行分享时依然会出现"未认证应用"标注但分享功能登录等功能并不受影响.这样的开发者很多,比如鄙人我.在认真核对了微信给出的开发文档之后并做了测试之后发现:基本可以确定这就是微信内部认证的逻辑问题.

对于universal link的的使用,网上有成熟的文档很多,大概分为以下几个步骤:

  • 配置在apple-app-site-association文件放置在主域名下或者.well-known目录下;
{"applinks":{"apps":[],"details":[{"appID":"`TeamID`.`bundleID`","paths":["*"]}]}}

说明:TeamID是指开发账号对应的TeamID, bundleID是指使用universal link功能的应用bundle id;
paths可以按照需要指定,比如微信建议使用子域名,类似于/wechat/*
  • 在应用中打开Associated Domains添加域名;
//配置格式如下
applinks:`主域名`.com
  • 对于注册微信来讲,还需要注册微信sdk并完成相关的实现逻辑.
//开启log
#if DEBUG
    [WXApi startLogByLevel:(WXLogLevelDetail) logBlock:^(NSString * _Nonnull log) {
        NSLog(@"wechat log : %@", log);
    }];
#endif
//注册微信
    NSString *universalLink = @"https://${主域名}/";
    BOOL wxRegister = [WXApi registerApp:WXAPPID universalLink:universalLink];
    if (!wxRegister) {
        [TreefintechNetManager umengEvent:@"1005" attributes:@{}];
    }
#if DEBUG
//检查universal link配置是否正常
    [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) {
        NSLog(@"[result]%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion);
    }];
#endif


//其他逻辑,例如分享或者登录

而很多开发者会像我一样直接使用了主域名来进行注册微信,所以微信验证应用就通不过了,这也就是"未验证应用"标识产生的原因.不过微信你说好的只是建议呢,不接受就要被标注有点过分了吧??!!

牢骚归牢骚,问题还是要解决.既然知道了原因,那修改起来就很简单了.

比较彻底的修改方法就是将应用中注册微信使用的universal link和微信后台注册的universal link同步进行修改:

  • 微信注册
NSString *universalLink = @"https://${主域名}/${子域名}";
    BOOL wxRegister = [WXApi registerApp:WXAPPID universalLink:universalLink];
    if (!wxRegister) {
        [TreefintechNetManager umengEvent:@"1005" attributes:@{}];
    }
  • 微信后台

然后就测试提交,等待审核.不过这里可能有一个问题需要注意一下就是,如果之前你已经使用主域名注册微信的方式发布了线上版本了,直接修改微信后台就会导致之前版本的应用中微信相关功能出现异常.

当然在实际测试中发现了另外一个比较好玩的事实:

只要你使用子域名注册微信,并在微信后台做对应的修改,然后使用测试包做正常的分享.操作几次之后就会发现,再回到线上应用做测试就会发现线上应用分享之后出现的"未验证应用"字样神奇般消失了.猜测微信后台的未验证应用列表可能使用了只要存在一个微信账号分享账号正常则移除这样的逻辑.这样的话就暂时不用修改线上应用的相关配置,也不用重新发包.至于未来会不会有问题要看微信的实际处理逻辑了.

从目前来看,遇到这个情况的开发者不在少数,微信官方也给出了更多的排查以及解决手段,点击查看详情.