Я создаю плагин для iOS для приложения AR Unity.Когда пользователь нажимает кнопку «Добавить контакт», он должен перейти на экран «Добавить собственный контакт iPhone» с уже заполненными контактными данными. Затем пользователь может подтвердить добавление нового контакта и вернуться обратно в приложение Unity.
Я заставил функционал работать с использованием метода directAddContact (см. Ниже).В этом методе новый контакт добавляется правильно, но это происходит за кулисами без уведомления пользователя, а не перехода к собственному экрану добавления контакта.
Я вполне уверен, что проблема с моим кодом - эти строки:
CNContactViewController *controller = [CNContactViewController viewControllerForUnknownContact:contact];
controller.contactStore = store;
controller.delegate = self;
[self.navigationController pushViewController:controller animated:true];
Я предполагаю, что ViewController и делегат не работают, потому что Unity контролирует View.Я пытался изучить некоторые форумы и учебные пособия по переопределению UnityViewController с помощью встроенного ViewController через плагин, но я не смог перевести ни один из них на мою конкретную проблему.
Любая дополнительная помощь или понимание было бы оченьоценили!Вот код для моего плагина Unity, «MyPlugin.mm».
#import <Foundation/Foundation.h>
#import <Contacts/Contacts.h>
#import <ContactsUI/ContactsUI.h>
#import <UIKit/UIKit.h>
@interface MyPlugin: UIViewController<CNContactViewControllerDelegate>
{
NSDate * creationDate;
}
@end
@implementation MyPlugin
static MyPlugin *_sharedInstance;
+(MyPlugin*) sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSLog(@"Creating MyPlugin shared instance");
_sharedInstance = [[MyPlugin alloc] init];
});
return _sharedInstance;
}
-(void)directlyAddContact:(NSString *)firstName lastName:(NSString *)lastName email:(NSString *)email phone:(NSString *)phone {
// Create New Contact
CNMutableContact *contact = [[CNMutableContact alloc] init];
// Add Name to Contact
contact.givenName = firstName;
contact.familyName = lastName;
// Add Phone Number to Contact
CNLabeledValue *workPhone = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:[CNPhoneNumber phoneNumberWithStringValue:phone]];
contact.phoneNumbers = @[workPhone];
// Add Email to Contact
// Save the newly created contact
CNContactStore *store = [[CNContactStore alloc] init];
CNSaveRequest *saveRequest = [[CNSaveRequest alloc] init];
[saveRequest addContact:contact toContainerWithIdentifier:nil];
NSError *error;
NSLog(@"Added %@ %@ at %@", contact.givenName, contact.familyName, contact.phoneNumbers[0].value.stringValue);
[store executeSaveRequest:saveRequest error:&error];
}
-(void)addContact:(NSString *)firstName lastName:(NSString *)lastName email:(NSString *)email phone:(NSString *)phone {
// Create Store
CNContactStore *store = [[CNContactStore alloc] init];
// Create New Contact
CNMutableContact *contact = [[CNMutableContact alloc] init];
// Add Name to Contact
contact.givenName = firstName;
contact.familyName = lastName;
// Add Phone Number to Contact
CNLabeledValue *workPhone = [CNLabeledValue labeledValueWithLabel:CNLabelWork value:[CNPhoneNumber phoneNumberWithStringValue:phone]];
contact.phoneNumbers = @[workPhone];
// Add Email to Contact
// Create Controller and Delegate
CNContactViewController *controller = [CNContactViewController viewControllerForUnknownContact:contact];
controller.contactStore = store;
controller.delegate = self;
[self.navigationController pushViewController:controller animated:true];
}
-(id)init
{
self = [super init];
return self;
}
@end
extern "C"
{
void IOSaddContact(const char* firstName, const char* lastName, const char* email, const char* phone)
{
NSString *firstNameString = [[NSString alloc] initWithUTF8String:firstName];
NSString *lastNameString = [[NSString alloc] initWithUTF8String:lastName];
NSString *phoneString = [[NSString alloc] initWithUTF8String:phone];
NSString *emailString = [[NSString alloc] initWithUTF8String:email];
return [[MyPlugin sharedInstance] addContact:firstNameString lastName:lastNameString email:emailString phone:phoneString];
}
void IOSdirectlyAddContact(const char* firstName, const char* lastName, const char* email, const char* phone)
{
NSString *firstNameString = [[NSString alloc] initWithUTF8String:firstName];
NSString *lastNameString = [[NSString alloc] initWithUTF8String:lastName];
NSString *phoneString = [[NSString alloc] initWithUTF8String:phone];
NSString *emailString = [[NSString alloc] initWithUTF8String:email];
return [[MyPlugin sharedInstance] directlyAddContact:firstNameString lastName:lastNameString email:emailString phone:phoneString];
}
}