3

EKCalendarある場合、このカレンダーがFacebookカレンダーであるかどうかを確認するにはどうすればよいですか?Facebookカレンダーは、FacebookイベントカレンダーまたはFacebook誕生日カレンダーにすることができます。

4

2 に答える 2

8

残念ながら、プライベートAPIを使用せずに、特定のカレンダーがFacebookカレンダーであるかどうかを判断する方法はありません。
iOS 6のベータ版でバグレポートを提出しましたが、Appleのエンジニアから、最終リリースで修正すると言われましたが、修正されなかったことがわかりました...

ただし、特定のイベントがFacebookイベントであるかどうかをテストすることはできます。

BOOL isFacebookEvent = [[event.URL host] hasSuffix:@"facebook.com"];

ただし、これはFacebookの誕生日イベントでは機能しません。

于 2013-02-02T11:19:45.530 に答える
1

EventKitにはまだこのためのパブリックAPIはありませんが、パブリックメソッドのみを使用する回避策があります。

各カレンダーにはcolorプロパティがあります:ekCalendar.CGColor

Facebookのイベントカレンダーの色はFacebookBlueであるため、カレンダーの色のrbgコンポーネントを比較することで、Facebookからのカレンダーである可能性が最も高いと判断できます。

UIColorの迅速な拡張機能を作成して、特定の色がFacebook Blueであるかどうかを確認しました(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
    }
于 2015-02-07T10:01:47.990 に答える