我正在使用 Xamarin 开发一个 iOS 应用程序,其共享扩展运行良好。当我从 Chrome 打开扩展程序以共享 URL 时,系统会提示我显示“发布”对话框。一旦我点击帖子,我想提示共享网址。出现提示对话框,但它是空的。看来我没有正确提取网址。
我使用以下代码从扩展上下文中提取 url。
var urlstr = string.Empty;
var item = ExtensionContext.InputItems[0];
NSItemProvider prov = null;
if (item != null)
prov = item.Attachments[0];
if (prov != null)
{
prov.LoadItem(UTType.URL, null, (NSObject url, NSError error) =>
{
if (url == null)
return;
NSUrl newUrl = (NSUrl)url;
urlstr = newUrl.ToString();
});
UIAlertController alert = UIAlertController.Create("Share extension", urlstr, UIAlertControllerStyle.Alert);
PresentViewController(alert, true, () =>
{
DispatchQueue.MainQueue.DispatchAfter(new DispatchTime(DispatchTime.Now, 5000000000), () =>
{
ExtensionContext.CompleteRequest(null, null);
});
});
}
这是 info.plist 文件中的字典
<dict>
<key>NSExtensionActivationRule</key>
<string>TRUEPREDICATE</string>
<key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
<integer>1</integer>
<key>NSExtensionActivationSupportsWebPageWithMaxCount</key>
<integer>1</integer>
</dict>
最佳答案
这是因为 LoadItem
是异步的。因此,您调用它,并在调用后立即显示警报对话框。这会导致显示对话框时未设置 urlstr。您必须在 LoadItem
的完成处理程序中显示警报对话框。
prov.LoadItem(UTType.URL, null, (NSObject url, NSError error) =>
{
if (url == null)
return;
NSUrl newUrl = (NSUrl)url;
urlstr = newUrl.ToString();
UIAlertController alert = UIAlertController.Create("Share extension", urlstr, UIAlertControllerStyle.Alert);
PresentViewController(alert, true, () =>
{
DispatchQueue.MainQueue.DispatchAfter(new DispatchTime(DispatchTime.Now, 5000000000), () =>
{
ExtensionContext.CompleteRequest(null, null);
});
});
});
关于ios - 从扩展上下文中提取 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37355551/