Skip to content

Commit a50026e

Browse files
authored
feat(dynamic-links): forward errors to application (#176)
1 parent 85c3a4f commit a50026e

File tree

5 files changed

+27
-35
lines changed

5 files changed

+27
-35
lines changed

packages/firebase-dynamic-links/common.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FirebaseApp } from '@nativescript/firebase-core';
1+
import { FirebaseApp, FirebaseError } from '@nativescript/firebase-core';
22

33
export enum ShortLinkType {
44
DEFAULT = 'default',
@@ -67,11 +67,13 @@ export interface IDynamicLink {
6767
utmParameters: Record<string, string>;
6868
}
6969

70+
export type OnLinkListener = (link: IDynamicLink | null, error: FirebaseError | null) => void;
71+
7072
export interface IDynamicLinks {
7173
app: FirebaseApp;
7274
createLink(link: string, domainUriPrefix: string): IDynamicLinkParameters;
7375
createShortLink(link: string, domainUriPrefix: string, shortLinkType?: ShortLinkType): IDynamicLinkParameters;
7476
buildLink(link: IDynamicLinkParameters): Promise<string>;
75-
onLink(listener: (link: IDynamicLink) => void);
77+
onLink(listener: OnLinkListener);
7678
resolveLink(link: string): Promise<IDynamicLink>;
7779
}

packages/firebase-dynamic-links/index.android.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Application, AndroidActivityNewIntentEventData, AndroidApplication } from '@nativescript/core';
22
import { deserialize, firebase, FirebaseApp, FirebaseError } from '@nativescript/firebase-core';
3-
import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, ShortLinkType } from './common';
3+
import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, OnLinkListener, ShortLinkType } from './common';
44

55
let defaultDynamicLinks: DynamicLinks;
66

