সাফারিতে সুইফট ওপেন লিংক


150

আমি বর্তমানে আমার অ্যাপ্লিকেশনটিতে লিঙ্কটি খুলছি WebView, তবে আমি পরিবর্তে সাফারিতে লিঙ্কটি খোলার জন্য একটি বিকল্প খুঁজছি ।

উত্তর:


348

এটি "বেকড ইন সুইফ্ট" নয়, তবে আপনি UIKitএটি করার জন্য মানক পদ্ধতি ব্যবহার করতে পারেন । ইউআইএপ্লিকেশন এর ( অবচয় ) এবং দেখুনopenUrl(_:) open(_:options:completionHandler:)

সুইফট 4 + সুইফট 5 (আইওএস 10 এবং উপরে)

guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.open(url)

সুইফট 3 (আইওএস 9 এবং নীচে)

guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.shared.openURL(url)

সুইফট 2.2

guard let url = URL(string: "https://stackoverflow.com") else { return }
UIApplication.sharedApplication().openURL(url)    

আমরা যদি এমন কিছু ক্রয়ের URL যুক্ত করি তবে অ্যাপ স্টোর থেকে কোনও সুযোগ আছে?
জানুয়ারী

8
আইওএস 10.0 এ আপনাকে অবশ্যই বিকল্পগুলি এবং হ্যান্ডলারটি যুক্ত করতে হবে: ইউআইএপ্লিকেশন.শারেড.ওপেন (ইউআরএল (স্ট্রিং: "গুগল ডটকম " ) !, বিকল্পগুলি: [:], সমাপ্তি
হ্যান্ডলার

1
@ গ্যাবিচুয়েস্টা আপনাকে আসলে বিকল্পগুলি এবং সমাপ্তি সরবরাহ করতে হবে না হ্যান্ডলারের, তারা যথাক্রমে [:] এবং শূন্যপদে ডিফল্ট
জেরেমি

79

আইওএস 9 এর সাথে নতুন এবং উচ্চতর আপনি ব্যবহারকারীর সাথে একটি উপস্থাপন করতে পারেন SFSafariViewController( এখানে ডকুমেন্টেশন দেখুন )। মূলত আপনি ব্যবহারকারীকে আপনার অ্যাপটি ছেড়ে না দিয়েই সাফারিতে প্রেরণের সমস্ত সুবিধা পান। নতুন এসএফএসফারিভিউ কনট্রোলারটি কেবলমাত্র ব্যবহার করতে:

import SafariServices

এবং কোনও ইভেন্টের হ্যান্ডলারটিতে কোথাও সাফারি ভিউ কন্ট্রোলারের সাথে ব্যবহারকারীকে এইভাবে উপস্থাপন করুন:

let svc = SFSafariViewController(url: url)
present(svc, animated: true, completion: nil)

সাফারি ভিউতে এরকম কিছু দেখাবে:

এখানে চিত্র বর্ণনা লিখুন


3
এটা সত্যিই দারুন. ধন্যবাদ! অ্যাপ্লিকেশন এক্সটেনশনে সাফারি ব্রাউজারটি দেখাতে চাইলে প্রত্যেকের এই কোডটি ব্যবহার করা উচিত। sharedApplicationঅ্যাপ্লিকেশন এক্সটেনশনে সম্পত্তি অ্যাক্সেস নিষিদ্ধ। আরও তথ্যের জন্য: বিকাশকারী.অ্যাপল.
com

1
অসামান্য সমাধান
মুতাওয়ে

1
অ্যাপল কখনও কখনও পুরানো ওপেন URL টি ব্যবহার করার জন্য দোকান থেকে অ্যাপ্লিকেশনগুলি প্রত্যাখ্যান করে। এটি এখন পছন্দসই সমাধান হওয়া উচিত।
সংযোগ বিচ্ছিন্নতাবাদী

19

সুইফট 4 এর জন্য আপডেট হয়েছে: (মার্কো ওয়েবারের ক্রেডিট)

if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
     UIApplication.shared.openURL(requestUrl as URL) 
}

