我在覆盖Appboy深层链接中的单击时行为时遇到问题

请找到以下数据

1-在BaseActivity中注册Appboy,这是所有Application Activity的父活动

@Override
    protected void onResume() {

         AppboyInAppMessageManager.getInstance().registerInAppMessageManager(this);
        Appboy.getInstance(this).requestInAppMessageRefresh();
}

@Override
    protected void onPause() {

        AppboyInAppMessageManager.getInstance().unregisterInAppMessageManager(this);
    }


2-将接收者添加到清单文件中,如下所示

<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活动

我需要重写此行为,以便能够获取在应用内消息中发送的链接并从中解析一些参数,并将其定向到应用内的活动

我尝试了以下


从清单文件中删除默认的app boy网络活动///应用崩溃
实现IInAppMessageManagerListener // //应用停止接收任何消息


请注意,当尝试注册appboy并打印日志时,该应用程序调用onReceive方法(操作= 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的模式区分深层链接和http链接,因此将http(和其他方案)链接检测为Web链接,而将其他格式视为深层链接(请参见https://github.com/Appboy/appboy-android-sdk/blob/master/android-sdk-ui/src/com/appboy/ui/actions/ActionFactory.java) 。

我们将考虑如何根据您的用例对事物进行检测,但是与此同时,您可以通过以下两种方法解决问题:

1)创建一个深层链接,它也不是http链接。如果您的链接看起来像例如forsale:// mylink?a = b&2 = 3 ....等,则一切正常。

2)设置自定义的应用内消息管理器监听器:https://documentation.appboy.com/Android/#in-app-message-customization。您可以在Droidboy示例应用程序中看到有关如何执行此操作的示例。就您而言,您希望返回除onInAppMessageButtonClicked和onInAppMessageClicked之外的所有内容的默认值,如果您使用的是深层链接格式,则您要自己处理该链接。您的票证表明您已尝试过此操作,但建议您从“我们在Android SDK的AppboyInAppMessageManager.java(#L608)中创建的默认选项开始-然后修改* clicked方法。

3)下载我们的UI代码并修改源代码。您可以选择下载Appboy Android SDK并修改ActionFactory以按所需方式处理深层链接。虽然,在这一点上您将要做类似的事情,但是解决方案2可能会是实现和维护更好的解决方案。

请让我们知道这些解决方案之一是否适合您,以及您是否还有其他意见/疑问。

谢谢,

瓦丘马

10-06 10:05