[Andriod] «response -1008:Unknown error» при оформлении платной подписки

Сегодня на работе тестировали возможность оформления платной подписки  в нашем приложении для Android. Столкнулись с проблемой, связанной с тем, что Google после совершения платежа отправлял статус с ошибкой IAB returned null purchaseData or dataSignature (response -1008:Unknown error), хотя сама подписка приобреталась успешно. Первая мысль — программист где-то накосячил в коде. Была получена клятва, что ошибок в коде нет, а виной всему Google.

Источник проблемы вскоре все же был найден. Оказывается, для совершения оформления подписок нужно использовать не метод mHelper.launchPurchaseFlow(), фигурирующий в официальной документации, а mHelper.launchSubscriptionPurchaseFlow(), который в официальной по какой-то причине отсутствует.

Задаем скорость и задержку соединения в Android-эмуляторе

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

emulator -avd <avd_name> -netspeed <up>:<down>

Готовые профили:

-netspeed gsm — GSM/CSD (up: 14.4, down: 14.4)
-netspeed hscsd — HSCSD (up: 14.4, down: 43.2)
-netspeed gprs — GPRS (up: 40.0, down: 80.0)
-netspeed edge — EDGE/EGPRS (up: 118.4, down: 236.8)
-netspeed umts — UMTS/3G (up: 128.0, down: 1920.0)
-netspeed hsdpa — HSDPA (up: 348.0, down: 14400.0)
-netspeed full — без ограничения (up: 0.0, down: 0.0)

Задержка (в миллисекундах) устанавливается так:

emulator -avd <avd_name> -netdelay :

Готовые профили:

-netdelay gprs — GPRS (min 150, max 550)
-netdelay edge — EDGE/EGPRS (min 80, max 400)
-netdelay umts — UMTS/3G (min 35, max 200)

Подробнее о команде:

emulator -help-netspeed

BlueStack как альтернатива дефолтному Android-эмулятору

Иногда для тестирования Android-приложений приходится использовать эмулятор. Порой дефолтный эмулятор из Andoid SDK оказывается настолько тормознутым, что вызывает панические приступы ненависти к нему. Поэтому в основном я использую BlueStack — очень легковесный эмулятор, со встроенной поддержкой установки приложений через Google Play. BlueStack легко подхватывается DDMS, поэтому никаких сложностей в просмотре логов и прочей информации не возникает.

Единственное, по началу было не ясно, а на какой же версии Android работает эмулятор? Оказывается, уже на устаревшей версии 2.3.4, но выбор понятен — Android 4.x более требователен к ресурсам, а это незамедлительно бы сказалось на производительности самого эмулятора и BlueStack уже не был бы явным фаворитом для работы.

Полезные ссылки:

Официальный сайт
Форум поддержки

[Android] Сбор и просмотров логов без использования ADB

Если нужно просмотреть логи на Android-устройстве, но нет доступа к ADB, то для решения этой задачи очень подойдет программа CatLog. Программа умеет записывать, сохранять и открыть уже существующие лог-файлы. Если возможность задавать уровень логгирования (все, предупреждения, только ошибки и т.п.).

CatLog может пригодится в тех случаях, когда необходимо выявить причину ошибки, которая возникает у удаленного пользователя — достаточно попросить его установить это приложение, запустить в режиме записи, затем воспроизвести ошибку и отправить лог-файл уже непосредственно разработчику.

Также в некоторых случаях может пригодится программа System Info Droid, которая позволяет собирать системную информацию об устройстве и отправлять ее по электронному адресу.

Про баг в Dropbox для iPad

Нашел интересную «особенность» в клиенте Dropbox 2.1.3 для iPad. Вот один из способов воспроизведения:

— открыть изображение -> вверху показывается навигационное меню Dropbox (название файла, шаринг и т.п.)
— не дожидаясь, когда навигационное меню автоматически скроется, вызвать список выбора файлов и дождаться, когда теперь уже навигационное меню скроется; выбрать другой файл (не изображение), к примеру, текстовый файл -> меню больше нет и его невозможно никак выбрать

Когда мы, к примеру, открываем изображение, то навигационная панель через несколько секунд скрывается, чтобы не мешать просмотру (тоже самое происходит при просмотре PDF). Если открыть список выбора файлов не дожидаясь скрытия этой панели, то панель все равно скроется, но потом для файлов (не изображений) вызвать ее вновь уже не представляется возможным.

Разработчикам отправил репорт.

Баг локализации в Instagram

В недавно обновленной версии Instagram (начиная с версии 3.4.0) добавилась поддержка локализации для 25 языков, в том числе и русском. К сожалению, без ляпов не обошлось: некоторые переведенные слова оказались явно длиннее их англоязычных аналогов, в результате чего они стали «накладываться» на другие слова. Могу с большой уверенностью предположить, что ответственные за локализацию приложения даже не удосужились посмотреть, как же стал выглядеть UI на других языках, ибо такую проблему не заметить просто невозможно.

instagram2 instagram

Про iTunes Match

Приобрел годовую подписку на iTunes Match. Цена невелика и составляет 800 руб. Преимущества очевидны: доступность музыки на всех Apple-устройствах; скачивается лишь то, что слушаем (т.е. не придется держать локально десятки ГБ музыки, все хранится в облаке); высокая степень совпадений с уже имеющимися в iTunes музыкальными композициями (соответственно, треки заменяются на более качественную по звучанию музыку). Кто-то говорит, что iTunes Match — это неофициальная легализация пиратской музыки, но я этого мнения не придерживаюсь. Все таки покупая музыку в том же iTunes, вы получаете файл с DRM-защитой от копирования, которая также подтверждает факт ее покупки.

Чтобы избежать хаоса после импорта музыки в iTunes перед отправкой в iCloud (особенно тем, кто никогда еще не использовал iTunes как медиплеер), можно проделать следующее:

1. Создать в iTunes нужный плейлист, перетащить туда соответствующие музыкальные файлы
2. Выделить в плейлисте эти файлы, ПКМ ->; «Загрузить в iCloud». После этих действий начнет работать iTunes Match: музыка будет просканирована, и если она уже имеется в магазине iTunes, то напротив трека появится статус «Совпадение», в противном случае файлы, у которых отсутствуют совпадения, будут загружены в iCloud, а напротив трека появится статус «Выгруженные».
3. Повторять пункты 1-2 до тех пор, пока не перенесете все музыкальные треки

Хорошую инструкцию по работе iTunes Match можно также найти здесь.

P.S.: локализация хромает…

iTunes_match

ADB-драйвер для Samsung Galaxy Tab

Если Windows 7 не сможет автоматически установить ADB-драйвер для Samsung Galaxy Tab, то необходимо установить набор ПО Samsung Kies, в комплекте с которым идут необходимые драйвера.

[Android] Про баг с отсутствием месяца «декабрь»

Отсутствие месяца «декабрь» в календаре приложения «Peolple» в OC Andoid 4.2 взбудоражило интернет-общественность, ибо наконец-то нашелся весомый косяк, позволяющий от всей души потроллить разработчиков.

Факт того, что данный баг был пропущен в релизе, свидетельствует о том, что и в Google тоже работают обычные люди, которым свойственно ошибаться. Однако, остается непонятным, как такой очевидный дефект мог быть пропущен службой тестирования. Возможно, виной тому является слишком большое доверие автотестам и TDD, ведь, если не ошибаюсь, так таковых ручных тестировщиков в Google нет, и в большинстве своем продукты проходят бета-тестирование.