Избранное Все заметки GitHub icon Мой Github Обо мне
12 заметок с тегом

plugin

Riddut. Возвращение.

В 2015 году я сделал для себя небольшой плагин для браузера — он вырезал из ленты ВК и ФБ ненужные мне записи по стоп-словам. Всё работало очень просто: находил в ленте слово и удалял пост.

Потом, я добавил поддержку морфологии, чтобы не добавлять кучу слов с разными окончаниями. Ещё скрипт научился удалять контекстную рекламу и фильтровать выдачу поисковых систем. И итогом стала — фильтрация любого сайта. Иногда от этого страдает вёрстка, но оно того стоит. Новостной сайт после фильтра хоть можно читать...

После этого, я успешно про него забыл. И вот 2018 год: выборы, санкции, олимпийцы — пришло время снова очистить своё информационного пространство от, и смахнуть пыль со старого кода.

Riddut

Так называется расширение. Да, оно ограждает от нескончаемого потока информационного шума. Это такой персональный AdBlock для контента.
Вот что умеет:

  • удалять любое упоминание стоп-слова на любом сайте
  • удалять посты и рекламу из соц. сетей Фейсбук, ВКонтакте, Одноклассники, Твиттер по ключевым словам
  • удалять позиции в выдаче и рекламу поисковых систем Яндекс, Гугл, Бинг
  • фильтровать дозагруженный контент
  • работать с белыми списками сайтов
  • понимать русскую и английскую морфологию (не полностью)
  • синхронизироваться между браузерами
  • показывать красивую статистику «сэкономленного» времени :_)

Сейчас всё это дело в бета версии, так что, если расширение окажется вам полезным — напишите на mail@mopsicus.ru, что добавить, убрать, исправить, улучшить. Захотите поучаствовать? Буду рад.

Есть версии для Chrome, Safari и Opera. С Firefox пока не разобрался в чём проблема, но думаю решу.

Подробнее на https://riddut.mopsicus.ru

Заметка чтобы попереживать. Да, расширение отправляет на сайт слова, чтобы с помощью библиотеки морфологии, получить в ответ все его формы и отфильтровать страницу. Ещё оно скачивает актуальные данные по вёрстке. Это всё. В любом случае, всё что отправляет и получает расширение можно посмотреть через консоль. Если вас это не устраивает, что ж, вы можете не использовать моё расширение :)

Riddut — это не баннерорезалка. Удаление некоторой рекламы, это приятный бонус, а не основная функция. Но вы легко можете использовать и то и другое вместе.

3 февраля   js   plugin   riddut   браузер   проекты   расширение

Unity android plugin + onActivityResult

Автор приводит пример, как он решил вопрос с обработкой onActivityResult в андроидах плагинах для Unity. Создаёт отдельный активити, там перехватывает и завершает. Норм решение.

Ещё можно сделать специальный плагин который будет наследоваться от UnityPlayerActivity и прописать его в манифесте, чтобы он запускался первым. Там тоже можно переопределить onActivityResult.

Ну и ещё как вариант, запускать во фрагменте (fragment) и обрабатывать там.

25 января   android   plugin   unity   ссылки

5 полезных ассетов и библиотек для Unity #2

1. Unity Loop Component [Ссылка]

Небольшая библиотека которая позволяет повесить хук на события Update, LateUpdate, FixedUpdate, OnRenderObject и другие.

2. UIEffect [Ссылка]

Коллекция эффектов для uGUI. Позволяет быстро добавить около десятка различных эффектов для интерфейса своей игры или приложения: размытие, пикселизация, сепия и т. д.

3. Расширение для MemoryProfiler [Ссылка]

Такое расширение для расширения, про которое я уже писал как-то :) Позволяет искать, фильтровать и выводить информацию в более удобном виде.

4. NaughtyAttributes [Ссылка]

Хорошее расширение для инспектора Unity. Позволяет добавить много удобных контролов: слайдеры, кнопки, выпадающие списки, валидаторы и ещё много чего. Рекомендую.

5. The Stack [Ссылка]

В завершении не ассет, а демка популярной игры Stack. Полезно для новичков, можно подглядеть как делаются такие простые, но в тоже время залипательные игры :)

2017   plugin   ассеты   ссылки

Отправка письма из Unity

Ничего особенного конечно, ничем не отличается от самого обычного плагина для iOS или Android, но кто-то у меня спрашивал про это.
Весь код умещается на одном экране, дольше демку делал :)

Исходники на Github

Вообще, надо бы собрать все плагины, мелочуху и выложить на гитхаб: синхронизация с iCloud, in-app покупки (не доверяю я Unity IAP :), буфер обмена, получение изображения с камеры и галереи, сохранение в галерею, push уведомления, запись в keychain, авторизация через Google Sign-in, встроенный браузер и прочее.
Если что-то заинтересовало — пишите в комменты или mail@mopsicus.ru.

2017   android   git   ios   plugin   unity

Работа в фоне в iOS и Unity

