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()
])
)
Используйте инструмент для создания дампа таблицы экспорта из общей библиотеки (например, DLL, такой как kernel32.dll). Вы увидите названные точки входа и / или порядковые точки входа. Как правило, для окон именованные точки входа не связаны (внешний «C»). Скорее всего, вам нужно будет немного взглянуть на код сборки и получить параметры (типы, число, порядок, соглашение о вызовах и т. Д.) Из кадра стека (если он есть) и использования регистра. Если кадра стека нет, это немного сложнее, но все же выполнимо. См. Ссылки по следующим ссылкам:
Воспользуйтесь такими инструментами, как dumpbin для исследования разделов экспорта. Эти же принципы работают во множестве операционных систем, однако вам нужно будет заменить инструмент, который вы используете для создания дампа таблицы экспорта. Например, в Linux вы можете использовать nm для создания дампа объектного файла и перечисления его раздела экспорта (среди прочего). Вы также можете использовать gdb для установки точек останова и пошагового выполнения кода сборки точки входа, чтобы определить, какими должны быть аргументы.
IDA Pro - ваш лучший выбор, но пожалуйста, удвойте, пожалуйста, фактически никогда не используйте их ни для чего.
Они внутренние, потому что меняются; они могут (и меняют) даже изменяться в результате исправления, поэтому вам даже не гарантируется, что ваш недокументированный API будет работать для конкретной версии ОС и уровня пакета обновления, для которого вы его написали. Если вы отправляете такой продукт, вы живете в долг.
Посмотрите на системные dll и какие функции они экспортируют. Каждая функция API, документированная или нет, экспортируется в один из них (пользователь, ядро, ...).
Для API пользовательского режима вы можете открыть Kernel32.dll User32.dll Gdi32.dll, особенно ntdll.dll в обходчике зависимостей , и найти все экспортированные API. Но у вас не будет документации.
Только что нашел хорошую статью о Native APIS Марка Руссиновича
Всем здесь пока не хватает некоторых существенных функций, которые включают в себя очень недокументированные части ОС Windows RPC . Операции RPC (например, rpcrt4.dll, lsass.exe, csrss.exe и т. Д.) Очень часто происходят во всех подсистемах, через порты LPC или другие интерфейсы, их функциональность похоронена в мистических заклинаниях различных типов / подтипов. / struct-typedef и т. д., которые значительно труднее отлаживать из-за асинхронного характера или того факта, что они предназначены для процессов, которые, если бы вы выполняли отладку с помощью одного шага или что-то еще, вы бы обнаружили всю систему блокировка из-за блокировки клавиатуры или другого ввода-вывода от передачи;)
ReactOS , вероятно, наиболее целесообразный способ исследовать недокументированный API. У них достаточно зрелое ядро и другие исполнительные с застроен. IDA требует довольно много времени, и маловероятно, что вы найдете что-то, чего еще не было у разработчиков ReactOS.
Вот аннотация со связанной страницы;
ReactOS® - это бесплатная современная операционная система система на основе дизайна Windows® XP / 2003. Написано полностью с царапины, он стремится следовать Архитектура Windows® разработана Microsoft с аппаратного уровня прямо до приложения уровень. Это не на базе Linux система и не разделяет ни одну из unix архитектура.
Основная цель Проект ReactOS должен предоставить операционная система, которая является двоичной совместим с Windows. Это будет разрешите ваши приложения Windows и драйверов, чтобы они работали, как на вашем Система Windows. Кроме того, внешний вид и ощущение работы Windows система используется так, что люди привык к знакомому пользователю интерфейс Windows® найдет использование ReactOS проста. Конечная цель ReactOS - позволить вам удалите Windows® и установите ReactOS без того, чтобы конечный пользователь заметил
Когда я исследую некоторые редко встречающиеся конструкции Windows, ReactOS часто является единственной достоверной ссылкой.