private static AppLinkData createFromJson()

in facebook-applinks/src/main/java/com/facebook/applinks/AppLinkData.java [316:371]


  private static AppLinkData createFromJson(String jsonString) {
    if (jsonString == null) {
      return null;
    }

    try {
      // Any missing or malformed data will result in a JSONException
      JSONObject appLinkArgsJson = new JSONObject(jsonString);
      String version = appLinkArgsJson.getString(APPLINK_VERSION_KEY);

      JSONObject bridgeArgs = appLinkArgsJson.getJSONObject(APPLINK_BRIDGE_ARGS_KEY);
      String method = bridgeArgs.getString(BRIDGE_ARGS_METHOD_KEY);
      if (method.equals("applink") && version.equals("2")) {
        // We have a new deep link
        AppLinkData appLinkData = new AppLinkData();

        appLinkData.arguments = appLinkArgsJson.getJSONObject(APPLINK_METHOD_ARGS_KEY);
        // first look for the "ref" key in the top level args
        if (appLinkData.arguments.has(METHOD_ARGS_REF_KEY)) {
          appLinkData.ref = appLinkData.arguments.getString(METHOD_ARGS_REF_KEY);
        } else if (appLinkData.arguments.has(ARGUMENTS_REFERER_DATA_KEY)) {
          // if it's not in the top level args, it could be in the "referer_data" blob
          JSONObject refererData = appLinkData.arguments.getJSONObject(ARGUMENTS_REFERER_DATA_KEY);
          if (refererData.has(REFERER_DATA_REF_KEY)) {
            appLinkData.ref = refererData.getString(REFERER_DATA_REF_KEY);
          }
        }

        if (appLinkData.arguments.has(METHOD_ARGS_TARGET_URL_KEY)) {
          appLinkData.targetUri =
              Uri.parse(appLinkData.arguments.getString(METHOD_ARGS_TARGET_URL_KEY));
          appLinkData.appLinkData = getAppLinkData(appLinkData.targetUri);
        }

        if (appLinkData.arguments.has(ARGUMENTS_EXTRAS_KEY)) {
          JSONObject extrasData = appLinkData.arguments.getJSONObject(ARGUMENTS_EXTRAS_KEY);
          if (extrasData.has(EXTRAS_DEEPLINK_CONTEXT_KEY)) {
            JSONObject deeplink_context = extrasData.getJSONObject(EXTRAS_DEEPLINK_CONTEXT_KEY);
            if (deeplink_context.has(PROMOTION_CODE_KEY)) {
              appLinkData.promotionCode = deeplink_context.getString(PROMOTION_CODE_KEY);
            }
          }
        }

        appLinkData.argumentBundle = toBundle(appLinkData.arguments);

        return appLinkData;
      }
    } catch (JSONException e) {
      Utility.logd(TAG, "Unable to parse AppLink JSON", e);
    } catch (FacebookException e) {
      Utility.logd(TAG, "Unable to parse AppLink JSON", e);
    }

    return null;
  }