Как реализовать вход в систему с помощью Google в приложении Nativescript для iOS?

#ios #angular #typescript #nativescript #angular2-nativescript

#iOS #angular #typescript #nativescript #angular2-nativescript

Вопрос:

Я пытаюсь реализовать логин поставщика идентификаторов Google в Nativescript с помощью плагина nativescript-social-login, пока он хорошо работает в Android, но совсем не работает в iOS.

Следуя инструкциям создателя плагина, я заметил, что некоторым классам требуются дополнительные файлы определений для typescript, поэтому, исследуя проблему, я натолкнулся на мысль, что подход к достижению входа в систему с помощью Google недавно изменился в iOS, а некоторые модули устарели. Я пытался следовать новому методу, я сам определил общий файл.ts для делегата GIDSignIn следующим образом

 declare class GIDSignIn{
   public static sharedInstance(): GIDSignIn;
   public handleURLSourceApplication(url: NSURL, sourceApplication:NSString, annotiation: id): boolean;
}
 

Но даже если таким образом приложение компилируется, оно выходит из строя, как только я нажимаю кнопку входа.

Проверяя сборку в xcode, я получаю предупреждение, в котором говорится, что Firebase instace не настроен, как мне его настроить в коде Typescript

Комментарии:

1. Можете ли вы поделиться минимальным образцом проекта, в котором можно воспроизвести проблему? Между ними есть другие плагины, такие как nativescript-plugin-firebase или nativescript-oauth2 , которые также реализуют вход в Google.

Ответ №1:

Используйте плагин nativescript-oauth для входа в систему с помощью social.

Пример

login.component.ts:-

 `import * as tnsOAuthModule from 'nativescript-oauth';

public login() {

    tnsOAuthModule.login()

        .then(() => {

            let tokenModule = JSON.stringify(tnsOAuthModule);

            let refereshToken = JSON.parse(tokenModule).instance.tokenResult.refreshToken;

            this.getRefereshActiveToken(refereshToken);
        })

        .catch((er) => {

            console.error('error logging in');

            console.dir(er);

        });

}`
 

Добавьте конфигурацию аутентификации Google в файл main.ts, например.

 `import * as tnsOAuthModule from 'nativescript-oauth';

var myInitOptions: tnsOAuthModule.ITnsOAuthCredentials = {

authority: '',

authorizeEndpoint: '',

tokenEndpoint: '',

clientId: '',

redirectUri: 'urn:ietf:wg:oauth:2.0:oob',

responseType: "code",

scope: 'openid',

};

tnsOAuthModule.initCustom({

credentials: myInitOptions,

cookieDomains: ['http://demoweb.net'],

});`
 

Для IOS добавляйте этот код для перенаправления только после успешной аутентификации в Google в файле App_Resources -> iOS -> info.plist.

 <key>CFBundleURLTypes</key>

<array>

    <dict>

        <key>CFBundleTypeRole</key>

        <string>Editor</string>

        <key>CFBundleURLName</key>

        <string>app_id</string>

        <key>CFBundleURLSchemes</key>

        <array>

            <string>appauth</string>

        </array>

    </dict>

</array>

<key>NSAppTransportSecurity</key>

<dict>

    <key>NSAllowsArbitraryLoads</key>

    <true/>

</dict>