diff --git a/packages/firebase-dynamic-links/common.ts b/packages/firebase-dynamic-links/common.ts index 5114a602..c082fc4e 100644 --- a/packages/firebase-dynamic-links/common.ts +++ b/packages/firebase-dynamic-links/common.ts @@ -1,4 +1,4 @@ -import { FirebaseApp } from '@nativescript/firebase-core'; +import { FirebaseApp, FirebaseError } from '@nativescript/firebase-core'; export enum ShortLinkType { DEFAULT = 'default', @@ -67,11 +67,13 @@ export interface IDynamicLink { utmParameters: Record; } +export type OnLinkListener = (link: IDynamicLink | null, error: FirebaseError | null) => void; + export interface IDynamicLinks { app: FirebaseApp; createLink(link: string, domainUriPrefix: string): IDynamicLinkParameters; createShortLink(link: string, domainUriPrefix: string, shortLinkType?: ShortLinkType): IDynamicLinkParameters; buildLink(link: IDynamicLinkParameters): Promise; - onLink(listener: (link: IDynamicLink) => void); + onLink(listener: OnLinkListener); resolveLink(link: string): Promise; } diff --git a/packages/firebase-dynamic-links/index.android.ts b/packages/firebase-dynamic-links/index.android.ts index 0a037c9f..c2eefea5 100644 --- a/packages/firebase-dynamic-links/index.android.ts +++ b/packages/firebase-dynamic-links/index.android.ts @@ -1,6 +1,6 @@ import { Application, AndroidActivityNewIntentEventData, AndroidApplication } from '@nativescript/core'; import { deserialize, firebase, FirebaseApp, FirebaseError } from '@nativescript/firebase-core'; -import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, ShortLinkType } from './common'; +import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, OnLinkListener, ShortLinkType } from './common'; let defaultDynamicLinks: DynamicLinks; @@ -455,7 +455,7 @@ export class DynamicLink implements IDynamicLink { export class DynamicLinks implements IDynamicLinks { _native: com.google.firebase.dynamiclinks.FirebaseDynamicLinks; _app: FirebaseApp; - static _onLink: (link: DynamicLink) => void; + static _onLink: OnLinkListener; static _didInit = false; static _callback: org.nativescript.firebase.dynamic_links.FirebaseDynamicLinks.Callback; constructor() { @@ -468,10 +468,13 @@ export class DynamicLinks implements IDynamicLinks { DynamicLinks._callback = new org.nativescript.firebase.dynamic_links.FirebaseDynamicLinks.Callback({ onSuccess(param0) { if (typeof DynamicLinks._onLink === 'function') { - DynamicLinks._onLink(DynamicLink.fromNative(param0)); + DynamicLinks._onLink(DynamicLink.fromNative(param0), null); } }, onError(param0) { + if (typeof DynamicLinks._onLink === 'function') { + DynamicLinks._onLink(null, FirebaseError.fromNative(param0)); + } console.error('Unknown error occurred when attempting to handle a universal link', param0); }, }); @@ -520,7 +523,7 @@ export class DynamicLinks implements IDynamicLinks { return DynamicLinkParameters.fromNative(dl, shortLinkType); } - onLink(listener: (link: DynamicLink) => void) { + onLink(listener: OnLinkListener) { DynamicLinks._onLink = listener; } resolveLink(link: string): Promise { diff --git a/packages/firebase-dynamic-links/index.d.ts b/packages/firebase-dynamic-links/index.d.ts index 182700f2..915a6077 100644 --- a/packages/firebase-dynamic-links/index.d.ts +++ b/packages/firebase-dynamic-links/index.d.ts @@ -1,4 +1,4 @@ -import { FirebaseApp } from '@nativescript/firebase-core'; +import { FirebaseApp, FirebaseError } from '@nativescript/firebase-core'; import { ShortLinkType, IDynamicLink } from './common'; export { ShortLinkType }; @@ -93,6 +93,8 @@ export declare class DynamicLink implements IDynamicLink { readonly android; } +export type OnLinkListener = (link: DynamicLink | null, error: FirebaseError | null) => void; + export declare class DynamicLinks implements IDynamicLinks { createLink(link: string, domainUriPrefix: string): DynamicLinkParameters; @@ -100,7 +102,7 @@ export declare class DynamicLinks implements IDynamicLinks { buildLink(link: DynamicLinkParameters): Promise; - onLink(listener: (link: DynamicLink) => void); + onLink(listener: OnLinkListener): void; resolveLink(link: string): Promise; diff --git a/packages/firebase-dynamic-links/index.ios.ts b/packages/firebase-dynamic-links/index.ios.ts index 3bcc2641..13148722 100644 --- a/packages/firebase-dynamic-links/index.ios.ts +++ b/packages/firebase-dynamic-links/index.ios.ts @@ -1,5 +1,5 @@ import { deserialize, firebase, FirebaseApp, FirebaseError } from '@nativescript/firebase-core'; -import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, ShortLinkType } from './common'; +import { IDynamicLink, IDynamicLinkAnalyticsParameters, IDynamicLinkAndroidParameters, IDynamicLinkIOSParameters, IDynamicLinkITunesParameters, IDynamicLinkNavigationParameters, IDynamicLinkParameters, IDynamicLinks, IDynamicLinkSocialParameters, OnLinkListener, ShortLinkType } from './common'; let defaultDynamicLinks: DynamicLinks; const fb = firebase(); @@ -457,7 +457,7 @@ export class DynamicLink implements IDynamicLink { export class DynamicLinks implements IDynamicLinks { _native: FIRDynamicLinks; _app: FirebaseApp; - static _onLink: (link: DynamicLink) => void; + static _onLink: OnLinkListener; constructor() { if (defaultDynamicLinks) { return defaultDynamicLinks; @@ -504,11 +504,11 @@ export class DynamicLinks implements IDynamicLinks { } } - onLink(listener: (link: DynamicLink) => void) { + onLink(listener: OnLinkListener) { DynamicLinks._onLink = listener; if (listener) { - TNSFirebaseDynamicLinksAppDelegate.onLinkCallback = (link) => { - listener(DynamicLink.fromNative(link)); + TNSFirebaseDynamicLinksAppDelegate.onLinkCallback = (link, error) => { + listener(DynamicLink.fromNative(link), error && FirebaseError.fromNative(error)); }; } else { TNSFirebaseDynamicLinksAppDelegate.onLinkCallback = null; diff --git a/packages/firebase-dynamic-links/platforms/ios/src/TNSFirebaseDynamicLinksAppDelegate.swift b/packages/firebase-dynamic-links/platforms/ios/src/TNSFirebaseDynamicLinksAppDelegate.swift index 8279b9bc..d7392a2e 100644 --- a/packages/firebase-dynamic-links/platforms/ios/src/TNSFirebaseDynamicLinksAppDelegate.swift +++ b/packages/firebase-dynamic-links/platforms/ios/src/TNSFirebaseDynamicLinksAppDelegate.swift @@ -10,7 +10,7 @@ public class TNSFirebaseDynamicLinksAppDelegate: UIResponder , UIApplicationDele private static var _sharedInstance: TNSFirebaseDynamicLinksAppDelegate? = nil - @objc public static var onLinkCallback: ((DynamicLink) -> Void)? = nil + @objc public static var onLinkCallback: ((DynamicLink?, Error?) -> Void)? = nil @objc public static var sharedInstance: TNSFirebaseDynamicLinksAppDelegate { get { @@ -30,22 +30,14 @@ public class TNSFirebaseDynamicLinksAppDelegate: UIResponder , UIApplicationDele if (dynamicLink == nil) { DynamicLinks.dynamicLinks().dynamicLink(fromUniversalLink: url, completion: { dynamicLink, error in - if (dynamicLink?.url != nil) { - DispatchQueue.main.async { - TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!) - } + DispatchQueue.main.async { + TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, error) } }) return false } - if (dynamicLink == nil) { - return false - } - - if (dynamicLink?.url != nil) { - TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!) - } + TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, nil) return false } @@ -63,23 +55,16 @@ public class TNSFirebaseDynamicLinksAppDelegate: UIResponder , UIApplicationDele if(userActivity.webpageURL != nil){ DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamicLink, error in - if(error == nil && dynamicLink?.url != nil){ - TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!) - } - - if(error != nil && !retried && (error as? NSError)?.domain == NSPOSIXErrorDomain && (error as? NSError)?.code == 53){ retried = true DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamicLink, error in - - if(error == nil && dynamicLink?.url != nil){ - TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink!) - } + TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, error) if(error != nil && error?.localizedDescription != nil){ NSLog("%@", "CONSOLE LOG: ", error!.localizedDescription) } - } + } else { + TNSFirebaseDynamicLinksAppDelegate.onLinkCallback?(dynamicLink, error) } } }