Как я могу использовать SFAuthenticationSession из nativescript?

Я работаю над поведением SSO в приложении на нативном скрипте. У меня есть следующий код Swift, который работает правильно:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    var webAuthSession: SFAuthenticationSession?

    @IBAction func click(sender: AnyObject)
    {
        let authURL = URL(string: "http://localhost:5000/redirect.html");
        let callbackUrlScheme = "myApp://"

        self.webAuthSession = SFAuthenticationSession.init(url: authURL!, callbackURLScheme: callbackUrlScheme, completionHandler: { (callBack:URL?, error:Error?) in

            // handle auth response
            guard error == nil, let successURL = callBack else {
                return
            }

            print(successURL.absoluteString)
        })

        self.webAuthSession?.start()
    }
}

Из этого я придумал эквивалентный машинописный код (в файле.ios.ts)

function callback(p1: NSURL, p2: NSError) {
    console.log('Got into the url callback');
    console.log(p1);
    console.log(p2);
};

public onTap() {
    const session = new SFAuthenticationSession(
        {
            URL: NSURL.URLWithString('localhost:3500/redirect.html'),
            callbackURLScheme: 'myApp://',
            completionHandler: callback,
        },);
    console.log('session created');

    console.log('the session is ', session);
    console.log('the start method is ', session.start);
    console.log('about to call it');
    session.start();    
    console.log('After calling start');
}

Все это прекрасно компилируется и собирается, но при запуске происходит сбой при вызове session.start() через секунду или около того. Я получаю выходные данные до этого, включая метод "собираюсь вызвать", но ничего после, даже сообщение об ошибке или дамп стека.

Есть ли что-то очевидное, что я здесь делаю не так? Есть ли что-то особенное, что нужно сделать для вызова от машинописного текста до нативных методов общей библиотеки ios?

2 ответа

Решение

Я нашел проблему сегодня, и это смущающая тривиальная ошибка.

когда я сделал перевод, мне удалось удалить http:// из исходного кода.

URL: NSURL.URLWithString('localhost:3500/redirect.html'),

при запуске на компьютере коллеги мы получили более подробную информацию в журнале, и оказалось, что единственными поддерживаемыми схемами являются http или https. Он должен быть явно добавлен в URL.

так что это исправляет (в дополнение к изменению Маноя выше)

URL: NSURL.URLWithString('http://localhost:3500/redirect.html'),

Я думаю, что вы должны хранить ссылку на session переменная где-то глобально в файл. Поскольку его область действия локальна для функции, она может быть уничтожена, как только onTap область действия функции закончена. Вы могли бы попробовать,

function callback(p1: NSURL, p2: NSError) {
    console.log('Got into the url callback');
    console.log(p1);
    console.log(p2);
};

let session;

public onTap() {
    session = new SFAuthenticationSession(
        {
            URL: NSURL.URLWithString('localhost:3500/redirect.html'),
            callbackURLScheme: 'myApp://',
            completionHandler: callback,
        },);
    console.log('session created');

    console.log('the session is ', session);
    console.log('the start method is ', session.start);
    console.log('about to call it');
    session.start();    
    console.log('After calling start');
}
Другие вопросы по тегам