PhoneGapBuild Плагин customurlscheme дескриптор запущен до поздна - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь отправить собственный URL в свое приложение, созданное с помощью PhoneGap-Build.Чтобы достичь этого, я использую customurlscheme-плагин от Eddy-Verbruggen

https://github.com/EddyVerbruggen/Custom-URL-scheme

(спасибо за плагин).Чтобы проверить это, я интегрировал следующие файлы приложения для сборки zip:

config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
    <widget 
        xmlns   = "http://www.w3.org/ns/widgets"
        xmlns:gap   = "http://phonegap.com/ns/1.0"
        id          = "mysimpleapp.de"
        versionCode = "002" 
        version     = "1.0.1" >

    <!-- versionCode is optional and Android only -->

    <name>My Test-App</name>

    <description>
        The Simple Testapp 
    </description>

    <author href="https://www.example.org" email="doe@example.org">
        John Doe
    </author>   

    <!-- PlugIns -->
    <plugin name="cordova-plugin-backbutton" spec="~0.3.0" />
    <plugin name="cordova-plugin-console" spec="~1.1.0" />
    <plugin name="cordova-plugin-device" spec="~2.0.2" />
    <plugin name="cordova-plugin-statusbar" spec="~2.4.2" />
    <plugin name="cordova-plugin-whitelist" spec="~1.3.3" />
    <plugin name="cordova-plugin-x-socialsharing" spec="~5.3.2" />
    <plugin name="cordova-plugin-inappbrowser" spec="~3.0.0" /> 

    <preference name="orientation" value="portrait" />
    <preference name="StatusBarBackgroundColor" value="#000" /> 

    <gap:plugin name="cordova-plugin-customurlscheme" source="npm">
      <param name="URL_SCHEME" value="mysimpleapp" />
    </gap:plugin>   

    <allow-intent href="mysimpleapp:" />
    <allow-navigation href="*" />
    <access origin="*" />

</widget>

и index.html

<!DOCTYPE HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0 minimal-ui"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black"> 
<link rel="manifest" href="/manifest.json">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-TileImage" content="/mstile-144x144.png">
<meta name="theme-color" content="#ffffff">
<meta http-equiv="Content-Security-Policy" 
         content="default-src * mysimpleapp:; 
                  style-src * 'self' 'unsafe-inline' 'unsafe-eval'; 
                  script-src * 'self' 'unsafe-inline' 'unsafe-eval';">

<title>My Test App</title>

<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript">

var handleOpenURL = function(url) {
    setTimeout(function() {
    alert ("handleOpenURL event raised with url: " + url);
    // Number 4 in apk
 }, 0);
}

var app = {

    initialize: function() {
        this.bindEvents();
        alert("initialize event raised");
        //Number 1 in apk
    },

    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },

    onDeviceReady: function() {
        app.receivedEvent('deviceready');
        // Number 2 in apk
        try {
            alert("onDeviceReady event raised");
        }
        catch(err) {
            alert("Device Ready error : " + err);
        }
    },

    receivedEvent: function() {
        alert("Received Event...");
        // Number 3 in apk
    }
};

app.initialize();

</script>
</head>
<body>
    <h1>App Test</h1>
    <p>Silence is golden...</p>
</body>

Теперь я запускаю свой (Android) apk с формой внешней ссылки с внешней веб-страницы через JavaScript:

window.location = "mysimpleapp://";

Я написал заказ из предупреждений в комментариях. Моя проблема в том, что я не знаю, где мне нужно разместить handleOpenURL, чтобы функция обрабатывалась до того, как сработало событие deviceready.

В некоторых попытках я пытаюсь поместить всеКод JavaScript для моего приложения в функцию handleOpenUrl выглядит следующим образом:

function handleOpenURL(url) {
  setTimeout(function() {

    // my Javacript-Code


  }, 500);
}

Это работает, когда приложение запускается с внешнего URL-адреса.Но если приложение запускается прямо с моего домашнего экрана, событие не будет запущено.И когда я помещаю функцию самовозбуждения ниже, эта функция самовозбуждения сработает за до handleOpenURL, поэтому я возвращаюсь к своей исходной точке.

...