|
|
@@ -23,6 +23,8 @@
|
|
|
#import "NSString+RAJavascript.h"
|
|
|
#import "SignatureViewController.h"
|
|
|
#import "RADatePickerViewController.h"
|
|
|
+#import "RAContactHelper.h"
|
|
|
+#import <Contacts/Contacts.h>
|
|
|
|
|
|
|
|
|
@interface RAWKWebView () <UINavigationControllerDelegate,UIImagePickerControllerDelegate,MFMailComposeViewControllerDelegate>
|
|
|
@@ -104,7 +106,7 @@
|
|
|
[self.wkwebView.configuration.userContentController addScriptMessageHandler:self name:@"DatetimePicker"];
|
|
|
|
|
|
[self.wkwebView.configuration.userContentController addScriptMessageHandler:self name:@"Signature"];
|
|
|
-
|
|
|
+ [self.wkwebView.configuration.userContentController addScriptMessageHandler:self name:@"SelectContact"];
|
|
|
|
|
|
// [self.configuration.userContentController addScriptMessageHandler:self name:@"Color"];
|
|
|
// [self.configuration.userContentController addScriptMessageHandler:self name:@"Pay"];
|
|
|
@@ -126,7 +128,7 @@
|
|
|
[self.wkwebView.configuration.userContentController removeScriptMessageHandlerForName:@"Navigation"];
|
|
|
[self.wkwebView.configuration.userContentController removeScriptMessageHandlerForName:@"DatetimePicker"];
|
|
|
[self.wkwebView.configuration.userContentController removeScriptMessageHandlerForName:@"Signature"];
|
|
|
-
|
|
|
+ [self.wkwebView.configuration.userContentController removeScriptMessageHandlerForName:@"SelectContact"];
|
|
|
}
|
|
|
- (void)dealloc
|
|
|
{
|
|
|
@@ -427,6 +429,134 @@
|
|
|
}];
|
|
|
}
|
|
|
|
|
|
+- (void)ra_selectContact:(NSDictionary *)params {
|
|
|
+
|
|
|
+ __weak typeof(self) weakSelf = self;
|
|
|
+ [[RAContactHelper defaultHelper] showContactPickerByViewController:self.ra_viewController withComplete:^(BOOL canceled, NSArray<CNContact *> *contacts) {
|
|
|
+
|
|
|
+ if (!canceled) {
|
|
|
+
|
|
|
+ NSMutableArray *contactArray = [NSMutableArray array];
|
|
|
+ for (CNContact *contact in contacts) {
|
|
|
+
|
|
|
+ NSMutableDictionary *contactDictionary = [NSMutableDictionary dictionary];
|
|
|
+ NSLog(@"=========================================================");
|
|
|
+ // givenName middleName familyName
|
|
|
+ NSString *givenName = [self adjustNilString:contact.givenName];
|
|
|
+ NSString *middleName = [self adjustNilString:contact.middleName];
|
|
|
+ NSString *familyName = [self adjustNilString:contact.familyName];
|
|
|
+ NSString *name = [NSString stringWithFormat:@"%@ %@ %@", givenName, middleName, familyName];
|
|
|
+
|
|
|
+ NSLog(@"=======================Contact Name=======================");
|
|
|
+ NSLog(@"%@",name);
|
|
|
+ contactDictionary[@"name"] = name;
|
|
|
+
|
|
|
+ // organizationName departmentName jobTitle
|
|
|
+ NSString *organizationName = [self adjustNilString:contact.organizationName];
|
|
|
+ NSString *departmentName = [self adjustNilString:contact.departmentName];
|
|
|
+ NSString *jobTitle = [self adjustNilString:contact.jobTitle];
|
|
|
+ NSString *job = [NSString stringWithFormat:@"%@ %@ %@", organizationName, departmentName, jobTitle];
|
|
|
+
|
|
|
+ NSLog(@"=======================Contact Job=======================");
|
|
|
+ NSLog(@"%@",job);
|
|
|
+ contactDictionary[@"job"] = job;
|
|
|
+
|
|
|
+ // phoneNumbers emailAddresses postalAddresses urlAddresses
|
|
|
+
|
|
|
+ NSMutableArray *phoneArray = [NSMutableArray array];
|
|
|
+ NSMutableArray *faxArray = [NSMutableArray array];
|
|
|
+ NSLog(@"=======================Phone Number=======================");
|
|
|
+ NSArray<CNLabeledValue<CNPhoneNumber*>*> *phoneNumbers = contact.phoneNumbers;
|
|
|
+ for (CNLabeledValue<CNPhoneNumber*> *labeledValue in phoneNumbers) {
|
|
|
+
|
|
|
+ CNPhoneNumber *phoneNumber = labeledValue.value;
|
|
|
+ NSString *label = [CNLabeledValue localizedStringForLabel:labeledValue.label];
|
|
|
+ NSLog(@"%@ %@", label, phoneNumber.stringValue);
|
|
|
+
|
|
|
+ if ([labeledValue.label.lowercaseString containsString:@"fax"]) {
|
|
|
+ [faxArray addObject:phoneNumber.stringValue];
|
|
|
+ } else {
|
|
|
+ [phoneArray addObject:phoneNumber.stringValue];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ contactDictionary[@"phone"] = phoneArray;
|
|
|
+ contactDictionary[@"fax"] = faxArray;
|
|
|
+
|
|
|
+ NSMutableArray *emailArray = [NSMutableArray array];
|
|
|
+ NSLog(@"=======================Email Address=======================");
|
|
|
+ NSArray<CNLabeledValue<NSString*>*> *emailAddresses = contact.emailAddresses;
|
|
|
+ for (CNLabeledValue<NSString*> *labeledValue in emailAddresses) {
|
|
|
+
|
|
|
+ NSString *email = labeledValue.value;
|
|
|
+ NSString *label = [CNLabeledValue localizedStringForLabel:labeledValue.label];
|
|
|
+ NSLog(@"%@ %@", label, email);
|
|
|
+ [emailArray addObject:email];
|
|
|
+ }
|
|
|
+ contactDictionary[@"email"] = emailArray;
|
|
|
+
|
|
|
+ NSMutableArray *addressArray = [NSMutableArray array];
|
|
|
+ NSLog(@"=======================Postal Number=======================");
|
|
|
+ NSArray<CNLabeledValue<CNPostalAddress*>*> *postalAddresses = contact.postalAddresses;
|
|
|
+ for (CNLabeledValue<CNPostalAddress*> *labeledValue in postalAddresses) {
|
|
|
+
|
|
|
+ NSString *label = [CNLabeledValue localizedStringForLabel:labeledValue.label];
|
|
|
+ CNPostalAddress *postalAddress = labeledValue.value;
|
|
|
+ NSString *postalCode = [self adjustNilString:postalAddress.postalCode];
|
|
|
+ NSString *country = [self adjustNilString:postalAddress.country];
|
|
|
+ NSString *state = [self adjustNilString:postalAddress.state];
|
|
|
+ NSString *city = [self adjustNilString:postalAddress.city];
|
|
|
+ NSString *street = [self adjustNilString:postalAddress.street];
|
|
|
+
|
|
|
+ NSMutableDictionary *addressDic = [NSMutableDictionary dictionary];
|
|
|
+ addressDic[@"postalCode"] = postalCode;
|
|
|
+ addressDic[@"country"] = country;
|
|
|
+ addressDic[@"state"] = state;
|
|
|
+ addressDic[@"city"] = city;
|
|
|
+ addressDic[@"street"] = street;
|
|
|
+
|
|
|
+ [addressArray addObject:addressDic];
|
|
|
+ NSLog(@"%@ %@ %@ %@ %@ %@", label, postalCode, country, state, city, street);
|
|
|
+ }
|
|
|
+ contactDictionary[@"address"] = addressArray;
|
|
|
+
|
|
|
+ NSMutableArray *urlArray = [NSMutableArray array];
|
|
|
+ NSLog(@"=======================URL Address=======================");
|
|
|
+ NSArray<CNLabeledValue<NSString*>*> *urlAddresses = contact.urlAddresses;
|
|
|
+ for (CNLabeledValue<NSString*> *labeledValue in urlAddresses) {
|
|
|
+
|
|
|
+ NSString *url = labeledValue.value;
|
|
|
+ NSString *label = [CNLabeledValue localizedStringForLabel:labeledValue.label];
|
|
|
+ NSLog(@"%@ %@", label, url);
|
|
|
+
|
|
|
+ [urlArray addObject:url];
|
|
|
+ }
|
|
|
+ contactDictionary[@"url"] = urlArray;
|
|
|
+
|
|
|
+ NSLog(@"**********************************************************");
|
|
|
+
|
|
|
+ [contactArray addObject:contactDictionary];
|
|
|
+ }
|
|
|
+
|
|
|
+ // return
|
|
|
+
|
|
|
+ NSString *jsonString = [RAConvertor DataTOjsonString:contactArray];
|
|
|
+ [weakSelf returnToWebPage:params value:jsonString];
|
|
|
+
|
|
|
+ NSLog(@"%@", jsonString);
|
|
|
+ }
|
|
|
+
|
|
|
+ }];
|
|
|
+}
|
|
|
+
|
|
|
+#pragma mark - Utils
|
|
|
+
|
|
|
+- (NSString *)adjustNilString:(NSString *)str {
|
|
|
+ if (str) {
|
|
|
+ return str;
|
|
|
+ }
|
|
|
+ return @"";
|
|
|
+}
|
|
|
+
|
|
|
#pragma mark - Web Callback
|
|
|
|
|
|
-(void) returnToWebPage:(NSDictionary*)params value:(NSObject*)value
|
|
|
@@ -610,8 +740,10 @@
|
|
|
|
|
|
|
|
|
[self handleDatetimePicker:params];
|
|
|
+ } else if ([message.name isEqualToString:@"SelectContact"]) {
|
|
|
+
|
|
|
+ [self handleSelectContact:params];
|
|
|
}
|
|
|
-
|
|
|
else
|
|
|
{
|
|
|
NSLog(@"%@",params);
|
|
|
@@ -723,6 +855,11 @@
|
|
|
|
|
|
}
|
|
|
|
|
|
+- (void)handleSelectContact:(NSDictionary *)params {
|
|
|
+
|
|
|
+ [self ra_selectContact:params];
|
|
|
+}
|
|
|
+
|
|
|
#pragma mark - WKNavigationDelegate
|
|
|
|
|
|
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {
|
|
|
@@ -828,4 +965,5 @@
|
|
|
NSLog(@"%s",__func__);
|
|
|
decisionHandler(WKNavigationResponsePolicyAllow);
|
|
|
}
|
|
|
+
|
|
|
@end
|