在 Swift 中使用 GTM v5 TAGCustomFunction
Using GTM v5 TAGCustomFunction in Swift
我正在将 GTM v5 (GTM + Firebase) 集成到一个 Swift 项目中,我希望能够在触发标签时调用一些方法。但是,它似乎不适用于 Swift,尽管 Objective C 和 Android 项目中的类似实现确实有效。
这是符合 TAGCustomFunction
协议的 class :
import Foundation
import GoogleTagManager
final class Tags: NSObject, TAGCustomFunction {
func execute(withParameters parameters: [AnyHashable : Any]!) -> NSObject! {
print("YEAH ! IT WORKS !")
return nil
}
}
一切正常,即使我看到了这些日志:
GoogleTagManager info: Processing logged event: applicationStart with parameters: (null)
但是我正在打印的日志没有显示...
我确定容器的配置,因为这个容器已正确加载,并且我为我的 Objective C 项目使用了完全相同的容器,它在其中完美运行。
看完this SO post,突然想起一个Swift项目可以嵌入一些objective Cclasses。
一旦我意识到这一点,我的问题的解决方案就非常容易设置,尽管我以前从未这样做过。
我创建了一个新的 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 class 导入了一个 header,它是由 Xcode 自动生成的。只需在 class 的名称后添加 -Swift.h 即可导入它,就像我在上面的 .m 示例中所做的那样。
最后但并非最不重要的是,在 class 和方法声明行中使用 @objc 注释更新您的 Swift class 和方法声明行:
import Foundation
@objc class MySwiftClass: NSObject {
//...
@objc static func myMethod() {
// do something...
}
}
希望对您有所帮助!
我认为 TAGCustomFunction
需要 class/method @objc
注释, 和 class 级别 @objc
注解需要指定class名称,即
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
}
}
我正在将 GTM v5 (GTM + Firebase) 集成到一个 Swift 项目中,我希望能够在触发标签时调用一些方法。但是,它似乎不适用于 Swift,尽管 Objective C 和 Android 项目中的类似实现确实有效。
这是符合 TAGCustomFunction
协议的 class :
import Foundation
import GoogleTagManager
final class Tags: NSObject, TAGCustomFunction {
func execute(withParameters parameters: [AnyHashable : Any]!) -> NSObject! {
print("YEAH ! IT WORKS !")
return nil
}
}
一切正常,即使我看到了这些日志:
GoogleTagManager info: Processing logged event: applicationStart with parameters: (null)
但是我正在打印的日志没有显示...
我确定容器的配置,因为这个容器已正确加载,并且我为我的 Objective C 项目使用了完全相同的容器,它在其中完美运行。
看完this SO post,突然想起一个Swift项目可以嵌入一些objective Cclasses。 一旦我意识到这一点,我的问题的解决方案就非常容易设置,尽管我以前从未这样做过。
我创建了一个新的 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 class 导入了一个 header,它是由 Xcode 自动生成的。只需在 class 的名称后添加 -Swift.h 即可导入它,就像我在上面的 .m 示例中所做的那样。 最后但并非最不重要的是,在 class 和方法声明行中使用 @objc 注释更新您的 Swift class 和方法声明行:
import Foundation
@objc class MySwiftClass: NSObject {
//...
@objc static func myMethod() {
// do something...
}
}
希望对您有所帮助!
我认为 TAGCustomFunction
需要 class/method @objc
注释, 和 class 级别 @objc
注解需要指定class名称,即
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
}
}