Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Внутренние покупки в приложении

Добрый день.

Пытаюсь разобраться с внутренними покупками в приложении, но никак не могу осилить :-(

Если есть у кого-то подробный гайд на русском, поделитесь, пожалуйста. Пока даже не знаю про что спросить, кроме того, как это подробно работает и как мне встроить это в своё приложение?

Хочу в игре продавать подсказки к головоломке. Как я понимаю, мне надо ещё на своей стороне делать серверную часть, которая как раз и отправляет подсказки. Не совсем понимаю как это всё будет вместе работать. Поделитесь опытом :-).

Спасибо. 
Ответ:
Небольшое дополнение.

Дописал новогоднюю головоломку и решил добавить туда донаты. То есть платежи, которые можно совершать многократно.
То есть, если мы совершаем покупку, то для для повторной покупки товар необходимо реализовать. 
Чтобы реализовать товар, в метод 
@Override
public void onProductPurchased(String productId, TransactionDetails details)

добавляем строку bp.consumePurchase(productId);

после этого товар можно приобретать повторно. 
Вопрос: Как сохранить фото с камеры напрямую во внутреннюю директорию приложения?

Стартую Intent камеры, добавляю Extra с Uri файла, куда надо сохранить снимок:

Java
1
2
3
4
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        Uri uriFotoFile = Uri.fromFile(getInternalFotoPath());
        intent.putExtra(MediaStore.EXTRA_OUTPUT,uriFotoFile);
        startActivityForResult(intent,REQUEST_TAKE_PHOTO);
Методом getInternalFotoPath() формирую файл куда надо записать результат:
Java
1
2
3
4
5
private File getInternalFotoPath(){
        File internalFilesDir = getFilesDir();
        File file = new File(internalFilesDir,"test_foto.jpg");
        return file;
    }
В onActivityResult смотрю что там вообще есть, во внутренней деректории приложения:
Java
1
2
3
4
5
6
7
8
9
10
11
12
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode){
            case REQUEST_TAKE_PHOTO:
                toLog("Получили фото. Содержимое внутренней директории приложения");
                for (File file : getFilesDir().listFiles()) {
                 toLog(file.getName());
                }
                break;
        }
    }
И всё, зависаю на камере. Т.е. камера стартует, делаю снимок и далее по нажатию "Ок" так и остаюсь висеть в камере. Могу вернуться назад и всё.

Если заменить Uri файла на сам файл, т.е. добавлять Extras так:
Java
1
intent.putExtra(MediaStore.EXTRA_OUTPUT,getInternalFotoPath());
Никакой ошибки не происходит, из фото нормально выхожу, но файла во внутренней директории нет.

Могу получить снимок в External Storage и потом уже перекинуть файл в Internal. Но это кажется таким велосипедом. Если Intent на получения фотографии может легко писать в getExternalFilesDir(Environment.DIRECTORY_PICTURES) (в ту часть, куда так же не нужны права в манифесте
XML
1
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
то и сразу в Internal наверное как-то же можно?
Ответ: arvalon, в интернал камера не может писать - сам пробовал это провернуть и где-то читал что не может - где к сожалению не запомнил
Вопрос: покупки в приложении и id пользователя, скачавшего приложение

Всем привет.

Сразу вопрос - как вытянуть id пользователя, который скачал приложение из маркета?

Чуть подробнее.
Пользователь скачивает приложение, запускает его и совершает покупку. Во время покупки ему открывается стандартный диалог, он выбирает аккаунт с которого платит.
Все замечательно, если у него только один google аккаунт на устройстве. А если их несколько?
Мне нужно отправлять на backend идентификатор пользователя, что бы связать покупку с каким-то аккаунтом.

Сейчас получается так - я могу получить список аккаунтов на устройстве, так же могу попросить пользователя "залогиниться" в приложении. Но он может выбрать один аккаунт, а платить будет с другого.
Ответ: я честно говорю что с авторизацией до этого не работал и поэтому не совсем представляю даже направление куда идти

сейчас в коде создается GoogleApiClient вот так
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(DEFAULT_SIGN_IN)
                .requestEmail().build();
        client = new GoogleApiClient.Builder(context)
                .addConnectionCallbacks(this)
                .addApi(Plus.API)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .addScope(new Scope(Scopes.PROFILE))
                .addScope(new Scope(Scopes.EMAIL))
                .build();
дальше в коде в нужном месте на нем вызывается connect() и когда коннект есть вызываю на экран диалог с авторизацией
Java(TM) 2 Platform Standard Edition 5.0
1
2
            Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(client);
            ((MainActivity) context).startActivityForResult(signInIntent, Const.ACTIVITY_LOGIN_REQUEST);
пользователь выбирает аккаунт и я могу из него дернуть все что нужно - id, email, фотку из профиля и т.д.
но проблема в том, что он может выбрать к примеру аккаунт №3, а карточка у него привязана к аккаунту №1

дальше в коде, когда надо сделать покупку - через IABHelper запускается Purchase Flow, пользователь платит и все

Теперь мне надо отправить на сервер инфу о том, кто же купил подписку (subscription), а я даже не знаю с какого аккаунта он платил, только с которого авторизовался.

Для чего мне надо отправлять на сервер? Сервер будет подключаться к аккаунту разработчика и проверять валидность подписки - не истекла ли. Но я не могу понять что они там могут увидеть...
Вот пользователь залогинился как Вася, а карточка у него на google аккаунте жены, он с нее платит. Я могу вытянуть id Васи, но никак не id его жены.
Потом он допустим сносит программу, а через день снова ставит на другом устройстве и заходит как Вася в программу. Я (точнее наш backend сервер) должен как-то проверить - куплена у него подписка или нет. А как это сделать если платила жена.
Надеюсь я изложил не запутанно.

Мне кажется что я не вижу чего-то очевидного )

