如何覆盖在 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

我试过以下

请注意,应用程序在尝试注册 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。

谢谢,

瓦丘马