Safariで開いたPDFをXamarin.Formsアプリで受け取るというのをやってみました。
まず、info.plist
にPDFのドキュメントタイプを追加します。
これで、SafariでPDFを表示した時にアプリで開くためのメニューが表示されるようになります。
メニューからアプリが呼び出された時にOpenUrl(UIApplication app, NSUrl url, NSDictionary options)
が呼び出されます。ここで、NSUrl
のプロパティPath
を引数にXamarin.FormsのApp
のメソッドを呼び出します。
AppDelegate.cs
[Register("AppDelegate")]
public partial class AppDelegate : Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
{
App mainForms;
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Xamarin.Forms.Forms.Init();
mainForms = new App();
LoadApplication(mainForms);
return base.FinishedLaunching(app, options);
}
public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
mainForms.DisplayThePDF(url.Path);
return true;
}
}
呼び出すメソッドで、PDFを表示する適当なページに遷移します。
App.xaml.cs
public partial class App : Application
{
public void DisplayThePDF(string url)
{
var openFilePage = new OpenFilesPage(url);
Application.Current.MainPage = openFilePage;
}
}
受け取ったURIを煮るなり焼くなりすればいいです。自分はサンプルなので意味もなくWebViewで表示してみます。Safariから受け取る意味なくなるけど。。。
OpenFilePage.xaml.cs
public partial class OpenFilesPage : ContentPage
{
public OpenFilesPage(string url)
{
var webView = new WebView
{
Source = url
};
Content = webView;
}
}