Плагин iOS для Unity с навигацией для добавления новых контактов - PullRequest
0 голосов
/ 25 марта 2019

Я создаю плагин для 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];
    }
}

...