Маленький плагин который позволяет поработать приложению в свернутом виде на iOS, некоторое время. Зачем это нужно? Например, чтобы дождаться команды с сервера и показать пользователю уведомление, что пришло время его хода.
Весь плагин состоит из двух функций, которые запускают и останавливают задачу при потере фокуса.

-(void) startTask {
    [self endTask];
    if (bgTask == UIBackgroundTaskInvalid) {
        bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
            [[UIApplication sharedApplication] endBackgroundTask:bgTask];
            bgTask = UIBackgroundTaskInvalid;
        }];
    }
}

- (void) endTask {
    if (bgTask != UIBackgroundTaskInvalid) {
        [[UIApplication sharedApplication] endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    }
    [UIApplication sharedApplication].idleTimerDisabled = NO;
}

А в Unity это вызывается на OnApplicationFocus:

void OnApplicationFocus (bool focusStatus) {								
    if (focusStatus) 
        Background.StopTask();
    else 
        Background.StartTask();
}

Ссылка на Github

2017   git   ios   plugin   unity   разработка

Unity, iOS и IPv6

С 1 июня 2016 года, все отсылаемые приложения в AppStore должны уметь работать по IPv6.

Unity вроде как решили все эти вопросы еще в прошлом году. Но если погуглить, то оказывается, что некоторые получают отказы до сих пор, по тем или иным причинам связанным с IPv6. Чтобы проверить работает ли ваше приложение в сетях IPv6, Apple написали специальную статью с мануалом. Я ей воспользовался и обнаружил, что приложение не коннектится к серверу :(

Для соединения используются сокеты, поэтому код был очень простой:

...
private Socket _socket;
 
public static void Connect () {
    _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    _socket.BeginConnect("134.253.17.11", 10001, new AsyncCallback(OnEndConnect), null);
}
 
void OnEndConnect (IAsyncResult iar) {
    Debug.Log ("connected");
}
...

Собственно, сразу стало понятно в чем проблема — AddressFamily должен быть InterNetworkV6 если работаем по IPv6 или InterNetwork для IPv4.

Если подключаться к серверу по домену, то можно воспользоваться таким решением — передаем хост, указываем тип, в ответ получает IPv6 или «обычный» IP адрес.

Если же подключение осуществляется по IP адресу, то преобразование с помощью различных конвертеров в IPv6 (раз, два), не дало работающего результата — сокет просто не подключался.

Ответ был найден в том самом мануале от Apple (смотрим на подраздел Use System APIs to Synthesize IPv6 Addresses) и на одном китайском сайте :) Если все это объединить, то получится более-менее универсальное решение которое будет работать и по IPv6, и по IPv4, в iOS и Android.

Исходник на Github

2017   git   ios   plugin   unity   разработка

Система плагинов для iOS и Android

Простая система плагинов для мобилок. Контроллер инициализирует все плагины и обрабатывает приходящие сообщения. Обмен данными в формате JSON.

Вообще, печаль конечно, что Unity не реализует даже самые простые варианты работы с мобильными платформами, тот же браузер или камера. Может когда-нибудь...

Ссылка на Github

2017   android   ios   plugin   unity   разработка   с#

Как убрать InputBox в Android над клавиатурой

Обновлено 11.04.2017
Есть неплохая реализация, правда заброшенная, но рабочая. Можно допилить до годноты.

Если вы не знаете, о чем речь, то эта заметка не для вас :)

Другие же, наверняка гуглили «unity hide mobile input». И не находили стандартного решения — потому что его нет. Все написано в документации:

Note: Android: only TouchScreenKeyboard.visible input field is supported, hence this value is always false.

Конечно, пользовательский ввод в играх нужно сводить к нулю, но бывают исключения. Ради такого исключения, чтобы избавиться от панели над клавиатурой, я сделал этот плагин.

Идея в том, что на экран добавляется нативное невидимое поле ввода откуда потом забирается текст. Все просто. Да, это не изящное решение, а грязный хак, но он работает — верхнего поля ввода нет и появляется стандартная клавиатура Android или iOS. Если к этому добавить ассет Text Mesh Pro, то будут еще и эмоджи. Да, еще не видно курсора. Я думаю над этим... :)

Если есть более красивое решение — киньте ссылку :)

Ссылка на Github

Unity share плагин для iOS и Android

Каждый разработчик пытается автоматизировать процесс. В результате, создаются собственные движки, врапперы, надстройки, «велосипеды» и т. д... Так и получилось, нужно было сделать более-менее универсальный способ шаринга в Unity проекте для андроидов и айфонов, в результате написал эти два плагина. Теперь запросы типа: «как расшарить из Unity», «unity share plugin», «как отправить вконтакте из unity» должны вести сюда :)

Использовать очень просто. Есть небольшие заморочки с настройкой проекта под iOS, но это делается один раз и автоматически, с помощью обработки проекта после билда. Можно добавлять, изменять и использовать как угодно, все исходники и пример на Github.

