অন্যের মধ্যে থেকে একটি অ্যাপ্লিকেশন চালু করুন (আইফোন)


170

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

এটা কি সম্ভব হবে? আমি জানি যে টেল ইউআরএল লিঙ্কের সাথে ফোন কল করার জন্য এটি করা যেতে পারে তবে আমি কেবল কোনও নির্দিষ্ট নম্বর ডায়াল না করে কেবল ফোন অ্যাপ্লিকেশন চালু করতে চাই।

উত্তর:


80

কেভিন উল্লেখ করেছেন যে, ইউআরএল স্কিমগুলি অ্যাপ্লিকেশনগুলির মধ্যে যোগাযোগের একমাত্র উপায়। সুতরাং, না, স্বেচ্ছাসেবী অ্যাপ্লিকেশন চালু করা সম্ভব নয়।

তবে অ্যাপল এর, আপনার বা অন্য কোনও বিকাশকারীরই হোক, কোনও ইউআরএল স্কিম নিবন্ধিত করে এমন কোনও অ্যাপ্লিকেশন চালু করা সম্ভব। দস্তাবেজগুলি এখানে রয়েছে:

অন্যান্য অ্যাপ্লিকেশনগুলির সাথে যোগাযোগ করা

ফোনটি লঞ্চ করার ক্ষেত্রে মনে হচ্ছে ফোনটি চালু tel:হওয়ার আগে আপনার লিঙ্কটির কমপক্ষে তিনটি সংখ্যা থাকা দরকার। সুতরাং আপনি কোনও নম্বর ডায়াল না করে কেবল অ্যাপে ফেলে যেতে পারবেন না।


8
ইউআইএপ্লিকেশন-এর (বিওএল) ক্যান ওপেন ইউআরএল: (এনএসআরএল *) ইউআরএল
উইলস্টার

1
যদি 2 টি অ্যাপ্লিকেশন একই ইউআরএল হ্যান্ডলারটি নিবন্ধ করে এবং তারপরে ইউআরএল বলা হয় তবে কী হবে? আমি জানি অ্যান্ড্রয়েডে আপনাকে ডাব্লু / একটি তালিকা উপস্থাপন করা হবে যাতে আপনি দুজনের মধ্যে কোনটি চালাতে চান তা চয়ন করতে পারেন। আইওএস কীভাবে এটি পরিচালনা করে?
Egie5

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

2
এটি আপডেট হওয়া লিঙ্ক যা একই ইউআরএল-স্কিমটি পরিচালনা করতে একাধিক তৃতীয় পক্ষের অ্যাপ্লিকেশনটির নিবন্ধ সম্পর্কে উল্লেখ করেছে: অ্যাপল ডক্স
সিন্ড্রি জেলসন

আবারও পুরানো। আপডেট হওয়া লিঙ্ক: ডেভেলপার.অ্যাপল.
ডেভ নোটেজ

78

আমি দেখতে পেয়েছি যে অন্য অ্যাপ্লিকেশনটি খুলতে পারে এমন একটি অ্যাপ্লিকেশন লিখতে সহজ।

আসুন ধরে নেওয়া যাক আমাদের দুটি অ্যাপ রয়েছে FirstAppএবং ড SecondApp। আমরা যখন প্রথম অ্যাপ্লিকেশনটি খুলি, তখন আমরা একটি বোতামে ক্লিক করে দ্বিতীয় অ্যাপ্লিকেশনটি খুলতে সক্ষম হতে চাই। এটি করার সমাধানটি হ'ল:

  1. সেকেন্ড অ্যাপে

    সেকেন্ড অ্যাপের প্লিস্ট ফাইলটিতে যান এবং আপনাকে একটি স্ট্রিং আইওএসডিএভিটিপস (অবশ্যই আপনি অন্য স্ট্রিং.ইটি আপ লিখতে পারেন) সহ একটি ইউআরএল স্কিম যুক্ত করতে হবে।

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

ঘ। ফার্স্ট অ্যাপে

নীচের ক্রিয়া সহ একটি বোতাম তৈরি করুন:

- (void)buttonPressed:(UIButton *)button
{
  NSString *customURL = @"iOSDevTips://";

  if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]])
  {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
  }
  else
  {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
                              message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL]
                              delegate:self cancelButtonTitle:@"Ok" 
                              otherButtonTitles:nil];
    [alert show];
  }

}

এটাই. এখন আপনি যখন প্রথম অ্যাপ্লিকেশন বোতামটি ক্লিক করতে পারেন এটি দ্বিতীয় অ্যাপ্লিকেশনটি খুলতে হবে।


