В Marbles2 для iOS я хотел, чтобы люди могли нажимать на URL-адрес, например http://marbles2.com/app/?seed=2A72367A, и если приложение установлено на устройстве iOS, чтобы оно запускало Marbles2 и инициализировалось с помощью «семя» прошло.
Это потребовало внесения изменений в проект iPhone PhoneGap, который с тех пор был объединен с размещенным на нем кодом git , поэтому я собираюсь показать вам, что делать и как получить доступ к этой информации.
Связывание пользовательской схемы URL
Вам нужно отредактировать ваш app-Info.plist (в моем случае это «мраморные» приложения), добавить ключ «Типы URL» и следовать указаниям в справочнике iOS . В конце он должен выглядеть примерно так, как показано на скриншоте ниже, где «marbles» — это пользовательская схема URL, а «com.leftlogic. $ {PRODUCT_NAME}» — мой идентификатор продукта.
Доступ к пользовательским данным URL
Если вы используете последнюю версию проекта PhoneGap iPhone, то когда вы нажмете на URL, который выглядит следующим образом:
Нажав на ссылку, пока на вашем устройстве (или в симуляторе) запустится приложение, которое вы установили с соответствующей пользовательской схемой URL, и PhoneGap представит новый объект в глобальной области видимости, который называется Invoke_params . Итак, чтобы получить доступ к аргументу «семя», я делаю:
alert('Seed is ' + window.Invoke_params.seed
Просто, а? Теперь у вас есть способ передать пользовательские аргументы для запуска вашего приложения.
Двойная сеть и нативная поддержка
Теперь, когда родная версия PhoneGap Marbles2 поддерживает пользовательский URL-адрес, как насчет URL, который я разместил, скажем в Twitter?
Принцип работы Marbles2 заключается в том, что если вы посещаете веб-версию и передаете начальное число (это способ воспроизведения последовательности плат других людей), и у вас установлена нативная версия — я хочу отправить вас в нативное приложение ,
Я справляюсь с этим так: когда вы запускаете веб-версию Marbles2, она проверяет наличие в URL-адресе. Если есть, он пытается открыть iframe, указывающий на пользовательскую схему URL. Если приложение установлено, это приведет к его запуску (хотя оно будет отображаться перед открытием приложения). Так как у нативного приложения нет семени в окне . объект местоположения , я могу использовать точно такой же код между нативным приложением и веб-приложением, используя простой фрагмент кода, подобный следующему:
// if the url contains "seed=xyz" then this code will run
window.location.search.replace(/bseed=([^&=]*)b/, function (m, seed) {
var iframe = getIFrame();
document.body.appendChild(iframe);
// discard the iframe when it's finished
iframe.onload = function () {
document.body.removeChild(iframe);
};
// this pops up an ugly window in Mobile WebKit - would be nice to suppress it
// but if the native app is installed, it will launch Marbles2 and pass in
// the game seed.
iframe.contentWindow.location = 'marbles:///?seed=' + seed;
// carry on as normal, if the custom url doesn't do anything,
// initialise the game with the passed in "seed"
Marbles.seed(seed); // handle the web based game using the seed
});
// create an iframe that's on the page, but hidden visibly
function getIFrame() {
var iframe = document.createElement('iframe');
iframe.style.visibility = 'none';
iframe.style.position = 'absolute';
iframe.style.left = '-999px';
iframe.style.height = '1px';
iframe.style.width = '1px';
return iframe;
}
Marbles2
Поиграйте с онлайн-версией, и я опубликую нативную версию в магазине iTunes в следующем месяце или около того, так что вы сможете увидеть эффект, если сами еще не поигрались с ней.
Если вы хотите узнать больше о PhoneGap, на моей конференции Full Frontal проводится однодневный семинар с Брайаном Леру полностью на PhoneGap, так что проверьте его!
