কীভাবে সাফারি চালু করবেন এবং আইওএস অ্যাপ থেকে URL খুলবেন


215

সেটিংস পৃষ্ঠায়, আমি এর সাথে তিনটি লিঙ্ক অন্তর্ভুক্ত করতে চাই

  • আমার অ্যাপ্লিকেশন সমর্থন সাইট
  • ইউটিউব অ্যাপ টিউটোরিয়াল
  • আমার প্রাথমিক সাইট (যেমন: একটি 'ডেল ডিয়েট্রিচ দ্বারা তৈরি করা' লেবেলের সাথে লিঙ্কযুক্ত))

আমি এই সাইটটি এবং ওয়েব এবং আমার ডকুমেন্টেশন সন্ধান করেছি এবং আমার কাছে এমন কিছুই পাওয়া যায় নি যা স্পষ্ট।

দ্রষ্টব্য: আমি আমার অ্যাপের মধ্যে ওয়েব পৃষ্ঠাগুলি খুলতে চাই না। আমি কেবল লিংকটি সাফারিতে পাঠাতে চাই এবং সেই লিঙ্কটি সেখানে খোলা থাকবে। আমি বেশ কয়েকটি অ্যাপ্লিকেশন তাদের সেটিংস পৃষ্ঠায় একই জিনিস করতে দেখেছি, তাই এটি অবশ্যই সম্ভব।


আয়নিক কর্ডোভা অ্যাপ্লিকেশনটি ব্যবহার করে হাইব্রিড বিকাশের ক্ষেত্রে আমি একই সমস্যার মুখোমুখি
হচ্ছি

উত্তর:


386

আমি যা করেছি তা এখানে:

  1. আমি নিম্নরূপে শিরোনাম। এইচ ফাইলগুলিতে একটি আইবিএક્શન তৈরি করেছি:

    - (IBAction)openDaleDietrichDotCom:(id)sender;
  2. আমি সেটিংস পৃষ্ঠায় একটি ইউআইবাটন যুক্ত করেছি যে পাঠ্যটিতে আমি লিঙ্ক করতে চাই containing

  3. আমি যথাযথভাবে ফাইলের মালিকের বোতামটি আইবিএક્શનের সাথে সংযুক্ত করেছি।

  4. তারপরে নিম্নলিখিতটি প্রয়োগ করুন:

উদ্দেশ্য গ

- (IBAction)openDaleDietrichDotCom:(id)sender {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.daledietrich.com"]];
}

দ্রুতগতি

(শিরোনাম ফাইলের চেয়ে ভিউকন্ট্রোলারে আইবিএक्शन)

if let link = URL(string: "https://yoursite.com") {
  UIApplication.shared.open(link)
}

8
তবে এটি 100% নয়, কারণ যদি কেউ জেলব্রেকড আইওএস ব্যবহার করে এবং ক্রোম বা ডিফল্ট ব্রাউজার হিসাবে কিছু ব্যবহার করে, তবে এটি সাফারি নয়, এটি খুলবে
লাসজলো

214
আমি মনে করি যদি কেউ ক্রোমকে তাদের ডিফল্ট ব্রাউজার হিসাবে তাদের ফোনকে জালব্রেক করার প্রয়াসে চলে যায় তবে সম্মতি জানানো হয় যে সেটিংটি সম্ভবত আদর্শ আচরণ।
rpowell

আমি এটি বুঝতে পেরেছিলাম তবে আমি যদি কোনও ওয়েবসাইট খুলছি এবং ব্যবহারকারী এখন ওয়েবসাইটটি সার্ফিং করছে যদি সে কোনও নির্দিষ্ট পৃষ্ঠাতে থামে তবে আমি কি আমার কোডটিতে বর্তমান ওয়েবপৃষ্ঠার লিঙ্কটি পেতে পারি?
বরুণ জৈন

3
উপরোক্ত পদ্ধতিটি অবহিত করা হয়েছে এখন নিম্নলিখিত ব্যবহার করুন। [[ইউআইএএপ্লিকেশন শেয়ারড অ্যাপ্লিকেশন] ওপেন ইউআরএল: [এনএসআরএল ইউআরএল উইথ স্ট্রিং: সেলফ: অ্যাডভার্টাইজমেন্ট.ইউআর] বিকল্পগুলি: @ {} সমাপ্তি হ্যান্ডলার: ^ (বিওএল সাফল্য) {}];
মাশহাদি

