Users may see the domain of passwords stored with the Password AutoFill feature as airbridge.io or abr.ge.
After setting up deep links for the Airbridge SDK, if you utilize the Password AutoFill feature, the domain is saved as the applinks domain of the Airbridge deep link, which is airbridge.io or abr.ge.
The problem can be solved by setting up the webcredentials domain used in the Password AutoFill.
1. Prepare the domain that will store the password.
2. Host the JSON below at https://YOUR_DOMAIN/.well-known/apple-app-site-association
with Content-Type: application/json
. Your prepared domain should be entered instead of YOUR_DOMAIN
.
You can find the App ID Prefix and Bundle ID in the [Identifiers]>[YOUR_APP] menu of the Apple Developer Portal.
{
"webcredentials": {
"apps": ["YOUR_APP_ID_PREFIX.YOUR_BUNDLE_ID"]
}
}
3. Navigate to [YOUR_PROJECT]>[Signing & Capabilities] in Xcode.
4. Click + Capability to add Associated Domains. Enter webcredentials:YOUR_DOMAIN
in Associated Domains.
A coroutine dependency error occurs during the build process with the following message.
java.lang.NoClassDefFoundError: kotlin/coroutines/AbstractCoroutineContextKey
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
...
If the kotlinx-coroutines-core library version is 1.3.5 or later, the kotlin-stdlib library version must be at a certain level or later.
Check whether the kotlin-stdlib library version is v.1.3.70 or later with the gradlew dependencies
command. If the version is earlier than v.1.3.70, you need to update it.
Deep link execution (Deeplink Open) events are not collected when using the Braze SDK for push notifications. Instead, the open event is collected.
The Airbridge Android SDK distinguishes the deep link execution event and the open event based on the dataString found in the activity's action and intent. When the app is launched through a push notification using the Braze SDK, NotificationTrampolineActivity
is used. When an app is launched through a push notification using the Braze SDK, dataString cannot be verified from the action and intent of the NotificationTrampolineActivity
. As a result, it is impossible to distinguish between the deep link execution event and the open event.
Add the following code to the android/app/src/main/java/.../MainApplication.kt
file.
import co.ab180.airbridge.reactnative.AirbridgeReactNative
import co.ab180.airbridge.reactnative.common.AirbridgeLifecycleIntegration
...
AirbridgeReactNative.setLifecycleIntegration { activity ->
return@setLifecycleIntegration activity
.takeIf { it.javaClass.name == "com.braze.push.NotificationTrampolineActivity" }
?.run { intent?.extras?.getString("uri") }
}
import co.ab180.airbridge.reactnative.AirbridgeReactNative;
import co.ab180.airbridge.reactnative.common.AirbridgeLifecycleIntegration;
...
AirbridgeReactNative.setLifecycleIntegration(new AirbridgeLifecycleIntegration() {
@Nullable
@Override
public String getDataString(@NonNull Activity activity) {
if (
activity.getClass().getName().equals("com.braze.push.NotificationTrampolineActivity")
&& activity.getIntent() != null
&& activity.getIntent().getExtras() != null
) {
return activity.getIntent().getExtras().getString("uri");
}
return null;
}
});
The "Manifest merger failed" error occurs during the build process.
The Airbridge SDK's AndroidManifest.xml
includes rules to opt out of backing up the Shared Preferences data. The purpose of this rule is to avoid retaining the same Airbridge settings during the reinstallation of the app so that new installs or reinstalls can be detected accurately.
Merging Airbridge SDK backup rules with your app backup rules can cause conflicts.
Below are the opt-out rules defined in the Airbridge SDK.
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</device-transfer>
</data-extraction-rules>
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</full-backup-content>
Adding android:fullBackupContent="string"
to the AndroidManifest.xml
file may cause an error like the following.
Manifest merger failed : Attribute application@fullBackupContent value=(string) from AndroidManifest.xml
To fix this error, add tools:replace="android:fullBackupContent"
to the <application>
tag in the AndroidManifest.xml
file.
Adding android:dataExtractionRules="string resource"
to the AndroidManifest.xml
file may cause an error like the following.
Manifest merger failed : Attribute application@dataExtractionRules value=(string resource) from AndroidManifest.xml
To fix this error, add tools:replace="android:dataExtractionRules"
to the <application>
tag in the AndroidManifest.xml
file.
Adding android:allowBackup="false"
to the AndroidManifest.xml
file may cause an error like the following.
Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:32:9-36
is also present at [:airbridge] AndroidManifest.xml:27:9-35 value=(true).
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:30:5-250:19 to override.
To fix this error, add tools:replace="android:allowBackup"
to the <application>
tag in the AndroidManifest.xml
file.
The android:dataExtractionRules
has been added in API Level 31. Therefore, if the compileSdkVersion is lower than 31, an error like the following may occur.
AndroidManifest.xml: AAPT: error: attribute android:dataExtractionRules not found.
To fix this error, add tools:remove="android:dataExtractionRules"
to the <application>
tag in the AndroidManifest.xml
file.
For more guidance, refer to the articles below.
GAID is being collected as 00000000-0000-0000-0000-000000000000 even though LAT (Limited Ad Tracking) is deactivated.
The AD_ID permission has been excluded due to other third-party libraries.
Add AD_ID permission.
<manifest ...>
...
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
...
</manifest>
When building a react native android app by intstalling 'airbridge-react-native-sdk' v4, a reference error occurs.
For projects using react-native SDK versions lower than 0.72.0, a reference error occurs due to the code used in the bridge code of 'airbridge-react-native-sdk'.
Please use react-native SDK 0.72.0 or higher, or use airbridge-react-native-sdk v4.1.5 or higher.
Was this page helpful?
import co.ab180.airbridge.reactnative.AirbridgeReactNative
import co.ab180.airbridge.reactnative.common.AirbridgeLifecycleIntegration
...
AirbridgeReactNative.setLifecycleIntegration { activity ->
return@setLifecycleIntegration activity
.takeIf { it.javaClass.name == "com.braze.push.NotificationTrampolineActivity" }
?.run { intent?.extras?.getString("uri") }
}
import co.ab180.airbridge.reactnative.AirbridgeReactNative;
import co.ab180.airbridge.reactnative.common.AirbridgeLifecycleIntegration;
...
AirbridgeReactNative.setLifecycleIntegration(new AirbridgeLifecycleIntegration() {
@Nullable
@Override
public String getDataString(@NonNull Activity activity) {
if (
activity.getClass().getName().equals("com.braze.push.NotificationTrampolineActivity")
&& activity.getIntent() != null
&& activity.getIntent().getExtras() != null
) {
return activity.getIntent().getExtras().getString("uri");
}
return null;
}
});
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</device-transfer>
</data-extraction-rules>
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<exclude domain="sharedpref" path="airbridge-internal" />
<exclude domain="sharedpref" path="airbridge-install" />
<exclude domain="sharedpref" path="airbridge-user-info" />
<exclude domain="sharedpref" path="airbridge-user-alias" />
<exclude domain="sharedpref" path="airbridge-user-attributes" />
<exclude domain="sharedpref" path="airbridge-device-alias" />
<exclude domain="database" path="airbridge.db" />
</full-backup-content>
Manifest merger failed : Attribute application@fullBackupContent value=(string) from AndroidManifest.xml
Manifest merger failed : Attribute application@dataExtractionRules value=(string resource) from AndroidManifest.xml
Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:32:9-36
is also present at [:airbridge] AndroidManifest.xml:27:9-35 value=(true).
Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:30:5-250:19 to override.
AndroidManifest.xml: AAPT: error: attribute android:dataExtractionRules not found.
<manifest ...>
...
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
...
</manifest>