Как я могу использовать SFAuthenticationSession из nativescript? - PullRequest
0 голосов
/ 21 февраля 2019

Я работаю над некоторым поведением 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');
}

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

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

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

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

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

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

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

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

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

0 голосов
/ 21 февраля 2019

Я думаю, вы должны хранить ссылку на переменную 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');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...