BTPreferredPaymentMethods.m 3.5 KB

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