1

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

请找到以下数据

1- 在 BaseActivity 中注册 Appboy,这是所有应用程序活动的父活动

@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 网络活动

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

我试过以下

  • 从清单文件中删除默认的应用程序男孩网络活动 /// 应用程序崩溃
  • 实现 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()));
      }
}
4

1 回答 1

5

问题的根源在于我们根据URI的schema来区分deep links和http links,所以http(和其他一些scheme)链接被检测为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 链接的深层链接。如果您的链接看起来像 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 可能会是一个更好的实施和维护方案。

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

谢谢,

瓦丘马

于 2015-12-30T00:38:02.317 回答