Phonegap - handleopenurl

时间:2015-04-08 13:14:23

标签: cordova url

虽然我已经看过几次,但似乎没有确定的答案。

任何人都可以帮我解决为什么我的handleOpenURL处理程序没有在应用程序启动时触发? 使用PG - 4.2.0-0.24.1

我有一个handleOpenURL,可以在应用程序运行时正常运行。因此假设我的Info.plist URL方案定义很好。 我已经阅读了各种关于此的文章,这些文章表明这​​是一个'invokeString'变量,它包含启动时的URL,但是不起作用,我还注意到其他地方已经弃用了。 所有其他文档似乎表明我只需要一个处理程序。一个 其他说明建议处理程序需要在index.html的HEAD部分。 无论如何 - 结果就是我被卡住了。 有人有任何建议或示例项目吗?

由于 医生

1 个答案:

答案 0 :(得分:0)

固定。 我不得不编辑应用程序的原生部分并添加了几行。 在核心iOS应用程序的AppDelegate.m文件中 - 我将以下代码添加到didFinishLaunchingWithOptions方法中。

if (launchOptions == nil) {
  NSLog(@“launchOptions nil”);
} else {
  // Get any SourceApplication data
  NSString urlPlus = [launchOptions valueForKey:UIApplicationLaunchOptionsSourceApplicationKey];
  // Get the URL object
  NSURL urlData = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
  // Append //// seperator and then the URL string (absoluteString)
  urlPlus = [urlPlus stringByAppendingString:@“////”];
  urlPlus = [urlPlus stringByAppendingString: urlData.absoluteString];
  NSURL *url = [NSURL URLWithString:urlPlus];
  [self.viewController processOpenUrl:url];
}

基本上 - 它捕获在app启动时传递的url,从字典中获取数据,然后调用标准的processOpenUrl方法。 我做的略多于此处要求,因为我也有兴趣找出哪个应用程序发起了URL调用。为此,我简单地将UIApplicationLaunchOptionsSourceApplicationKey值与带有已知分隔符的URL连接(////) 然后在app js中 - 我使用内置的handleOpenURL处理程序和一些额外的代码来检查和拆分组件。

function handleOpenURL(url) {
  var launchURL = "“;
  var launchSource = ”“;
  if (url.indexOf(”////“) > 0) {
    launchURL = url.split(”////“)[0];
    launchSource = url.split(”////“)[1];
    window.setTimeout(function () {
    alert('handleOpenURL: ‘ + ”launchURL: “ + launchSource + ”<br>“ + ”launchSource: “ + launchURL);
    }, 1000);
  } else {
    launchURL = url;
    window.setTimeout(function () {
    alert(’handleOpenURL: ‘ + ”launchURL: “ + launchURL);
    }, 1000);
  }
};

注意:通过编辑核心的AppDelegate.m文件,您将永远保留预订,因为如果您使用“phonegap platforms remove ios”然后将其添加回来,那么您将丢失代码。有一种方法可以解决这个问题但是我还没有调查过它。