0

Problem: Why is "Short dynamic links" created programatically wont open/launch the app directly?

But link created at console, shows only one prompt to choose browser then app launches directly.

I want to launch app directly when user clicks the dynamic url created dynamically by android app.

When clicking dynamic short link created dynamically by android app the following things happen,

1.Option to open in browser shows

2.The browser opens,shows a loading dialog box

3.Again shows option to open in browser(this time app shows in the more options area)

4.Clicking browser opens website,clicking app lauches app but the deep link is lost.

Any Help would be great.


Manifest.xml

...
 <intent-filter>
  <action android:name="android.intent.action.VIEW" />
  <category android:name="android.intent.category.DEFAULT" />
  <category android:name="android.intent.category.BROWSABLE" />
  <data
      android:host="notifika.tupio.me"
       android:scheme="https" />
 </intent-filter>
...

Link Generation

  public void createDynamicLink(final Context context, final SingleNotification notification){
    final Uri[] mInvitationUrl = {null};
    String link = "https://notifika.tupio.me/?public=" + notification.getTag();
    FirebaseDynamicLinks.getInstance().createDynamicLink()
            .setLink(Uri.parse(link))
            .setDynamicLinkDomain("notifika.page.link")
            .setAndroidParameters(
                    new DynamicLink.AndroidParameters.Builder("me.tupio.notifika")
                            .build())
            .setGoogleAnalyticsParameters(
                    new DynamicLink.GoogleAnalyticsParameters.Builder()
                            .setSource("In-App")
                            .setMedium("social")
                            .setCampaign("Word-Word")
                            .build())
            .setSocialMetaTagParameters(
                    new DynamicLink.SocialMetaTagParameters.Builder()
                            .setTitle("Notifika")
                            .setDescription("Sent and Receive Notification like this.Download the app now")
                            .build())

            .buildShortDynamicLink()
            .addOnSuccessListener(new OnSuccessListener<ShortDynamicLink>() {
                @Override
                public void onSuccess(ShortDynamicLink shortDynamicLink) {
                    mInvitationUrl[0] = shortDynamicLink.getShortLink();
                    Intent intent = new Intent();
                    intent.setAction(Intent.ACTION_SEND);
                    intent.setType("text/plain");
                    intent.putExtra(Intent.EXTRA_TEXT, notification.getTitle()+"\n"+notification.getMessage().substring(0, Math.min(notification.getMessage().length(), 100)) + "..." +context.getResources().getString(R.string.share_link_desc)+"\n"+mInvitationUrl[0]);
                    context.startActivity(Intent.createChooser(intent, "Share"));
                }
            });

}

MainActivity.class

FirebaseDynamicLinks.getInstance()
            .getDynamicLink(getIntent())
            .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
                @Override
                public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
                    // Get deep link from result (may be null if no link is found)
                    Uri deepLink = null;
                    if (pendingDynamicLinkData != null) {
                        deepLink = pendingDynamicLinkData.getLink();
                        Log.v("Deeplink",deepLink.toString());
                    }
                    //
                    // If the user isn't signed in and the pending Dynamic Link is
                    // an invitation, sign in the user anonymously, and record the
                    // referrer's UID.
                    //
                    if (deepLink != null
                            && deepLink.getBooleanQueryParameter("public",false)) {
                        String referrerUid = deepLink.getQueryParameter("public");
                        Log.v("Deeplink", referrerUid);
                       Toast.makeText(getApplicationContext(),referrerUid,Toast.LENGTH_LONG).show();
                    }
                }
            });

Followed this guide.

Tupio
  • 432
  • 7
  • 19

1 Answers1

5

You'll need to add an intent filter for your page.link/app.goo.gl domain as well, so the deep link goes straight to your app. See: https://firebase.google.com/docs/dynamic-links/android/receive#app_links

Ian Barber
  • 19,765
  • 3
  • 58
  • 58