2015-04-08 3 views
0

Кажется, нет никакого окончательного ответа для этого, хотя я видел, как он упоминал несколько раз.Phonegap - handleopenurl

Может ли кто-нибудь помочь мне разобраться, почему мой обработчик handleOpenURL не запускается при запуске приложения? Использование PG - 4.2.0-0.24.1

У меня есть handleOpenURL, который отлично работает, когда приложение работает. Предполагая, что мое определение схемы URL-адреса Info.plist прекрасное. Я читал всевозможные статьи об этом, предлагая, что здесь есть переменная 'invokeString', которая содержит URL-адрес при запуске, но это не работает, а также я заметил, что в другом месте это устарело. Все остальные документы, похоже, предполагают, что мне нужен только один обработчик. a Другое примечание, предполагающее, что обработчик должен находиться в разделе HEAD index.html .. В любом случае - результат заключается в том, что я застрял. У кого-нибудь есть предложения или пример проекта?

Благодаря Д.Р.

ответ

0

Fixed. Мне нужно было отредактировать часть приложения и добавить несколько дополнительных строк. В файле AppDelegate.m основного приложения iOS - я добавил следующий код в метод 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]; 
} 

В основном - это захватывает URL передается при запуске приложения, получает данные из словаря, а затем вызывает стандартный метод processOpenUrl .. я немного больше, чем требуется здесь я также заинтересован в поиске, который приложение запустило URL-адрес. Для этого я просто объединяю значение UIApplicationLaunchOptionsSourceApplicationKey с URL-адресом с известным разделителем (////) Затем в приложении 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 платформы удалить ИСН», а затем добавить его обратно в то вы потеряете код. Конечно, есть способ работать с этим, но я не изучал его.

+0

Просто хотел упомянуть, что этот [self.viewController processOpenUrl: url]; приведет к сокращению вашего URL-адреса, если это довольно долго. Это потому, что processOpenUrl напрямую преобразует NSURL в строку, и благодаря Apple это приведет к сокращению URL-адреса с использованием эллипсиса (...). Я уже подал отчет об ошибке для Cordova iOS и спросил их использовать url.absoluteString вместо простого URL-адреса, чтобы предотвратить эту ошибку. – waldgeist

Смежные вопросы