В данный момент можно шарить в:

  • ВКонтакте
  • Facebook
  • Twitter
  • Одноклассники
  • WhatsApp
  • Viber
  • Telegram

Интерфейс в Unity выглядит так:

// vk, fb, ok, tw, wa, vb, tg
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class Sharing : MonoBehaviour {

	#if UNITY_IOS
		[DllImport ("__Internal")]
		private static extern void shareVia (string app, string message, string url, string param);
	#endif

	// Поделиться 
	public static void ShareVia (string app, string message, string param = "") {
		#if UNITY_ANDROID
			message = string.Format ("{0} {1}", message, "http://my.url.com"); // добавление ссылки
			using (var plugin = new AndroidJavaClass("com.mycompany.sharing.Plugin")) {
				plugin.CallStatic("shareVia", app, message);
			}
		#elif UNITY_IOS
			shareVia (app, message, "http://my.url.com", param);
		#endif
	}
		
	// Не удалось расшарить
	void OnShareError (string result) {
		switch (result) {
			case "NotInstall":
				// приложение не установлено
				break;
			case "NotAvailable":
				// шаринг не доступен
				break;
			case "AccessDenied":
				// нет доступа
				break;
			default:
				// не удалось расшарить текст
				break;
		}
	}
}

Например, чтобы расшарить в Facebook, достаточно вызвать:

Sharing.ShareVia ("fb", "Hi from Unity");

Для работы некоторых API, нужны ID приложений. Чтобы их получить, необходимо создать приложения для этих соц. сетей, как это сделать обычно написано в специальном разделе для разработчиков на сайте. Например, как для ВКонтакте.

Внутренности каждого плагина тут расписывать не буду, исходники все доступны, если будут вопросы пишите — почта внизу страницы.

Исходник на Github

2016   android   ios   plugin   unity

Unity iOS plugin

Так как тема мобильной разработки на Unity для меня сейчас актуальна, то продолжу про создание плагинов. Как сделать свой плагин для iOS? Что можно делать с помощью нативных плагинов? Например, показать стандартный ActionSheet или отобразить HTML, или синхронизироваться с iCloud, или получить доступ к галереи картинок опять же... Чтобы сделать простой плагин и xCode не обязателен, на самом деле.

Для примера, сделаем плагин который отображает браузер и загружает какую-нибудь страницу внутри Unity приложения. Плагин будет состоять всего из одного файла, с расширением .mm. В документации есть список форматов и описание сборки под iOS.

Для начала, объявим главный контроллер Unity приложения:

extern UIViewController *UnityGetGLViewController();

Для примера будет достаточно трех функций: показа браузера, загрузки страницы, скрытия браузера.

- (void)showBrowser {
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, screenRect.size.width, screenRect.size.height)];
    [UnityGetGLViewController().view addSubview:webView];
}

- (void)loadUrl:(NSString *)url {
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]]];
}

- (void)close {
    [webView removeFromSuperview];
    webView = NULL;
}

Функция showBrowser добавляет браузер на главный экран, растягивая по высоте и ширине. При желании, в функцию можно передавать отступы, чтобы показывать браузер там где нужно.

Ну и последнее, интерфейс доступа на C:

static Browser *browser = NULL;

extern "C" {
    
    void browserLaunch () {
        if (browser == NULL)
            browser = [[Browser alloc] init];
        [browser showBrowser];
    }
    
    void browserLoadUrl (const char* url) {
        [browser loadUrl:[NSString stringWithUTF8String:url]];
    }
    
    void browserClose () {
        [browser close];
    }
    
}

Это все, плагин готов! Теперь осталось вызывать эти функции из Unity. По аналогии с Android плагином, делаем класс для браузера. Все функции подключаем через [DllImport («__Internal»)], должно получиться что-то такое:

using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;

public class Browser : MonoBehaviour {

	#if UNITY_IPHONE
		[DllImport ("__Internal")]
		private static extern void browserLaunch (int left, int right, int top, int bottom);

		[DllImport ("__Internal")]
		private static extern void browserLoadUrl (string url);

		[DllImport ("__Internal")]
		private static extern void browserClose ();
	#endif 

	// Показываем браузер
	public static void Launch (RectOffset offset) {
		#if UNITY_IPHONE
			browserLaunch (offset.left, offset.right, offset.top, offset.bottom);
		#endif
	}

	// Открыть страницу
	public static void LoadUrl (string url) {
		#if UNITY_IPHONE
			browserLoadUrl (url);
		#endif
	}

	// Убрать браузер
	public static void Close () {
		#if UNITY_IPHONE
			browserClose ();
		#endif
	}
}

Тут нужно уточнить, что браузер будет добавлен на главный экран, поверх всего. Поэтому, нужно правильно высчитать отступы, чтобы все выглядело красиво. В примере значения отступов грубо прописаны в коде, так делать не стоит :)

Исходники на GitHub

2016   ios   plugin   unity
Ранее Ctrl + ↓