@@ -455,7 +455,7 @@ export class DynamicLink implements IDynamicLink {
455455
export class DynamicLinks implements IDynamicLinks {
456456
_native: com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
457457
_app: FirebaseApp;
458-
static _onLink: (link: DynamicLink) => void;
458+
static _onLink: OnLinkListener;
459459
static _didInit = false;
460460
static _callback: org.nativescript.firebase.dynamic_links.FirebaseDynamicLinks.Callback<com.google.firebase.dynamiclinks.PendingDynamicLinkData>;
461461
constructor() {
@@ -468,10 +468,13 @@ export class DynamicLinks implements IDynamicLinks {
468468
DynamicLinks._callback = new org.nativescript.firebase.dynamic_links.FirebaseDynamicLinks.Callback<com.google.firebase.dynamiclinks.PendingDynamicLinkData>({
469469
onSuccess(param0) {
470470
if (typeof DynamicLinks._onLink === 'function') {
471-
DynamicLinks._onLink(DynamicLink.fromNative(param0));
471+
DynamicLinks._onLink(DynamicLink.fromNative(param0), null);
472472
}
473473
},
474474
onError(param0) {
475+
if (typeof DynamicLinks._onLink === 'function') {
476+
DynamicLinks._onLink(null, FirebaseError.fromNative(param0));
477+
}
475478
console.error('Unknown error occurred when attempting to handle a universal link', param0);
476479
},
477480
});
@@ -520,7 +523,7 @@ export class DynamicLinks implements IDynamicLinks {
520523
return DynamicLinkParameters.fromNative(dl, shortLinkType);
521524
}
522525

523-
onLink(listener: (link: DynamicLink) => void) {
526+
onLink(listener: OnLinkListener) {
524527
DynamicLinks._onLink = listener;
525528
}
526529
resolveLink(link: string): Promise<DynamicLink> {

packages/firebase-dynamic-links/index.d.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FirebaseApp } from '@nativescript/firebase-core';
1+
import { FirebaseApp, FirebaseError } from '@nativescript/firebase-core';
22
import { ShortLinkType, IDynamicLink } from './common';
33

44
export { ShortLinkType };
@@ -93,14 +93,16 @@ export declare class DynamicLink implements IDynamicLink {
9393
readonly android;
9494
}
9595

96+
export type OnLinkListener = (link: DynamicLink | null, error: FirebaseError | null) => void;
97+
9698
export declare class DynamicLinks implements IDynamicLinks {
9799
createLink(link: string, domainUriPrefix: string): DynamicLinkParameters;
98100

99101
createShortLink(link: string, domainUriPrefix: string, shortLinkType?: ShortLinkType): DynamicLinkParameters;
100102

101103
buildLink(link: DynamicLinkParameters): Promise<string>;
102104

103-
onLink(listener: (link: DynamicLink) => void);
105+
onLink(listener: OnLinkListener): void;
104106

105107
resolveLink(link: string): Promise<DynamicLink>;
106108

packages/firebase-dynamic-links/index.ios.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { deserialize, firebase, FirebaseApp, FirebaseError } from '@nativescript/firebase-core';
2-
import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, ShortLinkType } from './common';
2+
import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, OnLinkListener, ShortLinkType } from './common';
33

44
let defaultDynamicLinks: DynamicLinks;
55
const fb = firebase();
@@ -457,7 +457,7 @@ export class DynamicLink implements IDynamicLink {
457457
export class DynamicLinks implements IDynamicLinks {
458458
_native: FIRDynamicLinks;
459459
_app: FirebaseApp;
460-
static _onLink: (link: DynamicLink) => void;
460+
static _onLink: OnLinkListener;
461461
constructor() {
462462
if (defaultDynamicLinks) {
463463
return defaultDynamicLinks;
@@ -504,11 +504,11 @@ export class DynamicLinks implements IDynamicLinks {
504504
}
505505
}
506506

507-
onLink(listener: (link: DynamicLink) => void) {
507+
onLink(listener: OnLinkListener) {
508508
DynamicLinks._onLink = listener;
509509
if (listener) {
510-
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback = (link) => {
511-
listener(DynamicLink.fromNative(link));
510+
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback = (link, error) => {
511+
listener(DynamicLink.fromNative(link), error && FirebaseError.fromNative(error));
512512
};
513513
} else {
514514
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback = null;

packages/firebase-dynamic-links/platforms/ios/src/TNSFirebaseDynamicLinksAppDelegate.swift

+7-22
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class TNSFirebaseDynamicLinksAppDelegate: UIResponder , UIApplicationDele
1010

1111
private static var _sharedInstance: TNSFirebaseDynamicLinksAppDelegate? = nil
1212

13-
@objc public static var onLinkCallback: ((DynamicLink) -> Void)? = nil
13+
@objc public static var onLinkCallback: ((DynamicLink?, Error?) -> Void)? = nil
1414

1515
@objc public static var sharedInstance: TNSFirebaseDynamicLinksAppDelegate {
1616
get {
@@ -30,22 +30,14 @@ public class TNSFirebaseDynamicLinksAppDelegate: UIResponder , UIApplicationDele
3030

3131
if (dynamicLink == nil) {
3232
DynamicLinks.dynamicLinks().dynamicLink(fromUniversalLink: url, completion: { dynamicLink, error in
33-
if (dynamicLink?.url != nil) {
34-
DispatchQueue.main.async {
35-
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!)
36-
}
33+
DispatchQueue.main.async {
34+
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, error)
3735
}
3836
})
3937
return false
4038
}
4139

42-
if (dynamicLink == nil) {
43-
return false
44-
}
45-
46-
if (dynamicLink?.url != nil) {
47-
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!)
48-
}
40+
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, nil)
4941

5042
return false
5143
}
@@ -63,23 +55,16 @@ public class TNSFirebaseDynamicLinksAppDelegate: UIResponder , UIApplicationDele
6355

6456
if(userActivity.webpageURL != nil){
6557
DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamicLink, error in
66-
if(error == nil && dynamicLink?.url != nil){
67-
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!)
68-
}
69-
70-
7158
if(error != nil && !retried && (error as? NSError)?.domain == NSPOSIXErrorDomain && (error as? NSError)?.code == 53){
7259
retried = true
7360
DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamicLink, error in
74-
75-
if(error == nil && dynamicLink?.url != nil){
76-
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!)
77-
}
61+
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, error)
7862
if(error != nil && error?.localizedDescription != nil){
7963
NSLog("%@", "CONSOLE LOG: ", error!.localizedDescription)
8064
}
81-
8265
}
66+
} else {
67+
TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, error)
8368
}
8469
}
8570
}

0 commit comments

Comments
 (0)