@@ -672,4 +672,95 @@ - (BranchUniversalObject *)findUniversalObjectWithIdent:(NSString *)ident reject
672672 [self .class.branch handleATTAuthorizationStatus: authorizationStatus];
673673}
674674
675+ #pragma mark getBranchQRCode
676+ RCT_EXPORT_METHOD (
677+ getBranchQRCode:(NSDictionary *)qrCodeSettingsMap
678+ withUniversalObject:(NSDictionary *)universalObjectProperties
679+ withLinkProperties:(NSDictionary *)linkPropertiesMap
680+ withControlParams:(NSDictionary *)controlParamsMap
681+ resolver:(RCTPromiseResolveBlock)resolve
682+ rejecter:(RCTPromiseRejectBlock)reject
683+ ) {
684+
685+ BranchLinkProperties *linkProperties = [self createLinkProperties: linkPropertiesMap withControlParams: controlParamsMap];
686+ BranchUniversalObject *universalObject = [[BranchUniversalObject alloc ] initWithMap: universalObjectProperties];
687+
688+ BranchQRCode *qrCode = [BranchQRCode new ];
689+
690+ if (qrCodeSettingsMap[@" codeColor" ]) {
691+ qrCode.codeColor = [self colorWithHexString: qrCodeSettingsMap[@" codeColor" ]];
692+ }
693+ if (qrCodeSettingsMap[@" backgroundColor" ]) {
694+ qrCode.backgroundColor = [self colorWithHexString: qrCodeSettingsMap[@" backgroundColor" ]];
695+ }
696+ if (qrCodeSettingsMap[@" centerLogo" ]) {
697+ qrCode.centerLogo = qrCodeSettingsMap[@" centerLogo" ];
698+ }
699+ if (qrCodeSettingsMap[@" width" ]) {
700+ qrCode.width = qrCodeSettingsMap[@" width" ];
701+ }
702+ if (qrCodeSettingsMap[@" margin" ]) {
703+ qrCode.margin = qrCodeSettingsMap[@" margin" ];
704+ }
705+ if (qrCodeSettingsMap[@" imageFormat" ]) {
706+ if ([qrCodeSettingsMap[@" imageFormat" ] isEqual: @" JPEG" ]) {
707+ qrCode.imageFormat = BranchQRCodeImageFormatJPEG;
708+ } else {
709+ qrCode.imageFormat = BranchQRCodeImageFormatPNG;
710+ }
711+ }
712+
713+ [qrCode getQRCodeAsData: universalObject linkProperties: linkProperties completion: ^(NSData * _Nonnull qrCodeData, NSError * _Nonnull error) {
714+ if (!error) {
715+ NSString * imageString = [qrCodeData base64EncodedStringWithOptions: nil ];
716+ resolve (imageString);
717+ } else {
718+ reject (@" RNBranch::Error" , error.localizedDescription , error);
719+ }
720+ }];
721+ }
722+
723+ - (UIColor *) colorWithHexString : (NSString *) hexString {
724+ NSString *colorString = [[hexString stringByReplacingOccurrencesOfString: @" #" withString: @" " ] uppercaseString ];
725+ CGFloat alpha, red, blue, green;
726+ switch ([colorString length ]) {
727+ case 3 : // #RGB
728+ alpha = 1 .0f ;
729+ red = [self colorComponentFrom: colorString start: 0 length: 1 ];
730+ green = [self colorComponentFrom: colorString start: 1 length: 1 ];
731+ blue = [self colorComponentFrom: colorString start: 2 length: 1 ];
732+ break ;
733+ case 4 : // #ARGB
734+ alpha = [self colorComponentFrom: colorString start: 0 length: 1 ];
735+ red = [self colorComponentFrom: colorString start: 1 length: 1 ];
736+ green = [self colorComponentFrom: colorString start: 2 length: 1 ];
737+ blue = [self colorComponentFrom: colorString start: 3 length: 1 ];
738+ break ;
739+ case 6 : // #RRGGBB
740+ alpha = 1 .0f ;
741+ red = [self colorComponentFrom: colorString start: 0 length: 2 ];
742+ green = [self colorComponentFrom: colorString start: 2 length: 2 ];
743+ blue = [self colorComponentFrom: colorString start: 4 length: 2 ];
744+ break ;
745+ case 8 : // #AARRGGBB
746+ alpha = [self colorComponentFrom: colorString start: 0 length: 2 ];
747+ red = [self colorComponentFrom: colorString start: 2 length: 2 ];
748+ green = [self colorComponentFrom: colorString start: 4 length: 2 ];
749+ blue = [self colorComponentFrom: colorString start: 6 length: 2 ];
750+ break ;
751+ default :
752+ RCTLogError (@" RNBranch::Error: Invalid color value. It should be a hex value of the form #RBG, #ARGB, #RRGGBB, or #AARRGGBB" );
753+ break ;
754+ }
755+ return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
756+ }
757+
758+ - (CGFloat) colorComponentFrom : (NSString *) string start : (NSUInteger ) start length : (NSUInteger ) length {
759+ NSString *substring = [string substringWithRange: NSMakeRange (start, length)];
760+ NSString *fullHex = length == 2 ? substring : [NSString stringWithFormat: @" %@%@ " , substring, substring];
761+ unsigned hexComponent;
762+ [[NSScanner scannerWithString: fullHex] scanHexInt: &hexComponent];
763+ return hexComponent / 255.0 ;
764+ }
765+
675766@end
0 commit comments