如何覆盖在 App 消息中的深层链接中打开 Appboy web activity 的行为
How to override the behavior of opening Appboy web activity in deeplink In App messge
我在覆盖 Appboy deep 中的点击行为时遇到问题link
请查找以下数据
1- 在 BaseActivity 中注册 Appboy,它是所有应用程序活动 activity 的父级
@Override
protected void onResume() {
AppboyInAppMessageManager.getInstance().registerInAppMessageManager(this);
Appboy.getInstance(this).requestInAppMessageRefresh();
}
@Override
protected void onPause() {
AppboyInAppMessageManager.getInstance().unregisterInAppMessageManager(this);
}
2- 在 Manifest 文件中添加接收器如下
<receiver android:name="com.forsale.forsale.appboy.AppboyGcmReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.forsale.forsale" />
</intent-filter>
</receiver>
<receiver
android:name="com.forsale.forsale.appboy.AppBoyOpenReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.forsale.forsale.intent.APPBOY_PUSH_RECEIVED" />
<action android:name="com.forsale.forsale.intent.APPBOY_NOTIFICATION_OPENED" />
</intent-filter>
</receiver>
知道我可以使用 app boy 仪表板发送应用消息并接收消息,但是当我单击消息时它会打开 appboy web activity link
我需要重写此行为才能获取我在应用内消息中发送的 link 并从中解析一些参数并将其用于我的应用内的 activity
我试过以下
- 从清单文件中删除默认的 app boy web activity /// 应用程序崩溃
- 实施 IInAppMessageManagerListener /// 应用停止接收任何消息
请注意,应用程序在尝试注册 appboy 并打印日志时会调用 onReceive 方法(action = REGISTRATION,RegId = "..."),但它永远不会执行任何其他操作,例如 RECEIVE 或 OPEN
public void onReceive(Context context, Intent intent) {
AppboyLogger.i("AMIRA", String.format("Amira %s", intent.toString()));
String action = intent.getAction();
AppboyLogger.i("AMIRA", String.format("Amira %s", action));
Bundle bundle = intent.getExtras();
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
AppboyLogger.i("AMIRA", String.format("Amira %s", key + ":" + value.toString()));
}
}
问题的根源在于我们根据 URI 的模式区分深度 links 和 http links,因此 http(和其他一些模式)links被检测为 web links,其他格式被视为 deep links(参见 https://github.com/Appboy/appboy-android-sdk/blob/master/android-sdk-ui/src/com/appboy/ui/actions/ActionFactory.java)。
我们将考虑如何针对您的用例进行检测,但与此同时,您可以通过多种方式解决问题:
1) 创建一个不是 http link 的深层 link。如果您的 link 看起来像 forsale://mylink?a=b&2=3....等
,一切都应该有效
2) 设置自定义 in-app 消息管理器侦听器:https://documentation.appboy.com/Android/#in-app-message-customization。您可以在我们的 Droidboy 示例应用程序中看到我们如何执行此操作的示例。在您的情况下,您希望 return 为除 onInAppMessageButtonClicked 和 onInAppMessageClicked 之外的所有内容设置默认值,如果它是您的深度 link 格式,您希望自己处理 link。你的票表明你已经尝试过这个,但我建议从“我们在 Android SDK 的 AppboyInAppMessageManager.java (#L608) 中创建的默认值开始 - 然后只修改 *clicked 方法.
3) 下载我们的UI代码并修改源代码。您可以选择下载 Appboy Android SDK 并修改 ActionFactory 以按照您想要的方式处理您的深度 link。虽然,在您要执行类似操作时,解决方案 #2 可能更易于实施和维护。
请告诉我们这些解决方案是否适合您,以及您是否有任何其他解决方案 comments/questions。
谢谢,
瓦丘马
我在覆盖 Appboy deep 中的点击行为时遇到问题link
请查找以下数据
1- 在 BaseActivity 中注册 Appboy,它是所有应用程序活动 activity 的父级
@Override
protected void onResume() {
AppboyInAppMessageManager.getInstance().registerInAppMessageManager(this);
Appboy.getInstance(this).requestInAppMessageRefresh();
}
@Override
protected void onPause() {
AppboyInAppMessageManager.getInstance().unregisterInAppMessageManager(this);
}
2- 在 Manifest 文件中添加接收器如下
<receiver android:name="com.forsale.forsale.appboy.AppboyGcmReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.forsale.forsale" />
</intent-filter>
</receiver>
<receiver
android:name="com.forsale.forsale.appboy.AppBoyOpenReceiver"
android:exported="false" >
<intent-filter>
<action android:name="com.forsale.forsale.intent.APPBOY_PUSH_RECEIVED" />
<action android:name="com.forsale.forsale.intent.APPBOY_NOTIFICATION_OPENED" />
</intent-filter>
</receiver>
知道我可以使用 app boy 仪表板发送应用消息并接收消息,但是当我单击消息时它会打开 appboy web activity link
我需要重写此行为才能获取我在应用内消息中发送的 link 并从中解析一些参数并将其用于我的应用内的 activity
我试过以下
- 从清单文件中删除默认的 app boy web activity /// 应用程序崩溃
- 实施 IInAppMessageManagerListener /// 应用停止接收任何消息
请注意,应用程序在尝试注册 appboy 并打印日志时会调用 onReceive 方法(action = REGISTRATION,RegId = "..."),但它永远不会执行任何其他操作,例如 RECEIVE 或 OPEN
public void onReceive(Context context, Intent intent) {
AppboyLogger.i("AMIRA", String.format("Amira %s", intent.toString()));
String action = intent.getAction();
AppboyLogger.i("AMIRA", String.format("Amira %s", action));
Bundle bundle = intent.getExtras();
for (String key : bundle.keySet()) {
Object value = bundle.get(key);
AppboyLogger.i("AMIRA", String.format("Amira %s", key + ":" + value.toString()));
}
}
问题的根源在于我们根据 URI 的模式区分深度 links 和 http links,因此 http(和其他一些模式)links被检测为 web links,其他格式被视为 deep links(参见 https://github.com/Appboy/appboy-android-sdk/blob/master/android-sdk-ui/src/com/appboy/ui/actions/ActionFactory.java)。
我们将考虑如何针对您的用例进行检测,但与此同时,您可以通过多种方式解决问题:
1) 创建一个不是 http link 的深层 link。如果您的 link 看起来像 forsale://mylink?a=b&2=3....等
,一切都应该有效2) 设置自定义 in-app 消息管理器侦听器:https://documentation.appboy.com/Android/#in-app-message-customization。您可以在我们的 Droidboy 示例应用程序中看到我们如何执行此操作的示例。在您的情况下,您希望 return 为除 onInAppMessageButtonClicked 和 onInAppMessageClicked 之外的所有内容设置默认值,如果它是您的深度 link 格式,您希望自己处理 link。你的票表明你已经尝试过这个,但我建议从“我们在 Android SDK 的 AppboyInAppMessageManager.java (#L608) 中创建的默认值开始 - 然后只修改 *clicked 方法.
3) 下载我们的UI代码并修改源代码。您可以选择下载 Appboy Android SDK 并修改 ActionFactory 以按照您想要的方式处理您的深度 link。虽然,在您要执行类似操作时,解决方案 #2 可能更易于实施和维护。
请告诉我们这些解决方案是否适合您,以及您是否有任何其他解决方案 comments/questions。
谢谢,
瓦丘马