@ লাস্লোও এছাড়াও, সেটিংসে আমরা সাফারিগুলিকে সীমাবদ্ধতায় অক্ষম করতে পারি। আমি যখন কোনও এইচটিএমএল বা https ইউআরএল খোলা হয় এবং সাফারি অক্ষম করা হয় তখন অন্য ব্রাউজারগুলি খোলার জন্য ইউআরএল স্কিম হিসাবে HTTP এবং https হিসাবে একটি অ্যাপকে কোড করেছিলাম। সুতরাং, এমনকি জেলব্রেক ছাড়াই, আমরা প্রযুক্তিগতভাবে ডিফল্ট ওয়েব ব্রাউজারটি পরিবর্তন করতে পারি।
কোল্ডগ্রাব 1384

164

সুইফ্ট সিনট্যাক্স:

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

আইওএস 9.3 এবং তার আগের জন্য নতুন সুইফ্ট সিনট্যাক্স

কিছু নতুন সংস্করণ হিসাবে সুইফ্ট (সম্ভবত সুইফট 2?), ইউআইএপ্লিকেশন.শারেড অ্যাপ্লিকেশন () এখন ইউআইএপ্লিকেশন.শায়ার হয়েছে (আমি অনুমান করছি এমন গণনা করা বৈশিষ্ট্যের আরও ভাল ব্যবহার করা)। অতিরিক্ত হিসাবে ইউআরএল আর স্পষ্টভাবে NSURL এ রূপান্তরযোগ্য নয়, অবশ্যই স্পষ্টভাবে হিসাবে রূপান্তরিত হবে!

UIApplication.sharedApplication.openURL(NSURL(string:"http://www.reddit.com/") as! URL)

আইওএস 10.0 হিসাবে নতুন সুইফ্ট সিনট্যাক্স

ওপেনআরএল পদ্ধতিটি আরও বহুমুখী পদ্ধতিতে অবহিত করা হয়েছে এবং প্রতিস্থাপন করা হয়েছে যা আইওএস 10.0 হিসাবে একটি বিকল্প বিকল্প এবং একটি অ্যাসিনক্রোনাস সমাপ্তি হ্যান্ডলার গ্রহণ করে

UIApplication.shared.open(NSURL(string:"http://www.reddit.com/")! as URL)

31
উত্তরগুলির সুইফ্ট সংস্করণগুলি সুইফট বিকাশকারীদের পক্ষে অত্যন্ত কার্যকর, এটি অনেকগুলি ডকুমেন্টেশন ছাড়াই একটি নতুন ভাষা, এসএসপি। বাস্তব বিশ্বের আইওএস সমস্যা সমাধানে। আমার ক্ষেত্রে, স্বতঃসম্পূর্ণ "ফাইল URL টি উইথপথ:" নির্বাচককে বেছে নিয়েছিল এবং আমি বুঝতে পারি নি যে কেন আমার ইউআরএল খোলা হচ্ছে না, কেবল ডাস্টিনের উত্তর পড়েই আমি দেখেছি যে "স্ট্রিং:" নির্বাচককে আমার ব্যবহার করা উচিত ছিল । সুতরাং ডাস্টিনকে উচ্ছেদ করা উচিত, শাস্তি দেওয়া উচিত নয়।
SafeFastExpressive

3
@g_fred। কেন তিনি একটি সুইফ্ট সংস্করণ অন্তর্ভুক্ত করতে পারবেন না?
এরিকগু

2
openURL(_:)আইওএস 10.0 open(_:options:completionHandler:)এ অবহেলা করা হয়েছিল, পরিবর্তে আপনার ইউআইএপ্লিকেশনটিতে উদাহরণ পদ্ধতিটি কল করা উচিত ।
রায়ান এইচ।

2
আপনি সরাসরি এনএসআরএল এর পরিবর্তে ইউআরএল ব্যবহার করতে পারেন যাতে আপনি কাস্ট সংরক্ষণ করতে পারেন।
মার্শবারে

1
আমি কখনই জোর করে চাপ না দেওয়ার পরামর্শ দিই। if let url = NSURL(string:"http://www.reddit.com/") { UIApplication.shared.open(url) }সর্বদা আপনার আরও ভাল পরিবেশন করা হবে। করতে চাইতে পারেন assertএবং ত্রুটি elseধরা টাইপস করার বিবৃতি।
ফিলিপ

