虽然我已经看过几次,但似乎没有确定的答案。
任何人都可以帮我解决为什么我的handleOpenURL处理程序没有在应用程序启动时触发? 使用PG - 4.2.0-0.24.1
我有一个handleOpenURL,可以在应用程序运行时正常运行。因此假设我的Info.plist URL方案定义很好。 我已经阅读了各种关于此的文章,这些文章表明这是一个'invokeString'变量,它包含启动时的URL,但是不起作用,我还注意到其他地方已经弃用了。 所有其他文档似乎表明我只需要一个处理程序。一个 其他说明建议处理程序需要在index.html的HEAD部分。 无论如何 - 结果就是我被卡住了。 有人有任何建议或示例项目吗?
由于 医生
答案 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”然后将其添加回来,那么您将丢失代码。有一种方法可以解决这个问题但是我还没有调查过它。