Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get facebook app link if app wasn't installed

How can I get the app link data if my app wasn't installed when the user tapped a deep link in the facebook app? There is surprisingly little documentation from facebook on this issue.

I have a deep link https://fb.me/635533123230265

Which returns the HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>App Link</title>
<meta property="fb:app_id" content="619350481515196">
<meta property="al:android:url" content="instapanel://panel?utm_source=fb&amp;utm_medium=cpi&amp;utm_term=sf&amp;utm_campaign=PROPE">
<meta property="al:android:package" content="com.instapanel.android">
<meta property="al:android:app_name" content="Instapanel">
<meta property="al:web:should_fallback" content="false">
<meta http-equiv="refresh" content="0;url=http://play.google.com/store/apps/details?id=com.instapanel.android">
</head>
<body>Redirecting...</body>
</html>

If the app is already installed, AppLinkData appLinkData = AppLinkData.createFromActivity(activity); works perfectly.

But if the app was not installed, I believe I'm supposed to use AppLinkData.fetchDeferredAppLinkData. I can verify that within the facebook SDK it makes an HTTP request and receives JSON, but it never contains the deep link, just {"success":true}. Any ideas?

Here is my code:

// Fetch data immediately.
AppLinkData appLinkData = AppLinkData.createFromActivity(activity);
App.setAppLinkData(appLinkData);  // Handles appLinkData

// In case data is deferred because app wasn't installed yet.
AppLinkData.fetchDeferredAppLinkData(activity, new AppLinkData.CompletionHandler() {
    @Override
    public void onDeferredAppLinkDataFetched(AppLinkData appLinkData) {
        App.setAppLinkData(appLinkData);  // Handles appLinkData. appLinkData is always null here.
    }
});
like image 526
d2vid Avatar asked Nov 02 '14 01:11

d2vid


2 Answers

Looks like FB has fixed this issue now.

edit: Follow this for setting up deferred deep-linking: https://developers.facebook.com/docs/app-ads/deep-linking#deferred-deep-linking

This link for testing: https://developers.facebook.com/tools/app-ads-helper/

Go to App Ads Helper -> Select your App -> Test Deep Link -> Enter deep-link URL -> Check Send Deferred -> Send to Android.

Note: 1. You need to have FB app installed on your device and logged in to the same developer account for this to work. 2. Need to uninstall and reinstall the app after sending a deferred deep-link. Uninstall can be done before sending the link as well.

like image 133
Vijay Raghavan Avatar answered Sep 24 '22 15:09

Vijay Raghavan


I work at branch.io, which does all this stuff for you for free and works outside of Facebook as well, and we figured out a way to pass App Links through the install. I'll share how we built it.

First, you'll need to collect the Google Advertising ID, so make sure that you drop in Google Play Services to your project. To do so, just add this to your gradle file:

compile 'com.google.android.gms:play-services:7.5.0'

Now, it will require you to make an network request every time the app opens to check if the user originated from Facebook, but it's not too complicated. On app open, POST to the following endpoint with your Facebook App ID, App Access Token and the Google Advertising ID.

https://graph.facebook.com/<APP ID>/activities?access_token=<APPACCESSTOKEN>&event=DEFERRED_APP_LINK&advertiser_id=<GAID>&advertiser_tracking_enabled=1&application_tracking_enabled=1

GAID: You can retrieve the Google Advertising ID with this method:

String gaid = AdvertisingIdClient.getAdvertisingIdInfo(this).getId();

App access token: To get your access token, just make a GET call to the following endpoint:

https://graph.facebook.com/oauth/access_token?client_id=<APPID>&client_secret=<APPSECRET>&grant_type=client_credentials

Then, when you create your Facebook stuff (ads, invites, etc), just drop in your deep link. This example shows a Branch link pasted in:

enter image description here

If you don't want to deal with this, we have a native library with a callback executed on app session start, which will return all of your deep link params.

like image 22
Alex Austin Avatar answered Sep 21 '22 15:09

Alex Austin