Добавлено через 1 час 1 минуту
вобщем все как всегда - бился неделю, но стоило создать тему и все решилось

вдруг кому-то поможет, примерный сценарий теперь выглядит так:
- пользователь скачивает приложение и логинится в нем под кем хочет
- вытягиваем его id и запоминаем
- пользователь совершает покупку и в onActivityresult прилетает ответ что покупка или подписка оформлена
из этого объекта вытягиваем токен покупки или подписки и шлем его на наш сервер
- сервер сохраняет id пользователя и токен покупки

Теперь сервер может запрашивать у гугла информацию по покупке указывая токен этой покупки.
PROFIT!
источники инфы

Вопрос: Продам приложение для размещения объявлений

Продам личную разработку - программу "Валюты". 

История
Изначально разрабатывалась в марте 2015 года с целью опробовать новые подходы в программировании и чтобы не скучать, пока лежал с поломаной ногой. Чтобы труд не шел насмарку, оформил в виде конечного продукта. К сожалению, желания заниматься продвижением и прощупыванием рынка не было, хоть я и сделал попытки по мере своих возможностей. Программа была залита в маркет и по сей день имеет определенный круг пользователей.

Рынок
Ориентировано на рынок Украины. Приложение было доступно для скачивания только в Украине, сейчас временно сделал доступным для всех стран.

Назначение
Размещение частных объявлений о покупке/продаже валюты. Размещенные объявления хранятся на parse.com, там же работает задача по удалению старых объявлений. Каждое объявление имеет срок годности 24 часа, по истечении которого оно удаляется. При запуске пользователю доступен список всех объявлений. По умолчанию установлено показывать объявления о продаже для всех городов. Из бокового меню доступны фильтры, применяются на лету. Размещать объявления может даже незарегистрированный пользователь, но в таком случае он не сможет им управлять. При размещении доступно 2 услуги: выделить объявление цветом и/или поднять его в топ. Также сразу можно зарегистрироваться. Пользователь указывает свой телефон, по которому с ним свяжутся другие пользователи. Из бокового меню доступен профиль, где пользователь может управлять своими объявлениями либо же перейти к созданию нового.
Приложение было спроектировано с целью добиться максимально удобного UX, сделано по матириал дизайну.

Развитие
У меня есть куча идей по дальнейшему развитию приложения в сторону конвертации из пользователей в покупателей и увеличения конверсии.
Таблицы на parse.com спроектированы с заделом на возможность работы с несколькими странами.

Продажа
Причина продажи - нет возможности заниматься приложением и продвигать его.
Передам исходники, графические материалы, трансферну/удалю проект на гугл плей, трансферну проект на parse.com
По дополнительной договоренности могу преобразовать это приложение в другую площадку объявлений, которая вам нужна, не обязательно это должны быть валюты.

Ссылки


На все вопросы отвечу в личных сообщениях, но лучше пишите на currencyappinfo@gmail.com

Это сообщение отредактировал(а) Metalex - 2.10.2015, 09:27
Ответ:
Продам личную разработку - программу "Валюты". 

История
Изначально разрабатывалась в марте 2015 года с целью опробовать новые подходы в программировании и чтобы не скучать, пока лежал с поломаной ногой. Чтобы труд не шел насмарку, оформил в виде конечного продукта. К сожалению, желания заниматься продвижением и прощупыванием рынка не было, хоть я и сделал попытки по мере своих возможностей. Программа была залита в маркет и по сей день имеет определенный круг пользователей.

Рынок
Ориентировано на рынок Украины. Приложение было доступно для скачивания только в Украине, сейчас временно сделал доступным для всех стран.