53

এখানে একটি চেক প্রয়োজন যে খোলার ইউআরএল খুলতে চলেছে তা ডিভাইস বা সিমুলেটর দ্বারা খোলার জন্য সক্ষম কিনা বা না। কারণ কিছু সময় (সিমুলেটারের সংখ্যাগরিষ্ঠ) আমি দেখেছি এটি ক্র্যাশগুলির কারণ।

উদ্দেশ্য গ

NSURL *url = [NSURL URLWithString:@"some url"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   [[UIApplication sharedApplication] openURL:url];
}

সুইফট ২.০

let url : NSURL = NSURL(string: "some url")!
if UIApplication.sharedApplication().canOpenURL(url) {
     UIApplication.sharedApplication().openURL(url)
}

সুইফট 4.2

guard let url = URL(string: "some url") else {
    return
}
if UIApplication.shared.canOpenURL(url) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

1
আপনি সর্বদা HTTP / HTTPS খুলতে পারেন। আইওএস 9 অনুসারে, আপনাকে কল করতে ইচ্ছুক যে কোনও ইউআরএলকে হোয়াইটলিস্ট করতে canOpenURLহবে। আমি দেখতে পাচ্ছি না কেন আপনি কেবল কল করবেন না openURL:urlএবং যদি এটি ব্যর্থ হয় তবে ব্যর্থতাটি মোকাবেলা করুন। canOpenURLপ্রাথমিকভাবে বর্তমান অ্যাপটি ছাড়াই কোনও অ্যাপ্লিকেশন ইনস্টলেশন সনাক্ত করতে ব্যবহৃত হয়।
বেন ফ্লিন 19

1
openURL(_:)আইওএস 10.0 open(_:options:completionHandler:)এ অবহেলা করা হয়েছিল, পরিবর্তে আপনার ইউআইএপ্লিকেশনটিতে উদাহরণ পদ্ধতিটি কল করা উচিত ।
রায়ান এইচ।

20

-openURL:ইউআইএপ্লিকেশনটিতে পদ্ধতিটি একবার দেখুন । এটি আপনাকে সিস্টেমে একটি এনএসআরএল দৃষ্টান্ত পাঠাতে দেয়, যা কোন অ্যাপ্লিকেশনটি খুলবে এবং সেই অ্যাপ্লিকেশনটি চালু করবে তা নির্ধারণ করবে। (মনে রাখবেন আপনি সম্ভবত -canOpenURL:প্রথমে চেক করতে চাইবেন , কেবলমাত্র সিস্টেমে ইনস্টল থাকা অ্যাপ্লিকেশনগুলি ইউআরএল হ্যান্ডেল করতে না পারলে - যদিও এটি সম্ভবত সরল http://লিঙ্কগুলির ক্ষেত্রে সমস্যা নয় ))


ধন্যবাদ টিম আপনি ঠিক বলেছেন. আপনার প্রবেশের সাথে সাথে আমি আমার নিজের উত্তর যুক্ত করছি about সে সম্পর্কে দুঃখিত। তবে আমার অনুসরণকারীদের পক্ষে অন্তত এখনই সহজ উপায় easy
ডেল ডিয়েট্রিচ

কোনও উদ্বেগ নেই - খুশী আপনি সমাধানটি খুঁজে পেয়েছেন!
টিম

1
openURL(_:)আইওএস 10.0 open(_:options:completionHandler:)এ অবহেলা করা হয়েছিল, পরিবর্তে আপনার ইউআইএপ্লিকেশনটিতে উদাহরণ পদ্ধতিটি কল করা উচিত ।
রায়ান এইচ।

17

এবং, সরবরাহিত ইউআরএলটির textকোনও স্কিম রয়েছে কিনা তা আপনি নিশ্চিত নন :

NSString* text = @"www.apple.com";
NSURL*    url  = [[NSURL alloc] initWithString:text];

if (url.scheme.length == 0)
{
    text = [@"http://" stringByAppendingString:text];
    url  = [[NSURL alloc] initWithString:text];
}

[[UIApplication sharedApplication] openURL:url];

@ ভ্লাদ এটি একটি কঠোর কোডেড উদাহরণ। প্রায়শই ইউআরএল স্ট্রিং ( textএখানে) হার্ড-কোডেড হবে না এবং আপনার এর মতো কোড দরকার।
অর্থ-বিষয়গুলি

@ ভ্লাদ আপনি কি হতাশ ছিলেন, এবং হ্যাঁ কীভাবে / কেন? আমি ধরে নিয়েছি লোকেরা উপরের কোডটি কেবল কপি করে না।
অর্থ-বিষয়গুলি

1
অর্থ-বিষয়গুলি আপনার উপর
ভ্লাদ

13

অবচয়হীন উদ্দেশ্য-সি সংস্করণটি হ'ল:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://apple.com"] options:@{} completionHandler:nil];

10

সুইফট 3.0

if let url = URL(string: "https://www.reddit.com") {
    if #available(iOS 10.0, *) {
        UIApplication.shared.open(url, options: [:])
    } else {
        UIApplication.shared.openURL(url)
    }
}