2
আপনি এখানে পুরো ব্যাখ্যা দেখতে পাবেন iosdevelopertips.com/cocoa/…
youssman

1
@ আমি আপনার পোস্টটি অনুসরণ করছি, সাফারি অ্যাপ্লিকেশনটি খুলতে পারে তবে অন্য একটি অ্যাপ খোলা নেই (বোতাম চাপানো পদ্ধতি) অন্য ব্লকটি কার্যকর করা হয়েছে, সমস্যাটি কী তা দয়া করে আমাকে সহায়তা করতে পারেন
শ্রীনিবাস

আমাকে আপনার সমস্যা আরো কিছু বিস্তারিত জানাবেন
লি

1
যে লোকেরা এটি কাজ করতে পারে না, তাদের মধ্যে 'এলএসএপ্লিকেশন কুইরিশেমস' নামে একটি স্ট্রিং যুক্ত Info.plistকরে FirstApp। তারপরে আপনার অ্যাপ্লিকেশনগুলি যে স্কিমগুলি খুলতে চায় তাতে যুক্ত করুন, এক্ষেত্রেটি Item 0হবেiOSDevTips

1
নীচে কিআইওর উত্তরও দেখুন ( স্ট্যাকওভারফ্লো . com / a / 33763449 / 394969 )। FirstApp যোগ করার জন্য প্রয়োজন LSApplicationQueriesSchemesতার Info.plist করার SecondApp খুলতে সক্ষম হবে।
জন এর্ক

28

লী উত্তরটি 8 এর আগে আইওএসের জন্য একেবারে সঠিক।

আইওএস 9+ তে আপনাকে অবশ্যই কোনও ইউআরএল স্কিমগুলি হোয়াইটলিস্ট করতে হবে যা আপনার অ্যাপ্লিকেশনটি LSApplicationQueriesSchemes কী (স্ট্রিংগুলির একটি অ্যারে) এর অধীনে তথ্য.পল্লিস্টে কোয়েরি করতে চায়:

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


2
সেরা উত্তরটি হ'ল @ কেআইও এবং ভিলি 393
গুস্তাভো বারোবোসা

19

সুইফটে

সেক্ষেত্রে কেউ দ্রুত সুইফ্ট অনুলিপি এবং পেস্ট খুঁজছিলেন।

if let url = NSURL(string: "app://") where UIApplication.sharedApplication().canOpenURL(url) {
            UIApplication.sharedApplication().openURL(url)
} else if let itunesUrl = NSURL(string: "https://itunes.apple.com/itunes-link-to-app") where UIApplication.sharedApplication().canOpenURL(itunesUrl) {
            UIApplication.sharedApplication().openURL(itunesUrl)      
}

13

আপনাকে অন্যের কাছ থেকে আপনার অ্যাপ্লিকেশনটি খুলতে দেওয়ার জন্য, আপনাকে উভয় অ্যাপ্লিকেশনটিতে পরিবর্তন করতে হবে। আইওএস 10 আপডেটের সাথে সুইফট 3 ব্যবহারের পদক্ষেপগুলি এখানে :

1. আপনি যে আবেদনটি খুলতে চান তা নিবন্ধ করুন

Info.plistআপনার অ্যাপ্লিকেশনটির কাস্টম এবং অনন্য URL স্কিম সংজ্ঞায়িত করে আপডেট করুন Update

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

নোট করুন যে আপনার স্কিমের নামটি অনন্য হওয়া উচিত, অন্যথায় যদি আপনার ডিভাইসে একই ইউআরএল স্কিমের নাম ইনস্টল করা থাকে তবে এটি রানটাইম নির্ধারণ করা হবে কোনটি খোলার হবে।

২. আপনার মূল অ্যাপ্লিকেশনটিতে পূর্ববর্তী ইউআরএল স্কিম অন্তর্ভুক্ত করুন

ক্লাসের canOpenURL:পদ্ধতিটির সাথে অ্যাপ্লিকেশনটি আপনাকে সক্ষম করতে চান এমন ইউআরএল স্কিম নির্দিষ্ট করতে হবে UIApplication। তাই মূল অ্যাপ্লিকেশনটি খুলুন Info.plistএবং এতে অন্য অ্যাপ্লিকেশনটির ইউআরএল স্কিম যুক্ত করুন LSApplicationQueriesSchemes(আইওএস 9.0 এ পরিচিত)

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

