ios - 从扩展上下文中提取 url

标签 ios xamarin

我正在使用 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/

相关文章:

ios - 切换选项卡时退出 View

ios - 复制 iOS 应用程序目标,重命名,添加新图标并从命令行构建应用程序(不使用 Xcode GUI)

c# - Azure移动服务: Define a Table only locally

Android <= 11 启动画面背景颜色和品牌

android - Xamarin 上的 Realm 是否支持并发(非嵌套)写入事务?

ios - 带分页的 UIScrollView + 显示部分上一页/下一页

ios - 归档 CocoaPods 依赖项以发布到 App Store 时出错

objective-c - 潜在的泄漏问题

android - 如何使用 visual studio 2013 登录 Xamarin 组件商店

xamarin - MvvmCross 初始化