Maka
-
Постов
60 -
Зарегистрирован
-
Посещение
-
Победитель дней
4
Сообщения, опубликованные Maka
-
-
2020год
RadStudio 10.3.3
Проблема так и осталась. Не появилось ли решения?
-
Коллеги, подскажите.
Давно был создан проект Multi Device Application с поддержкой только Android и Windows. (Rad Studio была установлена без поддержки систем от Apple)
Теперь потребовалось добавить в проект платформы iOS и MacOS. Но среди доступных платформ в Add Platform их нет, хотя при создании нового Multi Device Application они присутствуют.
Можно ли как то их добавить в текущий проект, или придется создавать новый и переносить все туда?
-
1 минуту назад, Евгений Корепов сказал:
Подозреваю что такая попытка приведет к блокировке учетной записи. Нельзя вмешиваться в показ рекламы или изменять рекламный контент.
А вот на сайте самого гугла, написано, что можно отключить:
https://developers.google.com/admob/android/global-settings
Разве это не об этом?
-
А как сделать, чтобы Interstitial video появлялось без звука?
-
7 минут назад, CyberStorm сказал:
Нужно библиотеки почистить:
...
Вот тут еще много написано:
...
Это помогло. Большое спасибо
-
Коллеги, подскажите где искать ошибку?
Решил добавить в существующее приложение рекламу AdMob.
Выполнив все строго по инструкции, получаю на сроке кода:
bnrd1.LoadAd;
ошибку "Java class JAdSize could not be found"
При этом, если создать новое приложение, и полностью перенести туда код показа баннера, то все работает нормально.
ошибка возникает потому, что в модуле Androidapi.JNIBridge, в процедуре:
class function TJNIResolver.GetJavaClassID(const AClass: string): JNIClass; var LTemp: UTF8String; LJNIEnvRes: PJNIEnv; begin LJNIEnvRes := TJNIResolver.GetJNIEnv; LTemp := UTF8String(AClass); Result := LJNIEnvRes^.FindClass(LJNIEnvRes, MarshaledAString(LTemp)); if Result = nil then begin ExceptionCheck; if ClassLoader = nil then ClassLoader := TClassLoader.Create; Result := ClassLoader.LoadClass(AClass); if Result = nil then ExceptionCheck; end; end;
когда в нее передается AClass = ''com/google/android/gms/ads/AdSize'',
строка
Result := LJNIEnvRes^.FindClass(LJNIEnvRes, MarshaledAString(LTemp));
возвращает nil. В пустом приложении, где все работает тут возвращается значение <> nil
Где копать? Куда смотреть?
-
14 часов назад, CyberStorm сказал:
Решили как нибудь проблему?
К сожалению, нет
-
9 часов назад, qz5 сказал:
попробуйте создать полностью новое приложение и в настройках 64-битного профиля выставите все разрешения как и у 32-битного профиля
К сожалению это не помогает
-
Коллеги, подскажите, можно ли как то побороть сломанную в Android64 работу с InAppPurchase?
Иллюстрация:
var Form1: TForm1; InAppPurchase: TCustomInAppPurchase; implementation {$R *.fmx} procedure TForm1.btn1Click(Sender: TObject); begin InAppPurchase := TInAppPurchase.Create(nil); InAppPurchase.OnSetupComplete := SetupComplete; InAppPurchase.OnError := Error; InAppPurchase.OnProductsRequestResponse := ProductsRequestResponse; InAppPurchase.SetupInAppPurchase; end; procedure TForm1.SetupComplete(Sender: TObject); begin mmo1.Lines.Add('SetupComplete'); InAppPurchase.QueryProducts; // !!!!! В этом месте, при компиляции в Аndroid64, приложение вылетает end; procedure TForm1.ProductsRequestResponse(Sender: TObject; const Products: TIAPProductList; const InvalidProductIDs: TStrings); begin mmo1.Lines.Add('onProductsRequestResponse'); end; procedure TForm1.Error(Sender: TObject; ErrorKind: TFailureKind; const ErrorMessage: string); begin mmo1.Lines.Add('OnPurchaseError. ErrKnd=' + IntToStr(Byte(ErrorKind)) + ' Msg=' + ErrorMessage); end;
Причем приложение вылетает не сразу после вызова QueryProducts, даже успевает приходить ProductsRequestResponse. Но после пары секунд вылетает. Как будто запускаются какие-то асинхронные потоки, которые и вызывают ошибку.
-
При компиляции в android64, метод InAppPurchase.QueryProducts крашит приложение.
Кто попробовал, есть похожие проблемы, или искать у себя?
-
-
-
Добрый день.
Подскажите, как сделать так, чтобы при обновлении приложения из PlayMarket, подключенные через Deploy Manager файлы перезаписывались?
-
добавление поддержки подписки в FMX: http://delphitoptips.blogspot.com/2018/03/supporting-in-app-purchase.html
-
Оказыватся
ЦитатаTInAppPurchase supports Managed In-app Products. See In-app Billing Version 3, Product Types for more information about Managed products.
- Note: Subscriptions are not currently supported.
печаль (
-
По поводу ошибки с подпиской нашел вот такое решение в случае Java:
ЦитатаI had this problem myself. After a while I found what I did wrong. I was calling the wrong method on the IABHelper.
If you call
mHelper.launchPurchaseFlow(...)
with an SKU that is registered as a subscription on Google Developer Console it will result in the error: IAB returned null purchaseData or dataSignature (response -1008:Unknown error).If you have a SKU that is registered as an subscription you have to use the method:
mHelper.launchSubscriptionPurchaseFlow(...)
instead.Hope this helps.
Т.е. получается что, скорее всего, внутри у TInAppPurchase, для подписки, используется не верный метод? И как быть? Я же туда залезть не могу.
Или я все не верно понимаю?
-
При работе с TInAppPurchase в Андроид обнаружился ряд проблем. Подскажите, есть ли способы борьбы с ними?
Делаю так:
var InAppPurchase: TInAppPurchase; InAppPurchase := TInAppPurchase.Create(nil); InAppPurchase.ApplicationLicenseKey := 'MIIBIjANBgkqhk.....'; InAppPurchase.SetupInAppPurchase; InAppPurchase.ProductIDs.Add('prod_subscribe'); // подписка InAppPurchase.ProductIDs.Add('prod_once'); // ограниченный контент InAppPurchase.QueryProducts;
1. Проблема с ограниченным контентом:
покупаем ограниченный контент:
InAppPurchase.PurchaseProduct('prod_once');
штатно приходит OnPurchaseCompleted.
После этого вызываем
InAppPurchase.ConsumeProduct('prod_once')
Приложение молча падает, хотя продукт успешно "консумится" на сервере и его опять можно покупать.
2. Проблема с подпиской:
Покупаем ее:
InAppPurchase.PurchaseProduct('prod_subscribe');
на серверах гугла подписка оформляется, деньги списываются, однако приходит OnError с сообщением: "labResult: IAB returned null purchaseData or dataSignature (responce: Unknown error)"
теперь до перезагрузки приложения, все запросы:
InAppPurchase.IsProductPurchased('prod_subscribe')
возвращают False, а вызов InAppPurchase.QueryProducts закрывает приложение.
-
Всем привет.
Подскажите, почему андроид приложение не может создать папку:
ForceDirectories(System.IOUtils.TPath.GetSharedDocumentsPath + '/FRead_Backup/');
(разрешение Write external storage стоит)
-
19 минут назад, Barbanel сказал:
Попробуйте перед снятием скриншота насильно применять стиль всех для элементов.
Вызывайте для каждого контрола процедуру ApplyStyleLookup();Да, это помогло. Спасибо!
-
Быть может это натолкнет более опытных товарищей на какую-нибудь идею, решающую проблему:
Удалось понять, что на скриншот не попадают элементы, для которых доступна работа со стилями, и прекрасно перерисовываются элементы без стилей (Effects, Shapes)
-
16 часов назад, dnekrasov сказал:
А чем PaintTo не устраивает?
И кстати. В реализации MakeScreenshot уже присутствует PaintTo
-
2 часа назад, Tumaso сказал:
Как вариант (кривой если честно, тем не менее) - отображайте TControl вне границ экрана, тогда и MakeScreenshot корректно отработает, и мерцать на экране не будет.
По поводу корректности MakeScreenshot в данном сценарии - это предположение, или личный опыт?
У меня получается так:
Отображаю нужный контрол за пределами экрана, отлавливаю OnPaint контрола, и в нем делаю MakeScreenshot.
В результате какие-то элементы попадают на скриншот (например TCharts, TRectangle, ), а какие-то нет (например кнопки, эдиты). Эффект тени от кнопки попадает, а сама кнопка нет.. И прочие чудеса.
-
59 минут назад, Tumaso сказал:
Как вариант (кривой если честно, тем не менее) - отображайте TControl вне границ экрана, тогда и MakeScreenshot корректно отработает, и мерцать на экране не будет.
Возможно так и придется поступить
39 минут назад, #WAMACO сказал:ну так первый раз вывести "честно", снять скриншот, записать в ресурсы, распространять вместе с программой и данный скрин и проявлять медленно...
Нет, не пойдет, т.к. содержимое выводимых контролов постоянно меняется, и будет чехорда из "красивых" и "некрасивых" вариантов вывода
40 минут назад, dnekrasov сказал:А чем PaintTo не устраивает?
Вот, видоизменил код Ярослава Бровина для сохранения скриншота:
procedure ActionMakeScreenshotExecute(aCtr: TControl); var BitmapBuffer: TBitmap; SourceRect: TRectF; begin aCtr.Visible := True; aCtr.BringToFront; aCtr.Opacity := 1; // Фиксируем размер снимаемой области SourceRect := TRectF.Create(0, 0, aCtr.Width, aCtr.Height); // Создаем временный буфер для получения скриншота BitmapBuffer := TBitmap.Create(Round(SourceRect.Width), Round(SourceRect.Height)); try // Переводим канву в режим отрисовки - начинаем процесс отрисовки сцены if BitmapBuffer.Canvas.BeginScene then try // Говорим контролу отрисовать себя в канве нашего буфера в указанной области aCtr.PaintTo(BitmapBuffer.Canvas, SourceRect); finally // Завершаем процесс отрисовки, заканчивая формируемую сцену BitmapBuffer.Canvas.EndScene; end; BitmapBuffer.SaveToFile(DateDir + 'screenshot1.png'); finally FreeAndNil(BitmapBuffer); end; end;
И если мы сюда отправим еще не отрисованный контрол, то получим пустой скриншот, а последующие вызовы будут сохранять не текущее, а последнее нарисованное состояние контрола.
Или есть другой способ воспользоваться PaintTo?
-
2 минуты назад, #WAMACO сказал:
и еще костыль.... подготовьте заранее картинку экрана...ее и проявляйте медленно...
так и делаю, и вопрос в том и заключается, как ее правильно заранее подготовить
ФизЛицо -> ИП
в Публикация приложения в Google Play
Опубликовано · Изменено пользователем Maka
Коллеги, подскажите.
Тема, правда, не совсем из области разработки.
Есть несколько приложений, опубликованных в Google Play, приносящих ежемесячный доход от внутренних покупок и рекламы. Платежный аккаунт и аккаунт разработчика google зарегистрированы на физлицо. Возникла потребность работать как ИП (Хочется платить меньше 13% налог). На Российской стороне все понятно - открыть ИП, патент, упрощенка, валютный счет, тут вопросов нет. А вот на стороне Google - насколько удалось выяснить - изменить тип аккаунта с "личного" на "бизнес" нельзя. (Может просто не нашел?) Но можно создать новый аккаунт на организацию, а так же существует механизм переноса приложений между аккаунтами.
А нужно ли менять тип аккаунта в Google? А если не менять, то не будет ли проблем с платежами с "личного" платежного аккаунта на счет ИП?
Сталкивался ли кто-нибудь с подобным кейсом?