Интеграция нового SDK facebook от Swift

PrimeFaces имеет функции опроса для автоматического обновления компонента. В следующем примере <h:outputText> будет автоматически обновляться каждые 3 секунды с помощью <p:poll>.

Как уведомить связанные клиенты и обновить вышеупомянутые меню CSS с последними значениями из database

Создайте метод прослушивателя, например process(), чтобы выбрать данные вашего меню. <p:poll> будет автоматически обновлять ваш компонент меню.

<h:form>
    <h:outputText id="count"
                  value="#{AutoCountBean.count}"/> <!-- Replace your menu component-->

    <p:poll interval="3" listener="#{AutoCountBean.process}" update="count" />
</h:form>
@ManagedBean
@ViewScoped
public class AutoCountBean implements Serializable {

    private int count;

    public int getCount() {
        return count;
    }

    public void process() {
        number++; //Replace your select data from db.
    }
}   
29
задан Varis Darasirikul 26 March 2015 в 11:40
поделиться

10 ответов

Swift 3 со Swift FacebookSDK

Подфайл

pod 'FacebookCore'
pod 'FacebookLogin'

info.plist

без изменений от старого SDK

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fb$(YOUR_FB_APP_ID)</string>
        </array>
    </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
</array>
<key>FacebookAppID</key>
<string>$(YOUR_FB_APP_ID)</string>
<key>FacebookDisplayName</key>
<string>$(YOUR_APP_NAME)</string>

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)
    ...
}

func applicationDidBecomeActive(_ application: UIApplication) {
    AppEventsLogger.activate(application)
}

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let appId = SDKSettings.appId
    if url.scheme != nil && url.scheme!.hasPrefix("fb\(appId)") && url.host ==  "authorize" { // facebook
        return SDKApplicationDelegate.shared.application(app, open: url, options: options)
    }
    return false
}

...

LoginManager (пользовательский вход в систему, см. Документы для реализации по умолчанию / кнопки)

содержит пользовательский код, но вы получите точку

let facebookManager = LoginManager(loginBehavior: .systemAccount, defaultAudience: .everyone)
func loginWithFacebook() {
    self.facebookManager.logIn(HAAccountManager.shared.facebookPermissions, viewController: self) { (result) in
        switch result {
        case .failed(let error):
            self.showAlert(forError: error as NSError)
        case .cancelled:
            print("FB login cancelled")
        case .success(let grantedPermissions, let deniedPermissions, let accessToken):
            if grantedPermissions.contains(Permission(name: "email")) == true {
                ApiClient.shared.facebookSignIn(authToken: accessToken.authenticationToken, completion: { (err, user) in
                    if err == nil {
                        // success
                    }
                    else {
                        self.showAlert(forError: err!)
                    }
                })
            }
            else {
                self.showAlert(forError: HAError(title: String(format: String.somethingError, String.signIn), message: grantedPermissions.contains(Permission(name: "email")) == true ? String.noAccountFound : String.missingEmailForSignUp))
            }
        }
    }
}

Аналитика

// custom ex
AppEventsLogger.log(AppEvent(name: "open_app", parameters: ["logged_in": NSNumber(value: HAAccountManager.shared.isUserLoggedIn())], valueToSum: nil))

// purchase ex
AppEventsLogger.log(
    AppEvent.purchased(
        amount: Double(revenue),
        currency: currency,
        extraParameters: [
            AppEventParameterName.contentId : orderId,
            AppEventParameterName.itemCount : order.orderItems.count.nsNumber()
        ])
)
26
ответ дан Whitney Foster 26 March 2015 в 11:40
поделиться

Я знаю, что это довольно старый вопрос, но кажется, что он никогда не устареет, поскольку Facebook долгое время не обновлял руководство по QuickStart.

Итак, вот решение для Swift 4.x.

В didFinishLaunching:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

    FBSDKApplicationDelegate.sharedInstance()?.application(application, didFinishLaunchingWithOptions: launchOptions)

    return true
}

В открытом URL:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    let handled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[.sourceApplication] as? String, annotation: options[.annotation])
    return handled
}
7
ответ дан Tomte 26 March 2015 в 11:40
поделиться

Это было устарело в iOS 10.

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool {

Для Swift 3.0 вы можете использовать:

Swift 3.0

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let isHandled = FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[.sourceApplication] as! String!, annotation: options[.annotation])
    return isHandled
}
22
ответ дан Tal Zion 26 March 2015 в 11:40
поделиться

Это почти то же самое, за исключением того, что вместо скобок вы используете точки.

func applicationDidBecomeActive(application: UIApplication!) {
    FBSDKAppEvents.activateApp()
}

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String, annotation: AnyObject?) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
42
ответ дан Sean 26 March 2015 в 11:40
поделиться

В быстрой версии 3.0.1

return GIDSignIn.sharedInstance().handle(url, sourceApplication:    
options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation:     
options[UIApplicationOpenURLOptionsKey.annotation])
1
ответ дан eli-k 26 March 2015 в 11:40
поделиться

В iOS 9 я использую:

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
{   
    FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String, annotation: options["UIApplicationOpenURLOptionsAnnotationKey"])
    return true
}
3
ответ дан Pavel Z. 26 March 2015 в 11:40
поделиться

В iOS 9 вы должны использовать:

func application(application: UIApplication,openURL url: NSURL, options: [String: AnyObject]) -> Bool {
   return ApplicationDelegate.shared.application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String, annotation: annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}

Я обнаружил, что у делегата приложения есть возможность сломаться в iOS 9 с аннотацией: options[UIApplicationOpenURLOptionsAnnotationKey], поскольку он не будет принимать нулевые значения. Вы можете установить это в пустую строку, и приложение должно нормально работать с Facebook после этого.

Swift 2.2 документы:

Вы задаете необязательную цепочку, помещая вопросительный знак (?) После необязательного значения, для которого вы хотите вызвать свойство, метод или индекс, если необязательный параметр не является ноль. Это очень похоже на размещение восклицательного знака (!) После необязательного значения, чтобы принудительно развернуть его значение. Основное отличие состоит в том, что необязательное связывание завершается неудачно, когда необязательное значение равно nil, а принудительное развертывание вызывает ошибку времени выполнения, когда необязательное значение равно nil.

2
ответ дан Daniel 26 March 2015 в 11:40
поделиться
if let fbSDKAppId = FBSDKSettings.appID(),
            url.scheme!.hasPrefix("fb\(fbSDKAppId)"),
            url.host == "authorize" { // facebook
            return FBSDKApplicationDelegate.sharedInstance().application(application,
                                                                         open: url,
                                                                         sourceApplication: sourceApplication,
                                                                         annotation: annotation)
}
1
ответ дан Svitlana 26 March 2015 в 11:40
поделиться

Так как я хочу поддерживать iOS 8, я изменил функцию application(_:open:options:) в ответа Уитни Фостера на

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let appId = SDKSettings.appId
    if url.scheme != nil && url.scheme!.hasPrefix("fb\(appId)") && url.host ==  "authorize" { // facebook
        if #available(iOS 9.0, *) {
            return SDKApplicationDelegate.shared.application(app, open: url, options: options)
        }
    }
    return false
}

и реализовал дополнительную резервную функцию

// Fallback on earlier versions
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return SDKApplicationDelegate.shared.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
1
ответ дан Community 26 March 2015 в 11:40
поделиться

Для Swift 5 с последней версией FBSDK (FBSDKCoreKit 5.2.1)

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        let handled = ApplicationDelegate.shared.application(app, open: url, options: options)

        return handled
    }
0
ответ дан Hardik Thakkar 26 March 2015 в 11:40
поделиться