৩. আপনার অ্যাপ্লিকেশনটি খোলার ক্রিয়াটি কার্যকর করুন

এখন সবকিছু সেট আপ করা হয়েছে, সুতরাং আপনার মূল অ্যাপ্লিকেশনটিতে আপনার কোডটি লিখতে ভাল যা আপনার অন্যান্য অ্যাপ্লিকেশনটি খোলায়। এটি দেখতে এমন কিছু দেখাচ্ছে:

let appURLScheme = "MyAppToOpen://"

guard let appURL = URL(string: appURLScheme) else {
    return
}

if UIApplication.shared.canOpenURL(appURL) {

    if #available(iOS 10.0, *) {
        UIApplication.shared.open(appURL)
    }
    else {
        UIApplication.shared.openURL(appURL)
    }
}
else {
    // Here you can handle the case when your other application cannot be opened for any reason.
}

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


1
এটি সঠিক উত্তর। আমি লক্ষ্য করেছি যে কেবলমাত্র "এলএসএপ্লিকেশন কুইরিশেমস" যুক্ত করা কাজ করে না, "ইউআরএল স্কিম" এও তথ্য.পিস্টে যুক্ত করা দরকার।
শৈলেশ

11

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


9

এটি অর্জনের জন্য আমাদের উভয় অ্যাপে কোডের কয়েকটি লাইন যুক্ত করতে হবে

অ্যাপ্লিকেশন এ: যা আপনি অন্য অ্যাপ থেকে খুলতে চান। (উৎস)

অ্যাপ বি : অ্যাপ বি থেকে আপনি অ্যাপ এ খুলতে চান (গন্তব্য)

অ্যাপ এ জন্য কোড

এক্সএমএলের নীচে অতীতের অ্যাপ এ এর একটি ওপেন প্লিস্ট উত্স এবং প্লাস্টিক অফ অ্যাপে কয়েকটি ট্যাগ যুক্ত করুন

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.TestApp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testApp.linking</string>
        </array>
    </dict>
</array>

এর অ্যাপ প্রতিনিধি ইন অ্যাপ্লিকেশন একটি - কলব্যাক এখানে পান

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// You we get the call back here when App B will try to Open 
// sourceApplication will have the bundle ID of the App B
// [url query] will provide you the whole URL 
// [url query] with the help of this you can also pass the value from App B and get that value here 
}

এখন অ্যাপ বি কোড এ আসছে -

আপনি যদি কেবল কোনও ইনপুট প্যারামিটার ছাড়াই অ্যাপ এ খুলতে চান

-(IBAction)openApp_A:(id)sender{

    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

আপনি যদি অ্যাপ বি থেকে অ্যাপ এ প্যারামিটারটি পাস করতে চান তবে নীচের কোডটি ব্যবহার করুন

-(IBAction)openApp_A:(id)sender{
    if(![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"testApp.linking://?userName=abe&registered=1&Password=123abc"]]){
         UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"App is not available!" message:nil delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
            [alert show];

        }
}

দ্রষ্টব্য: আপনি কেবল টেস্ট অ্যাপ্লিকেশনটিই অ্যাপ খুলতে পারেন : লিঙ্কিং: //? সাফারি ব্রাউজারে


7

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

দ্রষ্টব্য: প্রকৃত অ্যাপ্লিকেশন নামের সাথে নামের ফ্যান্টাসিটি প্রতিস্থাপন করুন

NSString *mystr=[[NSString alloc] initWithFormat:@"fantacy://location?id=1"];
NSURL *myurl=[[NSURL alloc] initWithString:mystr];
[[UIApplication sharedApplication] openURL:myurl];

7

আপনি কেবল এমন অ্যাপ্লিকেশনগুলি চালু করতে পারেন যা URL টি স্কিম নিবন্ধিত করেছে। তারপরে আপনি যেমন এসএমএস ব্যবহার করে এসএমএস অ্যাপ্লিকেশনটি খোলেন: আপনি তাদের ইউআরএল স্কিম ব্যবহার করে অ্যাপটি খুলতে সক্ষম হবেন।

লঞ্চম নামে ডক্সে একটি খুব ভাল উদাহরণ পাওয়া যায় যা এটি দেখায়।

Nov নভেম্বর ২০১ of পর্যন্ত লঞ্চমী নমুনা কোড


আপডেট উত্তর। আশা করি এটি সহায়তা করে
হ'ল ইনট্রান্সিট

ধন্যবাদ; যে কোনও সুযোগে, আপনি কি আইওএস বিকাশকারী পারিবারিক চ্যাটরুমের অন্তর্ভুক্ত?
Eenvincible

