AndroidとiOS用のXamarin.Formsを使ってアプリケーションを開発しています。 http://app.myapp.io/user/reset-password/{some_hash}
のようなURLに入力すると、ユーザーは自分のアカウントの新しいパスワードを設定できる特別な画面でアプリを開きます。Xamarin.Forms - httpスキームURLにリンクしているiOSアプリケーションが動作しない
Androidでは、カスタムインテントフィルタを使用して、スキームをhttp
に、ホストをapp.myapp.io
に設定してこれを実現しています。私はiOSでも同じことをやりたいしかし、AFAIKをiOSでリンクするアプリを登録するときは、それを行う方法は、あなたのInfo.plist
ファイル、カスタムスキームに登録することです。これは私のInfo.plist
ファイルの私のカスタムスキームです。ここで
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UIDeviceFamily</key>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>MinimumOSVersion</key>
<string>6.0</string>
<key>CFBundleDisplayName</key>
<string>MyApp</string>
<key>CFBundleIdentifier</key>
<string>com.company.app</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleIconFiles</key>
<array>
<string>[email protected]</string>
<string>[email protected]</string>
<string>Icon-76</string>
<string>[email protected]</string>
<string>Default</string>
<string>[email protected]</string>
<string>[email protected]</string>
<string>Default-Portrait</string>
<string>[email protected]</string>
<string>Icon-Small-40</string>
<string>[email protected]</string>
<string>[email protected]</string>
<string>Icon-Small</string>
<string>[email protected]</string>
<string>[email protected]</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>CFBundleName</key>
<string>Halligan</string>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.company.app</string>
<key>CFBundleURLSchemes</key>
<array>
<string>http</string>
</array>
</dict>
</array>
</dict>
</plist>
は
{
// The UIApplicationDelegate for the application. This class is responsible for launching the
// User Interface of the application, as well as listening (and optionally responding) to
// application events from iOS.
[Register("AppDelegate")]
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate, IDeviceStorage
{
const string HOCKEYAPP_APPID = "ef71d53e56044baa813c2381b291c355";
#region IDeviceStorage implementation
public string LoadString(string key, string def = null)
{
string value = NSUserDefaults.StandardUserDefaults.StringForKey(key);
if (value == null)
return def;
else
return value;
}
public void SaveString(string key, string value)
{
NSUserDefaults.StandardUserDefaults.SetString(value, key);
NSUserDefaults.StandardUserDefaults.Synchronize();
}
#endregion
//
// This method is invoked when the application has loaded and is ready to run. In this
// method you should instantiate the window, load the UI into it and then make the window
// visible.
//
// You have 17 seconds to return from this method, or iOS will terminate your application.
//
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
if (!Resolver.IsSet) SetIoc();
global::Xamarin.Forms.Forms.Init();
SvgImageRenderer.Init();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
}
public override bool OpenUrl (UIApplication app, NSUrl url, string sourceApp, NSObject annotation)
{
var resetLinkHash = string.Empty;
if (url.BaseUrl.Host.Equals ("app.myapp.io")) {
if (!Resolver.IsSet) SetIoc();
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App(url.LastPathComponent));
return true;
}
LoadApplication(new App(url.LastPathComponent));
return true;
}
private void SetIoc()
{
TinyIoCContainer.Current.AutoRegister();
var container = TinyIoCContainer.Current;
container.Register<IDeviceStorage>(this);
container.Register<IXFormsApp> (new XFormsAppiOS());
container.Register<ISecureStorage, SecureStorage>();
Resolver.SetResolver(new XLabs.Ioc.TinyIOC.TinyResolver(container));
}
}
}
私AppDelegate.csだとここで私のMain.cs
{
public class Application
{
// This is the main entry point of the application.
static void Main(string[] args)
{
// if you want to use a different Application Delegate class from "AppDelegate"
// you can specify it here.
UIApplication.Main(args, null, "AppDelegate");
}
}
}
、よく、今のところこれがでまたはhttpずにしようと、iOSの上では動作しませんですはじまりに。
誰かが正しい方向に私を指摘することができれば、私はそれを感謝します。 URLに一致させることでアプリケーションを起動することは非常に重要です。サーバーにアクセスすることができないため、<meta/>
タグをページのhtmlに追加するなどの作業はできません。