如何在Nativescript iOS应用中实现通过Google登录?

时间:2019-04-19 08:22:28

标签: ios angular typescript nativescript angular2-nativescript

我正在尝试通过nativescript-social-login插件在Nativescript中实现google的ID提供程序登录,到目前为止,它在Android中运行良好,但在iOS中根本无法运行。

按照插件创建者的指示,我注意到某些类需要用于Typescript的其他定义文件,因此在研究此问题时,我遇到了一个概念,即最近在iOS中使用google登录的方法已更改,并且不赞成使用某些Pod 。我试图遵循新方法,我自己为GIDSignIn委托定义了一个d.ts文件,像这样

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

但是即使以这种方式编译应用程序,只要点击登录按钮,它就会崩溃。

通过检查xcode中的版本,我会收到一条警告,指出尚未配置Firebase实例,我该如何在Typescript代码中对其进行配置

1 个答案:

答案 0 :(得分:0)

使用nativescript-oauth插件进行社交登录。

  

示例

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);

        });

}`
  

在main.ts文件“ Like”中添加google身份验证配置。

`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,仅在App_Resources-> iOS-> info.plist文件中通过google成功通过身份验证后,才添加此代码以进行重定向。

<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>