feat: Add server request to register in-app purchase

Resolves: https://gitlab.steamware.net/eqn/eqn.ios/-/issues/29
This commit is contained in:
Andrea Busi
2020-12-07 08:56:57 +01:00
parent f707186dea
commit ad1487afdf
5 changed files with 31 additions and 0 deletions
+3
View File
@@ -35,6 +35,8 @@ static NSString * const EQNServerUrlDownloadRetiSismiche = @"https://srv.earthqu
static NSString * const EQNServerUrlOfferTimeRemaining = @"https://srv.earthquakenetwork.it/distquake_download_offer_time_remaining.php";
/// Recupera il numero di sottoscrizioni ancora disponibili per ogni prodotto
static NSString * const EQNServerUrlAvailableSubscriptionsCounter = @"https://srv.earthquakenetwork.it/distquake_count_top_redis.php";
/// Registra l'abbonamento acquistato dall'utente
static NSString * const EQNServerUrlRegisterSubscription = @"https://srv.earthquakenetwork.it/distquake_upload_subscription.php";
/// Carica le impostazioni delle notifiche definite dall'utente
static NSString * const EQNServerUrlUploadSettings = @"https://srv.earthquakenetwork.it/distquake_upload_settings_ios.php";
// URL EQNTipoChiamataRegistrazione server
@@ -132,6 +134,7 @@ typedef NS_ENUM(NSInteger, EQNTipoChiamata) {
EQNTipoChiamataCommentoTerremoto,
EQNTipoChiamataImpostazioniNotifiche,
EQNTipoChiamataOfferTimeRemaining,
EQNTipoChiamataRegisterSubscription,
EQNTipoChiamataAlertPushTest,
EQNTipoChiamataAlertSimulator
};
@@ -174,6 +174,9 @@ extension IAPHelper: SKPaymentTransactionObserver {
print("[IAPHelper] Handle purchased transaction (product: \(transaction.payment.productIdentifier))")
deliverPurchaseNotificationFor(identifier: transaction.payment.productIdentifier)
SKPaymentQueue.default().finishTransaction(transaction)
// register subscription
serverPurchaseRegistration(for: transaction.payment.productIdentifier, transactionId:transaction.transactionIdentifier)
}
private func handleRestored(transaction: SKPaymentTransaction) {
@@ -185,6 +188,9 @@ extension IAPHelper: SKPaymentTransactionObserver {
print("[IAPHelper] Handle restored transaction (product: \(productIdentifier))")
deliverPurchaseNotificationFor(identifier: productIdentifier)
SKPaymentQueue.default().finishTransaction(transaction)
// register subscription
serverPurchaseRegistration(for: productIdentifier, transactionId: transaction.transactionIdentifier)
}
private func handleFailed(transaction: SKPaymentTransaction) {
@@ -206,4 +212,17 @@ extension IAPHelper: SKPaymentTransactionObserver {
UserDefaults.standard.set(true, forKey: identifier)
NotificationCenter.default.post(name: .IAPHelperPurchaseNotification, object: identifier)
}
private func serverPurchaseRegistration(for productId: String, transactionId: String?) {
let idTransaction = transactionId ?? "NOT_AVAILABLE"
let url = EQNGeneratoreURLServer.urlRegisterSubscription(forProductId: productId, transactionId: idTransaction)
ServerRequest.default().inviaInformazioniAlServer(with: url, richiesta: .registerSubscription) { (response) in
// nope
print("[IAPHelper] Subscription registered with server")
} failure: { (error) in
// nope
print("[IAPHelper] Error when registering subscription (error: \(String(describing: error?.localizedDescription))")
}
}
}
@@ -22,6 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (NSURL *)urlInvioCommentoTerremoto:(NSString *)commento codeMessage:(NSString *)code;
+ (NSURL *)urlInvioImpostazioniNotifiche;
+ (NSURL *)urlDownloadOfferTimeRemaining;
+ (NSURL *)urlRegisterSubscriptionForProductId:(NSString *)productId transactionId:(NSString *)transactionId;
+ (NSURL *)urlAlertPushTest;
+ (NSURL *)urlAlertSimulator;
@@ -243,6 +243,13 @@
return [NSURL URLWithString:stringUrl];
}
+ (NSURL *)urlRegisterSubscriptionForProductId:(NSString *)productId transactionId:(NSString *)transactionId
{
NSString *walletSub = @""; // codice associato all'acquisto che conosce anche l'utente (se esiste)
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&token_sub=%@&wallet_sub=%@&sku=%@&ios=1", EQNServerUrlRegisterSubscription, [EQNUser defaultUser].user_ID, transactionId, walletSub, productId];
return [NSURL URLWithString:stringUrl];
}
+ (NSURL *)urlAlertPushTest
{
EQNGenericValue *radius = [EQNData raggioSismaFor:[EQNAllertaSismica sharedInstance].raggioSismiLievi];
@@ -140,6 +140,7 @@
case EQNTipoChiamataCalibrazione:
case EQNTipoChiamataImpostazioniNotifiche:
case EQNTipoChiamataAlertSimulator:
case EQNTipoChiamataRegisterSubscription:
onSuccess(newStr);
default:
// don't call the callback