【发布时间】:2013-02-02 10:50:08
【问题描述】:
给定任何EKCalendar,我如何检查此日历是否为 Facebook 日历? Facebook 日历可以是 Facebook 活动日历或 Facebook 生日日历。
【问题讨论】:
给定任何EKCalendar,我如何检查此日历是否为 Facebook 日历? Facebook 日历可以是 Facebook 活动日历或 Facebook 生日日历。
【问题讨论】:
很遗憾,如果不使用私有 API,则无法判断特定日历是否为 facebook 日历。
我在 iOS 6 测试期间提交了一份错误报告,一位 Apple 工程师告诉我他们会在最终版本中修复它,但事实证明他们没有......
但是,您可以测试特定事件是否是 facebook 事件:
BOOL isFacebookEvent = [[event.URL host] hasSuffix:@"facebook.com"];
不过,这不适用于 Facebook 生日活动!
【讨论】:
EventKit 中仍然没有用于此的公共 API,但有一种仅使用公共方法的解决方法。
每个日历都有一个颜色属性:ekCalendar.CGColor
Facebook 活动日历的颜色是 Facebook 蓝色,因此通过比较日历颜色的 rbg 组件,可以确定日历最有可能来自 Facebook。
我写了一个 UIColor 的 swift 扩展来检查给定的颜色是否是 Facebook 蓝色(完成了帮助函数,使 UIColor rgb 函数更快速)
extension UIColor {
struct rgbComponents {
var red : CGFloat
var green : CGFloat
var blue : CGFloat
var alpha : CGFloat
}
func toComponents()->rgbComponents {
var r:CGFloat = 0
var g:CGFloat = 0
var b:CGFloat = 0
var a:CGFloat = 0
var components : rgbComponents
if self.getRed(&r, green: &g, blue: &b, alpha: &a) {
components = rgbComponents(red: r, green: g, blue: b, alpha: a)
} else {
components = rgbComponents(red: 0, green: 0, blue: 0, alpha: 0)
}
return components
}
func isFBBlue()->Bool {
let c = self.toComponents()
let result = c.red == 0.18823529779911041
&& c.green == 0.39215686917304993
&& c.blue == 0.7137255072593689
&& c.alpha == 1.0
return result
}
【讨论】:
Facebook 可能更安全一些。