@@ -764,6 +764,99 @@ void _AdjustProcessAndResolveDeeplink(const char* deeplink, AdjustDelegateResolv
764
764
}
765
765
}
766
766
767
+ void _AdjustVerifyAndTrackAppStorePurchase (
768
+ const char * eventToken,
769
+ double revenue,
770
+ const char * currency,
771
+ const char * receipt,
772
+ const char * productId,
773
+ const char * transactionId,
774
+ const char * callbackId,
775
+ const char * deduplicationId,
776
+ const char * jsonCallbackParameters,
777
+ const char * jsonPartnerParameters,
778
+ AdjustDelegateVerifyAndTrackCallback callback) {
779
+ NSString *strEventToken = isStringValid (eventToken) == true ? [NSString stringWithUTF8String: eventToken] : nil ;
780
+ ADJEvent *event = [[ADJEvent alloc ] initWithEventToken: strEventToken];
781
+
782
+ // revenue and currency
783
+ if (revenue != -1 && currency != NULL ) {
784
+ NSString *stringCurrency = [NSString stringWithUTF8String: currency];
785
+ [event setRevenue: revenue currency: stringCurrency];
786
+ }
787
+
788
+ // callback parameters
789
+ NSArray *arrayCallbackParameters = convertArrayParameters (jsonCallbackParameters);
790
+ if (arrayCallbackParameters != nil ) {
791
+ NSUInteger count = [arrayCallbackParameters count ];
792
+ for (int i = 0 ; i < count;) {
793
+ NSString *key = arrayCallbackParameters[i++];
794
+ NSString *value = arrayCallbackParameters[i++];
795
+ [event addCallbackParameter: key value: value];
796
+ }
797
+ }
798
+
799
+ // partner parameters
800
+ NSArray *arrayPartnerParameters = convertArrayParameters (jsonPartnerParameters);
801
+ if (arrayPartnerParameters != nil ) {
802
+ NSUInteger count = [arrayPartnerParameters count ];
803
+ for (int i = 0 ; i < count;) {
804
+ NSString *key = arrayPartnerParameters[i++];
805
+ NSString *value = arrayPartnerParameters[i++];
806
+ [event addPartnerParameter: key value: value];
807
+ }
808
+ }
809
+
810
+ // transaction ID
811
+ if (transactionId != NULL ) {
812
+ NSString *strTransactionId = [NSString stringWithUTF8String: transactionId];
813
+ [event setTransactionId: strTransactionId];
814
+ }
815
+
816
+ // product ID
817
+ if (productId != NULL ) {
818
+ NSString *strProductId = [NSString stringWithUTF8String: productId];
819
+ [event setProductId: strProductId];
820
+ }
821
+
822
+ // receipt (base64 encoded string)
823
+ if (receipt != NULL ) {
824
+ NSString *strReceipt = [NSString stringWithUTF8String: receipt];
825
+ NSData *dataReceipt = [[NSData alloc ] initWithBase64EncodedString: strReceipt options: 0 ];
826
+ [event setReceipt: dataReceipt];
827
+ }
828
+
829
+ // callback ID
830
+ if (callbackId != NULL ) {
831
+ NSString *strCallbackId = [NSString stringWithUTF8String: callbackId];
832
+ [event setCallbackId: strCallbackId];
833
+ }
834
+
835
+ // deduplication ID
836
+ if (deduplicationId != NULL ) {
837
+ NSString *strDeduplicationId = [NSString stringWithUTF8String: deduplicationId];
838
+ [event setDeduplicationId: strDeduplicationId];
839
+ }
840
+
841
+ [Adjust verifyAndTrackAppStorePurchase: event
842
+ withCompletionHandler: ^(ADJPurchaseVerificationResult * _Nonnull verificationResult) {
843
+ // TODO: nil checks
844
+ NSMutableDictionary *dictionary = [NSMutableDictionary dictionary ];
845
+ addValueOrEmpty (dictionary, @" verificationStatus" , verificationResult.verificationStatus );
846
+ addValueOrEmpty (dictionary, @" code" , [NSString stringWithFormat: @" %d " , verificationResult.code]);
847
+ addValueOrEmpty (dictionary, @" message" , verificationResult.message );
848
+
849
+ NSData *dataVerificationInfo = [NSJSONSerialization dataWithJSONObject: dictionary
850
+ options: 0
851
+ error: nil ];
852
+ NSString *strVerificationInfo = [[NSString alloc ] initWithBytes: [dataVerificationInfo bytes ]
853
+ length: [dataVerificationInfo length ]
854
+ encoding: NSUTF8StringEncoding];
855
+ const char * verificationInfoCString = [strVerificationInfo UTF8String ];
856
+ callback (verificationInfoCString);
857
+ }];
858
+ }
859
+
767
860
void _AdjustSetTestOptions (const char * overwriteUrl,
768
861
const char * extraPath,
769
862
long timerIntervalInMilliseconds,
0 commit comments