Вот пример. У меня работает. Был один неприятный момент - после использования тестовых продуктов проверка покупки заработала примерно через день, сама по себе.
При старте приложения вызываем
PurchaseDataModule.InAppPurchase1.SetupInAppPurchase;
procedure TPurchaseDataModule.DataModuleCreate(Sender: TObject);
begin
fisPurchased := true;
{$IFDEF ANDROID}
InAppPurchase1.ApplicationLicenseKey :=''; //Присваиваем ключ
InAppPurchase1.ProductIDs.Add(ProductId); // Добавляем наш продукт
InAppPurchase1.OnSetupComplete := InAppPurchase1SetupComplete;
{$ENDIF}
end;
procedure TPurchaseDataModule.InAppPurchase1ProductsRequestResponse(
Sender: TObject; const Products: TIAPProductList;
const InvalidProductIDs: TStrings);
var
Product: TProduct;
begin
fisPurchased := false;
for Product in Products do
begin
if ProductId = Product.ProductID then
begin
FProductIsValid := True;
if InAppPurchase1.IsProductPurchased(ProductId) then
begin
fisPurchased := true; // КУПЛЕНО!!!!
end
end;
end;
end;
procedure TPurchaseDataModule.InAppPurchase1PurchaseCompleted(Sender: TObject;
const ProductID: string; NewTransaction: Boolean);
begin
MainDataModule.ShowToast('Премиум версия активирована');
fisPurchased := True
end;
procedure TPurchaseDataModule.InAppPurchase1SetupComplete(Sender: TObject);
begin
fisPurchased := False;
try
InAppPurchase1.QueryProducts;
except
on E:Exception do MainDataModule.ShowToast(e.Message);
end;
end;
procedure TPurchaseDataModule.Purchase;
begin
{$IFDEF ANDROID}
if InAppPurchase1.IsSetupComplete and InAppPurchase1.CanMakeInAppPurchases then
begin
InAppPurchase1.PurchaseProduct(ProductId);
end
else
MainDataModule.ShowToast('В данный момент приобретение не возможно. Попробуйте позже');
{$ENDIF}
end;
Ссылка на статью.
Автор: Александр Бирюков
В статья я максимально подробно попытался описать работу с PHP скриптом для рассылки Push сообщений из любой программы вне зависимости от платформы. Затрагивается вопроса от экспорта скриптов до кода программы: отправка и получение Push, регистрация устройств.
Надеюсь кому-нибудь пригодится. Буду рад комментариям, обоснованной критике и доработкам.
Доброго дня.
Что бы получить дочерний item зная его индекс надо воспользоваться функцией ItemByIndex самого ListBox-а:
var
Item: TListBoxItem;
Index: Integer;
begin
Item := ListBox1.ItemByIndex(Index);
end;