美文网首页好东西小知识点
ios 加载webview遇到的坑

ios 加载webview遇到的坑

作者: 薰衣草儿 | 来源:发表于2017-08-04 14:52 被阅读57次

    首选 我不是什么大牛,不懂js,而偏偏项目中有好多地方嵌入了h5,嵌入h5吗 其实挺简单的,不就是一些什么协议什么详情的吗!这还不简单呀!一看项目需求懵逼了.

    先说几个要点:

    1 .点击h5页面的某个按钮 判断是否登录,如果没有登录的话,需要登录,把userid当做参数传过去

    2. h5有个扫码功能 需要app去实现,把扫码结果传给h5页面

    3 .h5中包含了支付 有支付宝支付,微信支付,其中 支付宝支付是用的移动网站支付, 微信支付是用原声app支付

    其实这几个问题逻辑都差不多

    所有的代码逻辑都在shouldStartLoadWithRequest方法中

    直接上代码  h5跳转支付宝

    2 判断是否登录

    3 跳转微信 本来准备微信也像支付宝一样 用移动应用内支付 但微信这技术还没有支付宝成熟 支付完成之后 跳转到浏览器 不会返回原app 给微信的人发邮件,结果技术人员说,就是这样的,无奈 只好又改成微信的app原生支付了

    这个应该有个注意点 其实微信需要的参数,都在url上,难点在于怎么获取url上的参数,被着急 下面是获取参数的方法  我写在了一个NSString的分类中了

    ```

    /***

    iOS 获取url中的参数 返回值为字典

    */

    + (NSMutableDictionary *)getURLParameters:(NSString *)urlStr {

    // 查找参数

    NSRange range = [urlStr rangeOfString:@"?"];

    if (range.location == NSNotFound) {

    return nil;

    }

    // 以字典形式将参数返回

    NSMutableDictionary *params = [NSMutableDictionary dictionary];

    // 截取参数

    NSString *parametersString = [urlStr substringFromIndex:range.location + 1];

    // 判断参数是单个参数还是多个参数

    if ([parametersString containsString:@"&"]) {

    // 多个参数,分割参数

    NSArray *urlComponents = [parametersString componentsSeparatedByString:@"&"];

    for (NSString *keyValuePair in urlComponents) {

    // 生成Key/Value

    NSArray *pairComponents = [keyValuePair componentsSeparatedByString:@"="];

    NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];

    NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];

    // Key不能为nil

    if (key == nil || value == nil) {

    continue;

    }

    id existValue = [params valueForKey:key];

    if (existValue != nil) {

    // 已存在的值,生成数组

    if ([existValue isKindOfClass:[NSArray class]]) {

    // 已存在的值生成数组

    NSMutableArray *items = [NSMutableArray arrayWithArray:existValue];

    [items addObject:value];

    [params setValue:items forKey:key];

    } else {

    // 非数组

    [params setValue:@[existValue, value] forKey:key];

    }

    } else {

    // 设置值

    [params setValue:value forKey:key];

    }

    }

    } else {

    // 单个参数

    // 生成Key/Value

    NSArray *pairComponents = [parametersString componentsSeparatedByString:@"="];

    // 只有一个参数,没有值

    if (pairComponents.count == 1) {

    return nil;

    }

    // 分隔值

    NSString *key = [pairComponents.firstObject stringByRemovingPercentEncoding];

    NSString *value = [pairComponents.lastObject stringByRemovingPercentEncoding];

    // Key不能为nil

    if (key == nil || value == nil) {

    return nil;

    }

    // 设置值

    [params setValue:value forKey:key];

    }

    return params;

    }

    ```

    最后还有一个就是扫描二维码 ,其实就是点击判断url  调转到扫描界面,扫描成功之后再把结果拼接成一个参数,调用前端的url,前端就会获取到.其实并没有用到什么更多的交互,感觉 用别的交互会简单一下,但是 为了赶项目进度 ,这样先实现.

    相关文章

      网友评论

        本文标题:ios 加载webview遇到的坑

        本文链接:https://www.haomeiwen.com/subject/xjpdkxtx.html