Назначение
Размещение частных объявлений о покупке/продаже валюты. Размещенные объявления хранятся на parse.com, там же работает задача по удалению старых объявлений. Каждое объявление имеет срок годности 24 часа, по истечении которого оно удаляется. При запуске пользователю доступен список всех объявлений. По умолчанию установлено показывать объявления о продаже для всех городов. Из бокового меню доступны фильтры, применяются на лету. Размещать объявления может даже незарегистрированный пользователь, но в таком случае он не сможет им управлять. При размещении доступно 2 услуги: выделить объявление цветом и/или поднять его в топ. Также сразу можно зарегистрироваться. Пользователь указывает свой телефон, по которому с ним свяжутся другие пользователи. Из бокового меню доступен профиль, где пользователь может управлять своими объявлениями либо же перейти к созданию нового.
Приложение было спроектировано с целью добиться максимально удобного UX, сделано по матириал дизайну.

Развитие
У меня есть куча идей по дальнейшему развитию приложения в сторону конвертации из пользователей в покупателей и увеличения конверсии.
Таблицы на parse.com спроектированы с заделом на возможность работы с несколькими странами.

Продажа
Причина продажи - нет возможности заниматься приложением и продвигать его.
Передам исходники, графические материалы, трансферну/удалю проект на гугл плей, трансферну проект на parse.com
По дополнительной договоренности могу преобразовать это приложение в другую площадку объявлений, которая вам нужна, не обязательно это должны быть валюты.

Ссылки


На все вопросы отвечу в личных сообщениях, но лучше пишите на currencyappinfo@gmail.com

Это сообщение отредактировал(а) Metalex - 2.10.2015, 09:27
Вопрос: Покупки, подписки в приложении

Использую библиотеку

Может кто использовал и знает ответы на мои вопросы?)

1) Как я понял список контента для продажи составляется при компиляции приложения? - SUBSCRIPTION ID, PRODUCT ID. А как быть если через некоторое время после публикации добавится еще что-то для продажи...? Или можно получить List контента для продажи из гугла?
2) У меня сейчас при попытки BillingProcessor.subscribe(Loading.this, "ID"); выводит сообщение "нужно авторизоваться в гугл" - возможно это из-за того что приложение еще не опубликовано полностью?)
Ответ:
Сообщение от Rube
Это у тебя внутриигровые покупки да?
Ну в принципе что то типо того, но у меня не игра.
Сообщение от Rube
И кстати там есть статья как протестировать покупки перед публикацией
вот это интересно) надо посмотреть) Спасибо!
Вопрос: Продвижение приложений через покупку отзывов

Лазал по сети и наткнулся на такую тему:

- покупка отзывов к приложениям.

Был ли у вас опыт работы с такими сайтами? Насколько вообще имеет смысл покупать отзывы к приложениям?
Ответ: night_amir,
вы бы какое приложение купили, у которого хорошие отзывы или то у которого есть бесплатная версия (урезанная)?
из опыта - отзывы пишут обычно плохие, потому что хорошие людям писать лень.
К сожалению покупатели редко об этом знают.
Вопрос: Разблокировка функций в приложении

Допустим купили в моем приложении допфункционал. Само приложение в целом работает офлайн. Биллинг вернул true, все хорошо, все счастливы, функции разблокированы.
Теперь закрываем и заново открываем приложение, как теперь разблокировать функции? Т.е. надо после покупки писать в SharedPreferences метку, а при открытии - ее считывать, но это слишком просто мне кажется. Или так и нужно?
И еще пример - интернет отключен, а функции должны работать. Тут без SharedPreferences никак.
Собственно если я правильно описал выше, то как эту метку/ключ получить?
Генерить как-то? Через AccountManager?
Ответ:
Сообщение от Rube
Тогда тут засада если пользователь удалит данные.
Ну можно дефолтное значение сделать какое нибудь определенное, и если оно вернулось запросить покупки, проверить и записать уже нормальное значение куплено или нет.
Вопрос: Монетизация приложения

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

В правилах это запрещено - покупки функционала и т.п.

А как приложение VK продает свои стикиры? - вроде в обход гугла? Как их не блокируют?
Ответ: ILNAR_93, я просто не знаю что такое стикер в данном случае ибо не видел его) если это настоящий товар (как яблоки например) или может даже цифровая копия книги или фильма а не опция приложения то оплата в обход разрешена
Вопрос: Автообновление приложения

Возможно ли автообновление приложения программно?
без участия гугл плей т.е. приложение установлено из ненадежного источника
Ответ:
Сообщение от Lumber
У меня на планшете Explay с момента покупки была установлена какая-то прога (с трудом её нашёл и удалил, название не помню) которая постоянно самовольно скачивала и устанавливала другие программы. Никаких подтверждений от пользователя для этого не требовалось.
системные приложения могут иметь permission INSTALL_PACKAGES, который как я понял и позволяет "в тихую" инсталить приложения.