diff --git a/ci/fireci/fireciplugins/macrobenchmark/run/runner.py b/ci/fireci/fireciplugins/macrobenchmark/run/runner.py index a997e66cb49..8cff62ee954 100644 --- a/ci/fireci/fireciplugins/macrobenchmark/run/runner.py +++ b/ci/fireci/fireciplugins/macrobenchmark/run/runner.py @@ -119,7 +119,6 @@ def _process_changed_modules(path: Path) -> List[str]: ":firebase-components": ["Firebase", "ComponentDiscovery", "Runtime"], ":firebase-database": ["fire-rtdb"], ":firebase-datatransport": ["fire-transport"], - ":firebase-dynamic-links": ["fire-dl"], ":firebase-crashlytics": ["fire-cls"], ":firebase-crashlytics-ndk": ["fire-cls"], ":firebase-firestore": ["fire-fst"], diff --git a/docs/README.md b/docs/README.md index 7d764ead5f2..a10571797d3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -26,7 +26,6 @@ in your app: * [`firebase-common`](ktx/common.md) * [`firebase-crashlytics`](ktx/crashlytics.md) - * [`firebase-dynamic-links`](ktx/dynamic-links.md) * [`firebase-firestore`](ktx/firestore.md) * [`firebase-functions`](ktx/functions.md) * [`firebase-inappmessaging`](ktx/inappmessaging.md) diff --git a/docs/ktx/dynamic-links.md b/docs/ktx/dynamic-links.md deleted file mode 100644 index 187dade8b41..00000000000 --- a/docs/ktx/dynamic-links.md +++ /dev/null @@ -1,170 +0,0 @@ -# Dynamic Links Kotlin Extensions - -## Getting Started - -To use the Dynamic Links Android SDK with Kotlin Extensions, add the following -to your app's `build.gradle` file: - -```groovy -// See maven.google.com for the latest versions -// This library transitively includes the firebase-dynamic-links library -implementation 'com.google.firebase:firebase-dynamic-links-ktx:$VERSION' -``` - -## Features - -### Get an instance of FirebaseDynamicLinks - -**Kotlin** -```kotlin -val dynamicLinks = FirebaseDynamicLinks.getInstance() -val anotherDynamicLinks = FirebaseDynamicLinks.getInstance(FirebaseApp.getInstance("myApp")) -``` - -**Kotlin + KTX** -```kotlin -val dynamicLinks = Firebase.dynamicLinks -val anotherDynamicLinks = Firebase.dynamicLinks(Firebase.app("myApp")) -``` - -### Create a Dynamic Link from parameters - -**Kotlin** -```kotlin -val dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink() - .setLink(Uri.parse("https://www.example.com/")) - .setDomainUriPrefix("https://example.page.link") - .setAndroidParameters( - DynamicLink.AndroidParameters.Builder("com.example.android") - .setMinimumVersion(16) - .build()) - .setIosParameters( - DynamicLink.IosParameters.Builder("com.example.ios") - .setAppStoreId("123456789") - .setMinimumVersion("1.0.1") - .build()) - .setGoogleAnalyticsParameters( - DynamicLink.GoogleAnalyticsParameters.Builder() - .setSource("orkut") - .setMedium("social") - .setCampaign("example-promo") - .build()) - .setItunesConnectAnalyticsParameters( - DynamicLink.ItunesConnectAnalyticsParameters.Builder() - .setProviderToken("123456") - .setCampaignToken("example-promo") - .build()) - .setSocialMetaTagParameters( - DynamicLink.SocialMetaTagParameters.Builder() - .setTitle("Example of a Dynamic Link") - .setDescription("This link works whether the app is installed or not!") - .build()) - .buildDynamicLink() -``` - -**Kotlin + KTX** -```kotlin -val dynamicLink = Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://www.example.com/") - domainUriPrefix = "https://example.page.link" - androidParameters("com.example.android") { - minimumVersion = 16 - } - iosParameters("com.example.ios") { - appStoreId = "123456789" - minimumVersion = "1.0.1" - } - googleAnalyticsParameters { - source = "orkut" - medium = "social" - campaign = "example-promo" - } - itunesConnectAnalyticsParameters { - providerToken = "123456" - campaignToken = "example-promo" - } - socialMetaTagParameters { - title = "Example of a Dynamic Link" - description = "This link works whether the app is installed or not!" - } -} -``` - -### Shorten a long Dynamic Link - -**Kotlin** -```kotlin -FirebaseDynamicLinks.getInstance().createDynamicLink() - .setLongLink(Uri.parse("https://example.page.link/?link=" + - "https://www.example.com/&apn=com.example.android&ibn=com.example.ios")) - .buildShortDynamicLink() - .addOnSuccessListener { result -> - // Short link created - val shortLink = result.shortLink - val flowchartLink = result.previewLink - val warnings = result.warnings - - // do something with the links and warnings - showLinks(shortLink, flowchartLink) - displayWarnings(warnings) - } - .addOnFailureListener { - // Error - // ... - } -``` - -**Kotlin + KTX** -```kotlin -Firebase.dynamicLinks.shortLinkAsync { - longLink = Uri.parse("https://example.page.link/?link=" + - "https://www.example.com/&apn=com.example.android&ibn=com.example.ios") -}.addOnSuccessListener { (shortLink, flowchartLink, warnings) -> - // do something with the links and warnings - showLinks(shortLink, flowchartLink) - displayWarnings(warnings) -}.addOnFailureListener { - // Error - // ... -} -``` - -### Create a Dynamic Link with a shorter link suffix - -**Kotlin** -```kotlin -val shortLinkTask = FirebaseDynamicLinks.getInstance().createDynamicLink() - // ... - .buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT) -``` - -**Kotlin + KTX** -```kotlin -val shortLinkTask = Firebase.dynamicLinks.shortLinkAsync(ShortDynamicLink.Suffix.SHORT) { - // ... -} -``` - -### Receive deep links - -**Kotlin** -```kotlin -Firebase.dynamicLinks - .getDynamicLink(intent) - .addOnSuccessListener(this) { pendingDynamicLinkData -> - val deepLink = pendingDynamicLinkData.link - val minAppVersion = pendingDynamicLinkData.minimumAppVersion - val clickTimestamp = pendingDynamicLinkData.clickTimestamp - - // TODO(developer): handle the deepLink - }.addOnFailureListener { /* ... */ } -``` - -**Kotlin + KTX** -```kotlin -Firebase.dynamicLinks - .getDynamicLink(intent) - .addOnSuccessListener(this) { (deepLink, minAppVersion, clickTimestamp) -> - // TODO(developer): handle the deepLink - }.addOnFailureListener { /* ... */ } -``` diff --git a/firebase-dynamic-links/CHANGELOG.md b/firebase-dynamic-links/CHANGELOG.md index 594f75d18ff..4f7e7222924 100644 --- a/firebase-dynamic-links/CHANGELOG.md +++ b/firebase-dynamic-links/CHANGELOG.md @@ -1,5 +1,6 @@ -# Unreleased - +# 23.0.0 +* [removed] **Breaking change**: FirebaseDynamicLinks has been removed. See + https://firebase.google.com/support/dynamic-links-faq for more info. # 22.1.0 * [deprecated] `firebase-dynamic-links` is deprecated. For information about timelines and alternatives, @@ -163,4 +164,3 @@ using Google Play Services 13.2.80 and FDL SDK 16.1.0. The issue only occurred when creating shortening links from parameters, links created using preconstructed long links from `setLongLink()` were unaffected. This fix also addresses issues in newer versions of Google Play Services. - diff --git a/firebase-dynamic-links/README.md b/firebase-dynamic-links/README.md deleted file mode 100644 index 7abc80bf791..00000000000 --- a/firebase-dynamic-links/README.md +++ /dev/null @@ -1,7 +0,0 @@ -Firebase Dynamic Links -====================== - -> [!IMPORTANT] -> Firebase Dynamic Links is **deprecated** and should not be used in new projects. The service will shut down on August 25, 2025. -> -> Please see our [Dynamic Links Deprecation FAQ documentation](https://firebase.google.com/support/dynamic-links-faq) for more guidance. diff --git a/firebase-dynamic-links/api.txt b/firebase-dynamic-links/api.txt deleted file mode 100644 index 9db51ec1155..00000000000 --- a/firebase-dynamic-links/api.txt +++ /dev/null @@ -1,199 +0,0 @@ -// Signature format: 3.0 -package com.google.firebase.dynamiclinks { - - @Deprecated public final class DynamicLink { - method @Deprecated public android.net.Uri getUri(); - } - - @Deprecated public static final class DynamicLink.AndroidParameters { - } - - @Deprecated public static final class DynamicLink.AndroidParameters.Builder { - ctor @Deprecated public DynamicLink.AndroidParameters.Builder(); - ctor @Deprecated public DynamicLink.AndroidParameters.Builder(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters build(); - method @Deprecated public android.net.Uri getFallbackUrl(); - method @Deprecated public int getMinimumVersion(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters.Builder setFallbackUrl(android.net.Uri); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters.Builder setMinimumVersion(int); - } - - @Deprecated public static final class DynamicLink.Builder { - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink buildDynamicLink(); - method @Deprecated public com.google.android.gms.tasks.Task buildShortDynamicLink(); - method @Deprecated public com.google.android.gms.tasks.Task buildShortDynamicLink(@com.google.firebase.dynamiclinks.ShortDynamicLink.Suffix int); - method @Deprecated public String getDomainUriPrefix(); - method @Deprecated public android.net.Uri getLink(); - method @Deprecated public android.net.Uri getLongLink(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setAndroidParameters(com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setDomainUriPrefix(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setDynamicLinkDomain(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setGoogleAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setIosParameters(com.google.firebase.dynamiclinks.DynamicLink.IosParameters); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setItunesConnectAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.ItunesConnectAnalyticsParameters); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setLink(android.net.Uri); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setLongLink(android.net.Uri); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setNavigationInfoParameters(com.google.firebase.dynamiclinks.DynamicLink.NavigationInfoParameters); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.Builder setSocialMetaTagParameters(com.google.firebase.dynamiclinks.DynamicLink.SocialMetaTagParameters); - } - - @Deprecated public static final class DynamicLink.GoogleAnalyticsParameters { - } - - @Deprecated public static final class DynamicLink.GoogleAnalyticsParameters.Builder { - ctor @Deprecated public DynamicLink.GoogleAnalyticsParameters.Builder(); - ctor @Deprecated public DynamicLink.GoogleAnalyticsParameters.Builder(String, String, String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters build(); - method @Deprecated public String getCampaign(); - method @Deprecated public String getContent(); - method @Deprecated public String getMedium(); - method @Deprecated public String getSource(); - method @Deprecated public String getTerm(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters.Builder setCampaign(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters.Builder setContent(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters.Builder setMedium(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters.Builder setSource(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters.Builder setTerm(String); - } - - @Deprecated public static final class DynamicLink.IosParameters { - } - - @Deprecated public static final class DynamicLink.IosParameters.Builder { - ctor @Deprecated public DynamicLink.IosParameters.Builder(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters build(); - method @Deprecated public String getAppStoreId(); - method @Deprecated public String getCustomScheme(); - method @Deprecated public String getIpadBundleId(); - method @Deprecated public android.net.Uri getIpadFallbackUrl(); - method @Deprecated public String getMinimumVersion(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters.Builder setAppStoreId(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters.Builder setCustomScheme(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters.Builder setFallbackUrl(android.net.Uri); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters.Builder setIpadBundleId(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters.Builder setIpadFallbackUrl(android.net.Uri); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.IosParameters.Builder setMinimumVersion(String); - } - - @Deprecated public static final class DynamicLink.ItunesConnectAnalyticsParameters { - } - - @Deprecated public static final class DynamicLink.ItunesConnectAnalyticsParameters.Builder { - ctor @Deprecated public DynamicLink.ItunesConnectAnalyticsParameters.Builder(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.ItunesConnectAnalyticsParameters build(); - method @Deprecated public String getAffiliateToken(); - method @Deprecated public String getCampaignToken(); - method @Deprecated public String getProviderToken(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.ItunesConnectAnalyticsParameters.Builder setAffiliateToken(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.ItunesConnectAnalyticsParameters.Builder setCampaignToken(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.ItunesConnectAnalyticsParameters.Builder setProviderToken(String); - } - - @Deprecated public static final class DynamicLink.NavigationInfoParameters { - } - - @Deprecated public static final class DynamicLink.NavigationInfoParameters.Builder { - ctor @Deprecated public DynamicLink.NavigationInfoParameters.Builder(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.NavigationInfoParameters build(); - method @Deprecated public boolean getForcedRedirectEnabled(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.NavigationInfoParameters.Builder setForcedRedirectEnabled(boolean); - } - - @Deprecated public static final class DynamicLink.SocialMetaTagParameters { - } - - @Deprecated public static final class DynamicLink.SocialMetaTagParameters.Builder { - ctor @Deprecated public DynamicLink.SocialMetaTagParameters.Builder(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.SocialMetaTagParameters build(); - method @Deprecated public String getDescription(); - method @Deprecated public android.net.Uri getImageUrl(); - method @Deprecated public String getTitle(); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.SocialMetaTagParameters.Builder setDescription(String); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.SocialMetaTagParameters.Builder setImageUrl(android.net.Uri); - method @Deprecated public com.google.firebase.dynamiclinks.DynamicLink.SocialMetaTagParameters.Builder setTitle(String); - } - - @Deprecated public abstract class FirebaseDynamicLinks { - ctor @Deprecated public FirebaseDynamicLinks(); - method @Deprecated public abstract com.google.firebase.dynamiclinks.DynamicLink.Builder createDynamicLink(); - method @Deprecated public abstract com.google.android.gms.tasks.Task getDynamicLink(android.content.Intent?); - method @Deprecated public abstract com.google.android.gms.tasks.Task getDynamicLink(android.net.Uri); - method @Deprecated public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getInstance(); - method @Deprecated public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getInstance(com.google.firebase.FirebaseApp); - } - - public final class FirebaseDynamicLinksKt { - method @Deprecated public static void androidParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, String packageName, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void androidParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static operator android.net.Uri? component1(com.google.firebase.dynamiclinks.PendingDynamicLinkData); - method @Deprecated public static operator android.net.Uri? component1(com.google.firebase.dynamiclinks.ShortDynamicLink); - method @Deprecated public static operator int component2(com.google.firebase.dynamiclinks.PendingDynamicLinkData); - method @Deprecated public static operator android.net.Uri? component2(com.google.firebase.dynamiclinks.ShortDynamicLink); - method @Deprecated public static operator long component3(com.google.firebase.dynamiclinks.PendingDynamicLinkData); - method @Deprecated public static operator java.util.List component3(com.google.firebase.dynamiclinks.ShortDynamicLink); - method @Deprecated public static com.google.firebase.dynamiclinks.DynamicLink dynamicLink(com.google.firebase.dynamiclinks.FirebaseDynamicLinks, kotlin.jvm.functions.Function1 init); - method @Deprecated public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks dynamicLinks(com.google.firebase.Firebase, com.google.firebase.FirebaseApp app); - method @Deprecated public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getDynamicLinks(com.google.firebase.Firebase); - method @Deprecated public static void googleAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, String source, String medium, String campaign, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void googleAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void iosParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, String bundleId, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void itunesConnectAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void navigationInfoParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static com.google.android.gms.tasks.Task shortLinkAsync(com.google.firebase.dynamiclinks.FirebaseDynamicLinks, int suffix, kotlin.jvm.functions.Function1 init); - method @Deprecated public static com.google.android.gms.tasks.Task shortLinkAsync(com.google.firebase.dynamiclinks.FirebaseDynamicLinks, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void socialMetaTagParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - } - - @Deprecated public class PendingDynamicLinkData { - ctor @Deprecated protected PendingDynamicLinkData(String?, int, long, android.net.Uri?); - method @Deprecated public long getClickTimestamp(); - method @Deprecated public android.net.Uri? getLink(); - method @Deprecated public int getMinimumAppVersion(); - method @Deprecated public android.content.Intent? getUpdateAppIntent(android.content.Context); - method @Deprecated public android.os.Bundle getUtmParameters(); - } - - @Deprecated public interface ShortDynamicLink { - method @Deprecated public android.net.Uri? getPreviewLink(); - method @Deprecated public android.net.Uri? getShortLink(); - method @Deprecated public java.util.List getWarnings(); - } - - @Deprecated @IntDef({com.google.firebase.dynamiclinks.ShortDynamicLink.Suffix.UNGUESSABLE, com.google.firebase.dynamiclinks.ShortDynamicLink.Suffix.SHORT}) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ShortDynamicLink.Suffix { - field @Deprecated public static final int SHORT = 2; // 0x2 - field @Deprecated public static final int UNGUESSABLE = 1; // 0x1 - } - - @Deprecated public static interface ShortDynamicLink.Warning { - method @Deprecated public String? getCode(); - method @Deprecated public String? getMessage(); - } - -} - -package com.google.firebase.dynamiclinks.ktx { - - public final class FirebaseDynamicLinksKt { - method @Deprecated public static void androidParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, String packageName, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void androidParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static operator android.net.Uri? component1(com.google.firebase.dynamiclinks.PendingDynamicLinkData); - method @Deprecated public static operator android.net.Uri? component1(com.google.firebase.dynamiclinks.ShortDynamicLink); - method @Deprecated public static operator int component2(com.google.firebase.dynamiclinks.PendingDynamicLinkData); - method @Deprecated public static operator android.net.Uri? component2(com.google.firebase.dynamiclinks.ShortDynamicLink); - method @Deprecated public static operator long component3(com.google.firebase.dynamiclinks.PendingDynamicLinkData); - method @Deprecated public static operator java.util.List component3(com.google.firebase.dynamiclinks.ShortDynamicLink); - method @Deprecated public static com.google.firebase.dynamiclinks.DynamicLink dynamicLink(com.google.firebase.dynamiclinks.FirebaseDynamicLinks, kotlin.jvm.functions.Function1 init); - method @Deprecated public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks dynamicLinks(com.google.firebase.ktx.Firebase, com.google.firebase.FirebaseApp app); - method @Deprecated public static com.google.firebase.dynamiclinks.FirebaseDynamicLinks getDynamicLinks(com.google.firebase.ktx.Firebase); - method @Deprecated public static void googleAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, String source, String medium, String campaign, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void googleAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void iosParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, String bundleId, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void itunesConnectAnalyticsParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void navigationInfoParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - method @Deprecated public static com.google.android.gms.tasks.Task shortLinkAsync(com.google.firebase.dynamiclinks.FirebaseDynamicLinks, int suffix, kotlin.jvm.functions.Function1 init); - method @Deprecated public static com.google.android.gms.tasks.Task shortLinkAsync(com.google.firebase.dynamiclinks.FirebaseDynamicLinks, kotlin.jvm.functions.Function1 init); - method @Deprecated public static void socialMetaTagParameters(com.google.firebase.dynamiclinks.DynamicLink.Builder, kotlin.jvm.functions.Function1 init); - } - -} - diff --git a/firebase-dynamic-links/firebase-dynamic-links.gradle b/firebase-dynamic-links/firebase-dynamic-links.gradle deleted file mode 100644 index 01194ee9fb7..00000000000 --- a/firebase-dynamic-links/firebase-dynamic-links.gradle +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -plugins { - id 'firebase-library' - id("kotlin-android") -} - -firebaseLibrary { - libraryGroup = "dynamic-links" - testLab.enabled = false - releaseNotes { - name.set("{{ddls}}") - versionName.set("dynamic-links") - } -} - -android { - adbOptions { - timeOutInMs 60 * 1000 - } - - buildFeatures { - aidl true - } - - namespace "com.google.firebase.dynamiclinks" - compileSdkVersion project.compileSdkVersion - defaultConfig { - targetSdkVersion project.targetSdkVersion - minSdkVersion project.minSdkVersion - versionName version - multiDexEnabled true - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { jvmTarget = "1.8" } - - packagingOptions { - exclude 'META-INF/DEPENDENCIES' - } - - testOptions.unitTests.includeAndroidResources = true -} - -dependencies { - javadocClasspath libs.autovalue.annotations - javadocClasspath libs.findbugs.jsr305 - javadocClasspath libs.checker.qual - - api libs.playservices.tasks - api('com.google.firebase:firebase-auth-interop:20.0.0') { - exclude group: "com.google.firebase", module: "firebase-common" - } - api("com.google.firebase:firebase-common:21.0.0") - api("com.google.firebase:firebase-common-ktx:21.0.0") - api("com.google.firebase:firebase-components:18.0.0") - api('com.google.firebase:firebase-measurement-connector:19.0.0') { - exclude group: 'com.google.firebase', module: 'firebase-common' - } - - implementation libs.androidx.annotation - implementation libs.playservices.base - implementation libs.playservices.basement - implementation libs.kotlin.stdlib - - testAnnotationProcessor libs.autovalue - - testImplementation libs.androidx.test.core - testImplementation libs.runner - testImplementation libs.jackson.databind - testImplementation('com.google.android.gms:play-services-appinvite:18.0.0') { - exclude group: 'com.google.firebase', module: 'firebase-common' - exclude group: 'com.google.firebase', module: 'firebase-dynamic-links' - } - testImplementation 'com.google.guava:guava-testlib:12.0-rc2' - testImplementation libs.truth - testImplementation libs.junit - testImplementation libs.junit - testImplementation libs.mockito.core - testImplementation libs.mockito.core - testImplementation libs.robolectric - - testCompileOnly libs.autovalue.annotations -} diff --git a/firebase-dynamic-links/gradle.properties b/firebase-dynamic-links/gradle.properties deleted file mode 100644 index c0baaba4325..00000000000 --- a/firebase-dynamic-links/gradle.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright 2018 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -version=22.1.1 -latestReleasedVersion=22.1.0 -android.enableUnitTestBinaryResources=true diff --git a/firebase-dynamic-links/ktx/api.txt b/firebase-dynamic-links/ktx/api.txt deleted file mode 100644 index da4f6cc18fe..00000000000 --- a/firebase-dynamic-links/ktx/api.txt +++ /dev/null @@ -1 +0,0 @@ -// Signature format: 3.0 diff --git a/firebase-dynamic-links/ktx/gradle.properties b/firebase-dynamic-links/ktx/gradle.properties deleted file mode 100644 index 016fa887bc0..00000000000 --- a/firebase-dynamic-links/ktx/gradle.properties +++ /dev/null @@ -1,2 +0,0 @@ -android.enableUnitTestBinaryResources=true - diff --git a/firebase-dynamic-links/ktx/ktx.gradle b/firebase-dynamic-links/ktx/ktx.gradle deleted file mode 100644 index 66cd006b8ba..00000000000 --- a/firebase-dynamic-links/ktx/ktx.gradle +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2019 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -plugins { - id 'firebase-library' - id("kotlin-android") -} - -firebaseLibrary { - libraryGroup = "dynamic-links" - publishJavadoc = false - releaseNotes { - enabled.set(false) - } -} - -android { - namespace "com.google.firebase.dynamiclinks.ktx" - compileSdkVersion project.compileSdkVersion - defaultConfig { - minSdkVersion project.minSdkVersion - multiDexEnabled true - targetSdkVersion project.targetSdkVersion - versionName version - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - } - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - test.java { - srcDir 'src/test/kotlin' - } - } - testOptions.unitTests.includeAndroidResources = true -} - -dependencies { - api(project(":firebase-dynamic-links")) - api("com.google.firebase:firebase-common:21.0.0") - api("com.google.firebase:firebase-common-ktx:21.0.0") - - implementation("com.google.firebase:firebase-components:18.0.0") - - testImplementation libs.androidx.test.core - testImplementation libs.truth - testImplementation 'junit:junit:4.12' - testImplementation 'org.mockito:mockito-core:2.25.0' - testImplementation libs.robolectric -} diff --git a/firebase-dynamic-links/ktx/src/main/AndroidManifest.xml b/firebase-dynamic-links/ktx/src/main/AndroidManifest.xml deleted file mode 100644 index 67a08a3eba6..00000000000 --- a/firebase-dynamic-links/ktx/src/main/AndroidManifest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/Logging.kt b/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/Logging.kt deleted file mode 100644 index 37249965572..00000000000 --- a/firebase-dynamic-links/ktx/src/main/kotlin/com/google/firebase/dynamiclinks/ktx/Logging.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2023 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.dynamiclinks.ktx - -import androidx.annotation.Keep -import com.google.firebase.components.Component -import com.google.firebase.components.ComponentRegistrar -import com.google.firebase.dynamiclinks.BuildConfig -import com.google.firebase.platforminfo.LibraryVersionComponent - -internal const val LIBRARY_NAME: String = "fire-dl-ktx" - -/** @suppress */ -@Keep -class FirebaseDynamicLinksLegacyRegistrar : ComponentRegistrar { - override fun getComponents(): List> { - return listOf(LibraryVersionComponent.create(LIBRARY_NAME, BuildConfig.VERSION_NAME)) - } -} diff --git a/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt b/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt deleted file mode 100644 index 48531d72990..00000000000 --- a/firebase-dynamic-links/ktx/src/test/kotlin/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.dynamiclinks.ktx - -import android.net.Uri -import androidx.test.core.app.ApplicationProvider -import com.google.common.truth.Truth.assertThat -import com.google.firebase.FirebaseApp -import com.google.firebase.FirebaseOptions -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks -import com.google.firebase.dynamiclinks.PendingDynamicLinkData -import com.google.firebase.dynamiclinks.ShortDynamicLink -import com.google.firebase.ktx.Firebase -import com.google.firebase.ktx.app -import com.google.firebase.ktx.initialize -import org.junit.After -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` -import org.robolectric.RobolectricTestRunner - -const val APP_ID = "APP_ID" -const val API_KEY = "API_KEY" - -const val EXISTING_APP = "existing" - -abstract class BaseTestCase { - @Before - fun setUp() { - Firebase.initialize( - ApplicationProvider.getApplicationContext(), - FirebaseOptions.Builder() - .setApplicationId(APP_ID) - .setApiKey(API_KEY) - .setProjectId("123") - .build() - ) - - Firebase.initialize( - ApplicationProvider.getApplicationContext(), - FirebaseOptions.Builder() - .setApplicationId(APP_ID) - .setApiKey(API_KEY) - .setProjectId("123") - .build(), - EXISTING_APP - ) - } - - @After - fun cleanUp() { - FirebaseApp.clearInstancesForTest() - } -} - -@RunWith(RobolectricTestRunner::class) -class DynamicLinksTests : BaseTestCase() { - - @Test - fun `Firebase#dynamicLinks should delegate to FirebaseDynamicLinks#getInstance()`() { - assertThat(Firebase.dynamicLinks).isSameInstanceAs(FirebaseDynamicLinks.getInstance()) - } - - @Test - fun `Firebase#dynamicLinks should delegate to FirebaseDynamicLinks#getInstance(FirebaseApp)`() { - val app = Firebase.app(EXISTING_APP) - assertThat(Firebase.dynamicLinks(app)).isSameInstanceAs(FirebaseDynamicLinks.getInstance(app)) - } - - @Test - fun `Firebase#dynamicLinks#createDynamicLink`() { - val exampleLink = "https://example.com" - val exampleDomainUriPrefix = "https://example.page.link" - - val dynamicLinkKtx = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse(exampleLink) - domainUriPrefix = exampleDomainUriPrefix - } - - val dynamicLink = - FirebaseDynamicLinks.getInstance() - .createDynamicLink() - .setLink(Uri.parse(exampleLink)) - .setDomainUriPrefix(exampleDomainUriPrefix) - .buildDynamicLink() - - assertThat(dynamicLinkKtx.uri).isEqualTo(dynamicLink.uri) - } - - @Test - fun `androidParameters type-safe builder extension works`() { - val fallbackLink = "https://android.com" - val minVersion = 19 - val packageName = "com.example.android" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - androidParameters { - minimumVersion = minVersion - fallbackUrl = Uri.parse(fallbackLink) - } - } - - val anotherDynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - androidParameters(packageName) { - minimumVersion = minVersion - fallbackUrl = Uri.parse(fallbackLink) - } - } - - assertThat(dynamicLink.uri.getQueryParameter("amv")?.toInt()).isEqualTo(minVersion) - assertThat(dynamicLink.uri.getQueryParameter("afl")).isEqualTo(fallbackLink) - - assertThat(anotherDynamicLink.uri.getQueryParameter("amv")?.toInt()).isEqualTo(minVersion) - assertThat(anotherDynamicLink.uri.getQueryParameter("afl")).isEqualTo(fallbackLink) - assertThat(anotherDynamicLink.uri.getQueryParameter("apn")).isEqualTo(packageName) - } - - @Test - fun `iosParameters type-safe builder extension works`() { - val iosAppStoreId = "123456789" - val iosMinimumVersion = "1.0.1" - val iosBundleId = "com.example.ios" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - iosParameters(iosBundleId) { - appStoreId = iosAppStoreId - minimumVersion = iosMinimumVersion - } - } - - assertThat(dynamicLink.uri.getQueryParameter("ibi")).isEqualTo(iosBundleId) - assertThat(dynamicLink.uri.getQueryParameter("imv")).isEqualTo(iosMinimumVersion) - assertThat(dynamicLink.uri.getQueryParameter("isi")).isEqualTo(iosAppStoreId) - } - - @Test - fun `googleAnalyticsParameters type-safe builder extension works`() { - val campaignTerm = "Example Term" - val campaignContent = "Example Content" - val campaignSource = "Twitter" - val campaignMedium = "Social" - val campaignName = "Example Promo" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - googleAnalyticsParameters(campaignSource, campaignMedium, campaignName) { - term = campaignTerm - content = campaignContent - } - } - - assertThat(dynamicLink.uri.getQueryParameter("utm_content")).isEqualTo(campaignContent) - assertThat(dynamicLink.uri.getQueryParameter("utm_term")).isEqualTo(campaignTerm) - assertThat(dynamicLink.uri.getQueryParameter("utm_source")).isEqualTo(campaignSource) - assertThat(dynamicLink.uri.getQueryParameter("utm_medium")).isEqualTo(campaignMedium) - assertThat(dynamicLink.uri.getQueryParameter("utm_campaign")).isEqualTo(campaignName) - } - - @Test - fun `itunesConnectAnalyticsParameters type-safe builder extension works`() { - val ct = "example-campaign" - val pt = "123456" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - itunesConnectAnalyticsParameters { - providerToken = pt - campaignToken = ct - } - } - - assertThat(dynamicLink.uri.getQueryParameter("pt")).isEqualTo(pt) - assertThat(dynamicLink.uri.getQueryParameter("ct")).isEqualTo(ct) - } - - @Test - fun `socialMetaTagParameters type-safe builder extension works`() { - val socialTitle = "Example Title" - val socialDescription = "This link works whether the app is installed or not!" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - socialMetaTagParameters { - title = socialTitle - description = socialDescription - } - } - - assertThat(dynamicLink.uri.getQueryParameter("st")).isEqualTo(socialTitle) - assertThat(dynamicLink.uri.getQueryParameter("sd")).isEqualTo(socialDescription) - } - - @Test - fun `navigationInfoParameters type-safe builder extension works`() { - val forcedRedirect = true - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - navigationInfoParameters { forcedRedirectEnabled = true } - } - - val efr = Integer.parseInt(dynamicLink.uri.getQueryParameter("efr")!!) == 1 - assertThat(efr).isEqualTo(forcedRedirect) - } - - @Test - fun `ShortDynamicLink destructure declaration works`() { - val fakeWarning = - object : ShortDynamicLink.Warning { - override fun getMessage() = "Warning" - override fun getCode() = "warning" - } - - val expectedShortLink = Uri.parse("https://example.com") - val expectedPreviewLink = Uri.parse("https://example.com/preview") - val expectedWarnings = mutableListOf(fakeWarning) - - val mockShortDynamicLink = mock(ShortDynamicLink::class.java) - `when`(mockShortDynamicLink.shortLink).thenReturn(expectedShortLink) - `when`(mockShortDynamicLink.previewLink).thenReturn(expectedPreviewLink) - `when`(mockShortDynamicLink.warnings).thenReturn(expectedWarnings) - - val (shortLink, previewLink, warnings) = mockShortDynamicLink - - assertThat(shortLink).isEqualTo(expectedShortLink) - assertThat(previewLink).isEqualTo(expectedPreviewLink) - assertThat(warnings).isEqualTo(expectedWarnings) - } - - @Test - fun `PendingDynamicLinkData destructure declaration works`() { - val expectedLink = Uri.parse("https://example.com") - val expectedMinAppVersion = 30 - val expectedTimestamp = 172947600L - - val mockPendingData = mock(PendingDynamicLinkData::class.java) - `when`(mockPendingData.link).thenReturn(expectedLink) - `when`(mockPendingData.minimumAppVersion).thenReturn(expectedMinAppVersion) - `when`(mockPendingData.clickTimestamp).thenReturn(expectedTimestamp) - - val (link, minAppVersion, timestamp) = mockPendingData - - assertThat(link).isEqualTo(expectedLink) - assertThat(minAppVersion).isEqualTo(expectedMinAppVersion) - assertThat(timestamp).isEqualTo(expectedTimestamp) - } -} diff --git a/firebase-dynamic-links/src/main/AndroidManifest.xml b/firebase-dynamic-links/src/main/AndroidManifest.xml deleted file mode 100644 index 376c46e3cb3..00000000000 --- a/firebase-dynamic-links/src/main/AndroidManifest.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/firebase-dynamic-links/src/main/aidl/com/google/android/gms/common/api/Status.aidl b/firebase-dynamic-links/src/main/aidl/com/google/android/gms/common/api/Status.aidl deleted file mode 100644 index 701f99a9140..00000000000 --- a/firebase-dynamic-links/src/main/aidl/com/google/android/gms/common/api/Status.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.android.gms.common.api; - -parcelable Status; \ No newline at end of file diff --git a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/DynamicLinkData.aidl b/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/DynamicLinkData.aidl deleted file mode 100644 index 112da96c73f..00000000000 --- a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/DynamicLinkData.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.firebase.dynamiclinks.internal; - -parcelable DynamicLinkData; diff --git a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/IDynamicLinksCallbacks.aidl b/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/IDynamicLinksCallbacks.aidl deleted file mode 100644 index 9247ee3dbed..00000000000 --- a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/IDynamicLinksCallbacks.aidl +++ /dev/null @@ -1,10 +0,0 @@ -package com.google.firebase.dynamiclinks.internal; - -import com.google.android.gms.common.api.Status; -import com.google.firebase.dynamiclinks.internal.DynamicLinkData; -import com.google.firebase.dynamiclinks.internal.ShortDynamicLinkImpl; - -oneway interface IDynamicLinksCallbacks { - void onGetDynamicLink(in Status status, in DynamicLinkData dynamicLinksData) = 0; - void onCreateShortDynamicLink(in Status status, in ShortDynamicLinkImpl shortDynamicLink) = 1; -} diff --git a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/IDynamicLinksService.aidl b/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/IDynamicLinksService.aidl deleted file mode 100644 index e1b76b59848..00000000000 --- a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/IDynamicLinksService.aidl +++ /dev/null @@ -1,9 +0,0 @@ -package com.google.firebase.dynamiclinks.internal; - -import android.os.Bundle; -import com.google.firebase.dynamiclinks.internal.IDynamicLinksCallbacks; - -interface IDynamicLinksService { - void getDynamicLink(in IDynamicLinksCallbacks callback, in String dynamicLink) = 0; - void createShortDynamicLink(in IDynamicLinksCallbacks callback, in Bundle parameters) = 1; -} diff --git a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImpl.aidl b/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImpl.aidl deleted file mode 100644 index 1aef5e7c8c0..00000000000 --- a/firebase-dynamic-links/src/main/aidl/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImpl.aidl +++ /dev/null @@ -1,3 +0,0 @@ -package com.google.firebase.dynamiclinks.internal; - -parcelable ShortDynamicLinkImpl; diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/DynamicLink.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/DynamicLink.java deleted file mode 100644 index 683a2fc6031..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/DynamicLink.java +++ /dev/null @@ -1,1452 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import android.net.Uri; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; -import com.google.android.gms.tasks.Task; -import com.google.firebase.FirebaseApp; -import com.google.firebase.dynamiclinks.ShortDynamicLink.Suffix; -import com.google.firebase.dynamiclinks.internal.FirebaseDynamicLinksImpl; - -/** - * Contains Builders for constructing Dynamic Links. Returned by {@link Builder#buildDynamicLink()} - * with the constructed Dynamic Link. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ -@Deprecated -public final class DynamicLink { - - private final Bundle builderParameters; - - DynamicLink(Bundle builderParameters) { - this.builderParameters = builderParameters; - } - - /** - * Gets the Uri for this Dynamic Link. - * - * @throws IllegalArgumentException if the FDL domain is not set. Set with {@link - * Builder#setDynamicLinkDomain(String)}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Uri getUri() { - return FirebaseDynamicLinksImpl.createDynamicLink(builderParameters); - } - - /** - * Builder for creating Dynamic Links. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - * */ - @Deprecated - public static final class Builder { - - // Dynamic Link parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_DOMAIN = "domain"; - - /** @hide */ - // TODO(b/120887495): This @VisibleForTesting annotation was being ignored by prod code. - // Please check that removing it is correct, and remove this comment along with it. - // @VisibleForTesting - public static final String KEY_DOMAIN_URI_PREFIX = "domainUriPrefix"; - - /** @hide */ - // TODO(b/120887495): This @VisibleForTesting annotation was being ignored by prod code. - // Please check that removing it is correct, and remove this comment along with it. - // @VisibleForTesting - public static final String KEY_DYNAMIC_LINK = "dynamicLink"; - - /** @hide */ - // TODO(b/120887495): This @VisibleForTesting annotation was being ignored by prod code. - // Please check that removing it is correct, and remove this comment along with it. - // @VisibleForTesting - public static final String KEY_DYNAMIC_LINK_PARAMETERS = "parameters"; - - /** @hide */ - // TODO(b/120887495): This @VisibleForTesting annotation was being ignored by prod code. - // Please check that removing it is correct, and remove this comment along with it. - // @VisibleForTesting - public static final String KEY_SUFFIX = "suffix"; - - /** @hide */ - // TODO(b/120887495): This @VisibleForTesting annotation was being ignored by prod code. - // Please check that removing it is correct, and remove this comment along with it. - // @VisibleForTesting - public static final String KEY_API_KEY = "apiKey"; - - /** @hide */ - @VisibleForTesting public static final String KEY_LINK = "link"; - - private static final String SCHEME_PREFIX = "https://"; - private static final String PAGE_LINK_PATTERN = "(https:\\/\\/)?[a-z0-9]{3,}\\.page\\.link$"; - private static final String APP_GOO_GL_PATTERN = - "(https:\\/\\/)?[a-z0-9]{3,}\\.app\\.goo\\.gl$"; - - private final FirebaseDynamicLinksImpl firebaseDynamicLinksImpl; - private final Bundle builderParameters; - private final Bundle fdlParameters; - - /** @hide */ - public Builder(FirebaseDynamicLinksImpl firebaseDynamicLinks) { - firebaseDynamicLinksImpl = firebaseDynamicLinks; - builderParameters = new Bundle(); - builderParameters.putString( - KEY_API_KEY, firebaseDynamicLinks.getFirebaseApp().getOptions().getApiKey()); - fdlParameters = new Bundle(); - builderParameters.putBundle(KEY_DYNAMIC_LINK_PARAMETERS, fdlParameters); - } - - /** - * Set the long Dynamic Link. This can be used with {@link #buildShortDynamicLink} to shorten an - * existing long FDL into a short FDL. - * - * @param longLink The long FDL to shorten. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setLongLink(@NonNull Uri longLink) { - builderParameters.putParcelable(KEY_DYNAMIC_LINK, longLink); - return this; - } - - /** - * Return the long Dynamic link associated with this DynamicLink. - * - * @return the long Dynamic link associated with this DynamicLink. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Uri getLongLink() { - Uri longLink = fdlParameters.getParcelable(KEY_DYNAMIC_LINK); - if (longLink == null) { - longLink = Uri.EMPTY; - } - return longLink; - } - - /** - * Set the deep link. - * - * @param link The link your app will open. You can specify any URL your app can handle, such as - * a link to your app's content, or a URL that initiates some app-specific logic such as - * crediting the user with a coupon, or displaying a specific welcome screen. This link must - * be a well-formatted URL, be properly URL-encoded, and use the HTTP or HTTPS scheme. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setLink(@NonNull Uri link) { - fdlParameters.putParcelable(KEY_LINK, link); - return this; - } - - /** - * Return the deep link associated with this DynamicLink. - * - * @return the deep link associated with this DynamicLink. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Uri getLink() { - Uri link = fdlParameters.getParcelable(KEY_LINK); - if (link == null) { - link = Uri.EMPTY; - } - return link; - } - - /** - * Sets the domain (of the form "xyz.app.goo.gl") to use for this Dynamic Link. Only applicable - * for *.page.link and *.app.goo.gl, use {@link #setDomainUriPrefix(String)} if domain is - * custom. - * - * @param dynamicLinkDomain The target project's Dynamic Links domain. You can find this value - * in the Dynamic Links section of the Firebase console. - * @deprecated Use {@link #setDomainUriPrefix(String)} instead - */ - @NonNull - @Deprecated - public Builder setDynamicLinkDomain(@NonNull String dynamicLinkDomain) { - if (!dynamicLinkDomain.matches(APP_GOO_GL_PATTERN) - && !dynamicLinkDomain.matches(PAGE_LINK_PATTERN)) { - throw new IllegalArgumentException( - "Use setDomainUriPrefix() instead, setDynamicLinkDomain() is only applicable for " - + "*.page.link and *.app.goo.gl domains."); - } - builderParameters.putString(KEY_DOMAIN, dynamicLinkDomain); - builderParameters.putString(KEY_DOMAIN_URI_PREFIX, SCHEME_PREFIX + dynamicLinkDomain); - return this; - } - - /** - * Sets the domain uri prefix (of the form "https://xyz.app.goo.gl", "https://custom.com/xyz") - * to use for this Dynamic Link. - * - * @param domainUriPrefix The target project's Domain Uri Prefix. You can find this value in the - * Dynamic Links section of the Firebase console. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setDomainUriPrefix(@NonNull String domainUriPrefix) { - if (domainUriPrefix.matches(APP_GOO_GL_PATTERN) - || domainUriPrefix.matches(PAGE_LINK_PATTERN)) { - builderParameters.putString(KEY_DOMAIN, domainUriPrefix.replace(SCHEME_PREFIX, "")); - } - builderParameters.putString(KEY_DOMAIN_URI_PREFIX, domainUriPrefix); - return this; - } - - /** - * Returns the deep link set to this DynamicLink. - * - * @return the deep link set to this DynamicLink. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getDomainUriPrefix() { - return builderParameters.getString(KEY_DOMAIN_URI_PREFIX, ""); - } - - /** - * Sets the Android parameters. - * - * @param androidParameters The AndroidParameters from {@link - * AndroidParameters.Builder#build()}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setAndroidParameters(@NonNull AndroidParameters androidParameters) { - fdlParameters.putAll(androidParameters.parameters); - return this; - } - - /** - * Sets the iOS parameters. - * - * @param iosParameters The IosParameters from {@link IosParameters.Builder#build()}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setIosParameters(@NonNull IosParameters iosParameters) { - fdlParameters.putAll(iosParameters.parameters); - return this; - } - - /** - * Sets the Google Analytics parameters. - * - * @param googleAnalyticsParameters The GoogleAnalyticsParameters from {@link - * GoogleAnalyticsParameters.Builder#build()}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setGoogleAnalyticsParameters( - @NonNull GoogleAnalyticsParameters googleAnalyticsParameters) { - fdlParameters.putAll(googleAnalyticsParameters.parameters); - return this; - } - - /** - * Sets the iTunes Connect App Analytics parameters. - * - * @param itunesConnectAnalyticsParameters The ItunesConnectAnalyticsParameters from {@link - * ItunesConnectAnalyticsParameters.Builder#build()}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setItunesConnectAnalyticsParameters( - @NonNull ItunesConnectAnalyticsParameters itunesConnectAnalyticsParameters) { - fdlParameters.putAll(itunesConnectAnalyticsParameters.parameters); - return this; - } - - /** - * Sets the social meta-tag parameters. - * - * @param socialMetaTagParameters The SocialMetaTagParameters from {@link - * SocialMetaTagParameters.Builder#build()}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setSocialMetaTagParameters( - @NonNull SocialMetaTagParameters socialMetaTagParameters) { - fdlParameters.putAll(socialMetaTagParameters.parameters); - return this; - } - - /** - * Sets the navigation info parameters. - * - * @param navigationInfoParameters The NavigationInfoParameters from {@link - * NavigationInfoParameters.Builder#build()}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Builder setNavigationInfoParameters( - @NonNull NavigationInfoParameters navigationInfoParameters) { - fdlParameters.putAll(navigationInfoParameters.parameters); - return this; - } - - /** - * Creates a Dynamic Link from the parameters. - * - * @throws IllegalArgumentException if the FDL domain is not set. Set with {@link - * #setDynamicLinkDomain(String)}. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public DynamicLink buildDynamicLink() { - FirebaseDynamicLinksImpl.verifyDomainUriPrefix(builderParameters); - return new DynamicLink(builderParameters); - } - - /** - * Creates a shortened Dynamic Link from the parameters. - * - * @throws IllegalArgumentException if the FDL domain and api key are not set. Set FDL domain - * with {@link Builder#setDynamicLinkDomain(String)}. Ensure that google-services.json file - * is setup for the app if the api key is not set. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Task buildShortDynamicLink() { - verifyApiKey(); - return firebaseDynamicLinksImpl.createShortDynamicLink(builderParameters); - } - - /** - * Creates a shortened Dynamic Link from the parameters. - * - * @param suffix The desired length of the Dynamic Link. One of {@link Suffix#UNGUESSABLE} or - * {@link Suffix#SHORT}. - * @throws IllegalArgumentException if the FDL domain and api key are not set. Set FDL domain - * with {@link Builder#setDynamicLinkDomain(String)}. Ensure that google-services.json file - * is setup for the app if the api key is not set. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Task buildShortDynamicLink(@Suffix int suffix) { - verifyApiKey(); - builderParameters.putInt(Builder.KEY_SUFFIX, suffix); - return firebaseDynamicLinksImpl.createShortDynamicLink(builderParameters); - } - - private void verifyApiKey() { - if (builderParameters.getString(KEY_API_KEY) == null) { - throw new IllegalArgumentException("Missing API key. Set with setApiKey()."); - } - } - } - - /** - * Android parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class AndroidParameters { - - // AndroidInfo parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_ANDROID_PACKAGE_NAME = "apn"; - - /** @hide */ - @VisibleForTesting public static final String KEY_ANDROID_FALLBACK_LINK = "afl"; - - /** @hide */ - @VisibleForTesting public static final String KEY_ANDROID_MIN_VERSION_CODE = "amv"; - - final Bundle parameters; - - private AndroidParameters(Bundle parameters) { - this.parameters = parameters; - } - - /** - * Builder for Android parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class Builder { - - private final Bundle parameters; - - /** - * Create Android parameters builder, using the package name of the calling app. The app must - * be connected to your project from the Overview page of the Firebase console. - * - * @throws IllegalStateException if FirebaseApp has not been initialized correctly. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder() { - if (FirebaseApp.getInstance() == null) { - throw new IllegalStateException("FirebaseApp not initialized."); - } - parameters = new Bundle(); - parameters.putString( - KEY_ANDROID_PACKAGE_NAME, - FirebaseApp.getInstance().getApplicationContext().getPackageName()); - } - - /** - * Create Android parameters builder. - * - * @param packageName The package name of the Android app to use to open the link. The app - * must be connected to your project from the Overview page of the Firebase console. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder(@NonNull String packageName) { - parameters = new Bundle(); - parameters.putString(KEY_ANDROID_PACKAGE_NAME, packageName); - } - - /** - * Sets the link to open when the app isn't installed. Specify this to do something other than - * install your app from the Play Store when the app isn't installed, such as open the mobile - * web version of the content, or display a promotional page for your app. - * - * @param fallbackUrl The link to open on Android if the app is not installed. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public AndroidParameters.Builder setFallbackUrl(@NonNull Uri fallbackUrl) { - parameters.putParcelable(KEY_ANDROID_FALLBACK_LINK, fallbackUrl); - return this; - } - - /** - * Returns the link to open on Android if the app isn't installed. - * - * @return the link to open on Android if the app isn't installed. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Uri getFallbackUrl() { - Uri fallbackUrl = parameters.getParcelable(KEY_ANDROID_FALLBACK_LINK); - if (fallbackUrl == null) { - fallbackUrl = Uri.EMPTY; - } - return fallbackUrl; - } - - /** - * Sets the versionCode of the minimum version of your app that can open the link. - * - * @param minimumVersion The minimum version. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public AndroidParameters.Builder setMinimumVersion(int minimumVersion) { - parameters.putInt(KEY_ANDROID_MIN_VERSION_CODE, minimumVersion); - return this; - } - - /** - * Returns the minimum version of your app that can open the link. - * - * @return the minimum version of your app that can open the link. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public int getMinimumVersion() { - return parameters.getInt(KEY_ANDROID_MIN_VERSION_CODE); - } - - /** - * Build AndroidParameters for use with {@link - * DynamicLink.Builder#setAndroidParameters(AndroidParameters)}. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public AndroidParameters build() { - return new AndroidParameters(parameters); - } - } - } - - /** - * iOS parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class IosParameters { - - // IosInfo parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_IOS_BUNDLE_ID = "ibi"; - - /** @hide */ - @VisibleForTesting public static final String KEY_IOS_FALLBACK_LINK = "ifl"; - - /** @hide */ - @VisibleForTesting public static final String KEY_IOS_CUSTOM_SCHEME = "ius"; - - /** @hide */ - @VisibleForTesting public static final String KEY_IPAD_FALLBACK_LINK = "ipfl"; - - /** @hide */ - @VisibleForTesting public static final String KEY_IPAD_BUNDLE_ID = "ipbi"; - - /** @hide */ - @VisibleForTesting public static final String KEY_IOS_APP_STORE_ID = "isi"; - - /** @hide */ - @VisibleForTesting public static final String KEY_IOS_MINIMUM_VERSION = "imv"; - - final Bundle parameters; - - private IosParameters(Bundle parameters) { - this.parameters = parameters; - } - - /** - * Builder for iOS parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class Builder { - - private final Bundle parameters; - - /** - * Create iOS parameters builder. - * - * @param bundleId The bundle ID of the iOS app to use to open the link. The app must be - * connected to your project from the Overview page of the Firebase console. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder(@NonNull String bundleId) { - parameters = new Bundle(); - parameters.putString(KEY_IOS_BUNDLE_ID, bundleId); - } - - /** - * Sets the link to open when the app isn't installed. Specify this to do something other than - * install your app from the App Store when the app isn't installed, such as open the mobile - * web version of the content, or display a promotional page for your app. - * - * @param fallbackUrl The link to open on iOS if the app is not installed. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters.Builder setFallbackUrl(@NonNull Uri fallbackUrl) { - parameters.putParcelable(KEY_IOS_FALLBACK_LINK, fallbackUrl); - return this; - } - - /** - * Sets the app's custom URL scheme, if defined to be something other than your app's bundle - * ID. - * - * @param customScheme The app's custom URL scheme. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters.Builder setCustomScheme(@NonNull String customScheme) { - parameters.putString(KEY_IOS_CUSTOM_SCHEME, customScheme); - return this; - } - - /** - * Returns the app's custom URL scheme. - * - * @return the app's custom URL scheme. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getCustomScheme() { - return parameters.getString(KEY_IOS_CUSTOM_SCHEME, ""); - } - - /** - * Sets the link to open on iPads when the app isn't installed. Specify this to do something - * other than install your app from the App Store when the app isn't installed, such as open - * the web version of the content, or display a promotional page for your app. Overrides the - * fallback link set by {@link IosParameters.Builder#setFallbackUrl(Uri)} on iPad. - * - * @param fallbackUrl The link to open on iPad if the app is not installed. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters.Builder setIpadFallbackUrl(@NonNull Uri fallbackUrl) { - parameters.putParcelable(KEY_IPAD_FALLBACK_LINK, fallbackUrl); - return this; - } - - /** - * Returns the link to open on iPad if the app is not installed. - * - * @return the link to open on iPad if the app is not installed. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Uri getIpadFallbackUrl() { - Uri fallbackUrl = parameters.getParcelable(KEY_IPAD_FALLBACK_LINK); - if (fallbackUrl == null) { - fallbackUrl = Uri.EMPTY; - } - return fallbackUrl; - } - - /** - * Sets the bundle ID of the iOS app to use on iPads to open the link. The app must be - * connected to your project from the Overview page of the Firebase console. - * - * @param bundleId The iPad bundle ID of the app. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters.Builder setIpadBundleId(@NonNull String bundleId) { - parameters.putString(KEY_IPAD_BUNDLE_ID, bundleId); - return this; - } - - /** - * Returns the iPad bundle ID of the app. - * - * @return the iPad bundle ID of the app. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getIpadBundleId() { - return parameters.getString(KEY_IPAD_BUNDLE_ID, ""); - } - - /** - * Sets the App Store ID, used to send users to the App Store when the app isn't installed. - * - * @param appStoreId The App Store ID. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters.Builder setAppStoreId(@NonNull String appStoreId) { - parameters.putString(KEY_IOS_APP_STORE_ID, appStoreId); - return this; - } - - /** - * Returns the App Store ID, used to send users to the App Store when the app isn't installed - * - * @return the App Store ID, used to send users to the App Store when the app isn't installed. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - * d. - */ - @NonNull - @Deprecated - public String getAppStoreId() { - return parameters.getString(KEY_IOS_APP_STORE_ID, ""); - } - - /** - * Sets the minimum version of your app that can open the link. - * - * @param minimumVersion The minimum version. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters.Builder setMinimumVersion(@NonNull String minimumVersion) { - parameters.putString(KEY_IOS_MINIMUM_VERSION, minimumVersion); - return this; - } - - /** - * Returns the minimum version of your app that can open the link. - * - * @return the minimum version of your app that can open the link. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getMinimumVersion() { - return parameters.getString(KEY_IOS_MINIMUM_VERSION, ""); - } - - /** - * Build IosParameters for use with {@link - * DynamicLink.Builder#setIosParameters(IosParameters)}. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public IosParameters build() { - return new IosParameters(parameters); - } - } - } - - /** - * Google Analytics parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class GoogleAnalyticsParameters { - - // GooglePlayAnalytics parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_UTM_CAMPAIGN = "utm_campaign"; - - /** @hide */ - @VisibleForTesting public static final String KEY_UTM_SOURCE = "utm_source"; - - /** @hide */ - @VisibleForTesting public static final String KEY_UTM_MEDIUM = "utm_medium"; - - /** @hide */ - @VisibleForTesting public static final String KEY_UTM_TERM = "utm_term"; - - /** @hide */ - @VisibleForTesting public static final String KEY_UTM_CONTENT = "utm_content"; - - Bundle parameters; - - private GoogleAnalyticsParameters(Bundle parameters) { - this.parameters = parameters; - } - - /** - * Builder for Google Analytics parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class Builder { - - private final Bundle parameters; - - /** - * Create Google Analytics parameters builder. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder() { - parameters = new Bundle(); - } - - /** - * Create Google Analytics parameters builder. - * - * @param source The campaign source; used to identify a search engine, newsletter, or other - * source. - * @param medium The campaign medium; used to identify a medium such as email or - * cost-per-click (cpc). - * @param campaign The campaign name; The individual campaign name, slogan, promo code, etc. - * for a product. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder(@NonNull String source, @NonNull String medium, @NonNull String campaign) { - parameters = new Bundle(); - parameters.putString(KEY_UTM_SOURCE, source); - parameters.putString(KEY_UTM_MEDIUM, medium); - parameters.putString(KEY_UTM_CAMPAIGN, campaign); - } - - /** - * Sets the campaign source. - * - * @param source The campaign source; used to identify a search engine, newsletter, or other - * source. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public GoogleAnalyticsParameters.Builder setSource(@NonNull String source) { - parameters.putString(KEY_UTM_SOURCE, source); - return this; - } - - /** - * Returns the campaign source. - * - * @return the campaign source - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getSource() { - return parameters.getString(KEY_UTM_SOURCE, ""); - } - - /** - * Sets the campaign medium. - * - * @param medium The campaign medium; used to identify a medium such as email or - * cost-per-click (cpc). - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public GoogleAnalyticsParameters.Builder setMedium(@NonNull String medium) { - parameters.putString(KEY_UTM_MEDIUM, medium); - return this; - } - - /** - * Returns the campaign medium. - * - * @return the campaign medium. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getMedium() { - return parameters.getString(KEY_UTM_MEDIUM, ""); - } - - /** - * Sets the campaign name. - * - * @param campaign The campaign name; The individual campaign name, slogan, promo code, etc. - * for a product. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public GoogleAnalyticsParameters.Builder setCampaign(@NonNull String campaign) { - parameters.putString(KEY_UTM_CAMPAIGN, campaign); - return this; - } - - /** - * Returns the campaign name. - * - * @return the campaign name. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getCampaign() { - return parameters.getString(KEY_UTM_CAMPAIGN, ""); - } - - /** - * Sets the campaign term. - * - * @param term The campaign term; used with paid search to supply the keywords for ads. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public GoogleAnalyticsParameters.Builder setTerm(@NonNull String term) { - parameters.putString(KEY_UTM_TERM, term); - return this; - } - - /** - * Returns the campaign term. - * - * @return the campaign term. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getTerm() { - return parameters.getString(KEY_UTM_TERM, ""); - } - - /** - * Sets the campaign content. - * - * @param content The campaign content; used for A/B testing and content-targeted ads to - * differentiate ads or links that point to the same URL. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public GoogleAnalyticsParameters.Builder setContent(@NonNull String content) { - parameters.putString(KEY_UTM_CONTENT, content); - return this; - } - - /** - * Returns the campaign content. - * - * @return the campaign content. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getContent() { - return parameters.getString(KEY_UTM_CONTENT, ""); - } - - /** - * Build GoogleAnalyticsParameters for use with {@link - * DynamicLink.Builder#setGoogleAnalyticsParameters(GoogleAnalyticsParameters)}. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public GoogleAnalyticsParameters build() { - return new GoogleAnalyticsParameters(parameters); - } - } - } - - /** - * iTunes Connect App Analytics parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class ItunesConnectAnalyticsParameters { - - // ITunesConnectAnalytics parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_ITUNES_CONNECT_PT = "pt"; - - /** @hide */ - @VisibleForTesting public static final String KEY_ITUNES_CONNECT_AT = "at"; - - /** @hide */ - @VisibleForTesting public static final String KEY_ITUNES_CONNECT_CT = "ct"; - - final Bundle parameters; - - private ItunesConnectAnalyticsParameters(Bundle parameters) { - this.parameters = parameters; - } - - /** - * Builder for iTunes Connect App Analytics parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class Builder { - - private final Bundle parameters; - - /** - * Create iTunes Connect App Analytics parameter builder. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder() { - parameters = new Bundle(); - } - - /** - * Sets the provider token. - * - * @param providerToken The provider token that enables analytics for Dynamic Links from - * within iTunes Connect. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public ItunesConnectAnalyticsParameters.Builder setProviderToken( - @NonNull String providerToken) { - parameters.putString(KEY_ITUNES_CONNECT_PT, providerToken); - return this; - } - - /** - * Returns the provider token. - * - * @return the provider token. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getProviderToken() { - return parameters.getString(KEY_ITUNES_CONNECT_PT, ""); - } - - /** - * Sets the affiliate token. - * - * @param affiliateToken The affiliate token used to create affiliate-coded links. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public ItunesConnectAnalyticsParameters.Builder setAffiliateToken( - @NonNull String affiliateToken) { - parameters.putString(KEY_ITUNES_CONNECT_AT, affiliateToken); - return this; - } - - /** - * Returns the affiliate token. - * - * @return the affiliate token. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getAffiliateToken() { - return parameters.getString(KEY_ITUNES_CONNECT_AT, ""); - } - - /** - * Sets the campaign token. - * - * @param campaignToken The campaign token that developers can add to any link in order to - * track sales from a specific marketing campaign. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public ItunesConnectAnalyticsParameters.Builder setCampaignToken( - @NonNull String campaignToken) { - parameters.putString(KEY_ITUNES_CONNECT_CT, campaignToken); - return this; - } - - /** - * Returns the campaign token. - * - * @return the campaign token. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getCampaignToken() { - return parameters.getString(KEY_ITUNES_CONNECT_CT, ""); - } - - /** - * Build ItunesConnectAnalyticsParameters for use with {@link - * DynamicLink.Builder#setItunesConnectAnalyticsParameters(ItunesConnectAnalyticsParameters)}. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public ItunesConnectAnalyticsParameters build() { - return new ItunesConnectAnalyticsParameters(parameters); - } - } - } - - /** - * Social meta-tag parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class SocialMetaTagParameters { - - // SocialMetaTagInfo parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_SOCIAL_TITLE = "st"; - - /** @hide */ - @VisibleForTesting public static final String KEY_SOCIAL_DESCRIPTION = "sd"; - - /** @hide */ - @VisibleForTesting public static final String KEY_SOCIAL_IMAGE_LINK = "si"; - - final Bundle parameters; - - private SocialMetaTagParameters(Bundle parameters) { - this.parameters = parameters; - } - - /** - * Builder for social meta-tag parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class Builder { - - private final Bundle parameters; - - /** - * Create social meta-tag parameter builder. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder() { - parameters = new Bundle(); - } - - /** - * Sets the meta-tag title. - * - * @param title The title to use when the Dynamic Link is shared in a social post. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public SocialMetaTagParameters.Builder setTitle(@NonNull String title) { - parameters.putString(KEY_SOCIAL_TITLE, title); - return this; - } - - /** - * Returns the meta-tag title. - * - * @return the meta-tag title. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getTitle() { - return parameters.getString(KEY_SOCIAL_TITLE, ""); - } - - /** - * Sets the meta-tag description. - * - * @param description The description to use when the Dynamic Link is shared in a social post. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public SocialMetaTagParameters.Builder setDescription(@NonNull String description) { - parameters.putString(KEY_SOCIAL_DESCRIPTION, description); - return this; - } - - /** - * Returns the meta-tag description. - * - * @return the meta-tag description. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public String getDescription() { - return parameters.getString(KEY_SOCIAL_DESCRIPTION, ""); - } - - /** - * Sets the meta-tag image link. - * - * @param imageUrl The URL to an image related to this link. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public SocialMetaTagParameters.Builder setImageUrl(@NonNull Uri imageUrl) { - parameters.putParcelable(KEY_SOCIAL_IMAGE_LINK, imageUrl); - return this; - } - - /** - * Returns the meta-tag image link. - * - * @return the meta-tag image link. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Uri getImageUrl() { - Uri imageUrl = parameters.getParcelable(KEY_SOCIAL_IMAGE_LINK); - if (imageUrl == null) { - imageUrl = Uri.EMPTY; - } - return imageUrl; - } - - /** - * Build SocialMetaTagParameters for use with {@link - * DynamicLink.Builder#setSocialMetaTagParameters(SocialMetaTagParameters)}. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public SocialMetaTagParameters build() { - return new SocialMetaTagParameters(parameters); - } - } - } - - /** - * Navigation info parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class NavigationInfoParameters { - - // NavigationInfo parameters. - /** @hide */ - @VisibleForTesting public static final String KEY_FORCED_REDIRECT = "efr"; - - final Bundle parameters; - - private NavigationInfoParameters(Bundle parameters) { - this.parameters = parameters; - } - - /** - * Builder for navigation info parameters. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public static final class Builder { - - private final Bundle parameters; - - /** - * Create navigation info parameter builder. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public Builder() { - parameters = new Bundle(); - } - - /** - * Sets whether to enable force redirecting or going to the app preview page. Defaults to - * false. - * - * @param forcedRedirectEnabled If true, app preview page will be disabled and there will be a - * redirect to the FDL. If false, go to the app preview page. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public NavigationInfoParameters.Builder setForcedRedirectEnabled( - boolean forcedRedirectEnabled) { - parameters.putInt(KEY_FORCED_REDIRECT, forcedRedirectEnabled ? 1 : 0); - return this; - } - - public boolean getForcedRedirectEnabled() { - return parameters.getInt(KEY_FORCED_REDIRECT) == 1; - } - - /** - * Build NavigationInfoParameters for use with {@link - * DynamicLink.Builder#setNavigationInfoParameters(NavigationInfoParameters)}. - * - * @deprecated - */ - @NonNull - @Deprecated - public NavigationInfoParameters build() { - return new NavigationInfoParameters(parameters); - } - } - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinks.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinks.java deleted file mode 100644 index 785925f69bf..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinks.java +++ /dev/null @@ -1,163 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.FirebaseApp; - -/** - * Provides access to dynamic links that are received by an app at launch. - * - *

