• URL schemes的使用(两个app进行跳转交互) 参考的文章 Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme) 地址

    URL schemes的使用(两个app进行跳转交互)

    参考的文章

    Swift - 打开第三方应用,并传递参数(附常用App的URL Scheme)

    地址

    展开全文
  • 我们常常看到市面上有很多 App,每用个一段时间就会弹出个框,问你是否要去 AppStore 上给它打个分。...除了跳转App Store,openURL 还要其它许多用法,具体参考我原来写的这篇文章:Swift - 打开第三方应用,并
    1,样例效果图
    当程序启动的时候会弹出消息框询问是否去评价。点击“好的”即跳转到这个应用的 AppStore 页面。
          原文:Swift - 从应用中跳转到App Store页面,并进行评论打分       原文:Swift - 从应用中跳转到App Store页面,并进行评论打分

    2,样例代码
    链接地址的末尾是你要跳转到的应用的 appID,这个是你提交 app 时候自动生成的,也是 AppStore 中的唯一的 ID(作为演示,这里我就使用 QQ 的 appID)。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    import UIKit
     
    class ViewControllerUIViewController {
     
        override func viewDidLoad() {
            super.viewDidLoad()
          
        }
         
        override func viewDidAppear(animated: Bool) {
            //弹出消息框
            let alertController = UIAlertController(title: "觉得好用的话,给我个评价吧!",
                                                    message: nil, preferredStyle: .Alert)
            let cancelAction = UIAlertAction(title: "暂不评价", style: .Cancel, handler: nil)
            let okAction = UIAlertAction(title: "好的", style: .Default,
                                         handler: {
                                            action in
                                            self.gotoAppStore()
            })
            alertController.addAction(cancelAction)
            alertController.addAction(okAction)
            self.presentViewController(alertController, animated: true, completion: nil)
        }
         
        //跳转到应用的AppStore页页面
        func gotoAppStore() {
            let urlString = "itms-apps://itunes.apple.com/app/id444934666"
            let url = NSURL(string: urlString)
            UIApplication.sharedApplication().openURL(url!)
        }
     
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
     
        }
    }
    展开全文
  • let url:URL?=URL.init(string: "https://www.baidu.com/") UIApplication.shared.open(url!, options: [:], completionHandler: nil)
            let url:URL?=URL.init(string: "https://www.baidu.com/")
            UIApplication.shared.open(url!, options: [:], completionHandler: nil)
    
    展开全文
  • 微信支付其实在日常的开发中是经常接触的,但是在H5跳转问题上有或多或少的坑本,其中最难解决的是支付完成后返回App,并且返回App后白屏的解决。本次使用的是Swift:WKWebview OC 和WebView同理 建议阅读时间:10min...

    微信支付其实在日常的开发中是经常接触的,但是在H5跳转问题上有或多或少的坑本,其中最难解决的是支付完成后返回App,并且返回App后白屏的解决。本次使用的是Swift:WKWebview OC 和WebView同理

    建议阅读时间:10mins


    • 问题分析

      正常的H5支付流程如下

      按照上面的支付流程会出现 App -> 微信 -> 支付 -> 点击 完成 -> safari访问redirect_url设置的URL,这种流程其实用户体验是有点糟糕的,我们期望是 App -> 微信 -> 支付 -> 点击 完成 -> App访问redirect_url设置的URL

      问题分析到上面已经非常明了了,无非就是拦截处理,下面讲讲具体的实施。

    • 问题分析

      根据上面的分析解决的思路应该非常的清晰

      拦截请求

      首先在decidePolicyFor 回调里拦截支付的请求拦截的字符串:https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb 如果包含了该链接做如下处理,isload变量是控制是否是第一次没有修改redirect_url参数的请求防止重复请求

        if urlString?.range(of: "https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb") != nil && !self.isload{
            if let mUrlStr = urlString{
                let array : Array = mUrlStr.components(separatedBy: "redirect_url=")
                self.redirect_url =  array[1]
                let rs = "\(WXH5SchemeURL)://".urlEncoded()
                let mNewUrl = array[0] + "redirect_url=\(rs)"
                let newURLS = URL(string: mNewUrl)
                var mRequest = URLRequest.init(url: newURLS!, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 60)
                mRequest.setValue("\(WXH5SchemeURL)://", forHTTPHeaderField: "Referer")
                webView.load(mRequest)
                self.isload = true
                decisionHandler(.cancel)
                return
            }
        }
        self.isload = false
        decisionHandler(.allow)
        }
      复制代码

      拦截weixin://wap/pay? 打开微信

        if urlString?.range(of: "weixin://wap/pay?") != nil{
            if let mUrlStr = urlString{
                let openWX = URL(string: mUrlStr)
                if (UIApplication.shared.canOpenURL(openWX!)){
                    if #available(iOS 10.0, *){
                        UIApplication.shared.open(openWX!, options: [UIApplicationOpenSettingsURLString:false], completionHandler: nil)
                    }else{
                        UIApplication.shared.openURL(openWX!)
                    }
                }
                decisionHandler(.cancel)
                return
            }
        }
      复制代码

      这一步的话没甚好介绍的就是拦截打开微信支付即可。

      在项目设置Scheme链接用于支付完后返回App

      具体操作如下图

      到这一步已经成功了一大半了,你会发现现在支付成功后能返回App了但是返回的时候webView是白屏。白屏其实就是网页没有任何请求导致的,接下来我们就要使用上步提前记录好后台给的redirect_url的url了。

      在AppDelegate里监听url.scheme的值

      在AppDelegate里监听url.scheme的值是否为我们之前设置好的xxxx.com 如果是xxxx.com 发起通知 通知webview加载提前记录好的redirect_url的url了

        if ([url.scheme rangeOfString:@"quanzidian.net"].length!=0) {
        	[NSNotificationCenter defaultCenter] postNotificationName:@"WX_H5_PAY" object:nil];
        	return YES;
        }
      复制代码

      在wkWebView接收通知

        NotificationCenter.default.addObserver(self, selector: #selector(goBackWhitWXPay), name: NSNotification.Name(rawValue: "WX_H5_PAY"), object: nil)
      复制代码

      重新刷新WKWebview

        @objc func goBackWhitWXPay(){
        	if !self.redirect_url.isEmpty{
            	self.request = URLRequest(url: URL(string: self.redirect_url)!)
            	redirect_url = ""
        	}
        }
      复制代码

      项目使用的oc/Swift 混编有些地方和你使用的语言不一致时请自行模仿做写。

      到这里微信H5支付所有的问题就完美解决了 唯一的坑就是在截取请求时,重写redirect_url时注意一定时授权的URL://的协议。

      更多详情请访问https://siterzzz.github.io

    展开全文
  • ============app信息和device信息========== /** 获取app的信息,和device的信息 */ import UIKit class LYBGetAppinfoExtention: NSObject { } extension String{ func getappinfo(){ let appName: ...

    ============app信息和device信息==========

    /**
     获取app的信息,和device的信息
    */
    import UIKit
    
    class LYBGetAppinfoExtention: NSObject {
    
    }
    
    extension String{
        
       func getappinfo(){
            let appName: String = (Bundle.main.object(forInfoDictionaryKey: "CFBundleName")as!String?)!
            print("\(appName)")
     let infoDic = Bundle.main.infoDictionary
            //bundleID
        let bundId:String=Bundle.main.bundleIdentifier!
             print("\(bundId)")
       // 获取App的版本号---version(上线的版本号)
        let appVersion:String = infoDic?["CFBundleShortVersionString"]! as! String
             print("\(appVersion)")
     // 获取App的build版本
        let appBuildVersion:String = infoDic?["CFBundleVersion"]! as! String
             print("\(appBuildVersion)")
    // 获取App的名称
        let appNames :String = infoDic?["CFBundleName"]! as! String
            print("\(appNames)")
    // app名称name,当displayname存在时,name显示为override,displayname不存在时,name正常显示
        let appDispaleyname:String  = infoDic?["CFBundleDisplayName"]! as! String
           print("\(appDispaleyname)")
        
        
        //手机序列号(唯一标识)
        let  identifierNumber:String  = (UIDevice.current.identifierForVendor?.uuidString)!
        
    //手机别名:用户定义的名称
        
    let  userPhoneName:String  = UIDevice.current.name
    //设备名称
        
    let deviceName:String  = UIDevice.current.systemName
         //手机系统版本
        
    let phoneVersion:String  = UIDevice.current.systemVersion
      //手机型号
        
    let phoneModel:String  = UIDevice.current.model
    
    //地方型号 (国际化区域名称)
        
    let localPhoneModel:String  = UIDevice.current.localizedModel
        
      
        }
    }

    =============appstore信息和跳转到appstore========

    /**
     获取app的信息,和device的信息
    */
    import UIKit
    
    class LYBGetAppinfoExtention: UIViewController{
        //下载页、详情页面、评论页面的地址---如果不起效果:将 http:// 替换为 itms:// 或者 itms-apps://,注意用真机才有效果
        class func gotoappstoreDetailAndStars(){
        
        let urs="itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=1123550373"
        let url:URL?=URL.init(string: urs)
        UIApplication.shared.openURL(url!)
        }
         //下载页,评分页---如果不起效果:将 http:// 替换为 itms:// 或者 itms-apps://,注意用真机才有效果
      class  func  gotoappstoreStarandDownload(){
    
        let urs="https://itunes.apple.com/app/id1123550373"
        let url:URL?=URL.init(string: urs)
            UIApplication.shared.openURL(url!)
        
        }
         //下载页,评分页---如果不起效果:将 http:// 替换为 itms:// 或者 itms-apps://,注意用真机才有效果
        class func lookappstore(){
            
            let urs="itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=1123550373"
            let url:URL?=URL.init(string: urs)
            UIApplication.shared.openURL(url!)
        }
        
        //    ===============获取appstore中应用的信息========
     class   func getAppStoreInfo(){
    
    //    要么改成https,
    //    要么info.plist加NSAppTransportSecurity.NSAllowsArbitraryLoads = true,
    //    获取信息的地址:
    
        let appidStr:String="1123550373"
    
     let appurlStr:String=String.init(format: "https://itunes.apple.com/cn/lookup?id=%@", appidStr)
    
    let url:URL=URL.init(string: appurlStr)!
    
     do{
    
     let jsonData=try Data.init(contentsOf: url)
    
    let json=try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String:Any]
    
    let res=json["results"]//APPstore信息
    print("\(res)")
    }catch{
    
         }
        }
    }

     

    展开全文
  • Swift:在Safari中打开App

    2015-05-25 14:47:02
    打开之前会发生什么呢,先看看这个图: ...我们打开看看这个app是什么样的App。看图: 是一个灰常简答的TableView。然后点击某一行的时候会跳转到一个号称是详细也的地方。其实什么都没有。只有一
  • Swift_程序间跳转

    2018-12-01 23:07:30
    target ‘SwiftDemo’ do use_frameworks! inhibit_all_warnings! pod 'Appz' end 在plist文件中添加LSApplicationQueriesSchemes,根据自己需要添加包含的值 在项目中引入import Appz 在调用的地方调用下面的...
  • swift跳转Appstore

    2019-07-22 10:08:24
    //进入appstore中指定的应用 let str = NSString(format: "itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa /wa/viewContentsUserReviews?type=Purple+Software&id=%d", "myAppID") UIApplic...
  • iOS跳转appStore的两种方法网上已经有很多的博客进行讲解了,主要是app跳转相关网页,和跳出app跳转AppStore。相关的博客大家可以参看参考博客 为了防止参考博客实效,我把相关代码copy了一下,希望大家不要...
  • iOS APP跳转微信小程序

    2020-04-22 16:03:13
    iOS端 1.集成微信sdk pod 'WechatOpenSDK' 2.同一个主体下的话,appid绑定...调用 wxapi register appid 以及 根据后台返回的参数跳转小程序 // 打开微信小程序 + (BOOL)openWechatMinPraogramWithUserName:(...
  • swift中作跳转是一件很简单得事情,可是如果右键某个空间拖动然后选择modal来关联跳转关系的话该如何做出代码判断呢? 场景:如果我想做一个登录页面,输入用户名密码之后点击登录按钮,验证成功就跳转这个功能呢?...
  • 功能实现:A跳到B并打开B中指定页面步骤: 首先创建两个项目(项目A,项目B),在项目B中的info.plist文件中添加URL Types,如下图所示:其中URL idenifier是项目B的...在项目A中添加跳转代码 [[UIApplication sharedAp
  • //跳转代码--前提知道URL地址,再APP store找到软件之后,右键复制链接 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/wechat/id836500024?mt=12"]
  • 功能实现:A跳到B并打开B中指定页面 步骤: 1.首先创建两个项目(项目A,项目B),在项目B中的info.plist文件中添加URL Types,如下图所示:其中URL idenifier是项目B的bundle ...2.在项目A中添加跳转代码 [[UIAp
  • 首先感谢文扬_的思路分享。我是按照第一种方法做的。... 我直接下载了微信SDK1.8.3范例代码一番配置后直接在代码中修改。 主要分为三个步骤 ...发起微信消息订阅 ...在SendMsgToWeChatViewController中定位到subscription...
  • Swift版//打开设置界面 if let url = URL(string: UIApplicationOpenSettingsURLString){ if (UIApplication.shared.canOpenURL(url)){ UIApplication.shared.openURL(url) } }OC版本//打开设置界面 NSURL * url ...
  • 移动应用拉起小程序是指用户可以通过接入该功能的第三方移动应用(APP跳转至某一微信小程序的指定页面,完成服务后跳回至原移动应用(APP)。 App和小程序互相跳转: 1)App主动发起小程序卡片分享到微信,微信...
  • 常用的第三方应用都定义了不同的 URL Scheme,我们通过 UIApplication.sharedApplication().openURL() 方法打开相应的链接,即可跳转到对应的 App 中。 1,打开淘宝 下面样例点击按钮后,会自动跳转...
  • Swift语言, 我是折叠tableview,自定义了一个cell,cell里面有很多按钮,点击每个按钮都跳转到不同的页面,我想请教下如何带值跳转呢?
  • 两个APP之间的跳转是通过[[UIApplication sharedApplication] openURL:url]这种方式来实现的。 1.首先设置第一个APP的url地址 2.接着设置第二个APP的url地址   3.需要跳转的时候 ...
1 2 3 4 5 ... 20
收藏数 3,492
精华内容 1,396