1. 程式人生 > >Xamarin.Forms 中iOS通過URL Scheme判斷應用是否安裝

Xamarin.Forms 中iOS通過URL Scheme判斷應用是否安裝

原因 turn EDA 策略 erro function 如果 style ace

Xamarin.Forms 中iOS通過URL Scheme判斷應用是否安裝

在移動應用開發中,經常需要判斷一個app是否安裝,iOS中有什麽方式可以判斷app是否安裝呢?

這裏介紹通過Url Scheme來判斷應用是否安裝。
Url Scheme在這裏就不詳講了,可以看文章URL Schemes 使用詳解。

首先我們來看看在原生iOS開發中Objective-C如何編寫判斷代碼:

if ([[UIApplication sharedApplication] canOpenURL:[NSURL  URLWithString:@"mqq://"]]){
    NSLog(@"install--"
); }else{ NSLog(@"no---"); }

如果已經安裝了該應用,那麽可以通過如下方法打開它:

[[UIApplication sharedApplication] openURL:url];

註意事項:
Scheme白名單問題(無法判斷手機是否安裝微信等)

-canOpenURL: failed for URL: "weixin://app/wxdaae92a9cfe5d54c/" - error: "This app is not allowed to query for scheme weixin"

原因如下:

iOS 9系統策略更新,此外應用需要在“Info.plist”中將要使用的URL Schemes列為白名單,才可正常檢查其他應用是否安裝。

接下來就是如何轉換成Xamarin中的代碼:
  1. 首先定義接口

public interface IOpenClientService
{
    bool CanOpenClient(string path);
}

  1. 在iOS項目中實現
public bool CanOpenClient(string path)
{
    try
    {
        NSUrl url = new NSUrl(path);
        return UIApplication.SharedApplication.CanOpenUrl(url);
    }
    catch
{ return false; } }

  1. 通過DependencyService使用,打開App直接用Device.OpenUri方法即可。
bool canOpenUrl = DependencyService.Get<IOpenClientService>().CanOpenClient(url);
if(canOpenUrl) Device.OpenUri(new Uri(url));

這樣就能滿足我們的需求啦!

Xamarin.Forms 中iOS通過URL Scheme判斷應用是否安裝