在Swift中使用GTM v5 TAGCustomFunction

时间:2017-01-30 14:43:39

标签: ios swift firebase google-tag-manager

我在Swift项目中集成了GTMv5(GTM + Firebase),我希望能够在触发标记时调用某些方法,但它似乎无法与Swift一起使用,因为我可以使它适用于类似的Objective C和Android项目。

这里是符合TAGCustomFunction协议的类:

import Foundation
import GoogleTagManager

final class Tags: NSObject, TAGCustomFunction {

    func execute(withParameters parameters: [AnyHashable : Any]!) -> NSObject! {
        print("YEAH ! IT WORKS !");
        return nil;
    }
}

一切都运作良好但是,我可以看到这种日志:

  

GoogleTagManager info:处理记录的事件:带参数的applicationStart :( null)

但我打印的日志一直没有出现......

我确定容器的配置,因为这个容器已正确加载,并且我使用与Objective C项目完全相同的容器,它可以很好地工作。

2 个答案:

答案 0 :(得分:3)

在阅读this SO post后,我突然想起Swift项目可以嵌入一些客观的C类。 一旦我意识到这一点,解决我的问题的过程非常容易,尽管我以前从未这样做过。

我创建了一个新的 Cocoa Touch Class ,如下所示:

  • 这是.m:

    #import "MyCustomTagClass.h"
    #import "MySwiftClass-Swift.h"
    
    @implementation MyCustomTagClass
    
    - (NSObject*)executeWithParameters:(NSDictionary*)parameters {
        [MySwiftClass myMethod];
    }
    
    @end
    
  • 这是.h:

     #import <Foundation/Foundation.h>
     #import <GoogleTagManager/TAGCustomFunction.h>
    
     @interface MyCustomTagClass : NSObject <TAGCustomFunction>
    
     - (NSObject*)executeWithParameters:(NSDictionary*)parameters;
    
     @end
    

请注意,我为Swift类导入了一个标头,该标头由Xcode自动生成。只需在类的名称后面添加 -Swift.h 即可导入它,就像我在上面的.m示例中所做的那样。 最后,但并非最不重要的是,在类和方法声明行中使用 @objc 注释更新Swift类:

import Foundation

@objc class MySwiftClass: NSObject {

   //...

   @objc static func myMethod() {
        // do something...
    }
}

我希望这有帮助!

答案 1 :(得分:1)

我认为TAGCustomFunction需要有类/方法@objc注释,类级@objc注释需要指定类名,即< / p>

import Foundation
import GoogleTagManager

@objc(Tags)
final class Tags: NSObject, TAGCustomFunction {

    @objc func execute(withParameters parameters: [AnyHashable : Any]!) -> NSObject! {
        print("YEAH ! IT WORKS !");
        return nil;
    }
}