Mayank Shrivastava
Mayank Shrivastava

Reputation: 362

Open Native iOS app from Xamarin.Forms

I have an native iOS sample app installed in my iPad and also my sample xamarin.Forms App installed. I want to open native iOS app from Xamarin.forms when clicked on button. I have set URL schema in my native iOS app in info.plist.

How do I open native app from xamarin.forms on click of a button. I already tried

var request = Device.OnPlatform(
   string.Format("native app url"),
   string.Format("native app url"),
   string.Format("native app url"));

 Device.OpenUri(new Uri(request));

but its not working.

Upvotes: 4

Views: 1660

Answers (2)

Sanket
Sanket

Reputation: 452

Please go through the below link and attached photo

Info Plist code to be added before opening app (we need to set URL Scheme to open another app)

Link:-launch-an-app-from-within-another-iphone

I am using below code in xamarin forms

  NSUrl request = new NSUrl("Camera://");                      
  var canOpen = UIApplication.SharedApplication.CanOpenUrl(new NSUrl(request.ToString()));
                          if (!canOpen)
                          { Task.FromResult(false); }
                          else
                          {
                              Task.FromResult(UIApplication.SharedApplication.OpenUrl(new NSUrl(request.ToString())));
                          }

Upvotes: 1

pinedax
pinedax

Reputation: 9346

It's basically how you are doing it.

var url = Device.OnPlatform(iOSUrl, androidUrl, winPhoneUrl);

Device.OpenUri(new Uri(request));

Be aware that each platform have some requirements in the way to url is configured and parameters are sent.

Let say to get the maps app open in each platform you would use these urls schemes:

// iOS doesn't like %s or spaces in their URLs, so manually replace spaces with +s
var iOSUrl = string.Format("http://maps.apple.com/maps?q={0}&sll={1}", name.Replace(' ', '+'), loc);

var androidUrl = string.Format("geo:0,0?q={0}({1})", string.IsNullOrWhiteSpace(addr) ? loc : addr, name);

var winPhoneUrl = $"bingmaps:?cp={loc}&q={name}";

var url = Device.OnPlatform(iOSUrl, androidUrl, winPhoneUrl);

Also you cannot open any arbitrary app unless you know its Url scheme.

Anyway, if the Device.OpenUri() doesn't fulfill your requirements you are good to create your own implementations using the native APIs.

Upvotes: 1

Related Questions