BTPreferredPaymentMethods.m 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #import "BTPreferredPaymentMethods_Internal.h"
  2. #import "BTAPIClient_Internal.h"
  3. #import "BTPreferredPaymentMethodsResult_Internal.h"
  4. #import "BTConfiguration+GraphQL.h"
  5. @interface BTPreferredPaymentMethods()
  6. @property (nonatomic, strong) BTAPIClient *apiClient;
  7. @end
  8. @implementation BTPreferredPaymentMethods
  9. - (instancetype)initWithAPIClient:(BTAPIClient *)apiClient {
  10. if (self = [super init]) {
  11. _apiClient = apiClient;
  12. _application = UIApplication.sharedApplication;
  13. }
  14. return self;
  15. }
  16. - (instancetype)init {
  17. return nil;
  18. }
  19. - (void)fetchPreferredPaymentMethods:(void (^)(BTPreferredPaymentMethodsResult * _Nonnull result))completion {
  20. BOOL isVenmoInstalled = [self.application canOpenURL:[NSURL URLWithString:@"com.venmo.touch.v2://"]];
  21. [self.apiClient sendAnalyticsEvent:[NSString stringWithFormat:@"ios.preferred-payment-methods.venmo.app-installed.%@",
  22. isVenmoInstalled ? @"true" : @"false"]];
  23. if ([self.application canOpenURL:[NSURL URLWithString:@"paypal://"]]) {
  24. BTPreferredPaymentMethodsResult *result = [BTPreferredPaymentMethodsResult new];
  25. result.isPayPalPreferred = YES;
  26. result.isVenmoPreferred = isVenmoInstalled;
  27. [self.apiClient sendAnalyticsEvent:@"ios.preferred-payment-methods.paypal.app-installed.true"];
  28. completion(result);
  29. return;
  30. }
  31. [self.apiClient fetchOrReturnRemoteConfiguration:^(BTConfiguration *configuration, NSError *configError) {
  32. if (!configError && configuration.isGraphQLEnabled) {
  33. NSDictionary *parameters = @{ @"query": @"query PreferredPaymentMethods { preferredPaymentMethods { paypalPreferred } }" };
  34. [self.apiClient POST:@"" parameters:parameters httpType:BTAPIClientHTTPTypeGraphQLAPI completion:^(BTJSON *body,
  35. __unused NSHTTPURLResponse *response,
  36. NSError *preferredPaymentMethodsError) {
  37. BTPreferredPaymentMethodsResult *result = [[BTPreferredPaymentMethodsResult alloc] initWithJSON:body venmoInstalled:isVenmoInstalled];
  38. if (preferredPaymentMethodsError || !body) {
  39. [self.apiClient sendAnalyticsEvent:@"ios.preferred-payment-methods.api-error"];
  40. } else {
  41. [self.apiClient sendAnalyticsEvent:[NSString stringWithFormat:@"ios.preferred-payment-methods.paypal.api-detected.%@",
  42. result.isPayPalPreferred ? @"true" : @"false"]];
  43. }
  44. completion(result);
  45. }];
  46. } else {
  47. BTPreferredPaymentMethodsResult *result = [BTPreferredPaymentMethodsResult new];
  48. result.isPayPalPreferred = NO;
  49. result.isVenmoPreferred = isVenmoInstalled;
  50. if (configError) {
  51. [self.apiClient sendAnalyticsEvent:@"ios.preferred-payment-methods.api-error"];
  52. } else {
  53. [self.apiClient sendAnalyticsEvent:@"ios.preferred-payment-methods.api-disabled"];
  54. }
  55. completion(result);
  56. }
  57. }];
  58. }
  59. @end