正在查看: Vi App v10.18.0 应用的 IntegrationValidator.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Vi App v10.18.0 应用的 IntegrationValidator.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package io.branch.referral.validators;
import android.net.Uri;
import android.text.TextUtils;
import io.branch.referral.validators.ServerRequestGetAppConfig;
import java.util.Iterator;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONObject;
public class IntegrationValidator implements ServerRequestGetAppConfig.IGetAppConfigEvents {
private final BranchIntegrationModel integrationModel;
private boolean checkIfIntentAddedForLinkDomain(String str) {
List<String> list;
if (!TextUtils.isEmpty(str) && (list = this.integrationModel.applinkScheme) != null) {
Iterator<String> it = list.iterator();
while (it.hasNext()) {
if (str.equals(it.next())) {
return true;
}
}
}
return false;
}
private boolean checkIfIntentAddedForURIScheme(String str) {
Uri parse = Uri.parse(str);
String scheme = parse.getScheme();
String host = parse.getHost();
if (TextUtils.isEmpty(host)) {
host = "open";
}
JSONObject jSONObject = this.integrationModel.deeplinkUriScheme;
if (jSONObject == null) {
return false;
}
Iterator<String> keys = jSONObject.keys();
boolean z = false;
while (keys.hasNext()) {
String next = keys.next();
if (scheme != null && scheme.equals(next)) {
JSONArray optJSONArray = this.integrationModel.deeplinkUriScheme.optJSONArray(next);
if (optJSONArray != null && optJSONArray.length() > 0) {
int i2 = 0;
while (true) {
if (i2 < optJSONArray.length()) {
if (host != null && host.equals(optJSONArray.optString(i2))) {
z = true;
break;
}
i2++;
} else {
break;
}
}
} else {
return true;
}
}
}
return z;
}
private void doValidateWithAppConfig(JSONObject jSONObject) {
logValidationProgress("3. Verifying application package name");
if (!this.integrationModel.packageName.equals(jSONObject.optString("android_package_name"))) {
logIntegrationError("Incorrect package name in Branch dashboard. Please correct your package name in dashboard -> Configuration page.", "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-branch-dashboard");
return;
}
logValidationPassed();
logValidationProgress("4. Checking Android Manifest for URI based deep link config");
JSONObject jSONObject2 = this.integrationModel.deeplinkUriScheme;
if (jSONObject2 != null && jSONObject2.length() != 0) {
logValidationPassed();
} else {
if (this.integrationModel.appSettingsAvailable) {
logIntegrationError(String.format("No intent found for opening the app through uri Scheme '%s'.Please add the intent with URI scheme to your Android manifest.", jSONObject.optString("android_uri_scheme")), "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-app");
return;
}
logValidationProgress("- Skipping. Unable to verify the deep link config. Failed to read the Android Manifest");
}
logValidationProgress("5. Verifying URI based deep link config with Branch dash board.");
String optString = jSONObject.optString("android_uri_scheme");
if (TextUtils.isEmpty(optString)) {
logIntegrationError("Uri Scheme to open your app is not specified in Branch dashboard. Please add URI scheme in Branch dashboard.", "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-branch-dashboard");
return;
}
logValidationPassed();
logValidationProgress("6. Verifying intent for receiving URI scheme.");
if (checkIfIntentAddedForURIScheme(optString)) {
logValidationPassed();
} else {
if (this.integrationModel.appSettingsAvailable) {
logIntegrationError(String.format("Uri scheme '%s' specified in Branch dashboard doesn't match with the deep link intent in manifest file", optString), "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-branch-dashboard");
return;
}
logValidationProgress("- Skipping. Unable to verify intent for receiving URI scheme. Failed to read the Android Manifest");
}
logValidationProgress("7. Checking AndroidManifest for AppLink config.");
if (!this.integrationModel.applinkScheme.isEmpty()) {
logValidationPassed();
} else {
if (this.integrationModel.appSettingsAvailable) {
logIntegrationError("Could not find any App Link hosts to support Android AppLinks. Please add intent filter for handling AppLinks in your Android Manifest file", "https://help.branch.io/using-branch/docs/android-app-links#section-add-intent-filter-to-manifest");
return;
}
logValidationProgress("- Skipping. Unable to verify intent for receiving URI scheme. Failed to read the Android Manifest");
}
logValidationProgress("8. Verifying any supported custom link domains.");
String optString2 = jSONObject.optString("short_url_domain");
if (TextUtils.isEmpty(optString2) || checkIfIntentAddedForLinkDomain(optString2)) {
logValidationPassed();
} else {
if (this.integrationModel.appSettingsAvailable) {
logIntegrationError(String.format("Could not find intent filter to support custom link domain '%s'. Please add intent filter for handling custom link domain in your Android Manifest file ", optString2), "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-app");
return;
}
logValidationProgress("- Skipping. Unable to verify supported custom link domains. Failed to read the Android Manifest");
}
logValidationProgress("9. Verifying default link domains integrations.");
String optString3 = jSONObject.optString("default_short_url_domain");
if (TextUtils.isEmpty(optString3) || checkIfIntentAddedForLinkDomain(optString3)) {
logValidationPassed();
} else {
if (this.integrationModel.appSettingsAvailable) {
logIntegrationError(String.format("Could not find intent filter to support Branch default link domain '%s'. Please add intent filter for handling custom link domain in your Android Manifest file ", optString3), "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-app");
return;
}
logValidationProgress("- Skipping. Unable to verify default link domains. Failed to read the Android Manifest");
}
logValidationProgress("10. Verifying alternate link domains integrations.");
String optString4 = jSONObject.optString("alternate_short_url_domain");
if (TextUtils.isEmpty(optString4) || checkIfIntentAddedForLinkDomain(optString4)) {
logValidationPassed();
} else {
if (this.integrationModel.appSettingsAvailable) {
logIntegrationError(String.format("Could not find intent filter to support alternate link domain '%s'. Please add intent filter for handling custom link domain in your Android Manifest file ", optString4), "https://help.branch.io/developers-hub/docs/android-basic-integration#section-configure-app");
return;
}
logValidationProgress("- Skipping.Unable to verify alternate link domains. Failed to read the Android Manifest");
}
logValidationPassed();
}
private void logIntegrationError(String str, String str2) {
StringBuilder sb = new StringBuilder();
sb.append("** ERROR ** : ");
sb.append(str);
sb.append("\nPlease follow the link for more info ");
sb.append(str2);
}
private void logValidationPassed() {
}
private void logValidationProgress(String str) {
StringBuilder sb = new StringBuilder();
sb.append(str);
sb.append(" ... ");
}
@Override
public void onAppConfigAvailable(JSONObject jSONObject) {
if (jSONObject != null) {
doValidateWithAppConfig(jSONObject);
} else {
logIntegrationError("Unable to read Dashboard config. Please confirm that your Branch key is properly added to the manifest. Please fix your Dashboard settings.", "https://branch.app.link/link-settings-page");
}
}
}