PrimeFaces имеет функции опроса для автоматического обновления компонента. В следующем примере <h:outputText>
будет автоматически обновляться каждые 3 секунды с помощью <p:poll>
.
Как уведомить связанные клиенты и обновить вышеупомянутые меню CSS с последними значениями из database
blockquote>Создайте метод прослушивателя, например
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. } }
pod 'FacebookCore'
pod 'FacebookLogin'
без изменений от старого 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>
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
}
...
содержит пользовательский код, но вы получите точку
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()
])
)
Я знаю, что это довольно старый вопрос, но кажется, что он никогда не устареет, поскольку 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
}
Это было устарело в 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
}
Это почти то же самое, за исключением того, что вместо скобок вы используете точки.
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)
}
В быстрой версии 3.0.1
return GIDSignIn.sharedInstance().handle(url, sourceApplication:
options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation:
options[UIApplicationOpenURLOptionsKey.annotation])
В 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
}
В 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.
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)
}
Так как я хочу поддерживать 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)
}
Для 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
}