4

না এইটা না. নথিভুক্ত ইউআরএল হ্যান্ডলারগুলির পাশাপাশি, অন্য অ্যাপ্লিকেশনটির সাথে যোগাযোগ / লঞ্চ করার কোনও উপায় নেই।


3

আমি এটি কিছুক্ষণ আগেও চেষ্টা করেছি ( আইডেন্টি অ্যাপ্লিকেশনটি আইডেন্টিফায়ার দিয়ে চালু করুন ) তবে এটি করার কোনও ডকুমেন্টেড উপায় নেই। :)


2
এটি নথিভুক্ত করা হয়েছে ... অ্যাপলের নথিপত্র পরীক্ষা করুন। বিকাশকারী.এপল.
com

1
আমি জানি যে ইউআরএল স্কিমগুলি সম্ভব, তবে আমি আমার প্রশ্নে যা জিজ্ঞাসা করেছি এবং জেফ কী জিজ্ঞাসা করেছিল, তা কীভাবে অ্যাপ্লিকেশনগুলি খুলতে হয় যা ইউআরএল স্কিমগুলি সমর্থন করে না ...
foebe

3

সুইফটে 4.1 এবং এক্সকোড 9.4.1 এ

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

এর জন্য আমাদের উভয় অ্যাপ্লিকেশনের জন্য .plist ফাইলগুলিতে কিছু পরিবর্তন করতে হবে।

ধাপ 1

ডেলিগেটএক্সেমাল অ্যাপ্লিকেশনটিতে .plist ফাইলটি খুলুন এবং ইউআরএল প্রকার এবং URL টি স্কিম যুক্ত করুন। এখানে আমাদের প্রয়োজনীয় নাম "মাই অ্যাপ" যুক্ত করতে হবে।

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

ধাপ ২

পেজভিউকন্ট্রোলারএক্সপ্যামেল অ্যাপে .plist ফাইলটি খুলুন এবং এই কোডটি যুক্ত করুন

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>myapp</string>
</array>

আমরা যখন পেজভিউকন্ট্রোলারের উদাহরণটিতে বোতামটি ক্লিক করি তখন আমরা DelegateExample অ্যাপটি খুলতে পারি।

//In PageViewControllerExample create IBAction
@IBAction func openapp(_ sender: UIButton) {

    let customURL = URL(string: "myapp://")
    if UIApplication.shared.canOpenURL(customURL!) {

        //let systemVersion = UIDevice.current.systemVersion//Get OS version
        //if Double(systemVersion)! >= 10.0 {//10 or above versions
            //print(systemVersion)
            //UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
        //} else {
            //UIApplication.shared.openURL(customURL!)
        //}

        //OR

        if #available(iOS 10.0, *) {
            UIApplication.shared.open(customURL!, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(customURL!)
        }
    } else {
         //Print alert here
    }
}

দুর্দান্ত, এটি সাহায্য করে। এখন উত্স অ্যাপ থেকে গন্তব্য অ্যাপে কীভাবে যুক্তিটি পাস করবেন?
ভিজেনেশ্বরান এ

2

এই বিষয় সম্পর্কিত একটি পার্শ্ব নোট ...

প্রোটোকলগুলির নিবন্ধভুক্ত নয় এমন 50 টির জন্য অনুরোধের সীমা রয়েছে।

এই আলোচনায় অ্যাপল উল্লেখ করেছেন যে কোনও অ্যাপ্লিকেশনের নির্দিষ্ট সংস্করণের জন্য আপনি কেবলমাত্র canOpenUrlসীমিত সংখ্যক বার প্রশ্ন করতে পারবেন এবং অঘোষিত প্রকল্পগুলির জন্য 50 টি কল করার পরে ব্যর্থ হবেন । আমি আরও দেখেছি যে প্রোটোকলটি যুক্ত হয়ে গেলে আপনি যদি এই ব্যর্থ স্থানে প্রবেশ করেন তবে এটি ব্যর্থ হবে।

এই বিষয়ে সচেতন থাকুন, কারও পক্ষে কাজে লাগতে পারে।


0

এর জন্য @ ভিলি 393 উত্তরের সুইফট 3 টি দ্রুত এবং পেস্ট সংস্করণ:

if UIApplication.shared.canOpenURL(openURL) {
    UIApplication.shared.openURL(openURL)
} else if UIApplication.shared.canOpenURL(installUrl) 
    UIApplication.shared.openURL(installUrl)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.