private static void fetchDeferredAppLinkFromServer()

in facebook-applinks/src/main/java/com/facebook/applinks/AppLinkData.java [149:233]


  private static void fetchDeferredAppLinkFromServer(
      Context context, String applicationId, final CompletionHandler completionHandler) {

    JSONObject deferredApplinkParams = new JSONObject();
    try {
      deferredApplinkParams.put("event", DEFERRED_APP_LINK_EVENT);
      Utility.setAppEventAttributionParameters(
          deferredApplinkParams,
          AttributionIdentifiers.getAttributionIdentifiers(context),
          AppEventsLogger.getAnonymousAppDeviceGUID(context),
          FacebookSdk.getLimitEventAndDataUsage(context),
          context);
      Utility.setAppEventExtendedDeviceInfoParameters(
          deferredApplinkParams, FacebookSdk.getApplicationContext());
      deferredApplinkParams.put("application_package_name", context.getPackageName());
    } catch (JSONException e) {
      throw new FacebookException("An error occurred while preparing deferred app link", e);
    }

    String deferredApplinkUrlPath = String.format(DEFERRED_APP_LINK_PATH, applicationId);
    AppLinkData appLinkData = null;

    try {
      GraphRequest deferredApplinkRequest =
          GraphRequest.newPostRequest(null, deferredApplinkUrlPath, deferredApplinkParams, null);
      GraphResponse deferredApplinkResponse = deferredApplinkRequest.executeAndWait();
      JSONObject jsonResponse = deferredApplinkResponse.getJSONObject();
      if (jsonResponse != null) {
        final String appLinkArgsJsonString = jsonResponse.optString(DEFERRED_APP_LINK_ARGS_FIELD);
        final long tapTimeUtc = jsonResponse.optLong(DEFERRED_APP_LINK_CLICK_TIME_FIELD, -1);
        final String appLinkClassName = jsonResponse.optString(DEFERRED_APP_LINK_CLASS_FIELD);
        final String appLinkUrl = jsonResponse.optString(DEFERRED_APP_LINK_URL_FIELD);

        if (!TextUtils.isEmpty(appLinkArgsJsonString)) {
          appLinkData = createFromJson(appLinkArgsJsonString);
          if (appLinkData != null) {
            if (tapTimeUtc != -1) {
              try {
                if (appLinkData.arguments != null) {
                  appLinkData.arguments.put(ARGUMENTS_TAPTIME_KEY, tapTimeUtc);
                }
                if (appLinkData.argumentBundle != null) {
                  appLinkData.argumentBundle.putString(
                      ARGUMENTS_TAPTIME_KEY, Long.toString(tapTimeUtc));
                }
              } catch (JSONException e) {
                Utility.logd(TAG, "Unable to put tap time in AppLinkData.arguments");
              }
            }

            if (appLinkClassName != null) {
              try {
                if (appLinkData.arguments != null) {
                  appLinkData.arguments.put(ARGUMENTS_NATIVE_CLASS_KEY, appLinkClassName);
                }
                if (appLinkData.argumentBundle != null) {
                  appLinkData.argumentBundle.putString(
                      ARGUMENTS_NATIVE_CLASS_KEY, appLinkClassName);
                }
              } catch (JSONException e) {
                Utility.logd(TAG, "Unable to put app link class name in AppLinkData.arguments");
              }
            }

            if (appLinkUrl != null) {
              try {
                if (appLinkData.arguments != null) {
                  appLinkData.arguments.put(ARGUMENTS_NATIVE_URL, appLinkUrl);
                }
                if (appLinkData.argumentBundle != null) {
                  appLinkData.argumentBundle.putString(ARGUMENTS_NATIVE_URL, appLinkUrl);
                }
              } catch (JSONException e) {
                Utility.logd(TAG, "Unable to put app link URL in AppLinkData.arguments");
              }
            }
          }
        }
      }
    } catch (Exception e) {
      Utility.logd(TAG, "Unable to fetch deferred applink from server");
    }

    completionHandler.onDeferredAppLinkDataFetched(appLinkData);
  }