Skip to content

add revenue method #5

Description

@sergeymild

Hi! 👋

Firstly, thanks for your work on this project! 🙂

Today I used patch-package to patch @extence/react-native-appmetrica@0.10.1 for the project I'm working on.

Here is the diff that solved my problem:

diff --git a/node_modules/@extence/react-native-appmetrica/android/src/main/java/com/extencereactnativeappmetrica/ReactNativeAppmetricaModule.java b/node_modules/@extence/react-native-appmetrica/android/src/main/java/com/extencereactnativeappmetrica/ReactNativeAppmetricaModule.java
index bb0a935..58b36d7 100644
--- a/node_modules/@extence/react-native-appmetrica/android/src/main/java/com/extencereactnativeappmetrica/ReactNativeAppmetricaModule.java
+++ b/node_modules/@extence/react-native-appmetrica/android/src/main/java/com/extencereactnativeappmetrica/ReactNativeAppmetricaModule.java
@@ -1,7 +1,5 @@
 package com.extencereactnativeappmetrica;
 
-import android.util.Log;
-
 import androidx.annotation.NonNull;
 
 import com.facebook.react.bridge.ReactApplicationContext;
@@ -9,9 +7,12 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
 import com.facebook.react.bridge.ReactMethod;
 import com.facebook.react.bridge.ReadableMap;
 import com.facebook.react.module.annotations.ReactModule;
+import com.yandex.metrica.Revenue;
 import com.yandex.metrica.YandexMetrica;
 import com.yandex.metrica.YandexMetricaConfig;
 
+import java.util.Currency;
+
 @ReactModule(name = ReactNativeAppmetricaModule.NAME)
 public class ReactNativeAppmetricaModule extends ReactContextBaseJavaModule {
     public static final String NAME = "ReactNativeAppmetrica";
@@ -57,4 +58,16 @@ public class ReactNativeAppmetricaModule extends ReactContextBaseJavaModule {
       }
     }
 
+    @ReactMethod
+    public void reportRevenue(ReadableMap attributes) {
+      double price = attributes.getDouble("price");
+      Currency currency = Currency.getInstance(attributes.getString("currency"));
+      Revenue revenue = Revenue
+              .newBuilderWithMicros((long) price, currency)
+              .withQuantity(1)
+              .withProductID(attributes.getString("productID"))
+              .build();
+      YandexMetrica.reportRevenue(revenue);
+    }
+
 }
diff --git a/node_modules/@extence/react-native-appmetrica/ios/ReactNativeAppmetrica.mm b/node_modules/@extence/react-native-appmetrica/ios/ReactNativeAppmetrica.mm
index 4afd16c..c85bdb1 100644
--- a/node_modules/@extence/react-native-appmetrica/ios/ReactNativeAppmetrica.mm
+++ b/node_modules/@extence/react-native-appmetrica/ios/ReactNativeAppmetrica.mm
@@ -1,4 +1,5 @@
 #import "ReactNativeAppmetrica.h"
+#import "RCTConvert.h"
 
 #ifdef RCT_NEW_ARCH_ENABLED
 #import "RNReactNativeAppmetricaSpec.h"
@@ -42,6 +43,30 @@ @implementation ReactNativeAppmetrica
     resolve(@"");
 }
 
+RCT_REMAP_METHOD(revenueEvent, withAttributes:(NSDictionary *)attributes)
+{
+    
+    NSDecimal price = [RCTConvert NSNumber:[attributes valueForKey:@"price"]].decimalValue;
+    NSString *currency = [RCTConvert NSString:[attributes valueForKey:@"currency"]];
+    NSUInteger quantity = [RCTConvert NSUInteger:[attributes valueForKey:@"quantity"]];
+    NSString *productID = [RCTConvert NSString:[attributes valueForKey:@"productID"]];
+    NSString *transactionID = [RCTConvert NSString:[attributes valueForKey:@"transactionID"]];
+    
+    YMMRevenueInfo *info = [[YMMRevenueInfo alloc]
+     initWithPriceDecimal:[NSDecimalNumber decimalNumberWithDecimal:price]
+     currency:currency
+     quantity:quantity
+     productID:productID
+     transactionID:transactionID
+     receiptData:nil
+     payload:nil];
+    
+    [YMMYandexMetrica reportRevenue:info onFailure:^(NSError *error) {
+        NSString *msg = [error localizedDescription];
+        NSLog(@"revenueEventError %@", msg);
+    }];
+}
+
 // Don't compile this code when we build for the old architecture.
 #ifdef RCT_NEW_ARCH_ENABLED
 - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
diff --git a/node_modules/@extence/react-native-appmetrica/src/index.tsx b/node_modules/@extence/react-native-appmetrica/src/index.tsx
index f96901c..49dd9ed 100644
--- a/node_modules/@extence/react-native-appmetrica/src/index.tsx
+++ b/node_modules/@extence/react-native-appmetrica/src/index.tsx
@@ -22,6 +22,12 @@ interface Config {
   appVersion?: string;
 }
 
+export interface RevenueParams {
+  readonly quantity: number;
+  readonly productID: string;
+  readonly transactionID: string;
+}
+
 export function initialize(key: string, config?: Config) {
   return ReactNativeAppmetrica.setup(key, config);
 }
@@ -32,3 +38,7 @@ export function reportEvent(
 ): Promise<boolean> {
   return ReactNativeAppmetrica.reportEvent(name, attributes);
 }
+
+export const revenueEvent = (params: RevenueParams) => {
+  ReactNativeAppmetrica.revenueEvent(params);
+};

This issue body was partially generated by patch-package.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions