微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8

问题

我司的一个app因为这个原因被苹果拒了,要不然也不搞这个鬼东西!!!

  • 问题如下
微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8_第1张图片
蜜汁马赛克

Guideline 4.2.3 - Design - Minimum Functionality

We were required to install the WeChat app before we could log in via WeChat. Users should be able to log in with WeChat and access their accounts without having to install any additional apps.

Next Steps

If you would like to offer authentication through WeChat, please use a mechanism that allows users to log in with WeChat from within your app without first having to install an additional app.

We recommend implementing the Safari View Controller API to display web content within your app. The Safari View Controller allows the display of a URL and inspection of the certificate from an embedded browser in an app so that customers can verify the webpage URL and SSL certificate to confirm they are entering their sign in credentials into a legitimate page.

大体意思就是因为需要登录微信才能使用我们的app,这是违反规则的,最好无需安装任何额外的应用就能访问他们的账户巴拉巴拉~~
还给了个贴图

微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8_第2张图片
不知道苹果审核人员拿什么打开的app

解决

  • 微信SDK1.7.8版本(我直接更新的最新的SDK)
    不要相信文档啊,文档上说如果不安装微信就没法登录!!!
/*! @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)delegate;

如果安装了微信直接按照正常逻辑走,如果不是就调用sendLoginMsgToWweiXinWebPage这个方法

  • sendLoginMsgToWweiXinWebPage 是我自己的一个方法,如下
- (void) sendLoginMsgToWweiXinWebPage {
    SendAuthReq* req =[[SendAuthReq alloc ] init];
    req.scope = @"snsapi_userinfo";
    req.state = @"pedometer_binding";
    BOOL succeed = [WXApi sendAuthReq:req viewController:self delegate:self];
    if (succeed) {

    }
}
  • 会出现手机登录的网页版,填好手机号发送后会受到短信验证,里面包含链接和信息,点击链接跳转到app内部触发登录逻辑的回调
微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8_第3张图片
打开的网页版的微信登录页面(只支持手机号登录)
微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8_第4张图片
输入手机号点击发送
微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8_第5张图片
收到消息

  • 点击短信的链接回到app还是停留在发短信的页面,或者停留在确认登录的页面。


    微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8_第6张图片
    点击短信的链接回到app还是停留在发短信的页面
- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url
   sourceApplication:(NSString *)sourceApplication
          annotation:(id)annotation {
}

从短信点击链接进入app的sourceApplication是字符串com.apple.MobileSMS
在这里我进行了字符串的校验及处理,但是是没有效果的,回调的代理方法也没有执行。

if ([sourceApplication isEqualToString:@"com.apple.MobileSMS"]) {
        //微信网页登录
        BOOL succeed = [WXApi handleOpenURL:url delegate:self];
        return succeed; 
 }

下面这个方法也没有调用

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    dispatch_async(dispatch_get_main_queue(), ^{
        [WXApi handleOpenURL:url delegate:self];
    });
    return YES;
}
  • 解决方法:使用下面的方法是正解, WXApiDelegate的回调方法 -(void) onResp:(BaseResp*)resp;也会被调用
- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary *)options {
    dispatch_async(dispatch_get_main_queue(), ^{
        [WXApi handleOpenURL:url delegate:self];
    });
    return YES;
}

2018年05月29日17:04:34 更新flag

新版微信API(1.8.1版本更新文章入口)

你可能感兴趣的:(微信登录---没有安装微信客户端的解决方法(微信网页版登录)--微信API为1.7.8)