When a dynamic link is clicked, the app is launched, or if the app is not yet installed, the - * user is directed to the Play Store to install and launch the app. In both cases the dynamic link - * made available to the app using {@link #getDynamicLink(Intent)}.
- * An {@link android.content.IntentFilter} for the deeplink can also be used to launch the app - * directly into a targeted {@link android.app.Activity} or otherwise will start in the main launch - * Activity. - * - *

Dynamic link data returned from {@link #getDynamicLink(Intent)} can be accessed using the - * {@link PendingDynamicLinkData} class. - * - *

Android App Links - * can also be used to launch the app with dynamic links by registering to handle your Dynamic Links - * in your app. The guide for setting up your app to receive Firebase Dynamic Links as an App Link - * can be found on the Android Firebase Dynamic - * Links site. - * - *

Dynamic link data is available from the app launch intent. This data may include data for - * dynamic link extensions such as app invites. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ -@Deprecated -public abstract class FirebaseDynamicLinks { - - /** - * Returns an instance of {@link FirebaseDynamicLinks}. - * - *

The default {@link FirebaseApp} instance must have been initialized before this function is - * called. See - * FirebaseApp. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public static synchronized FirebaseDynamicLinks getInstance() { - return getInstance(FirebaseApp.getInstance()); - } - - /** - * Returns an instance of {@link FirebaseDynamicLinks} for the provided firebaseApp. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public static synchronized FirebaseDynamicLinks getInstance(@NonNull FirebaseApp firebaseApp) { - return firebaseApp.get(FirebaseDynamicLinks.class); - } - - /** - * Determine if the app has a pending dynamic link and provide access to the dynamic link - * parameters. A pending dynamic link may have been previously captured when a user clicked on a - * dynamic link, or may be present in the intent. - * - *

When a dynamic link is clicked by the user, in most cases it is captured when clicked and - * stored until accessed by {@link #getDynamicLink(Intent)} and returned as the {@link - * PendingDynamicLinkData} of the {@link Task}. If the dynamic link was not captured, as is the - * case when App Links launches the app, then the dynamic link is provided in the {@link - * Intent#getData()}. The intent data is then processed to retrieve the dynamic link data. If the - * dynamic links is both captured and is present in the intent, then the captured data will take - * precedence. The captured data will be removed after first access. - * - *

The intent parameter should be the intent that launched the application, or can be null if - * the intent does not include the dynamic link. A non-null intent is necessary only when the app - * is launched directly using the dynamic link, such as when using App Links. The app must - * configure an {@link android.content.IntentFilter} to override the default capture processing - * when the link is clicked. - * - *

In the callback the {@link PendingDynamicLinkData} is returned in {@link - * Task#addOnSuccessListener(OnSuccessListener)} or {@link Task#addOnCompleteListener(Activity, - * OnCompleteListener)} which returns the most recently clicked dynamic link, or null if a dynamic - * link was not pending as captured data or in the intent. - * - *

If processing could not be completed due to an error, then {@link OnFailureListener} will be - * called. Notice that in the case a pending dynamic link is not present, then {@link - * Task#isSuccessful()} will be true and the returned {@link PendingDynamicLinkData} will be null - * as this is normal processing and not an error condition. - * - *

If a dynamic link, the call will also send FirebaseAnalytics dynamic link event. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public abstract Task getDynamicLink(@Nullable Intent intent); - - /** - * Determine if the app has a pending dynamic link and provide access to the dynamic link - * parameters. A pending dynamic link may have been previously captured when a user clicked on a - * dynamic link, or may be present in the dynamicLinkUri parameter. If both are present, the - * previously captured dynamic link will take precedence. The captured data will be removed after - * first access. - * - *

This method provides the same functionality as {@link #getDynamicLink(Intent)} except the - * Uri is provided in place of the {@link Intent}. - * - * @param dynamicLinkUri - A uri that may be a dynamic link. - * @return Task where {@link Task#isSuccessful()} is true when processing is completed - * successfully and either a dynamic link is returned, or null if a dynamic link is not - * previously captured or is in the Uri. - *

{@link Task#isSuccessful()} will only be false when a processing error occurs. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public abstract Task getDynamicLink(@NonNull Uri dynamicLinkUri); - - /** - * Create a long or short Dynamic Link. - * - * @return Builder to create the Dynamic Link. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public abstract DynamicLink.Builder createDynamicLink(); -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinks.kt b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinks.kt deleted file mode 100644 index 8884dcd8633..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinks.kt +++ /dev/null @@ -1,196 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.dynamiclinks - -import androidx.annotation.Keep -import com.google.android.gms.tasks.Task -import com.google.firebase.Firebase -import com.google.firebase.FirebaseApp -import com.google.firebase.components.Component -import com.google.firebase.components.ComponentRegistrar -import java.lang.Deprecated - -/** Returns the [FirebaseDynamicLinks] instance of the default [FirebaseApp]. */ -@get:Deprecated -val Firebase.dynamicLinks: FirebaseDynamicLinks - get() = FirebaseDynamicLinks.getInstance() - -/** Returns the [FirebaseDynamicLinks] instance of a given [FirebaseApp]. */ -@Deprecated -fun Firebase.dynamicLinks(app: FirebaseApp): FirebaseDynamicLinks { - return FirebaseDynamicLinks.getInstance(app) -} - -/** - * Creates a [DynamicLink.AndroidParameters] object initialized using the [init] function and sets - * it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.androidParameters(init: DynamicLink.AndroidParameters.Builder.() -> Unit) { - val builder = DynamicLink.AndroidParameters.Builder() - builder.init() - setAndroidParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.AndroidParameters] object initialized with the specified [packageName] and - * using the [init] function and sets it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.androidParameters( - packageName: String, - init: DynamicLink.AndroidParameters.Builder.() -> Unit -) { - val builder = DynamicLink.AndroidParameters.Builder(packageName) - builder.init() - setAndroidParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.IosParameters] object initialized with the specified [bundleId] and using - * the [init] function and sets it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.iosParameters( - bundleId: String, - init: DynamicLink.IosParameters.Builder.() -> Unit -) { - val builder = DynamicLink.IosParameters.Builder(bundleId) - builder.init() - setIosParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.GoogleAnalyticsParameters] object initialized using the [init] function - * and sets it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.googleAnalyticsParameters( - init: DynamicLink.GoogleAnalyticsParameters.Builder.() -> Unit -) { - val builder = DynamicLink.GoogleAnalyticsParameters.Builder() - builder.init() - setGoogleAnalyticsParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.GoogleAnalyticsParameters] object initialized with the specified [source], - * [medium], [campaign] and using the [init] function and sets it to the [DynamicLink.Builder]. - */ -@Deprecated -fun DynamicLink.Builder.googleAnalyticsParameters( - source: String, - medium: String, - campaign: String, - init: DynamicLink.GoogleAnalyticsParameters.Builder.() -> Unit -) { - val builder = DynamicLink.GoogleAnalyticsParameters.Builder(source, medium, campaign) - builder.init() - setGoogleAnalyticsParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.ItunesConnectAnalyticsParameters] object initialized using the [init] - * function and sets it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.itunesConnectAnalyticsParameters( - init: DynamicLink.ItunesConnectAnalyticsParameters.Builder.() -> Unit -) { - val builder = DynamicLink.ItunesConnectAnalyticsParameters.Builder() - builder.init() - setItunesConnectAnalyticsParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.SocialMetaTagParameters] object initialized using the [init] function and - * sets it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.socialMetaTagParameters( - init: DynamicLink.SocialMetaTagParameters.Builder.() -> Unit -) { - val builder = DynamicLink.SocialMetaTagParameters.Builder() - builder.init() - setSocialMetaTagParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.NavigationInfoParameters] object initialized using the [init] function and - * sets it to the [DynamicLink.Builder] - */ -@Deprecated -fun DynamicLink.Builder.navigationInfoParameters( - init: DynamicLink.NavigationInfoParameters.Builder.() -> Unit -) { - val builder = DynamicLink.NavigationInfoParameters.Builder() - builder.init() - setNavigationInfoParameters(builder.build()) -} - -/** Creates a [DynamicLink] object initialized using the [init] function. */ -@Deprecated -fun FirebaseDynamicLinks.dynamicLink(init: DynamicLink.Builder.() -> Unit): DynamicLink { - val builder = FirebaseDynamicLinks.getInstance().createDynamicLink() - builder.init() - return builder.buildDynamicLink() -} - -/** Creates a [ShortDynamicLink] object initialized using the [init] function. */ -@Deprecated -fun FirebaseDynamicLinks.shortLinkAsync( - init: DynamicLink.Builder.() -> Unit -): Task { - val builder = FirebaseDynamicLinks.getInstance().createDynamicLink() - builder.init() - return builder.buildShortDynamicLink() -} - -/** Creates a [ShortDynamicLink] object initialized using the [init] function. */ -@Deprecated -fun FirebaseDynamicLinks.shortLinkAsync( - suffix: Int, - init: DynamicLink.Builder.() -> Unit -): Task { - val builder = FirebaseDynamicLinks.getInstance().createDynamicLink() - builder.init() - return builder.buildShortDynamicLink(suffix) -} - -/** Destructuring declaration for [ShortDynamicLink] to provide shortLink. */ -@Deprecated operator fun ShortDynamicLink.component1() = shortLink - -/** Destructuring declaration for [ShortDynamicLink] to provide previewLink. */ -@Deprecated operator fun ShortDynamicLink.component2() = previewLink - -/** Destructuring declaration for [ShortDynamicLink] to provide warnings. */ -@Deprecated operator fun ShortDynamicLink.component3(): List = warnings - -/** Destructuring declaration for [PendingDynamicLinkData] to provide link. */ -@Deprecated operator fun PendingDynamicLinkData.component1() = link - -/** Destructuring declaration for [PendingDynamicLinkData] to provide minimumAppVersion. */ -@Deprecated operator fun PendingDynamicLinkData.component2() = minimumAppVersion - -/** Destructuring declaration for [PendingDynamicLinkData] to provide clickTimestamp. */ -@Deprecated operator fun PendingDynamicLinkData.component3() = clickTimestamp - -/** @suppress */ -@Keep -class FirebaseDynamicLinksKtxRegistrar : ComponentRegistrar { - override fun getComponents(): List> = listOf() -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/PendingDynamicLinkData.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/PendingDynamicLinkData.java deleted file mode 100644 index 787ba56ed2f..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/PendingDynamicLinkData.java +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager.NameNotFoundException; -import android.net.Uri; -import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; -import com.google.android.gms.common.GooglePlayServicesUtil; -import com.google.android.gms.common.annotation.KeepForSdk; -import com.google.android.gms.common.util.DefaultClock; -import com.google.firebase.dynamiclinks.internal.DynamicLinkData; -import com.google.firebase.dynamiclinks.internal.DynamicLinkUTMParams; - -/** - * Provides accessor methods to dynamic links data. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ -@Deprecated -public class PendingDynamicLinkData { - - @Nullable private final DynamicLinkUTMParams dynamicLinkUTMParams; - @Nullable private final DynamicLinkData dynamicLinkData; - - /** - * Create a dynamic link from parameters. - * - * @hide - */ - @KeepForSdk - @VisibleForTesting - public PendingDynamicLinkData(DynamicLinkData dynamicLinkData) { - if (dynamicLinkData == null) { - this.dynamicLinkData = null; - this.dynamicLinkUTMParams = null; - return; - } - if (dynamicLinkData.getClickTimestamp() == 0L) { - long now = DefaultClock.getInstance().currentTimeMillis(); - dynamicLinkData.setClickTimestamp(now); - } - this.dynamicLinkData = dynamicLinkData; - this.dynamicLinkUTMParams = new DynamicLinkUTMParams(dynamicLinkData); - } - - /** - * Create a PendingDynamicLinkData which can be used for testing. - * - * @param deepLink dynamic link deep link, can be null. - * @param minVersion app minimum version. 0 if no minimum version required. - * @param clickTimestamp timestamp of when the dynamic link was clicked. If zero, will be current - * time. - */ - protected PendingDynamicLinkData( - @Nullable String deepLink, int minVersion, long clickTimestamp, @Nullable Uri redirectUrl) { - dynamicLinkData = - new DynamicLinkData(null, deepLink, minVersion, clickTimestamp, null, redirectUrl); - dynamicLinkUTMParams = new DynamicLinkUTMParams(dynamicLinkData); - } - - /** - * Returns the {@link Bundle} so that 1P dynamic links extensions can access extension data. The - * data is stored bundle with keys defined by the extension. The bundle is shared with all - * extensions, so the keys should be unique using the package name of the extension to define the - * namespace. - * - * @return A bundle with all extensions data. - * @hide - */ - @KeepForSdk - @Nullable - public Bundle getExtensions() { - if (dynamicLinkData == null) { - return new Bundle(); - } - return dynamicLinkData.getExtensionBundle(); - } - - /** - * Returns the link parameter of the Firebase Dynamic Link. - * - *

This link will be set as data in the launch Intent, see {@link Intent#setData(Uri)}, which - * will match {@link android.content.IntentFilter} to deep link into the app. - * - * @return The deep link if it exists, null otherwise. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Nullable - @Deprecated - public Uri getLink() { - if (dynamicLinkData == null) { - return null; - } - String deepLink = dynamicLinkData.getDeepLink(); - if (deepLink != null) { - return Uri.parse(deepLink); - } - return null; - } - - /** - * Returns the {@link Bundle} which contains utm parameters associated with the Firebase Dynamic - * Link. - * - * @return Bundle of utm parameters associated with firebase dynamic link. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - public Bundle getUtmParameters() { - if (dynamicLinkUTMParams == null) { - return new Bundle(); - } - - return dynamicLinkUTMParams.asBundle(); - } - - /** - * Gets the minimum app version requested to process the Firebase Dynamic Link that can be - * compared directly with {@link android.content.pm.PackageInfo#versionCode}. If the minimum - * version code is higher than the installed app version code, the app can upgrade using {@link - * #getUpdateAppIntent(Context)}. - * - * @return minimum version code set on the dynamic link, or 0 if not specified. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public int getMinimumAppVersion() { - if (dynamicLinkData == null) { - return 0; - } - return dynamicLinkData.getMinVersion(); - } - - /** - * Gets the time that the user clicked on the Firebase Dynamic Link. This can be used to determine - * the amount of time that has passed since the user selected the link until the app is launched. - * - * @return The number of milliseconds that have elapsed since January 1, 1970. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - public long getClickTimestamp() { - if (dynamicLinkData == null) { - return 0L; - } - return dynamicLinkData.getClickTimestamp(); - } - - /** - * Gets the redirect url, which is used as the alternative to opening the app. This url may - * install the app or go to an app specific website. - * - * @return Url that can be used to create an intent to launch an activity. - * @hide - */ - @VisibleForTesting - @Nullable - public Uri getRedirectUrl() { - if (dynamicLinkData == null) { - return null; - } - return dynamicLinkData.getRedirectUrl(); - } - - /** - * Gets the intent to update the app to the version in the Play Store. - * - *

An intent is returned to be used as a parameter to {@link - * android.app.Activity#startActivity(Intent)} to launch the Play Store update flow for the app. - * After update, if the user re-launches the app from the Play Store by selecting the displayed - * Continue button then the deep link will be set as the data in the re-launch intent and will - * launch any Activity with an {@link android.content.IntentFilter} that matches the deeplink. - * This is the same as the new install flow. The dynamic link returned during initial launch will - * not be available from {@link FirebaseDynamicLinks#getDynamicLink(Intent)} during the update - * re-launch. - * - *

If the minimum version required by the dynamic link is not greater than the currently - * installed version, then null is returned. - * - * @return - An {@link Intent} that will launch the Play Store to update the app, or null if the - * dynamic link minimum version code is not greater than the installed version. - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Nullable - @Deprecated - public Intent getUpdateAppIntent(@NonNull Context context) { - int versionCode; - // zero indicates any version is accepted. - if (getMinimumAppVersion() == 0) { - return null; - } - try { - versionCode = - context - .getPackageManager() - .getPackageInfo(context.getApplicationContext().getPackageName(), 0) - .versionCode; - } catch (NameNotFoundException e) { - // Unexpected exception, so return null indicating don't update. - return null; - } - if (versionCode < getMinimumAppVersion() && getRedirectUrl() != null) { - return new Intent(Intent.ACTION_VIEW) - .setData(getRedirectUrl()) - .setPackage(GooglePlayServicesUtil.GOOGLE_PLAY_STORE_PACKAGE); - } - return null; - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/ShortDynamicLink.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/ShortDynamicLink.java deleted file mode 100644 index 48d9b653cd2..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/ShortDynamicLink.java +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import android.net.Uri; -import androidx.annotation.IntDef; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.firebase.dynamiclinks.DynamicLink.Builder; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.List; - -/** - * Response from {@link Builder#buildShortDynamicLink()} that returns the shortened Dynamic Link, - * link flow chart, and warnings from the requested Dynamic Link. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ -@Deprecated -public interface ShortDynamicLink { - - /** - * Gets the short Dynamic Link value. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Nullable - @Deprecated - Uri getShortLink(); - - /** - * Gets the preview link to show the link flow chart. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Nullable - @Deprecated - Uri getPreviewLink(); - - /** - * Gets information about potential warnings on link creation. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @NonNull - @Deprecated - List getWarnings(); - - /** Path generation option for short Dynamic Link length */ - @Retention(RetentionPolicy.SOURCE) - @IntDef({Suffix.UNGUESSABLE, Suffix.SHORT}) - @interface Suffix { - - /** - * Shorten the path to an unguessable string. Such strings are created by base62-encoding - * randomly generated 96-bit numbers, and consist of 17 alphanumeric characters. Use unguessable - * strings to prevent your Dynamic Links from being crawled, which can potentially expose - * sensitive information. - */ - int UNGUESSABLE = 1; - - /** - * Shorten the path to a string that is only as long as needed to be unique, with a minimum - * length of 4 characters. Use this method if sensitive information would not be exposed if a - * short Dynamic Link URL were guessed. - */ - int SHORT = 2; - } - - /** - * Information about potential warnings on short Dynamic Link creation. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Deprecated - interface Warning { - - /** - * Gets the warning code. - * - * @deprecated See {@link #getMessage()} for more information on this warning and how to correct - * it. - */ - @Deprecated - @Nullable - String getCode(); - - /** - * Gets the warning message to help developers improve their requests. - * - * @deprecated Firebase Dynamic Links is deprecated and should not be used in new projects. The - * service will shut down on August 25, 2025. For more information, see - * Dynamic Links deprecation documentation. - */ - @Nullable - @Deprecated - String getMessage(); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkData.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkData.java deleted file mode 100644 index 55ed19f9fec..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkData.java +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.net.Uri; -import android.os.Bundle; -import android.os.Parcel; -import androidx.annotation.Nullable; -import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; -import com.google.android.gms.common.internal.safeparcel.SafeParcelable; - -/** */ -@SafeParcelable.Class(creator = "DynamicLinkDataCreator") -public class DynamicLinkData extends AbstractSafeParcelable { - - @SafeParcelable.Field(id = 1, getter = "getDynamicLink") - @Nullable - private String dynamicLink; - - @SafeParcelable.Field(id = 2, getter = "getDeepLink") - @Nullable - private String deepLink; - - @SafeParcelable.Field(id = 3, getter = "getMinVersion") - private int minVersion; - - @SafeParcelable.Field(id = 4, getter = "getClickTimestamp") - private long clickTimestamp = 0L; - - @SafeParcelable.Field(id = 5, getter = "getExtensionBundle") - @Nullable - private Bundle extensionBundle = null; - - @SafeParcelable.Field(id = 6, getter = "getRedirectUrl") - @Nullable - private Uri redirectUrl; - - @Nullable - public String getDynamicLink() { - return dynamicLink; - } - - public void setDynamicLink(String dynamicLink) { - this.dynamicLink = dynamicLink; - } - - @Nullable - public String getDeepLink() { - return deepLink; - } - - public void setDeepLink(String deepLink) { - this.deepLink = deepLink; - } - - public int getMinVersion() { - return minVersion; - } - - public void setMinVersion(int minVersion) { - this.minVersion = minVersion; - } - - public long getClickTimestamp() { - return clickTimestamp; - } - - public void setClickTimestamp(long timestamp) { - clickTimestamp = timestamp; - } - - public Bundle getExtensionBundle() { - return (extensionBundle == null) ? new Bundle() : extensionBundle; - } - - public void setRedirectUrl(Uri redirectUrl) { - this.redirectUrl = redirectUrl; - } - - @Nullable - public Uri getRedirectUrl() { - return redirectUrl; - } - - /** - * Replace the existing extension data with the bundle. Clients should use {@link - * #getExtensionBundle()} to retrieve the current values, add new values, the replace the bundle - * with the updated values. - * - * @param bundle - */ - public void setExtensionData(Bundle bundle) { - extensionBundle = bundle; - } - - public static final Creator CREATOR = new DynamicLinkDataCreator(); - - @SafeParcelable.Constructor - public DynamicLinkData( - @Nullable @Param(id = 1) String dynamicLink, - @Nullable @Param(id = 2) String deepLink, - @Param(id = 3) int minVersion, - @Param(id = 4) long clickTimestamp, - @Nullable @Param(id = 5) Bundle extensions, - @Nullable @Param(id = 6) Uri redirectUrl) { - this.dynamicLink = dynamicLink; - this.deepLink = deepLink; - this.minVersion = minVersion; - this.clickTimestamp = clickTimestamp; - extensionBundle = extensions; - this.redirectUrl = redirectUrl; - } - - @SuppressWarnings("static-access") - @Override - public void writeToParcel(Parcel dest, int flags) { - DynamicLinkDataCreator.writeToParcel(this, dest, flags); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkDataCreator.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkDataCreator.java deleted file mode 100644 index f539780b63f..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkDataCreator.java +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.net.Uri; -import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; -import com.google.android.gms.common.internal.safeparcel.SafeParcelReader; -import com.google.android.gms.common.internal.safeparcel.SafeParcelWriter; - -// Autogenerated, do not edit -public class DynamicLinkDataCreator implements Parcelable.Creator { - public static final int CONTENT_DESCRIPTION = 0; - - public DynamicLinkDataCreator() {} - - public DynamicLinkData createFromParcel(Parcel parcel) { - int end = SafeParcelReader.validateObjectHeader(parcel); - - String _local_safe_0a1b_dynamicLink = null; - - String _local_safe_0a1b_deepLink = null; - - int _local_safe_0a1b_minVersion = 0; - - long _local_safe_0a1b_clickTimestamp = 0L; - - Bundle _local_safe_0a1b_extensionBundle = null; - - Uri _local_safe_0a1b_redirectUrl = null; - - while (parcel.dataPosition() < end) { - int header = SafeParcelReader.readHeader(parcel); - switch (SafeParcelReader.getFieldId(header)) { - case 1: - _local_safe_0a1b_dynamicLink = SafeParcelReader.createString(parcel, header); - - break; - - case 2: - _local_safe_0a1b_deepLink = SafeParcelReader.createString(parcel, header); - - break; - - case 3: - _local_safe_0a1b_minVersion = SafeParcelReader.readInt(parcel, header); - - break; - - case 4: - _local_safe_0a1b_clickTimestamp = SafeParcelReader.readLong(parcel, header); - - break; - - case 5: - _local_safe_0a1b_extensionBundle = SafeParcelReader.createBundle(parcel, header); - - break; - - case 6: - _local_safe_0a1b_redirectUrl = - (Uri) SafeParcelReader.createParcelable(parcel, header, Uri.CREATOR); - - break; - - default: - SafeParcelReader.skipUnknownField(parcel, header); - } - } - - SafeParcelReader.ensureAtEnd(parcel, end); - - DynamicLinkData obj = - new DynamicLinkData( - _local_safe_0a1b_dynamicLink, - _local_safe_0a1b_deepLink, - _local_safe_0a1b_minVersion, - _local_safe_0a1b_clickTimestamp, - _local_safe_0a1b_extensionBundle, - _local_safe_0a1b_redirectUrl); - - return obj; - } - - public DynamicLinkData[] newArray(int size) { - return new DynamicLinkData[size]; - } - - static void writeToParcel(DynamicLinkData obj, Parcel parcel, int flags) { - int myStart = SafeParcelWriter.beginObjectHeader(parcel); - - SafeParcelWriter.writeString(parcel, 1, obj.getDynamicLink(), false); - - SafeParcelWriter.writeString(parcel, 2, obj.getDeepLink(), false); - - SafeParcelWriter.writeInt(parcel, 3, obj.getMinVersion()); - - SafeParcelWriter.writeLong(parcel, 4, obj.getClickTimestamp()); - - SafeParcelWriter.writeBundle(parcel, 5, obj.getExtensionBundle(), false); - - SafeParcelWriter.writeParcelable(parcel, 6, obj.getRedirectUrl(), flags, false); - - SafeParcelWriter.finishObjectHeader(parcel, myStart); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkUTMParams.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkUTMParams.java deleted file mode 100644 index afd7865efd6..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinkUTMParams.java +++ /dev/null @@ -1,96 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.os.Bundle; -import android.text.TextUtils; -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; - -/** - * Class to extract UTM parameters from firebase dynamic link. - * - * @hide - */ -public class DynamicLinkUTMParams { - - @VisibleForTesting public static final String KEY_CAMPAIGN_BUNDLE = "_cmp"; - @VisibleForTesting public static final String KEY_SCION_DATA_BUNDLE = "scionData"; - @VisibleForTesting public static final String KEY_MEDIUM = "medium"; - @VisibleForTesting public static final String KEY_SOURCE = "source"; - @VisibleForTesting public static final String KEY_CAMPAIGN = "campaign"; - - /** Key to retrieve utm_medium from utm params bundle returned by {@link #asBundle()} */ - public static final String KEY_UTM_MEDIUM = "utm_medium"; - - /** Key to retrieve utm_source from utm params bundle returned by {@link #asBundle()} */ - public static final String KEY_UTM_SOURCE = "utm_source"; - - /** Key to retrieve utm_campaign from utm params bundle returned by {@link #asBundle()} */ - public static final String KEY_UTM_CAMPAIGN = "utm_campaign"; - - private final DynamicLinkData dynamicLinkData; - @NonNull private final Bundle utmParamsBundle; - - public DynamicLinkUTMParams(DynamicLinkData dynamicLinkData) { - this.dynamicLinkData = dynamicLinkData; - this.utmParamsBundle = initUTMParamsBundle(dynamicLinkData); - } - - @NonNull - public Bundle asBundle() { - return new Bundle(utmParamsBundle); - } - - @NonNull - private static Bundle initUTMParamsBundle(DynamicLinkData dynamicLinkData) { - Bundle bundle = new Bundle(); - if (dynamicLinkData == null || dynamicLinkData.getExtensionBundle() == null) { - return bundle; - } - - Bundle scionBundle = dynamicLinkData.getExtensionBundle().getBundle(KEY_SCION_DATA_BUNDLE); - - if (scionBundle == null) { - return bundle; - } - - Bundle campaignBundle = scionBundle.getBundle(KEY_CAMPAIGN_BUNDLE); - if (campaignBundle == null) { - return bundle; - } - - checkAndAdd(KEY_MEDIUM, KEY_UTM_MEDIUM, campaignBundle, bundle); - checkAndAdd(KEY_SOURCE, KEY_UTM_SOURCE, campaignBundle, bundle); - checkAndAdd(KEY_CAMPAIGN, KEY_UTM_CAMPAIGN, campaignBundle, bundle); - - return bundle; - } - - /* - * Checks and adds the value from source bundle to the destination bundle based on the source - * key and destination key. - */ - private static void checkAndAdd( - @NonNull String sourceKey, - @NonNull String destKey, - @NonNull Bundle source, - @NonNull Bundle dest) { - String value = source.getString(sourceKey); - if (!TextUtils.isEmpty(value)) { - dest.putString(destKey, value); - } - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinksApi.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinksApi.java deleted file mode 100644 index 5883417b1ad..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinksApi.java +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.content.Context; -import android.os.Looper; -import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; -import com.google.android.gms.common.api.Api; -import com.google.android.gms.common.api.Api.ApiOptions; -import com.google.android.gms.common.api.Api.ApiOptions.NoOptions; -import com.google.android.gms.common.api.GoogleApi; -import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks; -import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener; -import com.google.android.gms.common.internal.ClientSettings; - -public class DynamicLinksApi extends GoogleApi { - - private static final Api.ClientKey CLIENT_KEY = - new Api.ClientKey(); - - private static final Api.AbstractClientBuilder CLIENT_BUILDER = - new Api.AbstractClientBuilder() { - @Override - public DynamicLinksClient buildClient( - Context context, - Looper looper, - ClientSettings commonSettings, - NoOptions apiOptions, - ConnectionCallbacks connectedListener, - OnConnectionFailedListener connectionFailedListener) { - return new DynamicLinksClient( - context, looper, commonSettings, connectedListener, connectionFailedListener); - } - }; - - static final Api API = - new Api("DynamicLinks.API", CLIENT_BUILDER, CLIENT_KEY); - - /** - * Use the main Looper for callbacks, otherwise the calling thread's Looper (if it has one) will - * be used, which is undesirable for two reasons: - * - *

1. Clients might accidentally wait on tasks in the same thread that created the - * FirebaseDynamicLinks object, thus blocking retries and creating a deadlock. 2. We want to be - * able to create the FirebaseDynamicLinks instance as a singleton object, so it should not depend - * on the state of the thread that happened to create it first. - * - *

Using the main Looper avoids these problems because it is always available, and it's - * accepted that no blocking operations should be done on it. See {@link - * com.google.firebase.appindexing.internal.FirebaseAppIndexImpl.FirebaseAppIndexClient} - */ - @VisibleForTesting - public DynamicLinksApi(@NonNull Context context) { - super(context, API, ApiOptions.NO_OPTIONS /* options */, Settings.DEFAULT_SETTINGS); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinksClient.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinksClient.java deleted file mode 100644 index 18936f7d286..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/DynamicLinksClient.java +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.content.Context; -import android.os.Bundle; -import android.os.IBinder; -import android.os.Looper; -import android.os.RemoteException; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import com.google.android.gms.common.api.GoogleApiClient; -import com.google.android.gms.common.internal.ClientSettings; -import com.google.android.gms.common.internal.GmsClient; - -/** GmsClient class for Dynamic Links. */ -public class DynamicLinksClient extends GmsClient { - - public static final String ACTION_START_SERVICE = - "com.google.firebase.dynamiclinks.service.START"; - public static final String SERVICE_DESCRIPTOR = - "com.google.firebase.dynamiclinks.internal.IDynamicLinksService"; - private static final int DYNAMIC_LINKS_API_VALUE = 131; - private static final int V17 = 12451000; - - public DynamicLinksClient( - Context context, - Looper looper, - ClientSettings clientSettings, - GoogleApiClient.ConnectionCallbacks connectedListener, - GoogleApiClient.OnConnectionFailedListener connectionFailedListener) { - super( - context, - looper, - DYNAMIC_LINKS_API_VALUE, - clientSettings, - connectedListener, - connectionFailedListener); - } - - @NonNull - @Override - protected String getStartServiceAction() { - return ACTION_START_SERVICE; - } - - @NonNull - @Override - protected String getServiceDescriptor() { - return SERVICE_DESCRIPTOR; - } - - @Nullable - @Override - protected IDynamicLinksService createServiceInterface(IBinder binder) { - return IDynamicLinksService.Stub.asInterface(binder); - } - - void getDynamicLink(IDynamicLinksCallbacks.Stub callback, @Nullable String dynamicLink) { - try { - getService().getDynamicLink(callback, dynamicLink); - } catch (RemoteException e) { - // client is dead. - } - } - - void createShortDynamicLink(IDynamicLinksCallbacks.Stub callback, Bundle parameters) { - try { - getService().createShortDynamicLink(callback, parameters); - } catch (RemoteException e) { - // client is dead. - } - } - - @Override - public int getMinApkVersion() { - // This should be compatible with the V17 .apk. Update this value IFF a newer .apk is required - // or an older version is now supported. Do _not_ use JAR_BUILD_VERSION_CODE as long as this - // code is shipped in the 3P SDK (which ships ~from head / dev and would not work with the head - // version of the .apk).. - return V17; - } - - @Override - public boolean usesClientTelemetry() { - return true; - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinkRegistrar.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinkRegistrar.java deleted file mode 100644 index d63fdce1b53..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinkRegistrar.java +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import androidx.annotation.Keep; -import com.google.android.gms.common.annotation.KeepForSdk; -import com.google.firebase.FirebaseApp; -import com.google.firebase.analytics.connector.AnalyticsConnector; -import com.google.firebase.components.Component; -import com.google.firebase.components.ComponentRegistrar; -import com.google.firebase.components.Dependency; -import com.google.firebase.dynamiclinks.BuildConfig; -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks; -import com.google.firebase.platforminfo.LibraryVersionComponent; -import java.util.Arrays; -import java.util.List; - -/** - * {@link ComponentRegistrar} for FirebaseDynamicLinks. - * - *

see go/firebase-components-android-integration-guide for more details - * - * @hide - */ -@KeepForSdk -@Keep -public final class FirebaseDynamicLinkRegistrar implements ComponentRegistrar { - private static final String LIBRARY_NAME = "fire-dl"; - - @Override - @Keep - public List> getComponents() { - Component firebaseDynamicLinks = - Component.builder(FirebaseDynamicLinks.class) - .name(LIBRARY_NAME) - .add(Dependency.required(FirebaseApp.class)) - .add(Dependency.optionalProvider(AnalyticsConnector.class)) - .factory( - container -> - new FirebaseDynamicLinksImpl( - container.get(FirebaseApp.class), - container.getProvider(AnalyticsConnector.class))) - .build(); // no need for eager init for the Internal component. - - return Arrays.asList( - firebaseDynamicLinks, - LibraryVersionComponent.create(LIBRARY_NAME, BuildConfig.VERSION_NAME)); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImpl.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImpl.java deleted file mode 100644 index fddcf585950..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImpl.java +++ /dev/null @@ -1,282 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.os.RemoteException; -import android.text.TextUtils; -import android.util.Log; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; -import com.google.android.gms.common.api.Api.ApiOptions.NoOptions; -import com.google.android.gms.common.api.GoogleApi; -import com.google.android.gms.common.api.Status; -import com.google.android.gms.common.api.internal.TaskApiCall; -import com.google.android.gms.common.api.internal.TaskUtil; -import com.google.android.gms.common.internal.Preconditions; -import com.google.android.gms.common.internal.safeparcel.SafeParcelableSerializer; -import com.google.android.gms.tasks.Task; -import com.google.android.gms.tasks.TaskCompletionSource; -import com.google.android.gms.tasks.Tasks; -import com.google.firebase.FirebaseApp; -import com.google.firebase.analytics.connector.AnalyticsConnector; -import com.google.firebase.dynamiclinks.DynamicLink; -import com.google.firebase.dynamiclinks.DynamicLink.Builder; -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks; -import com.google.firebase.dynamiclinks.PendingDynamicLinkData; -import com.google.firebase.dynamiclinks.ShortDynamicLink; -import com.google.firebase.inject.Provider; - -/** - * Implementation of FirebaseDynamicLinks that passes requests to the binder interface to gmscore. - */ -public class FirebaseDynamicLinksImpl extends FirebaseDynamicLinks { - - // Scion data stored as a Bundle of Bundles with the event name as the key to the params Bundle. - public static final String KEY_SCION_DATA = "scionData"; - public static final String EXTRA_DYNAMIC_LINK_DATA = - "com.google.firebase.dynamiclinks.DYNAMIC_LINK_DATA"; - - private static final String TAG = "FDL"; - - // Value must be kept in sync with analytics: AppMeasurement.FDL_ORIGIN - private static final String ANALYTICS_FDL_ORIGIN = "fdl"; - - private final GoogleApi googleApi; - - private final Provider analytics; - - private final FirebaseApp firebaseApp; - - public FirebaseDynamicLinksImpl(FirebaseApp firebaseApp, Provider analytics) { - this(new DynamicLinksApi(firebaseApp.getApplicationContext()), firebaseApp, analytics); - } - - // This overload exists to allow injecting a mock GoogleApi instance in tests. - @VisibleForTesting - public FirebaseDynamicLinksImpl( - GoogleApi googleApi, - FirebaseApp firebaseApp, - Provider analytics) { - this.googleApi = googleApi; - this.firebaseApp = Preconditions.checkNotNull(firebaseApp); - this.analytics = analytics; - - if (analytics.get() == null) { - // b/34217790: Try to get an instance of Analytics. This initializes Google Analytics - // if it is set up for the app, which sets up the association for the app and package name, - // allowing GmsCore to log FDL events on behalf of the app. - - // AppMeasurement was not found. This probably means that the app did not include - // the FirebaseAnalytics dependency. - Log.w( - TAG, - "FDL logging failed. Add a dependency for Firebase Analytics" - + " to your app to enable logging of Dynamic Link events."); - } - } - - public FirebaseApp getFirebaseApp() { - return firebaseApp; - } - - @Nullable - public PendingDynamicLinkData getPendingDynamicLinkData(@NonNull Intent intent) { - DynamicLinkData dynamicLinkData = - SafeParcelableSerializer.deserializeFromIntentExtra( - intent, EXTRA_DYNAMIC_LINK_DATA, DynamicLinkData.CREATOR); - return dynamicLinkData != null ? new PendingDynamicLinkData(dynamicLinkData) : null; - } - - @Override - public Task getDynamicLink(@Nullable final Intent intent) { - String dynamicLinkDataString = intent != null ? intent.getDataString() : null; - Task result = - googleApi.doWrite(new GetDynamicLinkImpl(analytics, dynamicLinkDataString)); - - if (intent != null) { - PendingDynamicLinkData pendingDynamicLinkData = getPendingDynamicLinkData(intent); - if (pendingDynamicLinkData != null) { - // DynamicLinkData included in the Intent, return it immediately and allow the Task to run - // in the background to do logging and mark the FDL as returned. - result = Tasks.forResult(pendingDynamicLinkData); - } - } - - return result; - } - - @Override - public Task getDynamicLink(@NonNull final Uri dynamicLinkUri) { - return googleApi.doWrite(new GetDynamicLinkImpl(analytics, dynamicLinkUri.toString())); - } - - @Override - public DynamicLink.Builder createDynamicLink() { - return new DynamicLink.Builder(this); - } - - public static Uri createDynamicLink(Bundle builderParameters) { - verifyDomainUriPrefix(builderParameters); - Uri longLink = builderParameters.getParcelable(Builder.KEY_DYNAMIC_LINK); - if (longLink == null) { - // Long link was not supplied, build the Dynamic Link from Dynamic Link parameters. - Uri.Builder builder = new Uri.Builder(); - String domainUriPrefix = - Preconditions.checkNotNull(builderParameters.getString(Builder.KEY_DOMAIN_URI_PREFIX)); - Uri uri = Uri.parse(domainUriPrefix); - builder.scheme(uri.getScheme()); - builder.authority(uri.getAuthority()); - builder.path(uri.getPath()); - Bundle fdlParameters = builderParameters.getBundle(Builder.KEY_DYNAMIC_LINK_PARAMETERS); - if (fdlParameters != null) { - for (String key : fdlParameters.keySet()) { - Object value = fdlParameters.get(key); - if (value != null) { - builder.appendQueryParameter(key, value.toString()); - } - } - } - longLink = builder.build(); - } - return longLink; - } - - public Task createShortDynamicLink(final Bundle builderParameters) { - verifyDomainUriPrefix(builderParameters); - return googleApi.doWrite(new CreateShortDynamicLinkImpl(builderParameters)); - } - - public static void verifyDomainUriPrefix(Bundle builderParameters) { - Uri longLink = builderParameters.getParcelable(Builder.KEY_DYNAMIC_LINK); - if (TextUtils.isEmpty(builderParameters.getString(Builder.KEY_DOMAIN_URI_PREFIX)) - && longLink == null) { - throw new IllegalArgumentException( - "FDL domain is missing. Set with setDomainUriPrefix() or setDynamicLinkDomain()."); - } - } - - static final class GetDynamicLinkImpl - extends TaskApiCall { - - @Nullable private final String dynamicLink; - private final Provider analytics; - - GetDynamicLinkImpl(Provider analytics, @Nullable String dynamicLink) { - super(null, false, FirebaseDynamicLinksImplConstants.GET_DYNAMIC_LINK_METHOD_KEY); - this.dynamicLink = dynamicLink; - this.analytics = analytics; - } - - @Override - protected void doExecute( - DynamicLinksClient clientImpl, - final TaskCompletionSource completionSource) - throws RemoteException { - clientImpl.getDynamicLink(new DynamicLinkCallbacks(analytics, completionSource), dynamicLink); - } - } - - static final class CreateShortDynamicLinkImpl - extends TaskApiCall { - - private final Bundle builderParameters; - - CreateShortDynamicLinkImpl(Bundle builderParameters) { - super(null, false, FirebaseDynamicLinksImplConstants.CREATE_SHORT_DYNAMIC_LINK_METHOD_KEY); - this.builderParameters = builderParameters; - } - - @Override - protected void doExecute( - DynamicLinksClient clientImpl, - final TaskCompletionSource completionSource) - throws RemoteException { - clientImpl.createShortDynamicLink( - new CreateShortDynamicLinkCallbacks(completionSource), builderParameters); - } - } - - static class AbstractDynamicLinkCallbacks extends IDynamicLinksCallbacks.Stub { - - @Override - public void onGetDynamicLink(Status status, @Nullable DynamicLinkData dynamicLinkData) { - throw new UnsupportedOperationException(); - } - - @Override - public void onCreateShortDynamicLink( - Status status, @Nullable ShortDynamicLinkImpl shortDynamicLink) { - throw new UnsupportedOperationException(); - } - } - - static class DynamicLinkCallbacks extends AbstractDynamicLinkCallbacks { - private final TaskCompletionSource completionSource; - private final Provider analytics; - - public DynamicLinkCallbacks( - Provider analytics, - TaskCompletionSource completionSource) { - this.analytics = analytics; - this.completionSource = completionSource; - } - - @Override - public void onGetDynamicLink(Status status, @Nullable DynamicLinkData dynamicLinkData) { - // Send result to client. - TaskUtil.setResultOrApiException( - status, - dynamicLinkData == null ? null : new PendingDynamicLinkData(dynamicLinkData), - completionSource); - // Log any scion data included with the result. - if (dynamicLinkData == null) { - return; - } - Bundle scionData = dynamicLinkData.getExtensionBundle().getBundle(KEY_SCION_DATA); - // Scion data stored with the event name as the key to the params Bundle. - if (scionData == null || scionData.keySet() == null) { - return; - } - - AnalyticsConnector connector = analytics.get(); - if (connector == null) { - return; - } - - for (String name : scionData.keySet()) { - Bundle params = scionData.getBundle(name); - connector.logEvent(ANALYTICS_FDL_ORIGIN, name, params); - } - } - } - - static class CreateShortDynamicLinkCallbacks extends AbstractDynamicLinkCallbacks { - private final TaskCompletionSource completionSource; - - CreateShortDynamicLinkCallbacks(TaskCompletionSource completionSource) { - this.completionSource = completionSource; - } - - @Override - public void onCreateShortDynamicLink( - Status status, @Nullable ShortDynamicLinkImpl shortDynamicLink) { - TaskUtil.setResultOrApiException(status, shortDynamicLink, completionSource); - } - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImplConstants.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImplConstants.java deleted file mode 100644 index c9da60e96b8..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImplConstants.java +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/// THIS FILE IS AUTO GENERATED. Do not modify. -package com.google.firebase.dynamiclinks.internal; - -interface FirebaseDynamicLinksImplConstants { - int GET_DYNAMIC_LINK_METHOD_KEY = 13201; - int CREATE_SHORT_DYNAMIC_LINK_METHOD_KEY = 13202; -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImpl.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImpl.java deleted file mode 100644 index 8a969f3437b..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImpl.java +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.net.Uri; -import android.os.Parcel; -import androidx.annotation.Nullable; -import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable; -import com.google.android.gms.common.internal.safeparcel.SafeParcelable; -import com.google.firebase.dynamiclinks.ShortDynamicLink; -import java.util.ArrayList; -import java.util.List; - -/** {@link SafeParcelable} implementation of {@link ShortDynamicLink}. */ -@SafeParcelable.Class(creator = "ShortDynamicLinkImplCreator") -public final class ShortDynamicLinkImpl extends AbstractSafeParcelable implements ShortDynamicLink { - - public static final Creator CREATOR = new ShortDynamicLinkImplCreator(); - - @SafeParcelable.Field(id = 1, getter = "getShortLink") - @Nullable - private final Uri shortLink; - - @SafeParcelable.Field(id = 2, getter = "getPreviewLink") - @Nullable - private final Uri previewLink; - - @SafeParcelable.Field(id = 3, getter = "getWarnings") - private final List warnings; - - @SafeParcelable.Constructor - public ShortDynamicLinkImpl( - @Nullable @Param(id = 1) Uri shortLink, - @Nullable @Param(id = 2) Uri previewLink, - @Nullable @Param(id = 3) List warnings) { - this.shortLink = shortLink; - this.previewLink = previewLink; - this.warnings = warnings == null ? new ArrayList<>() : warnings; - } - - @Override - @Nullable - public Uri getShortLink() { - return shortLink; - } - - @Override - @Nullable - public Uri getPreviewLink() { - return previewLink; - } - - @Override - public List getWarnings() { - return warnings; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - ShortDynamicLinkImplCreator.writeToParcel(this, dest, flags); - } - - /** {@link SafeParcelable} implementation of {@link Warning}. */ - @SafeParcelable.Class(creator = "WarningImplCreator") - public static class WarningImpl extends AbstractSafeParcelable implements Warning { - - public static final Creator CREATOR = new WarningImplCreator(); - - @SafeParcelable.Reserved({1 /* code, deprecated */}) - @SafeParcelable.Field(id = 2, getter = "getMessage") - private final String message; - - @SafeParcelable.Constructor - public WarningImpl(@Param(id = 2) String message) { - this.message = message; - } - - @Override - @Nullable - public String getCode() { - // warningCode deprecated on server, returns non-useful, hard-coded value. - return null; - } - - @Override - public String getMessage() { - return message; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - WarningImplCreator.writeToParcel(this, dest, flags); - } - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImplCreator.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImplCreator.java deleted file mode 100644 index 8566df1653a..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImplCreator.java +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.net.Uri; -import android.os.Parcel; -import android.os.Parcelable; -import com.google.android.gms.common.internal.safeparcel.SafeParcelReader; -import com.google.android.gms.common.internal.safeparcel.SafeParcelWriter; -import java.util.List; - -// Autogenerated, do not edit -public class ShortDynamicLinkImplCreator implements Parcelable.Creator { - public static final int CONTENT_DESCRIPTION = 0; - - public ShortDynamicLinkImplCreator() {} - - public ShortDynamicLinkImpl createFromParcel(Parcel parcel) { - int end = SafeParcelReader.validateObjectHeader(parcel); - - Uri _local_safe_0a1b_shortLink = null; - - Uri _local_safe_0a1b_previewLink = null; - - List _local_safe_0a1b_warnings = null; - - while (parcel.dataPosition() < end) { - int header = SafeParcelReader.readHeader(parcel); - switch (SafeParcelReader.getFieldId(header)) { - case 1: - _local_safe_0a1b_shortLink = - (Uri) SafeParcelReader.createParcelable(parcel, header, Uri.CREATOR); - - break; - - case 2: - _local_safe_0a1b_previewLink = - (Uri) SafeParcelReader.createParcelable(parcel, header, Uri.CREATOR); - - break; - - case 3: - _local_safe_0a1b_warnings = - SafeParcelReader.createTypedList( - parcel, header, ShortDynamicLinkImpl.WarningImpl.CREATOR); - - break; - - default: - SafeParcelReader.skipUnknownField(parcel, header); - } - } - - SafeParcelReader.ensureAtEnd(parcel, end); - - ShortDynamicLinkImpl obj = - new ShortDynamicLinkImpl( - _local_safe_0a1b_shortLink, _local_safe_0a1b_previewLink, _local_safe_0a1b_warnings); - - return obj; - } - - public ShortDynamicLinkImpl[] newArray(int size) { - return new ShortDynamicLinkImpl[size]; - } - - static void writeToParcel(ShortDynamicLinkImpl obj, Parcel parcel, int flags) { - int myStart = SafeParcelWriter.beginObjectHeader(parcel); - - SafeParcelWriter.writeParcelable(parcel, 1, obj.getShortLink(), flags, false); - - SafeParcelWriter.writeParcelable(parcel, 2, obj.getPreviewLink(), flags, false); - - SafeParcelWriter.writeTypedList(parcel, 3, obj.getWarnings(), false); - - SafeParcelWriter.finishObjectHeader(parcel, myStart); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/WarningImplCreator.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/WarningImplCreator.java deleted file mode 100644 index a22eb8a8d80..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/WarningImplCreator.java +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.os.Parcel; -import android.os.Parcelable; -import com.google.android.gms.common.internal.safeparcel.SafeParcelReader; -import com.google.android.gms.common.internal.safeparcel.SafeParcelWriter; - -// Autogenerated, do not edit -public class WarningImplCreator implements Parcelable.Creator { - public static final int CONTENT_DESCRIPTION = 0; - - public WarningImplCreator() {} - - public ShortDynamicLinkImpl.WarningImpl createFromParcel(Parcel parcel) { - int end = SafeParcelReader.validateObjectHeader(parcel); - - String _local_safe_0a1b_message = null; - - while (parcel.dataPosition() < end) { - int header = SafeParcelReader.readHeader(parcel); - switch (SafeParcelReader.getFieldId(header)) { - case 2: - _local_safe_0a1b_message = SafeParcelReader.createString(parcel, header); - - break; - - default: - SafeParcelReader.skipUnknownField(parcel, header); - } - } - - SafeParcelReader.ensureAtEnd(parcel, end); - - ShortDynamicLinkImpl.WarningImpl obj = - new ShortDynamicLinkImpl.WarningImpl(_local_safe_0a1b_message); - - return obj; - } - - public ShortDynamicLinkImpl.WarningImpl[] newArray(int size) { - return new ShortDynamicLinkImpl.WarningImpl[size]; - } - - static void writeToParcel(ShortDynamicLinkImpl.WarningImpl obj, Parcel parcel, int flags) { - int myStart = SafeParcelWriter.beginObjectHeader(parcel); - - SafeParcelWriter.writeString(parcel, 2, obj.getMessage(), false); - - SafeParcelWriter.finishObjectHeader(parcel, myStart); - } -} diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/package-info.java b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/package-info.java deleted file mode 100644 index 1c6d93409f8..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/internal/package-info.java +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/** @hide */ -package com.google.firebase.dynamiclinks.internal; diff --git a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt b/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt deleted file mode 100644 index b0591e2f082..00000000000 --- a/firebase-dynamic-links/src/main/java/com/google/firebase/dynamiclinks/ktx/FirebaseDynamicLinks.kt +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.dynamiclinks.ktx - -import androidx.annotation.Keep -import com.google.android.gms.tasks.Task -import com.google.firebase.FirebaseApp -import com.google.firebase.components.Component -import com.google.firebase.components.ComponentRegistrar -import com.google.firebase.dynamiclinks.DynamicLink -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks -import com.google.firebase.dynamiclinks.PendingDynamicLinkData -import com.google.firebase.dynamiclinks.ShortDynamicLink -import com.google.firebase.ktx.Firebase - -/** - * Accessing this object for Kotlin apps has changed; see the - * [migration guide](https://firebase.google.com/docs/android/kotlin-migration). - * - * Returns the [FirebaseDynamicLinks] instance of the default [FirebaseApp]. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -val Firebase.dynamicLinks: FirebaseDynamicLinks - get() = FirebaseDynamicLinks.getInstance() - -/** - * Accessing this object for Kotlin apps has changed; see the - * [migration guide](https://firebase.google.com/docs/android/kotlin-migration). - * - * Returns the [FirebaseDynamicLinks] instance of a given [FirebaseApp]. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -fun Firebase.dynamicLinks(app: FirebaseApp): FirebaseDynamicLinks { - return FirebaseDynamicLinks.getInstance(app) -} - -/** - * Creates a [DynamicLink.AndroidParameters] object initialized using the [init] function and sets - * it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.androidParameters(init: DynamicLink.AndroidParameters.Builder.() -> Unit) { - val builder = DynamicLink.AndroidParameters.Builder() - builder.init() - setAndroidParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.AndroidParameters] object initialized with the specified [packageName] and - * using the [init] function and sets it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.androidParameters( - packageName: String, - init: DynamicLink.AndroidParameters.Builder.() -> Unit -) { - val builder = DynamicLink.AndroidParameters.Builder(packageName) - builder.init() - setAndroidParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.IosParameters] object initialized with the specified [bundleId] and using - * the [init] function and sets it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.iosParameters( - bundleId: String, - init: DynamicLink.IosParameters.Builder.() -> Unit -) { - val builder = DynamicLink.IosParameters.Builder(bundleId) - builder.init() - setIosParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.GoogleAnalyticsParameters] object initialized using the [init] function - * and sets it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.googleAnalyticsParameters( - init: DynamicLink.GoogleAnalyticsParameters.Builder.() -> Unit -) { - val builder = DynamicLink.GoogleAnalyticsParameters.Builder() - builder.init() - setGoogleAnalyticsParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.GoogleAnalyticsParameters] object initialized with the specified [source], - * [medium], [campaign] and using the [init] function and sets it to the [DynamicLink.Builder]. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated("com.google.firebase.dynam", ReplaceWith("")) -fun DynamicLink.Builder.googleAnalyticsParameters( - source: String, - medium: String, - campaign: String, - init: DynamicLink.GoogleAnalyticsParameters.Builder.() -> Unit -) { - val builder = DynamicLink.GoogleAnalyticsParameters.Builder(source, medium, campaign) - builder.init() - setGoogleAnalyticsParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.ItunesConnectAnalyticsParameters] object initialized using the [init] - * function and sets it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.itunesConnectAnalyticsParameters( - init: DynamicLink.ItunesConnectAnalyticsParameters.Builder.() -> Unit -) { - val builder = DynamicLink.ItunesConnectAnalyticsParameters.Builder() - builder.init() - setItunesConnectAnalyticsParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.SocialMetaTagParameters] object initialized using the [init] function and - * sets it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.socialMetaTagParameters( - init: DynamicLink.SocialMetaTagParameters.Builder.() -> Unit -) { - val builder = DynamicLink.SocialMetaTagParameters.Builder() - builder.init() - setSocialMetaTagParameters(builder.build()) -} - -/** - * Creates a [DynamicLink.NavigationInfoParameters] object initialized using the [init] function and - * sets it to the [DynamicLink.Builder] - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun DynamicLink.Builder.navigationInfoParameters( - init: DynamicLink.NavigationInfoParameters.Builder.() -> Unit -) { - val builder = DynamicLink.NavigationInfoParameters.Builder() - builder.init() - setNavigationInfoParameters(builder.build()) -} - -/** - * Creates a [DynamicLink] object initialized using the [init] function. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun FirebaseDynamicLinks.dynamicLink(init: DynamicLink.Builder.() -> Unit): DynamicLink { - val builder = FirebaseDynamicLinks.getInstance().createDynamicLink() - builder.init() - return builder.buildDynamicLink() -} - -/** - * Creates a [ShortDynamicLink] object initialized using the [init] function. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun FirebaseDynamicLinks.shortLinkAsync( - init: DynamicLink.Builder.() -> Unit -): Task { - val builder = FirebaseDynamicLinks.getInstance().createDynamicLink() - builder.init() - return builder.buildShortDynamicLink() -} - -/** - * Creates a [ShortDynamicLink] object initialized using the [init] function. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -fun FirebaseDynamicLinks.shortLinkAsync( - suffix: Int, - init: DynamicLink.Builder.() -> Unit -): Task { - val builder = FirebaseDynamicLinks.getInstance().createDynamicLink() - builder.init() - return builder.buildShortDynamicLink(suffix) -} - -/** - * Destructuring declaration for [ShortDynamicLink] to provide shortLink. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -operator fun ShortDynamicLink.component1() = shortLink - -/** - * Destructuring declaration for [ShortDynamicLink] to provide previewLink. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -operator fun ShortDynamicLink.component2() = previewLink - -/** - * Destructuring declaration for [ShortDynamicLink] to provide warnings. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -operator fun ShortDynamicLink.component3(): List = warnings - -/** - * Destructuring declaration for [PendingDynamicLinkData] to provide link. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -operator fun PendingDynamicLinkData.component1() = link - -/** - * Destructuring declaration for [PendingDynamicLinkData] to provide minimumAppVersion. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -operator fun PendingDynamicLinkData.component2() = minimumAppVersion - -/** - * Destructuring declaration for [PendingDynamicLinkData] to provide clickTimestamp. - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -operator fun PendingDynamicLinkData.component3() = clickTimestamp - -/** - * @suppress - * @deprecated **Deprecation Notice:** The Kotlin extensions (KTX) APIs have been added to their - * respective main modules, and the Kotlin extension (KTX) APIs in - * `com.google.firebase.firebase-dynamic-links-ktx` are now deprecated. As early as April 2024, - * we'll no longer release KTX modules. For details, see the - * [FAQ about this initiative.](https://firebase.google.com/docs/android/kotlin-migration) - */ -@Deprecated( - "Migrate to use the KTX API from the main module: https://firebase.google.com/docs/android/kotlin-migration.", - ReplaceWith("") -) -@Keep -class FirebaseDynamicLinksKtxRegistrar : ComponentRegistrar { - override fun getComponents(): List> = listOf() -} diff --git a/firebase-dynamic-links/src/test/AndroidManifest.xml b/firebase-dynamic-links/src/test/AndroidManifest.xml deleted file mode 100644 index 7b16095e97c..00000000000 --- a/firebase-dynamic-links/src/test/AndroidManifest.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/DynamicLinkTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/DynamicLinkTest.java deleted file mode 100644 index 55ca0f1e62f..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/DynamicLinkTest.java +++ /dev/null @@ -1,457 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import static com.google.common.truth.Truth.assertThat; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNotNull; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.net.Uri; -import android.os.Bundle; -import androidx.test.core.app.ApplicationProvider; -import com.google.firebase.FirebaseApp; -import com.google.firebase.FirebaseOptions; -import com.google.firebase.dynamiclinks.DynamicLink.AndroidParameters; -import com.google.firebase.dynamiclinks.DynamicLink.Builder; -import com.google.firebase.dynamiclinks.DynamicLink.GoogleAnalyticsParameters; -import com.google.firebase.dynamiclinks.DynamicLink.IosParameters; -import com.google.firebase.dynamiclinks.DynamicLink.ItunesConnectAnalyticsParameters; -import com.google.firebase.dynamiclinks.DynamicLink.NavigationInfoParameters; -import com.google.firebase.dynamiclinks.DynamicLink.SocialMetaTagParameters; -import com.google.firebase.dynamiclinks.ShortDynamicLink.Suffix; -import com.google.firebase.dynamiclinks.internal.FirebaseDynamicLinksImpl; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - -/** Test {@link com.google.firebase.dynamiclinks.DynamicLink}. */ -@RunWith(RobolectricTestRunner.class) -public class DynamicLinkTest { - - private static final String DEEP_LINK = "https://deep.link"; - private static final String LONG_LINK = "https://long.link"; - private static final String DOMAIN_WITH_SCHEME = "https://test.app.goo.gl"; - private static final String DOMAIN = "test.app.goo.gl"; - private static final String CUSTOM_DOMAIN_URI_PREFIX = "https://custom.com/xyz"; - private static final String CUSTOM_DOMAIN_WITHOUT_SCHEME = "custom.com"; - private static final String PARAMETER = "parameter"; - private static final String VALUE = "value"; - private static final String API_KEY = "api_key"; - private static final String PACKAGE_NAME = "package.name"; - private static final String FALLBACK_LINK = "https://fallback.link"; - private static final int MIN_VERSION_CODE = 123; - private static final String BUNDLE_ID = "bundleId"; - private static final String CUSTOM_SCHEME = "customScheme"; - private static final String IPAD_FALLBACK_LINK = "https://ipad.fallback.link"; - private static final String IPAD_BUNDLE_ID = "ipadBundleId"; - private static final String APP_STORE_ID = "appStoreId"; - private static final String MIN_VERSION = "minVersion"; - private static final String UTM_SOURCE = "utmSource"; - private static final String UTM_MEDIUM = "utmMedium"; - private static final String UTM_CAMPAIGN = "utmCampaign"; - private static final String UTM_TERM = "utmTerm"; - private static final String UTM_CONTENT = "utmContent"; - private static final String PROVIDER_TOKEN = "providerToken"; - private static final String AFFILIATE_TOKEN = "affiliateToken"; - private static final String CAMPAIGN_TOKEN = "campaignToken"; - private static final String SOCIAL_TITLE = "title"; - private static final String SOCIAL_DESCRIPTION = "description"; - private static final String SOCIAL_IMAGE_LINK = "imageLink"; - - @Mock private FirebaseDynamicLinksImpl mockFDLImpl; - @Captor private ArgumentCaptor bundleCaptor; - - private Builder builder; - - private static Bundle createDynamicLinkBundle() { - Bundle builderParameters = new Bundle(); - builderParameters.putString(Builder.KEY_DOMAIN_URI_PREFIX, DOMAIN_WITH_SCHEME); - Bundle fdlParameters = new Bundle(); - fdlParameters.putString(PARAMETER, VALUE); - builderParameters.putBundle(Builder.KEY_DYNAMIC_LINK_PARAMETERS, fdlParameters); - return builderParameters; - } - - /** Compare FDL parameters as Strings since that's what is used when generating long FDLs. */ - private static void assertParameterEquals(Object expected, Object actual) { - assertNotNull(actual); - assertEquals(expected.toString(), actual.toString()); - } - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - - FirebaseApp.clearInstancesForTest(); - FirebaseOptions.Builder firebaseOptionsBuilder = - new FirebaseOptions.Builder().setApplicationId("application_id").setApiKey(API_KEY); - FirebaseApp firebaseApp = - FirebaseApp.initializeApp( - ApplicationProvider.getApplicationContext(), firebaseOptionsBuilder.build()); - when(mockFDLImpl.getFirebaseApp()).thenReturn(firebaseApp); - - builder = new Builder(mockFDLImpl); - builder.setDynamicLinkDomain(DOMAIN); - } - - @Test - public void testGetUri() { - Bundle parameters = createDynamicLinkBundle(); - DynamicLink dynamicLink = new DynamicLink(parameters); - assertEquals(FirebaseDynamicLinksImpl.createDynamicLink(parameters), dynamicLink.getUri()); - } - - @Test - public void testBuilder_SetLongLink() { - Uri longLink = Uri.parse(LONG_LINK); - builder.setLongLink(longLink); - Bundle parameters = getParameterBundle(); - assertEquals(longLink, parameters.getParcelable(Builder.KEY_DYNAMIC_LINK)); - assertEquals(API_KEY, parameters.getString(Builder.KEY_API_KEY)); - } - - @Test - public void testBuilder_SetLink() { - builder.setLink(Uri.parse(DEEP_LINK)); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(DEEP_LINK, fdlParameters.get(Builder.KEY_LINK)); - } - - @Test - public void testBuilder_SetDynamicLinkDomain() { - // Domain set to DOMAIN as part of setup(). - Bundle parameters = getParameterBundle(); - assertEquals(DOMAIN_WITH_SCHEME, parameters.getString(Builder.KEY_DOMAIN_URI_PREFIX)); - } - - @Test - public void testBuilder_SetDomainUriPrefix() throws Exception { - DynamicLink.Builder builder = FirebaseDynamicLinks.getInstance().createDynamicLink(); - builder.setDomainUriPrefix(CUSTOM_DOMAIN_URI_PREFIX); - DynamicLink dynamicLink = builder.buildDynamicLink(); - assertEquals(CUSTOM_DOMAIN_URI_PREFIX, dynamicLink.getUri().toString()); - - builder = FirebaseDynamicLinks.getInstance().createDynamicLink(); - builder.setDomainUriPrefix(DOMAIN_WITH_SCHEME); - dynamicLink = builder.buildDynamicLink(); - assertEquals(DOMAIN_WITH_SCHEME, dynamicLink.getUri().toString()); - } - - @Test - public void testBuilder_BuildDynamicLink() { - Uri longLink = Uri.parse(LONG_LINK); - builder.setLongLink(longLink); - DynamicLink dynamicLink = builder.buildDynamicLink(); - assertEquals(longLink, dynamicLink.getUri()); - } - - @Test - public void testBuilder_BuildShortDynamicLink_WithSuffix() { - builder.buildShortDynamicLink(Suffix.SHORT); - verify(mockFDLImpl).createShortDynamicLink(bundleCaptor.capture()); - Bundle parameters = bundleCaptor.getValue(); - assertEquals(Suffix.SHORT, parameters.getInt(Builder.KEY_SUFFIX)); - } - - @Test - public void testAndroidParameters_Builder_Constructor() { - AndroidParameters.Builder androidBuilder = new AndroidParameters.Builder(); - builder.setAndroidParameters(androidBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - ApplicationProvider.getApplicationContext().getPackageName(), - fdlParameters.get(AndroidParameters.KEY_ANDROID_PACKAGE_NAME)); - } - - @Test - public void testAndroidParameters_Builder_Constructor_PackageName() { - AndroidParameters.Builder androidBuilder = new AndroidParameters.Builder(PACKAGE_NAME); - builder.setAndroidParameters(androidBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - PACKAGE_NAME, fdlParameters.get(AndroidParameters.KEY_ANDROID_PACKAGE_NAME)); - } - - @Test - public void testAndroidParameters_Builder_SetFallbackLink() { - AndroidParameters.Builder androidBuilder = new AndroidParameters.Builder(); - androidBuilder.setFallbackUrl(Uri.parse(FALLBACK_LINK)); - builder.setAndroidParameters(androidBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - FALLBACK_LINK, fdlParameters.get(AndroidParameters.KEY_ANDROID_FALLBACK_LINK)); - } - - @Test - public void testAndroidParameters_Builder_SetMinimumVersion() { - AndroidParameters.Builder androidBuilder = new AndroidParameters.Builder(); - androidBuilder.setMinimumVersion(MIN_VERSION_CODE); - builder.setAndroidParameters(androidBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - MIN_VERSION_CODE, fdlParameters.get(AndroidParameters.KEY_ANDROID_MIN_VERSION_CODE)); - } - - @Test - public void testIosParameters_Builder_Constructor() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(BUNDLE_ID, fdlParameters.get(IosParameters.KEY_IOS_BUNDLE_ID)); - } - - @Test - public void testIosParameters_Builder_SetFallbackLink() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - iosBuilder.setFallbackUrl(Uri.parse(FALLBACK_LINK)); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(FALLBACK_LINK, fdlParameters.get(IosParameters.KEY_IOS_FALLBACK_LINK)); - } - - @Test - public void testIosParameters_Builder_SetCustomScheme() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - iosBuilder.setCustomScheme(CUSTOM_SCHEME); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(CUSTOM_SCHEME, fdlParameters.get(IosParameters.KEY_IOS_CUSTOM_SCHEME)); - } - - @Test - public void testIosParameters_Builder_SetIpadFallbackLink() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - iosBuilder.setIpadFallbackUrl(Uri.parse(IPAD_FALLBACK_LINK)); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - IPAD_FALLBACK_LINK, fdlParameters.get(IosParameters.KEY_IPAD_FALLBACK_LINK)); - } - - @Test - public void testIosParameters_Builder_SetIpadBundleId() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - iosBuilder.setIpadBundleId(IPAD_BUNDLE_ID); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(IPAD_BUNDLE_ID, fdlParameters.get(IosParameters.KEY_IPAD_BUNDLE_ID)); - } - - @Test - public void testIosParameters_Builder_SetAppStoreId() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - iosBuilder.setAppStoreId(APP_STORE_ID); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(APP_STORE_ID, fdlParameters.get(IosParameters.KEY_IOS_APP_STORE_ID)); - } - - @Test - public void testIosParameters_Builder_SetMinimumVersion() { - IosParameters.Builder iosBuilder = new IosParameters.Builder(BUNDLE_ID); - iosBuilder.setMinimumVersion(MIN_VERSION); - builder.setIosParameters(iosBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(MIN_VERSION, fdlParameters.get(IosParameters.KEY_IOS_MINIMUM_VERSION)); - } - - @Test - public void testGoogleAnalyticsParameters_Builder_Constructor() { - GoogleAnalyticsParameters.Builder analyticsBuilder = - new GoogleAnalyticsParameters.Builder(UTM_SOURCE, UTM_MEDIUM, UTM_CAMPAIGN); - builder.setGoogleAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(UTM_SOURCE, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_SOURCE)); - assertParameterEquals(UTM_MEDIUM, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_MEDIUM)); - assertParameterEquals( - UTM_CAMPAIGN, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_CAMPAIGN)); - } - - @Test - public void testGoogleAnalyticsParameters_Builder_SetSource() { - GoogleAnalyticsParameters.Builder analyticsBuilder = new GoogleAnalyticsParameters.Builder(); - analyticsBuilder.setSource(UTM_SOURCE); - builder.setGoogleAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(UTM_SOURCE, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_SOURCE)); - } - - @Test - public void testGoogleAnalyticsParameters_Builder_SetMedium() { - GoogleAnalyticsParameters.Builder analyticsBuilder = new GoogleAnalyticsParameters.Builder(); - analyticsBuilder.setMedium(UTM_MEDIUM); - builder.setGoogleAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(UTM_MEDIUM, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_MEDIUM)); - } - - @Test - public void testGoogleAnalyticsParameters_Builder_SetCampaign() { - GoogleAnalyticsParameters.Builder analyticsBuilder = new GoogleAnalyticsParameters.Builder(); - analyticsBuilder.setCampaign(UTM_CAMPAIGN); - builder.setGoogleAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - UTM_CAMPAIGN, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_CAMPAIGN)); - } - - @Test - public void testGoogleAnalyticsParameters_Builder_SetTerm() { - GoogleAnalyticsParameters.Builder analyticsBuilder = - new GoogleAnalyticsParameters.Builder(UTM_SOURCE, UTM_MEDIUM, UTM_CAMPAIGN); - analyticsBuilder.setTerm(UTM_TERM); - builder.setGoogleAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals(UTM_TERM, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_TERM)); - } - - @Test - public void testGoogleAnalyticsParameters_Builder_SetContent() { - GoogleAnalyticsParameters.Builder analyticsBuilder = - new GoogleAnalyticsParameters.Builder(UTM_SOURCE, UTM_MEDIUM, UTM_CAMPAIGN); - analyticsBuilder.setContent(UTM_CONTENT); - builder.setGoogleAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - UTM_CONTENT, fdlParameters.get(GoogleAnalyticsParameters.KEY_UTM_CONTENT)); - } - - @Test - public void testItunesConnectAnalyticsParameters_Builder_SetProviderToken() { - ItunesConnectAnalyticsParameters.Builder analyticsBuilder = - new ItunesConnectAnalyticsParameters.Builder(); - analyticsBuilder.setProviderToken(PROVIDER_TOKEN); - builder.setItunesConnectAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - PROVIDER_TOKEN, fdlParameters.get(ItunesConnectAnalyticsParameters.KEY_ITUNES_CONNECT_PT)); - } - - @Test - public void testItunesConnectAnalyticsParameters_Builder_SetAffiliateToken() { - ItunesConnectAnalyticsParameters.Builder analyticsBuilder = - new ItunesConnectAnalyticsParameters.Builder(); - analyticsBuilder.setAffiliateToken(AFFILIATE_TOKEN); - builder.setItunesConnectAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - AFFILIATE_TOKEN, fdlParameters.get(ItunesConnectAnalyticsParameters.KEY_ITUNES_CONNECT_AT)); - } - - @Test - public void testItunesConnectAnalyticsParameters_Builder_SetCampaignToken() { - ItunesConnectAnalyticsParameters.Builder analyticsBuilder = - new ItunesConnectAnalyticsParameters.Builder(); - analyticsBuilder.setCampaignToken(CAMPAIGN_TOKEN); - builder.setItunesConnectAnalyticsParameters(analyticsBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - CAMPAIGN_TOKEN, fdlParameters.get(ItunesConnectAnalyticsParameters.KEY_ITUNES_CONNECT_CT)); - } - - @Test - public void testSocialMetaTagParameters_Builder_SetTitle() { - SocialMetaTagParameters.Builder socialBuilder = new SocialMetaTagParameters.Builder(); - socialBuilder.setTitle(SOCIAL_TITLE); - builder.setSocialMetaTagParameters(socialBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - SOCIAL_TITLE, fdlParameters.get(SocialMetaTagParameters.KEY_SOCIAL_TITLE)); - } - - @Test - public void testSocialMetaTagParameters_Builder_SetDescription() { - SocialMetaTagParameters.Builder socialBuilder = new SocialMetaTagParameters.Builder(); - socialBuilder.setDescription(SOCIAL_DESCRIPTION); - builder.setSocialMetaTagParameters(socialBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - SOCIAL_DESCRIPTION, fdlParameters.get(SocialMetaTagParameters.KEY_SOCIAL_DESCRIPTION)); - } - - @Test - public void testSocialMetaTagParameters_Builder_SetImageLink() { - SocialMetaTagParameters.Builder socialBuilder = new SocialMetaTagParameters.Builder(); - socialBuilder.setImageUrl(Uri.parse(SOCIAL_IMAGE_LINK)); - builder.setSocialMetaTagParameters(socialBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - assertParameterEquals( - SOCIAL_IMAGE_LINK, fdlParameters.get(SocialMetaTagParameters.KEY_SOCIAL_IMAGE_LINK)); - } - - @Test - public void testNavigationInfoParameters_Builder_ForcedRedirectNotSet() { - NavigationInfoParameters.Builder navigationBuilder = new NavigationInfoParameters.Builder(); - builder.setNavigationInfoParameters(navigationBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - // Should not be set to "1" when not set. - assertFalse("1".equals(fdlParameters.get(NavigationInfoParameters.KEY_FORCED_REDIRECT))); - } - - @Test - public void testNavigationInfoParameters_Builder_SetForcedRedirectEnabled() { - NavigationInfoParameters.Builder navigationBuilder = new NavigationInfoParameters.Builder(); - navigationBuilder.setForcedRedirectEnabled(true); - builder.setNavigationInfoParameters(navigationBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - // Should be set to "1" when enabled. - assertParameterEquals("1", fdlParameters.get(NavigationInfoParameters.KEY_FORCED_REDIRECT)); - } - - @Test - public void testNavigationInfoParameters_Builder_SetForcedRedirectEnabled_False() { - NavigationInfoParameters.Builder navigationBuilder = new NavigationInfoParameters.Builder(); - navigationBuilder.setForcedRedirectEnabled(false); - builder.setNavigationInfoParameters(navigationBuilder.build()); - Bundle fdlParameters = getFdlParameterBundle(); - // Should not be set to "1" when not enabled. - assertFalse("1".equals(fdlParameters.get(NavigationInfoParameters.KEY_FORCED_REDIRECT))); - } - - @Test - public void testSetDynamicLinkDomainDoesNotAcceptCustomDomain() { - IllegalArgumentException e = - Assert.assertThrows( - IllegalArgumentException.class, - () -> { - builder.setDynamicLinkDomain(CUSTOM_DOMAIN_WITHOUT_SCHEME); - }); - assertThat(e.getMessage()) - .isEqualTo( - "Use setDomainUriPrefix() instead, setDynamicLinkDomain() is only applicable for " - + "*.page.link and *.app.goo.gl domains."); - } - - /** Gets the Bundle that contains the options used to create the short Dynamic Link. */ - private Bundle getParameterBundle() { - builder.buildShortDynamicLink(); - verify(mockFDLImpl).createShortDynamicLink(bundleCaptor.capture()); - return bundleCaptor.getValue(); - } - - /** Gets the Bundle that contains the parameters to build the long Dynamic Link to shorten. */ - private Bundle getFdlParameterBundle() { - return getParameterBundle().getBundle(Builder.KEY_DYNAMIC_LINK_PARAMETERS); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/DynamicLinksTests.kt b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/DynamicLinksTests.kt deleted file mode 100644 index a1b7f84d5a5..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/DynamicLinksTests.kt +++ /dev/null @@ -1,278 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.dynamiclinks - -import android.net.Uri -import androidx.test.core.app.ApplicationProvider -import com.google.common.truth.Truth.assertThat -import com.google.firebase.Firebase -import com.google.firebase.FirebaseApp -import com.google.firebase.FirebaseOptions -import com.google.firebase.app -import com.google.firebase.initialize -import org.junit.After -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` -import org.robolectric.RobolectricTestRunner - -const val APP_ID = "APP_ID" -const val API_KEY = "API_KEY" - -const val EXISTING_APP = "existing" - -abstract class BaseTestCase { - @Before - fun setUp() { - Firebase.initialize( - ApplicationProvider.getApplicationContext(), - FirebaseOptions.Builder() - .setApplicationId(APP_ID) - .setApiKey(API_KEY) - .setProjectId("123") - .build() - ) - - Firebase.initialize( - ApplicationProvider.getApplicationContext(), - FirebaseOptions.Builder() - .setApplicationId(APP_ID) - .setApiKey(API_KEY) - .setProjectId("123") - .build(), - EXISTING_APP - ) - } - - @After - fun cleanUp() { - FirebaseApp.clearInstancesForTest() - } -} - -@RunWith(RobolectricTestRunner::class) -class DynamicLinksTests : BaseTestCase() { - - @Test - fun `Firebase#dynamicLinks should delegate to FirebaseDynamicLinks#getInstance()`() { - assertThat(Firebase.dynamicLinks).isSameInstanceAs(FirebaseDynamicLinks.getInstance()) - } - - @Test - fun `Firebase#dynamicLinks should delegate to FirebaseDynamicLinks#getInstance(FirebaseApp)`() { - val app = Firebase.app(EXISTING_APP) - assertThat(Firebase.dynamicLinks(app)).isSameInstanceAs(FirebaseDynamicLinks.getInstance(app)) - } - - @Test - fun `Firebase#dynamicLinks#createDynamicLink`() { - val exampleLink = "https://example.com" - val exampleDomainUriPrefix = "https://example.page.link" - - val dynamicLinkKtx = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse(exampleLink) - domainUriPrefix = exampleDomainUriPrefix - } - - val dynamicLink = - FirebaseDynamicLinks.getInstance() - .createDynamicLink() - .setLink(Uri.parse(exampleLink)) - .setDomainUriPrefix(exampleDomainUriPrefix) - .buildDynamicLink() - - assertThat(dynamicLinkKtx.uri).isEqualTo(dynamicLink.uri) - } - - @Test - fun `androidParameters type-safe builder extension works`() { - val fallbackLink = "https://android.com" - val minVersion = 19 - val packageName = "com.example.android" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - androidParameters { - minimumVersion = minVersion - fallbackUrl = Uri.parse(fallbackLink) - } - } - - val anotherDynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - androidParameters(packageName) { - minimumVersion = minVersion - fallbackUrl = Uri.parse(fallbackLink) - } - } - - assertThat(dynamicLink.uri.getQueryParameter("amv")?.toInt()).isEqualTo(minVersion) - assertThat(dynamicLink.uri.getQueryParameter("afl")).isEqualTo(fallbackLink) - - assertThat(anotherDynamicLink.uri.getQueryParameter("amv")?.toInt()).isEqualTo(minVersion) - assertThat(anotherDynamicLink.uri.getQueryParameter("afl")).isEqualTo(fallbackLink) - assertThat(anotherDynamicLink.uri.getQueryParameter("apn")).isEqualTo(packageName) - } - - @Test - fun `iosParameters type-safe builder extension works`() { - val iosAppStoreId = "123456789" - val iosMinimumVersion = "1.0.1" - val iosBundleId = "com.example.ios" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - iosParameters(iosBundleId) { - appStoreId = iosAppStoreId - minimumVersion = iosMinimumVersion - } - } - - assertThat(dynamicLink.uri.getQueryParameter("ibi")).isEqualTo(iosBundleId) - assertThat(dynamicLink.uri.getQueryParameter("imv")).isEqualTo(iosMinimumVersion) - assertThat(dynamicLink.uri.getQueryParameter("isi")).isEqualTo(iosAppStoreId) - } - - @Test - fun `googleAnalyticsParameters type-safe builder extension works`() { - val campaignTerm = "Example Term" - val campaignContent = "Example Content" - val campaignSource = "Twitter" - val campaignMedium = "Social" - val campaignName = "Example Promo" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - googleAnalyticsParameters(campaignSource, campaignMedium, campaignName) { - term = campaignTerm - content = campaignContent - } - } - - assertThat(dynamicLink.uri.getQueryParameter("utm_content")).isEqualTo(campaignContent) - assertThat(dynamicLink.uri.getQueryParameter("utm_term")).isEqualTo(campaignTerm) - assertThat(dynamicLink.uri.getQueryParameter("utm_source")).isEqualTo(campaignSource) - assertThat(dynamicLink.uri.getQueryParameter("utm_medium")).isEqualTo(campaignMedium) - assertThat(dynamicLink.uri.getQueryParameter("utm_campaign")).isEqualTo(campaignName) - } - - @Test - fun `itunesConnectAnalyticsParameters type-safe builder extension works`() { - val ct = "example-campaign" - val pt = "123456" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - itunesConnectAnalyticsParameters { - providerToken = pt - campaignToken = ct - } - } - - assertThat(dynamicLink.uri.getQueryParameter("pt")).isEqualTo(pt) - assertThat(dynamicLink.uri.getQueryParameter("ct")).isEqualTo(ct) - } - - @Test - fun `socialMetaTagParameters type-safe builder extension works`() { - val socialTitle = "Example Title" - val socialDescription = "This link works whether the app is installed or not!" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - socialMetaTagParameters { - title = socialTitle - description = socialDescription - } - } - - assertThat(dynamicLink.uri.getQueryParameter("st")).isEqualTo(socialTitle) - assertThat(dynamicLink.uri.getQueryParameter("sd")).isEqualTo(socialDescription) - } - - @Test - fun `navigationInfoParameters type-safe builder extension works`() { - val forcedRedirect = true - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - navigationInfoParameters { forcedRedirectEnabled = true } - } - - val efr = Integer.parseInt(dynamicLink.uri.getQueryParameter("efr")!!) == 1 - assertThat(efr).isEqualTo(forcedRedirect) - } - - @Test - fun `ShortDynamicLink destructure declaration works`() { - val fakeWarning = - object : ShortDynamicLink.Warning { - override fun getMessage() = "Warning" - override fun getCode() = "warning" - } - - val expectedShortLink = Uri.parse("https://example.com") - val expectedPreviewLink = Uri.parse("https://example.com/preview") - val expectedWarnings = mutableListOf(fakeWarning) - - val mockShortDynamicLink = mock(ShortDynamicLink::class.java) - `when`(mockShortDynamicLink.shortLink).thenReturn(expectedShortLink) - `when`(mockShortDynamicLink.previewLink).thenReturn(expectedPreviewLink) - `when`(mockShortDynamicLink.warnings).thenReturn(expectedWarnings) - - val (shortLink, previewLink, warnings) = mockShortDynamicLink - - assertThat(shortLink).isEqualTo(expectedShortLink) - assertThat(previewLink).isEqualTo(expectedPreviewLink) - assertThat(warnings).isEqualTo(expectedWarnings) - } - - @Test - fun `PendingDynamicLinkData destructure declaration works`() { - val expectedLink = Uri.parse("https://example.com") - val expectedMinAppVersion = 30 - val expectedTimestamp = 172947600L - - val mockPendingData = mock(PendingDynamicLinkData::class.java) - `when`(mockPendingData.link).thenReturn(expectedLink) - `when`(mockPendingData.minimumAppVersion).thenReturn(expectedMinAppVersion) - `when`(mockPendingData.clickTimestamp).thenReturn(expectedTimestamp) - - val (link, minAppVersion, timestamp) = mockPendingData - - assertThat(link).isEqualTo(expectedLink) - assertThat(minAppVersion).isEqualTo(expectedMinAppVersion) - assertThat(timestamp).isEqualTo(expectedTimestamp) - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinksTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinksTest.java deleted file mode 100644 index 4059c2348cf..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/FirebaseDynamicLinksTest.java +++ /dev/null @@ -1,45 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import static junit.framework.Assert.assertNotNull; - -import androidx.test.core.app.ApplicationProvider; -import com.google.firebase.FirebaseApp; -import com.google.firebase.FirebaseOptions; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class FirebaseDynamicLinksTest { - - @Before - public void setUp() { - FirebaseOptions.Builder firebaseOptionsBuilder = - new FirebaseOptions.Builder().setApplicationId("application_id").setApiKey("api_key"); - FirebaseApp.initializeApp( - ApplicationProvider.getApplicationContext(), firebaseOptionsBuilder.build()); - } - - @Test - @Ignore - public void testFirebaseDynamicLinks_GetInstance() { - FirebaseDynamicLinks firebaseDynamicLinks = FirebaseDynamicLinks.getInstance(); - assertNotNull(firebaseDynamicLinks); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/PendingDynamicLinkDataTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/PendingDynamicLinkDataTest.java deleted file mode 100644 index e7346e2b883..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/PendingDynamicLinkDataTest.java +++ /dev/null @@ -1,248 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNotSame; -import static junit.framework.Assert.assertNull; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Bundle; -import com.google.firebase.dynamiclinks.internal.DynamicLinkData; -import com.google.firebase.dynamiclinks.internal.DynamicLinkUTMParams; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class PendingDynamicLinkDataTest { - - private static final String DEEP_LINK = "http://deeplink"; - private static final String DYNAMIC_LINK = "http://test.com/dynamic?link=" + DEEP_LINK; - private static final int MINIMUM_VERSION = 1234; - private static final long CLICK_TIMESTAMP = 54321L; - private static final String PACKAGE_NAME = "com.google.test.package.name"; - private static final String MARKET_URL = - "market://details?id=com.google.android.gm&min_version=10"; - private static final String QUERY_VALUE = "http://example.google.com"; - private static final String QUERY_KEY = "url"; - - // Bundle keys to test extensions. - private static final String KEY_TEST_STRING = "com.google.test.value.STRING"; - private static final String KEY_TEST_INT = "com.google.test.value.INT"; - private static final String TEST_STRING_VALUE = "testString"; - private static final int TEST_INT_VALUE = 321; - - private final PackageInfo packageInfo = new PackageInfo(); - private Uri updateAppUri; - - @Mock private Context mockContext; - @Mock private PackageManager mockPackageManager; - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - packageInfo.versionCode = 0; // default to zero, allow each test to set as needed. - when(mockContext.getPackageManager()).thenReturn(mockPackageManager); - when(mockContext.getApplicationContext()).thenReturn(mockContext); - when(mockContext.getPackageName()).thenReturn(PACKAGE_NAME); - when(mockPackageManager.getPackageInfo(any(String.class), anyInt())).thenReturn(packageInfo); - // Create uri with properly escaped query params. - updateAppUri = - Uri.parse(MARKET_URL).buildUpon().appendQueryParameter(QUERY_KEY, QUERY_VALUE).build(); - } - - @Test - public void testCreateDynamicLink() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkData()); - assertEquals(pendingDynamicLinkData.getLink(), Uri.parse(DEEP_LINK)); - assertEquals(MINIMUM_VERSION, pendingDynamicLinkData.getMinimumAppVersion()); - assertEquals(CLICK_TIMESTAMP, pendingDynamicLinkData.getClickTimestamp()); - } - - @Test - public void testCreateDynamicLink_NullData() { - PendingDynamicLinkData pendingDynamicLinkData = new PendingDynamicLinkData(null); - assertNull(pendingDynamicLinkData.getLink()); - assertEquals(0L, pendingDynamicLinkData.getClickTimestamp()); - assertEquals(0, pendingDynamicLinkData.getMinimumAppVersion()); - assertNull(pendingDynamicLinkData.getRedirectUrl()); - assertEquals(0, pendingDynamicLinkData.getExtensions().size()); - } - - @Test - public void testCreateDynamicLink_ZeroValues() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDataLinkDataZeroValues()); - assertNotNull(pendingDynamicLinkData); - assertNull(pendingDynamicLinkData.getLink()); - assertNull(pendingDynamicLinkData.getRedirectUrl()); - assertEquals(0, pendingDynamicLinkData.getMinimumAppVersion()); - // Click timestamp with value 0 is reset to the current time. - assertFalse(0L == pendingDynamicLinkData.getClickTimestamp()); - assertEquals(0, pendingDynamicLinkData.getExtensions().size()); - } - - @Test - public void testCreateDynamicLink_DirectValues() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(DEEP_LINK, MINIMUM_VERSION, CLICK_TIMESTAMP, updateAppUri); - assertEquals(pendingDynamicLinkData.getLink(), Uri.parse(DEEP_LINK)); - assertEquals(MINIMUM_VERSION, pendingDynamicLinkData.getMinimumAppVersion()); - assertEquals(CLICK_TIMESTAMP, pendingDynamicLinkData.getClickTimestamp()); - assertEquals(updateAppUri, pendingDynamicLinkData.getRedirectUrl()); - assertEquals(0, pendingDynamicLinkData.getExtensions().size()); - } - - @Test - public void testCreateDynamicLink_ExtensionValues() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataExtensions()); - assertEquals(pendingDynamicLinkData.getLink(), Uri.parse(DEEP_LINK)); - assertEquals(MINIMUM_VERSION, pendingDynamicLinkData.getMinimumAppVersion()); - assertEquals(CLICK_TIMESTAMP, pendingDynamicLinkData.getClickTimestamp()); - Bundle bundle = pendingDynamicLinkData.getExtensions(); - assertNotNull(bundle); - assertEquals(TEST_STRING_VALUE, bundle.getString(KEY_TEST_STRING)); - assertEquals(TEST_INT_VALUE, bundle.getInt(KEY_TEST_INT)); - } - - @Test - public void testGetUpdateAppIntent_UpdateRequired_CurrentVersionZero() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataWithMinVersion(MINIMUM_VERSION)); - packageInfo.versionCode = 0; - Intent intent = pendingDynamicLinkData.getUpdateAppIntent(mockContext); - assertNotNull(intent); - assertEquals(intent.getData(), updateAppUri); - } - - @Test - public void testGetUpdateAppIntent_UpdateRequired_MinVersionHigher() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataWithMinVersion(MINIMUM_VERSION)); - packageInfo.versionCode = MINIMUM_VERSION - 1; - Intent intent = pendingDynamicLinkData.getUpdateAppIntent(mockContext); - assertNotNull(intent); - assertEquals(intent.getData(), updateAppUri); - } - - @Test - public void testGetUpdateAppIntent_NoUpdate_ZeroMinVersion() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataWithMinVersion(0)); - packageInfo.versionCode = 0; - Intent intent = pendingDynamicLinkData.getUpdateAppIntent(mockContext); - assertNull(intent); - } - - @Test - public void testGetUpdateAppIntent_NoUpdate_SameVersion() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataWithMinVersion(MINIMUM_VERSION)); - packageInfo.versionCode = MINIMUM_VERSION; - Intent intent = pendingDynamicLinkData.getUpdateAppIntent(mockContext); - assertNull(intent); - } - - @Test - public void testGetUpdateAppIntent_NoUpdate_MinVersionLower() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataWithMinVersion(MINIMUM_VERSION)); - packageInfo.versionCode = MINIMUM_VERSION + 1; - Intent intent = pendingDynamicLinkData.getUpdateAppIntent(mockContext); - assertNull(intent); - } - - @Test - public void testGetUpdateAppIntent_NameNotFoundException() throws Exception { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataWithMinVersion(MINIMUM_VERSION)); - packageInfo.versionCode = 0; - when(mockPackageManager.getPackageInfo(eq(PACKAGE_NAME), anyInt())) - .thenThrow(new PackageManager.NameNotFoundException()); - Intent intent = pendingDynamicLinkData.getUpdateAppIntent(mockContext); - assertNull(intent); - } - - @Test - public void testGetUtmParameters_WithEmptyUTMParams() { - PendingDynamicLinkData pendingDynamicLinkData = - new PendingDynamicLinkData(createDynamicLinkDataExtensions()); - assertNotNull(pendingDynamicLinkData.getUtmParameters()); - assertEquals(pendingDynamicLinkData.getUtmParameters().size(), 0); - } - - @Test - public void testGetUtmParameters_WithNonEmptyUTMParams() { - Bundle scionBundle = new Bundle(); - Bundle campaignBundle = new Bundle(); - scionBundle.putBundle(DynamicLinkUTMParams.KEY_CAMPAIGN_BUNDLE, campaignBundle); - campaignBundle.putString(DynamicLinkUTMParams.KEY_MEDIUM, "m"); - campaignBundle.putString(DynamicLinkUTMParams.KEY_SOURCE, "s"); - campaignBundle.putString(DynamicLinkUTMParams.KEY_CAMPAIGN, "c"); - - DynamicLinkData dynamicLinkData = createDynamicLinkDataExtensions(); - dynamicLinkData - .getExtensionBundle() - .putBundle(DynamicLinkUTMParams.KEY_SCION_DATA_BUNDLE, scionBundle); - PendingDynamicLinkData pendingDynamicLinkData = new PendingDynamicLinkData(dynamicLinkData); - - Bundle utmParamsBundle = pendingDynamicLinkData.getUtmParameters(); - assertNotNull(utmParamsBundle); - assertNotSame(utmParamsBundle.size(), 0); - - // Comparing Utm params - assertEquals(utmParamsBundle.getString(DynamicLinkUTMParams.KEY_UTM_MEDIUM), "m"); - assertEquals(utmParamsBundle.getString(DynamicLinkUTMParams.KEY_UTM_SOURCE), "s"); - assertEquals(utmParamsBundle.getString(DynamicLinkUTMParams.KEY_UTM_CAMPAIGN), "c"); - } - - private DynamicLinkData createDynamicLinkData() { - return new DynamicLinkData( - DYNAMIC_LINK, DEEP_LINK, MINIMUM_VERSION, CLICK_TIMESTAMP, null, updateAppUri); - } - - private DynamicLinkData createDynamicLinkDataWithMinVersion(int minVersion) { - return new DynamicLinkData( - DYNAMIC_LINK, DEEP_LINK, minVersion, CLICK_TIMESTAMP, null, updateAppUri); - } - - private DynamicLinkData createDynamicLinkDataExtensions() { - Bundle bundle = new Bundle(); - bundle.putString(KEY_TEST_STRING, TEST_STRING_VALUE); - bundle.putInt(KEY_TEST_INT, TEST_INT_VALUE); - return new DynamicLinkData( - DYNAMIC_LINK, DEEP_LINK, MINIMUM_VERSION, CLICK_TIMESTAMP, bundle, updateAppUri); - } - - private DynamicLinkData createDataLinkDataZeroValues() { - return new DynamicLinkData(null, null, 0, 0L, null, null); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/AnalyticsValidator.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/AnalyticsValidator.java deleted file mode 100644 index efa217c643f..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/AnalyticsValidator.java +++ /dev/null @@ -1,56 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.firebase.dynamiclinks.internal; - -import android.os.Bundle; -import com.google.auto.value.AutoValue; -import com.google.common.collect.ImmutableList; -import com.google.firebase.analytics.connector.AnalyticsConnector.ConditionalUserProperty; -import java.util.List; -import java.util.Map; -import javax.annotation.Nullable; - -/** A validator for checking that the Analytics events and properties are set properly. */ -public interface AnalyticsValidator { - - /** A representation of a Analytics Event for validation purposes. */ - @AutoValue - public abstract static class LoggedEvent { - public static LoggedEvent create(String origin, String name, Bundle params) { - return new AutoValue_AnalyticsValidator_LoggedEvent(origin, name, params); - } - - public abstract String getOrigin(); - - public abstract String getName(); - - @Nullable - public abstract Bundle getParams(); - } - - /** Resets the saved data between test cases. */ - void reset(); - - /** Returns all events that have been logged in the order that they were logged. */ - ImmutableList getLoggedEvents(); - - /** Returns all event names that have been logged in the order that they were logged. */ - ImmutableList getLoggedEventNames(); - - /** Returns all user properties that have been set without order. */ - Map getUserProperties(boolean includeInternal); - - /** Returns all conditional user properties that have been set in the order that they were set. */ - List getConditionalUserProperties(); -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinkDataTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinkDataTest.java deleted file mode 100644 index 36ff9bb4075..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinkDataTest.java +++ /dev/null @@ -1,186 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNull; -import static junit.framework.Assert.assertTrue; - -import android.net.Uri; -import android.os.Bundle; -import android.os.Parcel; -import java.util.Set; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class DynamicLinkDataTest { - private static final String DEEP_LINK = "http://deeplink"; - private static final String DYNAMIC_LINK = "http://test.com/dynamic?link=" + DEEP_LINK; - private static final int MINIMUM_VERSION = 1234; - private static final long CLICK_TIMESTAMP = 54321L; - private static final String KEY_TEST_STRING = "com.google.test.value.STRING"; - private static final String KEY_TEST_INT = "com.google.test.value.INT"; - private static final String KEY_TEST_EXTRA = "com.google.test.value.EXTRA"; - private static final String TEST_STRING_VALUE = "testString"; - private static final int TEST_INT_VALUE = 321; - private Uri updateAppUri; - - @Before - public void setUp() { - // Create uri with properly escaped query params. - updateAppUri = - Uri.parse("market://details?id=com.google.android.gm&min_version=10") - .buildUpon() - .appendQueryParameter("url", "http://example.google.com") - .build(); - } - - @Test - public void testConstructor() { - DynamicLinkData data = genDynamicLinkData(); - - assertEquals(DYNAMIC_LINK, data.getDynamicLink()); - assertEquals(DEEP_LINK, data.getDeepLink()); - assertEquals(MINIMUM_VERSION, data.getMinVersion()); - assertEquals(CLICK_TIMESTAMP, data.getClickTimestamp()); - assertEquals(updateAppUri, data.getRedirectUrl()); - } - - @Test - public void testConstructor_EmptyValues() { - DynamicLinkData data = genEmptyDynamicLinkData(); - - assertNull(data.getDynamicLink()); - assertNull(data.getDeepLink()); - assertEquals(0, data.getMinVersion()); - assertEquals(0L, data.getClickTimestamp()); - assertNull(data.getRedirectUrl()); - } - - @Test - public void testSetMinVersion() { - DynamicLinkData data = genEmptyDynamicLinkData(); - assertEquals(0, data.getMinVersion()); - data.setMinVersion(MINIMUM_VERSION); - assertEquals(MINIMUM_VERSION, data.getMinVersion()); - } - - @Test - public void testSetClickTimestamp() { - DynamicLinkData data = genEmptyDynamicLinkData(); - assertEquals(0L, data.getClickTimestamp()); - data.setClickTimestamp(CLICK_TIMESTAMP); - assertEquals(CLICK_TIMESTAMP, data.getClickTimestamp()); - } - - @Test - public void testSetDynamicLink() { - DynamicLinkData data = genEmptyDynamicLinkData(); - assertNull(data.getDynamicLink()); - data.setDynamicLink(DYNAMIC_LINK); - assertEquals(DYNAMIC_LINK, data.getDynamicLink()); - } - - @Test - public void testSetDeepLink() { - DynamicLinkData data = genEmptyDynamicLinkData(); - assertNull(data.getDeepLink()); - data.setDeepLink(DEEP_LINK); - assertEquals(DEEP_LINK, data.getDeepLink()); - } - - @Test - public void testSetRedirectUrl() { - DynamicLinkData data = genEmptyDynamicLinkData(); - assertNull(data.getRedirectUrl()); - data.setRedirectUrl(updateAppUri); - assertEquals(updateAppUri, data.getRedirectUrl()); - } - - @Test - public void testSetExtension() { - DynamicLinkData data = genDynamicLinkData(); - Bundle bundle = data.getExtensionBundle(); - // Make sure data isn't present beforehand. - assertFalse(bundle.containsKey(KEY_TEST_STRING)); - assertFalse(bundle.containsKey(KEY_TEST_INT)); - // Add extension data. - addExtension(data); - // Get extensions and validate. - Bundle updatedBundle = data.getExtensionBundle(); - assertNotNull(updatedBundle); - assertEquals(TEST_STRING_VALUE, updatedBundle.getString(KEY_TEST_STRING, null)); - assertEquals(TEST_INT_VALUE, updatedBundle.getInt(KEY_TEST_INT)); - } - - @Test - public void testWriteToParcel() { - DynamicLinkData writtenLinkData = addExtension(genDynamicLinkData()); - Parcel out = Parcel.obtain(); - writtenLinkData.writeToParcel(out, 0); - out.setDataPosition(0); - - DynamicLinkData createdDynamicLink = DynamicLinkData.CREATOR.createFromParcel(out); - assertEquals(writtenLinkData.getDynamicLink(), createdDynamicLink.getDynamicLink()); - assertEquals(writtenLinkData.getDeepLink(), createdDynamicLink.getDeepLink()); - assertEquals(writtenLinkData.getClickTimestamp(), createdDynamicLink.getClickTimestamp()); - assertEquals(writtenLinkData.getMinVersion(), createdDynamicLink.getMinVersion()); - Bundle writtenBundle = writtenLinkData.getExtensionBundle(); - Bundle createdBundle = createdDynamicLink.getExtensionBundle(); - assertEquals(writtenBundle.size(), createdBundle.size()); - Set createdKeys = createdBundle.keySet(); - Set writtenKeys = writtenBundle.keySet(); - assertTrue(createdKeys.containsAll(writtenKeys)); - } - - @Test - public void testExtension_DifferentBundle() { - DynamicLinkData originalDynamicLink = addExtension(genDynamicLinkData()); - DynamicLinkData extraDynamicLink = addExtension(genDynamicLinkData()); - // Add one more bundle key. - Bundle bundle = extraDynamicLink.getExtensionBundle(); - bundle.putString(KEY_TEST_EXTRA, TEST_STRING_VALUE); - extraDynamicLink.setExtensionData(bundle); - Bundle originalBundle = originalDynamicLink.getExtensionBundle(); - Bundle extraBundle = extraDynamicLink.getExtensionBundle(); - Set extraKeys = extraBundle.keySet(); - Set originalKeys = originalBundle.keySet(); - assertTrue(extraKeys.containsAll(originalKeys)); - // Identify that the bundles are different, missing keys. - assertFalse(originalKeys.containsAll(extraKeys)); - } - - private DynamicLinkData genDynamicLinkData() { - return new DynamicLinkData( - DYNAMIC_LINK, DEEP_LINK, MINIMUM_VERSION, CLICK_TIMESTAMP, null, updateAppUri); - } - - private DynamicLinkData genEmptyDynamicLinkData() { - return new DynamicLinkData(null, null, 0, 0L, null, null); - } - - private DynamicLinkData addExtension(DynamicLinkData dynamicLinkData) { - Bundle bundle = dynamicLinkData.getExtensionBundle(); - bundle.putString(KEY_TEST_STRING, TEST_STRING_VALUE); - bundle.putInt(KEY_TEST_INT, TEST_INT_VALUE); - dynamicLinkData.setExtensionData(bundle); - return dynamicLinkData; - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinkUTMParamsTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinkUTMParamsTest.java deleted file mode 100644 index 9dbbcea97b3..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinkUTMParamsTest.java +++ /dev/null @@ -1,117 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertFalse; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; - -import android.os.Bundle; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class DynamicLinkUTMParamsTest { - - @Test - public void testAsBundle_WithNullExtensions() { - DynamicLinkUTMParams dynamicLinkUTMParams = new DynamicLinkUTMParams(getDynamicLinkData(null)); - assertNonNullEmptyBundle(dynamicLinkUTMParams.asBundle()); - } - - @Test - public void testAsBundle_WithExtensionsButNullScionBundle() { - Bundle extensions = getExtensions(); - extensions.remove(DynamicLinkUTMParams.KEY_SCION_DATA_BUNDLE); - DynamicLinkUTMParams dynamicLinkUTMParams = - new DynamicLinkUTMParams(getDynamicLinkData(extensions)); - assertNonNullEmptyBundle(dynamicLinkUTMParams.asBundle()); - } - - @Test - public void testAsBundle_WithExtensionsButNullCampaignBundle() { - Bundle extensions = getExtensions(); - extensions - .getBundle(DynamicLinkUTMParams.KEY_SCION_DATA_BUNDLE) - .remove(DynamicLinkUTMParams.KEY_CAMPAIGN_BUNDLE); - DynamicLinkUTMParams dynamicLinkUTMParams = - new DynamicLinkUTMParams(getDynamicLinkData(extensions)); - assertNonNullEmptyBundle(dynamicLinkUTMParams.asBundle()); - } - - @Test - public void testAsBundle_WithExtensionsButNullUtmParams() { - DynamicLinkUTMParams dynamicLinkUTMParams = - new DynamicLinkUTMParams(getDynamicLinkData(getExtensions())); - assertNonNullEmptyBundle(dynamicLinkUTMParams.asBundle()); - } - - @Test - public void testAsBundle_WithExtensionsButEmptyUtmParams() { - DynamicLinkUTMParams dynamicLinkUTMParams = - new DynamicLinkUTMParams(getDynamicLinkData(getExtensions("", "", ""))); - assertNonNullEmptyBundle(dynamicLinkUTMParams.asBundle()); - } - - @Test - public void testAsBundle_WithExtensionsContainingUtmParams() { - DynamicLinkUTMParams dynamicLinkUTMParams = - new DynamicLinkUTMParams(getDynamicLinkData(getExtensions("m", "s", "c"))); - // Non empty check - assertFalse(isEmptyBundle(dynamicLinkUTMParams.asBundle())); - - // Comparing Utm params - assertEquals( - dynamicLinkUTMParams.asBundle().getString(DynamicLinkUTMParams.KEY_UTM_MEDIUM), "m"); - assertEquals( - dynamicLinkUTMParams.asBundle().getString(DynamicLinkUTMParams.KEY_UTM_SOURCE), "s"); - assertEquals( - dynamicLinkUTMParams.asBundle().getString(DynamicLinkUTMParams.KEY_UTM_CAMPAIGN), "c"); - } - - private void assertNonNullEmptyBundle(Bundle bundle) { - assertNotNull(bundle); - assertTrue(isEmptyBundle(bundle)); - } - - private boolean isEmptyBundle(Bundle bundle) { - return bundle.size() == 0; - } - - private Bundle getExtensions() { - return getExtensions(null, null, null); - } - - private Bundle getExtensions(String medium, String source, String campaign) { - Bundle bundle = new Bundle(); - Bundle scionBundle = new Bundle(); - Bundle campaignBundle = new Bundle(); - - bundle.putBundle(DynamicLinkUTMParams.KEY_SCION_DATA_BUNDLE, scionBundle); - scionBundle.putBundle(DynamicLinkUTMParams.KEY_CAMPAIGN_BUNDLE, campaignBundle); - - campaignBundle.putString(DynamicLinkUTMParams.KEY_MEDIUM, medium); - campaignBundle.putString(DynamicLinkUTMParams.KEY_SOURCE, source); - campaignBundle.putString(DynamicLinkUTMParams.KEY_CAMPAIGN, campaign); - - return bundle; - } - - private DynamicLinkData getDynamicLinkData(Bundle extensions) { - return new DynamicLinkData(null, null, 0, 0L, extensions, null); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinksClientTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinksClientTest.java deleted file mode 100644 index 9f8e40ffd87..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/DynamicLinksClientTest.java +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.fail; - -import android.os.Bundle; -import android.os.IBinder; -import android.os.Looper; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.test.core.app.ApplicationProvider; -import com.google.android.gms.common.ConnectionResult; -import com.google.android.gms.common.api.GoogleApiClient; -import com.google.android.gms.common.internal.ClientSettings; -import com.google.firebase.dynamiclinks.internal.FirebaseDynamicLinksImpl.DynamicLinkCallbacks; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - -@RunWith(RobolectricTestRunner.class) -public class DynamicLinksClientTest { - - private static final String REAL_CLIENT_PACKAGE_NAME = "real.client.package.name"; - private static final String DYNAMIC_LINK = "http://appcode.app.goo.gl/?link=http://deeplink.com"; - - private static final GoogleApiClient.ConnectionCallbacks CONNECTED_LISTENER = - new GoogleApiClient.ConnectionCallbacks() { - - @Override - public void onConnected(@Nullable Bundle connectionHint) {} - - @Override - public void onConnectionSuspended(int cause) {} - }; - private static final GoogleApiClient.OnConnectionFailedListener CONNECTION_FAILED_LISTENER = - new GoogleApiClient.OnConnectionFailedListener() { - - @Override - public void onConnectionFailed(@NonNull ConnectionResult result) {} - }; - - @Mock DynamicLinksClient client; - @Mock IDynamicLinksService mockService; - @Mock DynamicLinkCallbacks mockCallbacks; - - private Bundle parameters; - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - - parameters = new Bundle(); - ClientSettings clientSettings = - new ClientSettings(null, null, null, 0, null, REAL_CLIENT_PACKAGE_NAME, null, null); - - client = - new DynamicLinksClient( - ApplicationProvider.getApplicationContext(), - Looper.getMainLooper(), - clientSettings, - CONNECTED_LISTENER, - CONNECTION_FAILED_LISTENER); - } - - @Test - public void testGetStartServiceAction() { - assertEquals(DynamicLinksClient.ACTION_START_SERVICE, client.getStartServiceAction()); - } - - @Test - public void testGetServiceDescriptor() { - assertEquals(DynamicLinksClient.SERVICE_DESCRIPTOR, client.getServiceDescriptor()); - } - - @Test - public void testCreateServiceInterface() { - IBinder mockBinder = Mockito.mock(IBinder.class); - client.createServiceInterface(mockBinder); - } - - @Test - public void testGetDynamicLink_NotConnected() { - try { - client.getDynamicLink(mockCallbacks, DYNAMIC_LINK); - fail("Expected IllegalStateException"); - } catch (IllegalStateException expected) { - // Pass. - } - } - - @Test - public void testCreateShortDynamicLink_NotConnected() { - try { - client.createShortDynamicLink(mockCallbacks, parameters); - fail("Expected IllegalStateException"); - } catch (IllegalStateException expected) { - // Pass. - } - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FakeAnalyticsConnector.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FakeAnalyticsConnector.java deleted file mode 100644 index 3e78d27cab8..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FakeAnalyticsConnector.java +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import android.os.Bundle; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.firebase.analytics.connector.AnalyticsConnector; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * A fast, deterministic, fake implementation of AnalyticsConnector to be used for unit testing. - * - *

It provides support for logging events, setting/getting user properties, and setting/getting - * conditional user properties. - */ -public class FakeAnalyticsConnector implements AnalyticsConnector, AnalyticsValidator { - - private static final String CAMPAIGN_INFO_SOURCE = "_cis"; - private static final String FCM_CONNECTOR_CAMPAIGN = "fcm_integration"; - private final List events = new ArrayList<>(); - private final Map userProperties = new HashMap<>(); - private final List conditionalUserProperties = new ArrayList<>(); - - @Override - public AnalyticsConnectorHandle registerAnalyticsConnectorListener( - String origin, AnalyticsConnectorListener listener) { - return null; - } - - @Override - public void logEvent(String origin, String name, Bundle params) { - if (origin.equals("fcm")) { - params.putString(CAMPAIGN_INFO_SOURCE, FCM_CONNECTOR_CAMPAIGN); - } - events.add(AnalyticsValidator.LoggedEvent.create(origin, name, params)); - } - - @Override - public void setUserProperty(String origin, String name, Object value) { - userProperties.put(name, value); - } - - @Override - public Map getUserProperties(boolean includeInternal) { - ImmutableMap.Builder filteredProperties = ImmutableMap.builder(); - for (Entry property : userProperties.entrySet()) { - if (includeInternal || !property.getKey().startsWith("_")) { - filteredProperties.put(property); - } - } - return filteredProperties.build(); - } - - @Override - public void setConditionalUserProperty(ConditionalUserProperty conditionalUserProperty) { - conditionalUserProperties.add(conditionalUserProperty); - } - - @Override - public void clearConditionalUserProperty( - String userPropertyName, String clearEventName, Bundle clearEventParams) { - for (Iterator iterator = conditionalUserProperties.iterator(); - iterator.hasNext(); ) { - ConditionalUserProperty conditionalUserProperty = iterator.next(); - if (conditionalUserProperty.name.equals(userPropertyName)) { - iterator.remove(); - logEvent(conditionalUserProperty.origin, clearEventName, clearEventParams); - } - } - } - - @Override - public int getMaxUserProperties(String origin) { - return 25; - } - - @Override - public List getConditionalUserProperties( - String origin, String propertyNamePrefix) { - ImmutableList.Builder filteredProperties = ImmutableList.builder(); - for (ConditionalUserProperty property : conditionalUserProperties) { - if (property.origin.equals(origin) && property.name.startsWith(propertyNamePrefix)) { - filteredProperties.add(property); - } - } - return filteredProperties.build(); - } - - @Override - public List getConditionalUserProperties() { - return conditionalUserProperties; - } - - @Override - public ImmutableList getLoggedEvents() { - return ImmutableList.copyOf(events); - } - - @Override - public ImmutableList getLoggedEventNames() { - ImmutableList.Builder names = ImmutableList.builder(); - for (AnalyticsValidator.LoggedEvent event : events) { - names.add(event.getName()); - } - return names.build(); - } - - @Override - public void reset() { - events.clear(); - userProperties.clear(); - conditionalUserProperties.clear(); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FakeConnectorComponent.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FakeConnectorComponent.java deleted file mode 100644 index e9ce91f14e7..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FakeConnectorComponent.java +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2021 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package com.google.firebase.dynamiclinks.internal; - -import com.google.firebase.analytics.connector.AnalyticsConnector; -import com.google.firebase.components.Component; -import com.google.firebase.components.ComponentRegistrar; -import java.util.Arrays; -import java.util.List; - -/** - * A component that injects a FakeAnalyticsConnector. - * - *

The FakeAnalyticsConnector should be used in open source testing to validate interactions with - * the AnalyticsConnector. Use getAnalyticsValidator() for validating. - */ -public final class FakeConnectorComponent implements ComponentRegistrar { - - private static final FakeAnalyticsConnector analyticsConnector = new FakeAnalyticsConnector(); - - @Override - public List> getComponents() { - Component connector = - Component.builder(AnalyticsConnector.class) - .factory(container -> analyticsConnector) - .build(); - return Arrays.asList(connector); - } - - /** - * Returns an AnalyticsValidator that can be used to validate interactions with the - * FakeAnalyticsConnector. - */ - public static AnalyticsValidator getAnalyticsValidator() { - return analyticsConnector; - } - - /** Provides access to an instance of AnalyticsConnector. */ - public static AnalyticsConnector getAnalyticsConnector() { - return analyticsConnector; - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImplTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImplTest.java deleted file mode 100644 index 3e64dbea17b..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/FirebaseDynamicLinksImplTest.java +++ /dev/null @@ -1,347 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertNull; -import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.verify; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.os.RemoteException; -import androidx.test.core.app.ApplicationProvider; -import com.google.android.gms.common.api.Status; -import com.google.android.gms.common.api.internal.TaskApiCall; -import com.google.android.gms.common.internal.safeparcel.SafeParcelableSerializer; -import com.google.android.gms.tasks.Task; -import com.google.android.gms.tasks.TaskCompletionSource; -import com.google.firebase.FirebaseApp; -import com.google.firebase.FirebaseOptions; -import com.google.firebase.analytics.connector.AnalyticsConnector; -import com.google.firebase.dynamiclinks.DynamicLink.Builder; -import com.google.firebase.dynamiclinks.PendingDynamicLinkData; -import com.google.firebase.dynamiclinks.ShortDynamicLink; -import com.google.firebase.dynamiclinks.internal.FirebaseDynamicLinksImpl.CreateShortDynamicLinkImpl; -import com.google.firebase.inject.Provider; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.ArgumentMatchers; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.robolectric.RobolectricTestRunner; - -/** Test {@link FirebaseDynamicLinksImpl}. */ -@RunWith(RobolectricTestRunner.class) -public class FirebaseDynamicLinksImplTest { - - private static final String DEEP_LINK = "http://deeplink"; - private static final String DYNAMIC_LINK = "http://test.com/dynamic?link=" + DEEP_LINK; - private static final int MINIMUM_VERSION = 1234; - private static final long CLICK_TIMESTAMP = 54321L; - - private static final String FDL_SCHEME = "https"; - private static final String LONG_LINK = "https://long.link"; - private static final String DOMAIN = "https://domain"; - private static final String AUTHORITY = "domain"; - private static final String PARAMETER = "parameter"; - private static final String VALUE = "value"; - - private static final String SCION_EVENT_NAME = "eventName"; - - private static final String EXTRA_DYNAMIC_LINK_DATA = - "com.google.firebase.dynamiclinks.DYNAMIC_LINK_DATA"; - - private static final String ANALYTICS_FDL_ORIGIN = "fdl"; - - private final AnalyticsValidator fakeAppMeasurement = - FakeConnectorComponent.getAnalyticsValidator(); - private final Provider mockAnalytics = - FakeConnectorComponent::getAnalyticsConnector; - - @Mock private DynamicLinksApi mockGoogleApi; - @Mock private TaskCompletionSource mockCompletionSource; - @Mock private TaskCompletionSource mockShortFDLCompletionSource; - @Mock private DynamicLinksClient mockDynamicLinksClient; - private FirebaseApp firebaseApp; - private FirebaseDynamicLinksImpl api; - private Uri updateAppUri; - - private static Bundle createDynamicLinkBundle() { - Bundle builderParameters = new Bundle(); - builderParameters.putParcelable(Builder.KEY_DYNAMIC_LINK, Uri.parse(LONG_LINK)); - return builderParameters; - } - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - fakeAppMeasurement.reset(); - FirebaseApp.clearInstancesForTest(); - FirebaseOptions.Builder firebaseOptionsBuilder = - new FirebaseOptions.Builder().setApplicationId("application_id").setApiKey("api_key"); - firebaseApp = - FirebaseApp.initializeApp( - ApplicationProvider.getApplicationContext(), firebaseOptionsBuilder.build()); - // Create uri with properly escaped query params. - updateAppUri = - Uri.parse("market://details?id=com.google.android.gm&min_version=10") - .buildUpon() - .appendQueryParameter("url", "http://example.google.com") - .build(); - api = new FirebaseDynamicLinksImpl(mockGoogleApi, firebaseApp, mockAnalytics); - } - - @Test - public void testFirebaseDynamicLinksImpl() { - FirebaseDynamicLinksImpl impl = new FirebaseDynamicLinksImpl(firebaseApp, mockAnalytics); - assertNotNull(impl); - } - - @Test - public void testGetPendingDynamicLinkData() { - Bundle extensions = new Bundle(); - extensions.putString(PARAMETER, VALUE); - DynamicLinkData dynamicLinkData = - new DynamicLinkData( - DYNAMIC_LINK, - DEEP_LINK, - MINIMUM_VERSION, - CLICK_TIMESTAMP, - extensions, - null /* redirectUrl */); - Intent intent = new Intent(); - SafeParcelableSerializer.serializeToIntentExtra( - dynamicLinkData, intent, EXTRA_DYNAMIC_LINK_DATA); - - PendingDynamicLinkData pendingDynamicLinkData = api.getPendingDynamicLinkData(intent); - assertNotNull(pendingDynamicLinkData); - assertEquals(Uri.parse(DEEP_LINK), pendingDynamicLinkData.getLink()); - assertEquals(MINIMUM_VERSION, pendingDynamicLinkData.getMinimumAppVersion()); - assertEquals(CLICK_TIMESTAMP, pendingDynamicLinkData.getClickTimestamp()); - Bundle returnExtensions = pendingDynamicLinkData.getExtensions(); - assertEquals(extensions.keySet(), returnExtensions.keySet()); - for (String key : extensions.keySet()) { - assertEquals(extensions.getString(key), returnExtensions.getString(key)); - } - assertNull(pendingDynamicLinkData.getRedirectUrl()); - } - - @Test - public void testGetPendingDynamicLinkData_NoDynamicLinkData() { - assertNull(api.getPendingDynamicLinkData(new Intent())); - } - - @Test - public void testGetDynamicLink_Intent() { - Intent intent = new Intent(); - api.getDynamicLink(intent); - verify(mockGoogleApi) - .doWrite(ArgumentMatchers.>any()); - } - - @Test - public void testGetDynamicLink_NullIntent() { - api.getDynamicLink((Intent) null); - verify(mockGoogleApi) - .doWrite(ArgumentMatchers.>any()); - } - - @Test - public void testGetDynamicLink_IntentWithDynamicLinkData() { - Bundle extensions = new Bundle(); - extensions.putString(PARAMETER, VALUE); - DynamicLinkData dynamicLinkData = - new DynamicLinkData( - DYNAMIC_LINK, - DEEP_LINK, - MINIMUM_VERSION, - CLICK_TIMESTAMP, - extensions, - null /* redirectUrl */); - Intent intent = new Intent(); - SafeParcelableSerializer.serializeToIntentExtra( - dynamicLinkData, intent, EXTRA_DYNAMIC_LINK_DATA); - - Task task = api.getDynamicLink(intent); - verify(mockGoogleApi) - .doWrite(ArgumentMatchers.>any()); - assertTrue(task.isComplete()); - assertTrue(task.isSuccessful()); - PendingDynamicLinkData pendingDynamicLinkData = task.getResult(); - assertNotNull(pendingDynamicLinkData); - assertEquals(Uri.parse(DEEP_LINK), pendingDynamicLinkData.getLink()); - assertEquals(MINIMUM_VERSION, pendingDynamicLinkData.getMinimumAppVersion()); - assertEquals(CLICK_TIMESTAMP, pendingDynamicLinkData.getClickTimestamp()); - Bundle returnExtensions = pendingDynamicLinkData.getExtensions(); - assertEquals(extensions.keySet(), returnExtensions.keySet()); - for (String key : extensions.keySet()) { - assertEquals(extensions.getString(key), returnExtensions.getString(key)); - } - assertNull(pendingDynamicLinkData.getRedirectUrl()); - } - - @Test - public void testDynamicLinkCallbacks_onGetDynamicLink() { - FirebaseDynamicLinksImpl.DynamicLinkCallbacks callbacks = - new FirebaseDynamicLinksImpl.DynamicLinkCallbacks(mockAnalytics, mockCompletionSource); - Bundle scionParams = new Bundle(); - DynamicLinkData data = genDynamicLinkData(scionParams); - callbacks.onGetDynamicLink(Status.RESULT_SUCCESS, data); - verify(mockCompletionSource).setResult(any(PendingDynamicLinkData.class)); - AnalyticsValidator.LoggedEvent event = fakeAppMeasurement.getLoggedEvents().get(0); - assertEquals(ANALYTICS_FDL_ORIGIN, event.getOrigin()); - assertEquals(SCION_EVENT_NAME, event.getName()); - assertEquals(scionParams, event.getParams()); - } - - @Test - public void testDynamicLinkCallbacks_onGetDynamicLink_missingAnalytics() { - // Make sure that a result is returned even if scion is not linked. - FirebaseDynamicLinksImpl.DynamicLinkCallbacks callbacks = - new FirebaseDynamicLinksImpl.DynamicLinkCallbacks( - /* analytics= */ () -> null, mockCompletionSource); - DynamicLinkData data = genDynamicLinkData(new Bundle()); - callbacks.onGetDynamicLink(Status.RESULT_SUCCESS, data); - verify(mockCompletionSource).setResult(any(PendingDynamicLinkData.class)); - } - - @Test - public void testDynamicLinkCallbacks_onGetDynamicLink_NoData() { - FirebaseDynamicLinksImpl.DynamicLinkCallbacks callbacks = - new FirebaseDynamicLinksImpl.DynamicLinkCallbacks(mockAnalytics, mockCompletionSource); - callbacks.onGetDynamicLink(Status.RESULT_SUCCESS, null); - verify(mockCompletionSource).setResult(null); - } - - @Test - public void testDynamicLinkCallbacks_onGetDynamicLink_Exception() { - FirebaseDynamicLinksImpl.DynamicLinkCallbacks callbacks = - new FirebaseDynamicLinksImpl.DynamicLinkCallbacks(mockAnalytics, mockCompletionSource); - callbacks.onGetDynamicLink(Status.RESULT_INTERNAL_ERROR, null); - verify(mockCompletionSource).setException(any(Exception.class)); - } - - @Test - public void testGetDynamicLink_Uri() { - Uri dynamicLink = Uri.parse(DYNAMIC_LINK); - api.getDynamicLink(dynamicLink); - verify(mockGoogleApi) - .doWrite(ArgumentMatchers.>any()); - } - - @Test - public void testGetDynamicLink_doExecute() { - final FirebaseDynamicLinksImpl.GetDynamicLinkImpl getDynamicLink = - new FirebaseDynamicLinksImpl.GetDynamicLinkImpl(mockAnalytics, DYNAMIC_LINK); - try { - getDynamicLink.doExecute(mockDynamicLinksClient, mockCompletionSource); - ArgumentCaptor captorCallbacks = - ArgumentCaptor.forClass(IDynamicLinksCallbacks.Stub.class); - - verify(mockDynamicLinksClient).getDynamicLink(captorCallbacks.capture(), eq(DYNAMIC_LINK)); - captorCallbacks - .getValue() - .onGetDynamicLink(Status.RESULT_SUCCESS, genDynamicLinkData(new Bundle())); - } catch (RemoteException e) { - fail("Unexpected Remote Exception"); - } - } - - @Test - public void testCreateDynamicLink() { - assertNotNull(api.createDynamicLink()); - } - - @Test - public void testCreateDynamicLink_Bundle_LongLink() { - Uri dynamicLink = FirebaseDynamicLinksImpl.createDynamicLink(createDynamicLinkBundle()); - assertEquals(LONG_LINK, dynamicLink.toString()); - } - - @Test - public void testCreateDynamicLink_Bundle_Parameters() { - Bundle builderParameters = new Bundle(); - builderParameters.putString(Builder.KEY_DOMAIN_URI_PREFIX, DOMAIN); - Bundle fdlParameters = new Bundle(); - fdlParameters.putString(PARAMETER, VALUE); - builderParameters.putBundle(Builder.KEY_DYNAMIC_LINK_PARAMETERS, fdlParameters); - Uri dynamicLink = FirebaseDynamicLinksImpl.createDynamicLink(builderParameters); - assertEquals(FDL_SCHEME, dynamicLink.getScheme()); - assertEquals(AUTHORITY, dynamicLink.getAuthority()); - assertEquals(VALUE, dynamicLink.getQueryParameter(PARAMETER)); - } - - @Test - public void testCreateShortDynamicLink() { - api.createShortDynamicLink(createDynamicLinkBundle()); - verify(mockGoogleApi).doWrite(any(CreateShortDynamicLinkImpl.class)); - } - - @Test - public void testCreateShortDynamicLink_doExecute() { - Bundle bundle = createDynamicLinkBundle(); - final FirebaseDynamicLinksImpl.CreateShortDynamicLinkImpl createShortDynamicLink = - new FirebaseDynamicLinksImpl.CreateShortDynamicLinkImpl(bundle); - try { - createShortDynamicLink.doExecute(mockDynamicLinksClient, mockShortFDLCompletionSource); - ArgumentCaptor captorCallbacks = - ArgumentCaptor.forClass(IDynamicLinksCallbacks.Stub.class); - - verify(mockDynamicLinksClient).createShortDynamicLink(captorCallbacks.capture(), eq(bundle)); - captorCallbacks.getValue().onCreateShortDynamicLink(Status.RESULT_SUCCESS, null); - } catch (RemoteException e) { - fail("Unexpected Remote Exception"); - } - } - - @Test - public void testverifyDomainUriPrefix_LongLink() { - // Should not throw an Exception. - FirebaseDynamicLinksImpl.verifyDomainUriPrefix(createDynamicLinkBundle()); - } - - @Test - public void testverifyDomainUriPrefix_WithDomain() { - // Should not throw an Exception. - FirebaseDynamicLinksImpl.verifyDomainUriPrefix(createDynamicLinkBundle()); - } - - @Test - public void testverifyDomainUriPrefix_WithNoDomain() { - try { - FirebaseDynamicLinksImpl.verifyDomainUriPrefix(new Bundle()); - fail("Expected IllegalArgumentException with no domain set."); - } catch (IllegalArgumentException expected) { - // Expected - } - } - - private DynamicLinkData genDynamicLinkData(Bundle scionParams) { - Bundle extensions = new Bundle(); - Bundle scionData = new Bundle(); - scionData.putBundle(SCION_EVENT_NAME, scionParams); - extensions.putBundle(FirebaseDynamicLinksImpl.KEY_SCION_DATA, scionData); - return new DynamicLinkData( - DYNAMIC_LINK, DEEP_LINK, MINIMUM_VERSION, CLICK_TIMESTAMP, extensions, updateAppUri); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImplTest.java b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImplTest.java deleted file mode 100644 index 9ccbf489672..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/internal/ShortDynamicLinkImplTest.java +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.dynamiclinks.internal; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNull; - -import android.net.Uri; -import android.os.Parcel; -import com.google.firebase.dynamiclinks.internal.ShortDynamicLinkImpl.WarningImpl; -import java.util.ArrayList; -import java.util.List; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; - -/** Test {@link com.google.firebase.dynamiclinks.internal.ShortDynamicLinkImpl}. */ -@RunWith(RobolectricTestRunner.class) -public class ShortDynamicLinkImplTest { - - private static final String SHORT_LINK_STRING = "https://short.link"; - private static final String PREVIEW_LINK_STRING = "https://preview.link"; - private static final int NUM_WARNINGS = 12; - private static final String WARNING_MESSAGE = "warningMessage"; - - private Uri shortLink; - private Uri previewLink; - - private static List createWarningList() { - List warnings = new ArrayList<>(); - for (int i = 0; i < NUM_WARNINGS; ++i) { - warnings.add(new WarningImpl(WARNING_MESSAGE + i)); - } - return warnings; - } - - @Before - public void setUp() { - shortLink = Uri.parse(SHORT_LINK_STRING); - previewLink = Uri.parse(PREVIEW_LINK_STRING); - } - - @Test - public void testConstructor() { - List warnings = createWarningList(); - ShortDynamicLinkImpl shortDynamicLink = - new ShortDynamicLinkImpl(shortLink, previewLink, warnings); - - assertEquals(shortLink, shortDynamicLink.getShortLink()); - assertEquals(previewLink, shortDynamicLink.getPreviewLink()); - assertEquals(warnings, shortDynamicLink.getWarnings()); - } - - @Test - public void testWriteToParcel() { - List warnings = createWarningList(); - ShortDynamicLinkImpl shortDynamicLink = - new ShortDynamicLinkImpl(shortLink, previewLink, warnings); - - Parcel out = Parcel.obtain(); - shortDynamicLink.writeToParcel(out, 0); - out.setDataPosition(0); - - ShortDynamicLinkImpl parcelLink = ShortDynamicLinkImpl.CREATOR.createFromParcel(out); - - assertEquals(shortDynamicLink.getShortLink(), parcelLink.getShortLink()); - assertEquals(shortDynamicLink.getPreviewLink(), parcelLink.getPreviewLink()); - List parcelWarnings = parcelLink.getWarnings(); - assertEquals(warnings.size(), parcelWarnings.size()); - for (int i = 0; i < warnings.size(); ++i) { - WarningImpl warning = warnings.get(i); - WarningImpl parcelWarning = parcelWarnings.get(i); - assertEquals(warning.getCode(), parcelWarning.getCode()); - assertEquals(warning.getMessage(), parcelWarning.getMessage()); - } - } - - @Test - public void testWarningImpl_Constructor() { - WarningImpl warning = new WarningImpl(WARNING_MESSAGE); - - assertNull(warning.getCode()); - assertEquals(WARNING_MESSAGE, warning.getMessage()); - } - - @Test - public void testContactMethod_WriteToParcel() { - WarningImpl warning = new WarningImpl(WARNING_MESSAGE); - - Parcel out = Parcel.obtain(); - warning.writeToParcel(out, 0); - out.setDataPosition(0); - - WarningImpl parcelWarning = WarningImpl.CREATOR.createFromParcel(out); - - assertEquals(warning.getCode(), parcelWarning.getCode()); - assertEquals(warning.getMessage(), parcelWarning.getMessage()); - } -} diff --git a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt b/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt deleted file mode 100644 index 48531d72990..00000000000 --- a/firebase-dynamic-links/src/test/java/com/google/firebase/dynamiclinks/ktx/DynamicLinksTests.kt +++ /dev/null @@ -1,281 +0,0 @@ -/* - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.firebase.dynamiclinks.ktx - -import android.net.Uri -import androidx.test.core.app.ApplicationProvider -import com.google.common.truth.Truth.assertThat -import com.google.firebase.FirebaseApp -import com.google.firebase.FirebaseOptions -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks -import com.google.firebase.dynamiclinks.PendingDynamicLinkData -import com.google.firebase.dynamiclinks.ShortDynamicLink -import com.google.firebase.ktx.Firebase -import com.google.firebase.ktx.app -import com.google.firebase.ktx.initialize -import org.junit.After -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith -import org.mockito.Mockito.mock -import org.mockito.Mockito.`when` -import org.robolectric.RobolectricTestRunner - -const val APP_ID = "APP_ID" -const val API_KEY = "API_KEY" - -const val EXISTING_APP = "existing" - -abstract class BaseTestCase { - @Before - fun setUp() { - Firebase.initialize( - ApplicationProvider.getApplicationContext(), - FirebaseOptions.Builder() - .setApplicationId(APP_ID) - .setApiKey(API_KEY) - .setProjectId("123") - .build() - ) - - Firebase.initialize( - ApplicationProvider.getApplicationContext(), - FirebaseOptions.Builder() - .setApplicationId(APP_ID) - .setApiKey(API_KEY) - .setProjectId("123") - .build(), - EXISTING_APP - ) - } - - @After - fun cleanUp() { - FirebaseApp.clearInstancesForTest() - } -} - -@RunWith(RobolectricTestRunner::class) -class DynamicLinksTests : BaseTestCase() { - - @Test - fun `Firebase#dynamicLinks should delegate to FirebaseDynamicLinks#getInstance()`() { - assertThat(Firebase.dynamicLinks).isSameInstanceAs(FirebaseDynamicLinks.getInstance()) - } - - @Test - fun `Firebase#dynamicLinks should delegate to FirebaseDynamicLinks#getInstance(FirebaseApp)`() { - val app = Firebase.app(EXISTING_APP) - assertThat(Firebase.dynamicLinks(app)).isSameInstanceAs(FirebaseDynamicLinks.getInstance(app)) - } - - @Test - fun `Firebase#dynamicLinks#createDynamicLink`() { - val exampleLink = "https://example.com" - val exampleDomainUriPrefix = "https://example.page.link" - - val dynamicLinkKtx = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse(exampleLink) - domainUriPrefix = exampleDomainUriPrefix - } - - val dynamicLink = - FirebaseDynamicLinks.getInstance() - .createDynamicLink() - .setLink(Uri.parse(exampleLink)) - .setDomainUriPrefix(exampleDomainUriPrefix) - .buildDynamicLink() - - assertThat(dynamicLinkKtx.uri).isEqualTo(dynamicLink.uri) - } - - @Test - fun `androidParameters type-safe builder extension works`() { - val fallbackLink = "https://android.com" - val minVersion = 19 - val packageName = "com.example.android" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - androidParameters { - minimumVersion = minVersion - fallbackUrl = Uri.parse(fallbackLink) - } - } - - val anotherDynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - androidParameters(packageName) { - minimumVersion = minVersion - fallbackUrl = Uri.parse(fallbackLink) - } - } - - assertThat(dynamicLink.uri.getQueryParameter("amv")?.toInt()).isEqualTo(minVersion) - assertThat(dynamicLink.uri.getQueryParameter("afl")).isEqualTo(fallbackLink) - - assertThat(anotherDynamicLink.uri.getQueryParameter("amv")?.toInt()).isEqualTo(minVersion) - assertThat(anotherDynamicLink.uri.getQueryParameter("afl")).isEqualTo(fallbackLink) - assertThat(anotherDynamicLink.uri.getQueryParameter("apn")).isEqualTo(packageName) - } - - @Test - fun `iosParameters type-safe builder extension works`() { - val iosAppStoreId = "123456789" - val iosMinimumVersion = "1.0.1" - val iosBundleId = "com.example.ios" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - iosParameters(iosBundleId) { - appStoreId = iosAppStoreId - minimumVersion = iosMinimumVersion - } - } - - assertThat(dynamicLink.uri.getQueryParameter("ibi")).isEqualTo(iosBundleId) - assertThat(dynamicLink.uri.getQueryParameter("imv")).isEqualTo(iosMinimumVersion) - assertThat(dynamicLink.uri.getQueryParameter("isi")).isEqualTo(iosAppStoreId) - } - - @Test - fun `googleAnalyticsParameters type-safe builder extension works`() { - val campaignTerm = "Example Term" - val campaignContent = "Example Content" - val campaignSource = "Twitter" - val campaignMedium = "Social" - val campaignName = "Example Promo" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - googleAnalyticsParameters(campaignSource, campaignMedium, campaignName) { - term = campaignTerm - content = campaignContent - } - } - - assertThat(dynamicLink.uri.getQueryParameter("utm_content")).isEqualTo(campaignContent) - assertThat(dynamicLink.uri.getQueryParameter("utm_term")).isEqualTo(campaignTerm) - assertThat(dynamicLink.uri.getQueryParameter("utm_source")).isEqualTo(campaignSource) - assertThat(dynamicLink.uri.getQueryParameter("utm_medium")).isEqualTo(campaignMedium) - assertThat(dynamicLink.uri.getQueryParameter("utm_campaign")).isEqualTo(campaignName) - } - - @Test - fun `itunesConnectAnalyticsParameters type-safe builder extension works`() { - val ct = "example-campaign" - val pt = "123456" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - itunesConnectAnalyticsParameters { - providerToken = pt - campaignToken = ct - } - } - - assertThat(dynamicLink.uri.getQueryParameter("pt")).isEqualTo(pt) - assertThat(dynamicLink.uri.getQueryParameter("ct")).isEqualTo(ct) - } - - @Test - fun `socialMetaTagParameters type-safe builder extension works`() { - val socialTitle = "Example Title" - val socialDescription = "This link works whether the app is installed or not!" - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - socialMetaTagParameters { - title = socialTitle - description = socialDescription - } - } - - assertThat(dynamicLink.uri.getQueryParameter("st")).isEqualTo(socialTitle) - assertThat(dynamicLink.uri.getQueryParameter("sd")).isEqualTo(socialDescription) - } - - @Test - fun `navigationInfoParameters type-safe builder extension works`() { - val forcedRedirect = true - - val dynamicLink = - Firebase.dynamicLinks.dynamicLink { - link = Uri.parse("https://example.com") - domainUriPrefix = "https://example.page.link" - navigationInfoParameters { forcedRedirectEnabled = true } - } - - val efr = Integer.parseInt(dynamicLink.uri.getQueryParameter("efr")!!) == 1 - assertThat(efr).isEqualTo(forcedRedirect) - } - - @Test - fun `ShortDynamicLink destructure declaration works`() { - val fakeWarning = - object : ShortDynamicLink.Warning { - override fun getMessage() = "Warning" - override fun getCode() = "warning" - } - - val expectedShortLink = Uri.parse("https://example.com") - val expectedPreviewLink = Uri.parse("https://example.com/preview") - val expectedWarnings = mutableListOf(fakeWarning) - - val mockShortDynamicLink = mock(ShortDynamicLink::class.java) - `when`(mockShortDynamicLink.shortLink).thenReturn(expectedShortLink) - `when`(mockShortDynamicLink.previewLink).thenReturn(expectedPreviewLink) - `when`(mockShortDynamicLink.warnings).thenReturn(expectedWarnings) - - val (shortLink, previewLink, warnings) = mockShortDynamicLink - - assertThat(shortLink).isEqualTo(expectedShortLink) - assertThat(previewLink).isEqualTo(expectedPreviewLink) - assertThat(warnings).isEqualTo(expectedWarnings) - } - - @Test - fun `PendingDynamicLinkData destructure declaration works`() { - val expectedLink = Uri.parse("https://example.com") - val expectedMinAppVersion = 30 - val expectedTimestamp = 172947600L - - val mockPendingData = mock(PendingDynamicLinkData::class.java) - `when`(mockPendingData.link).thenReturn(expectedLink) - `when`(mockPendingData.minimumAppVersion).thenReturn(expectedMinAppVersion) - `when`(mockPendingData.clickTimestamp).thenReturn(expectedTimestamp) - - val (link, minAppVersion, timestamp) = mockPendingData - - assertThat(link).isEqualTo(expectedLink) - assertThat(minAppVersion).isEqualTo(expectedMinAppVersion) - assertThat(timestamp).isEqualTo(expectedTimestamp) - } -} diff --git a/health-metrics/benchmark/config.yaml b/health-metrics/benchmark/config.yaml index 5ffac2d261d..8f41ef3a30f 100644 --- a/health-metrics/benchmark/config.yaml +++ b/health-metrics/benchmark/config.yaml @@ -29,7 +29,6 @@ test-apps: - com.google.firebase:firebase-appdistribution - com.google.firebase:firebase-crashlytics - com.google.firebase:firebase-database - - com.google.firebase:firebase-dynamic-links - com.google.firebase:firebase-firestore - com.google.firebase:firebase-functions - com.google.firebase:firebase-inappmessaging diff --git a/plugins/src/main/java/com/google/firebase/gradle/plugins/PublishingPlugin.kt b/plugins/src/main/java/com/google/firebase/gradle/plugins/PublishingPlugin.kt index bf6a9836763..9f8e07ca6be 100644 --- a/plugins/src/main/java/com/google/firebase/gradle/plugins/PublishingPlugin.kt +++ b/plugins/src/main/java/com/google/firebase/gradle/plugins/PublishingPlugin.kt @@ -352,7 +352,6 @@ abstract class PublishingPlugin : Plugin { "com.google.firebase:firebase-appdistribution-api", "com.google.firebase:firebase-appdistribution-api-ktx", "com.google.firebase:firebase-dynamic-module-support", - "com.google.firebase:firebase-dynamic-links-license", "com.google.firebase:firebase-functions-license", "com.google.firebase:firebase-iid-interop", "com.google.firebase:firebase-iid-license", @@ -793,8 +792,6 @@ abstract class PublishingPlugin : Plugin { "com.google.firebase:firebase-database", "com.google.firebase:firebase-dataconnect", "com.google.firebase:firebase-database-ktx", - "com.google.firebase:firebase-dynamic-links", - "com.google.firebase:firebase-dynamic-links-ktx", "com.google.firebase:firebase-encoders", "com.google.firebase:firebase-firestore", "com.google.firebase:firebase-firestore-ktx", diff --git a/plugins/src/test/resources/Bom/filled-bom.pom b/plugins/src/test/resources/Bom/filled-bom.pom index 66bd6420081..77d347ac842 100644 --- a/plugins/src/test/resources/Bom/filled-bom.pom +++ b/plugins/src/test/resources/Bom/filled-bom.pom @@ -213,11 +213,6 @@ firebase-inappmessaging-ktx 21.0.1 - - com.google.firebase - firebase-database - 21.0.0 - \ No newline at end of file diff --git a/plugins/src/test/resources/GMaven/group-index.xml b/plugins/src/test/resources/GMaven/group-index.xml index fde2bb041b1..08c5511d838 100644 --- a/plugins/src/test/resources/GMaven/group-index.xml +++ b/plugins/src/test/resources/GMaven/group-index.xml @@ -56,9 +56,6 @@ - - - diff --git a/smoke-tests/build.gradle b/smoke-tests/build.gradle index 05f162a1318..0df93b49a47 100644 --- a/smoke-tests/build.gradle +++ b/smoke-tests/build.gradle @@ -81,7 +81,6 @@ dependencies { implementation "com.google.firebase:firebase-config" implementation "com.google.firebase:firebase-crashlytics:18.6.4" implementation "com.google.firebase:firebase-database" - implementation "com.google.firebase:firebase-dynamic-links" implementation "com.google.firebase:firebase-firestore" implementation "com.google.firebase:firebase-functions" // TODO(yifany): remove after the issue is fixed diff --git a/smoke-tests/src/main/java/com/google/firebase/testing/DynamicLinksTest.java b/smoke-tests/src/main/java/com/google/firebase/testing/DynamicLinksTest.java deleted file mode 100644 index 0fddc97f7a9..00000000000 --- a/smoke-tests/src/main/java/com/google/firebase/testing/DynamicLinksTest.java +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2018 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package com.google.firebase.testing; - -import static com.google.common.truth.Truth.assertThat; - -import android.app.Activity; -import android.net.Uri; -import androidx.test.rule.ActivityTestRule; -import androidx.test.runner.AndroidJUnit4; -import com.google.android.gms.tasks.Task; -import com.google.firebase.dynamiclinks.DynamicLink; -import com.google.firebase.dynamiclinks.FirebaseDynamicLinks; -import com.google.firebase.testing.common.Tasks2; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -public final class DynamicLinksTest { - - @Rule public final ActivityTestRule activity = new ActivityTestRule<>(Activity.class); - - @Test - public void buildDynamicLink_UriContainsCorrectComponents() throws Exception { - FirebaseDynamicLinks dl = FirebaseDynamicLinks.getInstance(); - Uri uri = Uri.parse("http://www.example.com"); - - DynamicLink link = - dl.createDynamicLink() - .setLink(uri) - .setDomainUriPrefix("http://example.page.link") - .setAndroidParameters(new DynamicLink.AndroidParameters.Builder().build()) - .buildDynamicLink(); - Uri actual = link.getUri(); - String[] query = actual.getQuery().split("&"); - - assertThat(actual.getScheme()).isEqualTo("http"); - assertThat(actual.getHost()).isEqualTo("example.page.link"); - assertThat(query) - .asList() - .containsAtLeast("apn=com.google.firebase.testing", "link=http://www.example.com"); - } - - @Test - public void getDynamicLink_NonLinkReturnsNull() throws Exception { - FirebaseDynamicLinks dl = FirebaseDynamicLinks.getInstance(); - Uri uri = Uri.parse("http://www.example.com"); - - Task task = dl.getDynamicLink(uri); - Object actual = Tasks2.waitForSuccess(task); - - assertThat(actual).isNull(); - } -} diff --git a/smoke-tests/src/main/java/com/google/firebase/testing/TestSuite.java b/smoke-tests/src/main/java/com/google/firebase/testing/TestSuite.java index eda76180976..67c5d0ddda8 100644 --- a/smoke-tests/src/main/java/com/google/firebase/testing/TestSuite.java +++ b/smoke-tests/src/main/java/com/google/firebase/testing/TestSuite.java @@ -28,7 +28,6 @@ BuildOnlyTest.class, CrashlyticsTest.class, DatabaseTest.class, - DynamicLinksTest.class, FirestoreTest.class, FunctionsTest.class, RemoteConfigTest.class, diff --git a/subprojects.cfg b/subprojects.cfg index de27e9d9567..72e06c9248f 100644 --- a/subprojects.cfg +++ b/subprojects.cfg @@ -33,8 +33,6 @@ firebase-dataconnect:androidTestutil firebase-dataconnect:connectors firebase-dataconnect:testutil firebase-datatransport -firebase-dynamic-links -firebase-dynamic-links:ktx firebase-firestore firebase-firestore:ktx firebase-functions