এটি iOS এর পুরানো সংস্করণগুলি চালিত ডিভাইসগুলিকে সমর্থন করে


10

সম্পন্ন বোতামের সাহায্যে সুইফট 3 সমাধান

ভুলে যাবেন না import SafariServices

if let url = URL(string: "http://www.yoururl.com/") {
            let vc = SFSafariViewController(url: url, entersReaderIfAvailable: true)
            present(vc, animated: true)
        }

এটি সঠিক উত্তর যা আইওএস এবং আইওএস উভয় এক্সটেনশনে কাজ করে in অন্যান্য উত্তরগুলি কেবল অ্যাপ্লিকেশনগুলিতে কাজ করে এবং এক্সটেনশনে ব্যবহার করা যায় না।
ওভেন ঝাও

5

যেহেতু এই উত্তরটি আইওএস 10.0 থেকে অবহেলা করা হয়েছে, এর থেকে আরও ভাল উত্তর হবে:

if #available(iOS 10.0, *) {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}else{
    UIApplication.shared.openURL(url)
}

y en উদ্দেশ্য-গ

[[UIApplication sharedApplication] openURL:@"url string" options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened url");
        }
    }];

3

ওপেনআরএল ( :) :) আইওএস 10.0 এ অবহেলা করা হয়েছিল, পরিবর্তে আপনার ইউআইএপ্লিকেশনটিতে নিম্নলিখিত উদাহরণ পদ্ধতিটি ব্যবহার করা উচিত: খুলুন ( : বিকল্পগুলি: সমাপ্তি হ্যান্ডলার :)

সুইফ্ট ব্যবহারের উদাহরণ
এটি সাফারিতে " https://apple.com " খুলবে ।

if let url = URL(string: "https://apple.com") {
    if UIApplication.shared.canOpenURL(url) {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
}

https://developer.apple.com/reference/uikit/uiapplication/1648685-open



2

সুইফট 5:

func open(scheme: String) {
   if let url = URL(string: scheme) {
      if #available(iOS 10, *) {
         UIApplication.shared.open(url, options: [:],
           completionHandler: {
               (success) in
                  print("Open \(scheme): \(success)")
           })
     } else {
         let success = UIApplication.shared.openURL(url)
         print("Open \(scheme): \(success)")
     }
   }
 }

ব্যবহার:

open(scheme: "http://www.bing.com")

রেফারেন্স:

আইওএস 10 এ ওপেন ইউআরএল


1

এটা চেষ্টা কর:

NSString *URL = @"xyz.com";
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:URL]])
{
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URL]];
}

0

সুইফ্ট ১.২ In এ চেষ্টা করুন:

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

প্লিজ আমাকে বলুন আপনার কোডটি কী নতুন লিখেছেন এবং আপনি আমাকে ভোটটি চিহ্নিত করেছেন
দিলীপ তিওয়ারি

-2

সুইফট 4 সমাধান:

UIApplication.shared.open(NSURL(string:"http://yo.lo")! as URL, options: [String : Any](), completionHandler: nil)

1
একটি যথাযথ সুইফট 4 সংস্করণ ইউএসএল ব্যবহার করবে, এনএসআরএল নয়। এবং ইউএসএল হিসাবে এনএসআরএলকে কাস্ট করা একই নয়। ব্যাখ্যার জন্য stackoverflow.com/a/37812485/2227743 দেখুন। এছাড়াও, জোর করে মোড়কানো খারাপ।
এরিক আয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.