অথবা আরও বেশি দ্রুতগতির স্টাইল ব্যবহার করে যান guard:

guard let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") else {
    return
}

UIApplication.shared.openURL(requestUrl as URL) 

সুইফট 3:

আপনি এনএসআরএলকে নিখুঁতভাবে alচ্ছিক হিসাবে এটি পরীক্ষা করতে পারেন:

if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") {
     UIApplication.sharedApplication().openURL(requestUrl)
}

4
অমিত, না, কারণ এটি স্পষ্টভাবে সম্পন্ন হয়েছে কারণ আমি ব্যাখ্যা করেছি যে গ্যারান্টি হ'ল অনুরোধ ইউআরএল থাকলে ... ...
কোডওভার রাইড

2
হ্যাঁ, জিনিসগুলি করার অনেক উপায় আছে। "আমি ঠিক আছি, সুতরাং আপনার ভুল" মানসিকতা বলার অপেক্ষা রাখে না যে কেন এমন পরিস্থিতিতে আপনার নির্দিষ্ট কোড ব্যবহার করা উচিত। দেখে মনে হচ্ছে আপনি প্রোগ্রামিংয়ে নতুন এসেছেন বাচ্চাটিকে আমার পরামর্শ।
কোডওভাররাইড

3
অমিত: না, এটি কাজ করে না, আপনি কেবল ভুল। সুইফট 2 বা 1.2। এবং এতে অবাক হওয়ার কিছু নেই, অনুরোধ ইউআরএল কোনও বিকল্প নয় তাই আপনি এটি দিয়ে মোড়ানো করতে পারবেন না!
গুসুতাফু

2
আমি এই পদ্ধতিটি মাইক এস-এর চেয়ে ভাল পছন্দ করি, কারণ আপনি অনুরোধটি প্রেরণের আগে শূন্যতা পরীক্ষা করেন।
নিকোলাজ নীলসেন

1
সুইফট ৪-এর জন্য আপডেট হয়েছে:if let requestUrl = NSURL(string: "http://www.iSecurityPlus.com") { UIApplication.shared.openURL(requestUrl as URL) }
মার্কো ওয়েবার

12

সুইফট 3 এবং আইওএস 10.2

UIApplication.shared.open(URL(string: "http://www.stackoverflow.com")!, options: [:], completionHandler: nil)

সুইফট 3 এবং আইওএস 10.2


তবে নোট করুন যে এই সংস্করণটি ব্যবহার করা আপনার অ্যাপ্লিকেশনটি আইওএস 9 এবং এর
আগেরটিতে

11

আইওএস 10 এর পরে আপনার ব্যবহার করা উচিত:

guard let url = URL(string: linkUrlString) else {
    return
}
    
if #available(iOS 10.0, *) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
    UIApplication.shared.openURL(url)
}


2

সুইফ্ট 1.2 এ:

@IBAction func openLink {    
    let pth = "http://www.google.com"
    if let url = NSURL(string: pth){
        UIApplication.sharedApplication().openURL(url)
}

1

সুইফট ২.০ এ:

UIApplication.sharedApplication().openURL(NSURL(string: "http://stackoverflow.com")!)

-1

আইওএস 11.2 সুইফট 3.1- 4

let webView = WKWebView()

override func viewDidLoad() {
    super.viewDidLoad()
    guard let url = URL(string: "https://www.google.com") else { return }
    webView.frame = view.bounds
    webView.navigationDelegate = self
    webView.load(URLRequest(url: url))
    webView.autoresizingMask = [.flexibleWidth,.flexibleHeight]
    view.addSubview(webView)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if navigationAction.navigationType == .linkActivated  {
        if let url = navigationAction.request.url,
            let host = url.host, !host.hasPrefix("www.google.com"),
            UIApplication.shared.canOpenURL(url) {
            UIApplication.shared.open(url)
            print(url)
            print("Redirected to browser. No need to open it locally")
            decisionHandler(.cancel)
        } else {
            print("Open it locally")
            decisionHandler(.allow)
        }
    } else {
        print("not a user click")
        decisionHandler(.allow)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.