Skip to content

Commit 337bdd0

Browse files
Dimitar TachevDimitar Tachev
authored andcommitted
Added logout event.
1 parent 472b188 commit 337bdd0

12 files changed

+57
-11
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<StackLayout>
22
<Label text="{{userId}}"></Label>
3-
<FacebookLoginButton (login)="onLogin($event)"></FacebookLoginButton>
3+
<FacebookLoginButton (login)="onLogin($event)" (logout)="onLogout($event)"></FacebookLoginButton>
44
<Button text="Custom Login Button" (tap)="manualLogin()"></Button>
5-
<Button text="Custom Logout Button" (tap)="logout()"></Button>
5+
<Button text="Custom Logout Button" (tap)="manualLogout()"></Button>
66
</StackLayout>

demo-angular/app/app.component.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Component } from "@angular/core";
1+
import { Component, ChangeDetectorRef } from "@angular/core";
22
import * as Facebook from "nativescript-facebook";
33

44
@Component({
@@ -8,23 +8,34 @@ import * as Facebook from "nativescript-facebook";
88
export class AppComponent {
99
userId: string = "not logged in";
1010

11+
constructor(private ref: ChangeDetectorRef) {
12+
}
13+
1114
onLogin = function (eventData: Facebook.LoginEventData) {
1215
if (eventData.error) {
1316
alert("Error during login: " + eventData.error);
1417
} else {
1518
this.userId = "UserId: " + eventData.loginResponse.userId;
19+
this.ref.detectChanges();
1620
}
1721
};
1822

1923
manualLogin = function () {
2024
Facebook.login((error, loginResponse) => {
2125
this.userId = "UserId: " + loginResponse.userId;
26+
this.ref.detectChanges();
2227
});
2328
};
2429

25-
logout = function () {
30+
manualLogout = function () {
2631
Facebook.logout(() => {
2732
this.userId = "not logged in";
33+
this.ref.detectChanges();
2834
});
2935
};
36+
37+
public onLogout() {
38+
this.userId = "not logged in";
39+
this.ref.detectChanges();
40+
}
3041
}

demo/app/main-page.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
loaded="pageLoaded" class="page">
44
<StackLayout>
55
<Label text="{{ userId }}"></Label>
6-
<Facebook:LoginButton login="{{ onLogin }}"></Facebook:LoginButton>
6+
<Facebook:LoginButton login="{{ onLogin }}" logout="{{ onLogout }}"></Facebook:LoginButton>
77
<Button text="Log Out" tap="{{ logout }}"></Button>
88
</StackLayout>
99
</Page>

demo/app/main-view-model.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ export class HelloWorldModel extends Observable {
1212
}
1313
}
1414

15+
public onLogout() {
16+
this.set("userId", "not logged in");
17+
}
18+
1519
public logout() {
1620
fbLogout(() => this.set("userId", "not logged in"));
1721
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"__symbolic":"module","version":3,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"initNativeView":[{"__symbolic":"method"}]},"statics":{"loginEvent":"login"}}}},{"__symbolic":"module","version":1,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"initNativeView":[{"__symbolic":"method"}]},"statics":{"loginEvent":"login"}}}}]
1+
[{"__symbolic":"module","version":3,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"initNativeView":[{"__symbolic":"method"}]},"statics":{"loginEvent":"login","logoutEvent":"logout"}}}},{"__symbolic":"module","version":1,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"initNativeView":[{"__symbolic":"method"}]},"statics":{"loginEvent":"login","logoutEvent":"logout"}}}}]

src/login-button.common.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@ import { View, Property } from "ui/core/view";
22
import * as loginManager from './login-manager';
33
import { LoginResponse } from './login-response';
44
import { LoginEventData } from './login-event-data';
5+
import { EventData } from "data/observable";
56

67
export abstract class LoginButtonBase extends View {
78
public static loginEvent: string = "login";
9+
public static logoutEvent: string = "logout";
810

911
initNativeView() {
1012
loginManager._registerLoginCallback((error: Error, loginResponse: LoginResponse) => {
1113
this.notify(<LoginEventData>{ eventName: LoginButtonBase.loginEvent, object: this, error: error, loginResponse: loginResponse });
1214
});
15+
loginManager._registerLogoutCallback(() => {
16+
this.notify(<EventData>{ eventName: LoginButtonBase.logoutEvent, object: this });
17+
});
1318
}
1419
}

src/login-button.ios.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ class LoginButtonDelegate extends NSObject implements FBSDKLoginButtonDelegate {
3737
}
3838

3939
loginButtonDidLogOut(loginButton: any) {
40-
// TODO: Provide logout callback
40+
if (loginManager.onLogoutCallback) {
41+
loginManager.onLogoutCallback();
42+
}
4143
}
4244

4345
loginButtonWillLogin(loginButton: any) {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
[{"__symbolic":"module","version":3,"metadata":{"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"}}},{"__symbolic":"module","version":1,"metadata":{"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"}}}]
1+
[{"__symbolic":"module","version":3,"metadata":{"onLoginCallback":{"__symbolic":"error","message":"Variable not initialized","line":7,"character":11},"onLogoutCallback":{"__symbolic":"error","message":"Variable not initialized","line":8,"character":11},"_registerLogoutCallback":{"__symbolic":"function"},"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"},"logout":{"__symbolic":"function"}}},{"__symbolic":"module","version":1,"metadata":{"onLoginCallback":{"__symbolic":"error","message":"Variable not initialized","line":7,"character":11},"onLogoutCallback":{"__symbolic":"error","message":"Variable not initialized","line":8,"character":11},"_registerLogoutCallback":{"__symbolic":"function"},"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"},"logout":{"__symbolic":"function"}}}]

src/login-manager.android.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@ declare let com: any;
55
const LOGIN_PERMISSIONS = ["public_profile", "email"];
66

77
// TODO: add getter and setter
8-
let onLoginCallback;
8+
export let onLoginCallback;
9+
export let onLogoutCallback;
910
let androidApplication;
1011
let _act: android.app.Activity;
1112
let loginManager;
1213

14+
export function _registerLogoutCallback(callback: Function) {
15+
onLogoutCallback = callback;
16+
}
17+
1318
export function init(fbId: string) {
1419
setAppId(fbId);
1520
androidApplication = application.android;
@@ -23,6 +28,18 @@ export function init(fbId: string) {
2328
onLoginCallback = com.facebook.CallbackManager.Factory.create();
2429
loginManager = com.facebook.login.LoginManager.getInstance();
2530
loginManager.logOut();
31+
32+
// Workaround for firing the logout event in android:
33+
// https://stackoverflow.com/questions/30233284/how-to-add-a-logout-callback-for-facebook-sdk-in-android
34+
let LogoutAccessTokenTracker = com.facebook.AccessTokenTracker.extend({
35+
onCurrentAccessTokenChanged: function (oldToken, newToken) {
36+
if (oldToken != null && newToken == null && onLogoutCallback) {
37+
onLogoutCallback();
38+
}
39+
}
40+
});
41+
let accessTokenTracker = new LogoutAccessTokenTracker();
42+
accessTokenTracker.startTracking();
2643
}
2744

2845
export function _registerLoginCallback(callback: Function) {

src/login-manager.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export declare function _registerLoginCallback(callback: Function): void;
2+
export declare function _registerLogoutCallback(callback: Function): void;
23
export declare let onLoginCallback: Function;
4+
export declare let onLogoutCallback: Function;
35

46
/**
57
* Sets the Facebook application Id for the current app and init the native facebook sdk.

0 commit comments

Comments
 (0)