如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?
Posted
技术标签:
【中文标题】如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?【英文标题】:How can I access the values passed into my app via a custom url scheme from within my C# code? 【发布时间】:2015-07-14 20:58:05 【问题描述】:我正在开发一个 Xamarin Forms 应用程序。它有一个Entry
字段,用于初始页面上的访问代码。我需要扩展它的功能,以便在遇到自定义 url 方案 myscheme://visitcode
时打开应用程序,并且 Entry
的 Text
值将预先填充 visitcode 的值。
我已成功启动应用程序。
我将我的方案添加到我的 ios 项目中的 info.plist
文件中,当我在 iPhone 上的 Safari 中单击我的自定义 url 方案时,它会正确启动应用程序。
我在我的 Droid 项目中的 MainActivity 上方添加了以下行:
[IntentFilter(new[] Intent.ActionView , Categories = new[] Intent.CategoryDefault, Intent.CategoryBrowsable , DataScheme = "myscheme")]
当我在 android 手机的 Chrome 中单击我的自定义 url 方案时,它会正确启动应用程序。
唯一剩下的障碍是检索该值并用它填充Entry
字段。
有人可以帮我吗?
【问题讨论】:
【参考方案1】:注意:我尚未对此进行测试,因此请确保您的应用生命周期和处理事件的位置与 Xamarin.Forms 应用生命周期相匹配。也就是说,确保
Xamarin.Forms.Application.Current
不为空。如果是,请重新调整您的代码以解决此问题。
对于iOS
,您必须在AppDelegate.cs
中覆盖OpenUrl
:
public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation);
在Android
中,您可以在MainActivity.cs
、OnCreate
或任何其他用作入口点的方法中处理它:
var intent = Intent;
var uri = intent.Data;
这应该允许您检索url
的参数。
然后,您可以通过以下方式检索当前的 Xamarin.Forms
Application
对象:
var myapp = Xamarin.Forms.Application.Current as MyApplication;
现在,由您来检索正确的条目、视图模型、服务或任何连接点的东西。
【讨论】:
我想知道您是否可以澄清 Intent 实例在 MainActivity、OnCreate 中的来源。 OnCreate 需要一个 Bundle....【参考方案2】:Xamarin 商店中有一个组件可以为您处理这个问题:
http://components.xamarin.com/view/rivets
这将消除构建本机实现时冗长的代码要求。
【讨论】:
链接已关闭。请改用 NuGet 包。 Link to project。该项目不再维护,并且有一些限制。例如。 Rivets 包与 Android 6.0 中的应用链接不兼容。所以你不应该再使用它了。以上是关于如何从我的 C# 代码中通过自定义 url 方案访问传递到我的应用程序的值?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 中通过自定义分页器分页方法实现伪静态分页链接以利于 SEO
从 UINavigationController 中通过自定义转换关闭 UIViewController 时出现黑屏