首页 > 解决方案 > iOS - 如何在 AppsFlyer 的 One-Link 中获取参数。应用程序已安装并启动

问题描述

如果我的应用未安装,我可以获得 One-Link 的参数(广告系列、媒体源等)。我使用下面的方法来做到这一点。

func onConversionDataReceived(_ installData: [AnyHashable : Any]!) {

    if let data = installData{

        print("\(data)")

        if let status = data["af_status"] as? String{

            if(status == "Non-organic"){

                if let sourceID = data["media_source"] , let campaign = data["campaign"]{

                    print("This is a Non-Organic install. Media source: \(sourceID)  Campaign: \(campaign)")

                }

            } else {

                print("This is an organic install.")

            }

        }

    }

}

但是,如果我的应用程序已安装、启动,然后我单击另一个 One-Link 以打开我的应用程序,我只能通过以下方法获取此 URL:

func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]!) {

    if let data = attributionData{

        print("\(data)")

    }

}

那么,如果我的应用程序在设备上可用,有什么方法可以获取参数(活动、媒体源等)?

注意:我使用了一个短链接。

标签: iosswiftanalyticstrackingappsflyer

解决方案


onAppOpenAttribution每次您从不同的深层链接(在您的情况下为 One-Link)打开应用程序时都会触发。

如果我的应用未安装,我可以获得 One-Link 的参数(广告系列、媒体源等)。

对,第一次触发两个回调onAppOpenAttribution并且onConversionDataReceived.

但是,如果我的应用程序已安装、启动,然后我单击另一个 One-Link 以打开我的应用程序

如果您尝试从不属于 Appsflyer 的 One-Link 打开应用程序,就会发生这种情况。

例如,此链接(Universal Link)https://rndemotest.onelink.me/7y5s/f78c46d5将通过 为您提供媒体来源、活动等onAppOpenAttribution7y5s您的 One-Link ID 是在仪表板的“ONELINK CONFIGURATION”部分中定义的。

[编辑]

确保您运行最新的 AppsFlyer SDK 版本,

仅从 SDK 版本 4.8.0 开始支持带有 iOS 通用链接或 Android 应用程序链接的短链接的深度链接

一般来说,你应该得到一个{"link": "<URL>"}关于完整链接ae的响应{"link":"https://abc.onelink.me/2347196006?pid=User%20invite&c=CMTT2019einvite&af_dp=abc%3A%2F%2F"}

对于 One-Link,您应该获取所有包含媒体源的信息,...。


顺便说一句,这是一个如何处理onAppOpenAttribution响应的代码片段示例:

func onAppOpenAttribution(_ attributionData: [AnyHashable : Any]!) {

        var attDataString:String = ""
        var params = [String: String]()

        print("")
        print("<-------------------------------------------------->")
        print("onAppOpenAttribution is:")

        if let pid = attributionData[AnyHashable("pid")] as? String{
            attDataString.append("PID: " + pid + "\n\n")
            print(helper(module: "pid", message: pid))
        }

        if let is_retargeting = attributionData[AnyHashable("is_retargeting")] as? String{
            attDataString.append("is_retargeting: " + is_retargeting + "\n\n")
            print(helper(module: "is_retargeting", message: is_retargeting))
        }

        if let campaign = attributionData[AnyHashable("c")] as? String{
            attDataString.append("Campaign: " + campaign + "\n\n")
            print(helper(module: "campaign", message: campaign))
        }

        if let link = attributionData[AnyHashable("link")] as? String{
            attDataString.append("Link: " + link + "\n\n")
            print(helper(module: "link", message: link))
        }

        if let af_dp = attributionData[AnyHashable("af_dp")] as? String{
            attDataString.append("af_dp: " + af_dp + "\n\n")
            print(helper(module: "af_dp", message: af_dp))
        }
        print(attributionData)
        print("<-------------------------------------------------->")
        print("")

        //        dump(attributionData)
    }

func helper(module:String!, message:String!) -> String!{

        var sb:String = ""
        sb.append(" " + module + "=")
        var pad:Int = 17 - module.characters.count

        while  pad > 0 {
            pad-=1
            sb.append( " " )
        }
        sb.append(" " + message)

        return sb
    }

推荐阅读