- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
简化一下,代码是这样的:
func login() {
NSLog("Will login with read permissions")
FBSDKLoginManager().logInWithReadPermissions(
["public_profile"],
handler: {
(result: FBSDKLoginManagerLoginResult!, error: NSError!) -> Void in
NSLog("Handler is called")
})
NSLog("Returning from login")
}
调用时,它会生成以下日志语句:
2015-05-25 11:35:07.886 MyApp[1213:646722] Will login with read permissions
2015-05-25 11:44:22.048 MyApp[1213:646722] Returning from login
(上述语句之间的较大时间差异是由于我使用调试器单步执行 logInWithReadPermissions 的内部结构。在没有调试器的情况下运行不会改变行为。)
我已经在安装了 Facebook native 应用程序并登录的设备上尝试过此操作,我也曾在没有 native 应用程序的设备上尝试过此操作,但我根本没有访问过 Facebook。我也在模拟器上试过这个。我得到了相同的结果。
我假设这是一个同步调用,但为了以防万一,我尝试在调用线程中无限期地等待——处理程序仍然没有被调用,并且设备上没有发生任何可见的事情。
我打开了我能找到的所有日志记录:
FBSDKSettings.setLoggingBehavior(
[FBSDKLoggingBehaviorAppEvents,
FBSDKLoggingBehaviorInformational,
FBSDKLoggingBehaviorAccessTokens,
FBSDKLoggingBehaviorUIControlErrors,
FBSDKLoggingBehaviorGraphAPIDebugWarning,
FBSDKLoggingBehaviorGraphAPIDebugInfo,
FBSDKLoggingBehaviorNetworkRequests,
FBSDKLoggingBehaviorCacheErrors,
FBSDKLoggingBehaviorDeveloperErrors])
然后,在启动时,我得到以下任一信息:
2015-05-25 11:35:01.320 MyApp[1213:646722] FBSDKLog: Request <#1111>:
URL: https://graph.facebook.com/v2.3
Method: POST
UserAgent: FBiOSSDK.4.1.0
MIME: multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f
Body (w/o attachments):
batch_app_id: 140xxxxxxxxxxxxx
batch: [{"relative_url":"140xxxxxxxxxxxxx?debug=info&fields=app_events_feature_bitmask%2Cname%2Cios_dialog_configs%2Csupports_implicit_sdk_logging%2Cgdpv4_nux_enabled%2Cgdpv4_nux_content%2Cios_supports_system_auth%2Cios_sdk_error_categories&format=json&include_headers=false&sdk=ios","method":"GET"},{"relative_url":"140xxxxxxxxxxxxx?debug=info&fields=app_events_feature_bitmask%2Cname%2Cios_dialog_configs%2Csupports_implicit_sdk_logging%2Cgdpv4_nux_enabled%2Cgdpv4_nux_content%2Cios_supports_system_auth%2Cios_sdk_error_categories&format=json&include_headers=false&sdk=ios","method":"GET"}]
2015-05-25 11:35:01.321 MyApp[1213:646722] FBSDKLog: Request <#1111>:
URL: https://graph.facebook.com/v2.3
Method: POST
UserAgent: FBiOSSDK.4.1.0
MIME: multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f
2015-05-25 11:35:01.329 MyApp[1213:646722] FBSDKLog: FBSDKTimeSpentData Restore: {"numInterruptions":0,"lastSuspendTime":1432544336,"secondsSpentInCurrentSession":3}
2015-05-25 11:35:01.363 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents: Recording event @ 1432578901: {
"_eventName" = "fb_mobile_activate_app";
"_logTime" = 1432578901;
"_ui" = UIAlertController;
"fb_mobile_launch_source" = Unclassified;
}
2015-05-25 11:35:01.364 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents Persist: Read 0 event states. First state has 0 events
2015-05-25 11:35:01.364 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents Persist: Clearing
2015-05-25 11:35:01.365 MyApp[1213:646722] FBSDKLog: FBSDKAppEvents: Recording event @ 1432578901: {
"_eventName" = "fb_mobile_deactivate_app";
"_logTime" = 1432578901;
"_ui" = UIAlertController;
"_valueToSum" = 3;
"fb_mobile_app_interruptions" = 0;
"fb_mobile_launch_source" = Unclassified;
"fb_mobile_time_between_sessions" = "session_quanta_5";
}
2015-05-25 11:35:01.781 MyApp[1213:646722] FBSDKLog: FBSDKURLConnection <#1114>:
Duration: 460 msec
Response Size: 1 kB
MIME type: application/json
2015-05-25 11:35:01.783 MyApp[1213:646722] FBSDKLog: Response <#1111>
Duration: 461 msec
Size: 2011 kB
Response Body:
(
{
body = {
"app_events_feature_bitmask" = 1;
"gdpv4_nux_content" = "New! You're in control - choose what info you want to share with apps.";
"gdpv4_nux_enabled" = 0;
id = 140xxxxxxxxxxxxx;
"ios_dialog_configs" = {
data = (
{
name = like;
url = "/connect/dialog/MPlatformLikeJSDialog";
versions = (
20140410
);
},
{
name = appinvites;
url = "/connect/dialog/MPlatformAppInvitesJSDialog";
versions = (
20140410
);
}
);
};
"ios_sdk_error_categories" = (
{
items = (
{
code = 102;
},
{
code = 190;
}
);
name = login;
"recovery_message" = "Please log into this app again to reconnect your Facebook account.";
"recovery_options" = (
OK,
Cancel
);
},
{
items = (
{
code = 341;
},
{
code = 9;
},
{
code = 2;
},
{
code = 4;
},
{
code = 17;
}
);
name = transient;
"recovery_message" = "The server is temporarily busy, please try again.";
"recovery_options" = (
OK
);
}
);
"ios_supports_system_auth" = 1;
name = MyApp;
"supports_implicit_sdk_logging" = 1;
};
code = 200;
},
{
body = {
"app_events_feature_bitmask" = 1;
"gdpv4_nux_content" = "New! You're in control - choose what info you want to share with apps.";
"gdpv4_nux_enabled" = 0;
id = 140xxxxxxxxxxxxx;
"ios_dialog_configs" = {
data = (
{
name = like;
url = "/connect/dialog/MPlatformLikeJSDialog";
versions = (
20140410
);
},
{
name = appinvites;
url = "/connect/dialog/MPlatformAppInvitesJSDialog";
versions = (
20140410
);
}
);
};
"ios_sdk_error_categories" = (
{
items = (
{
code = 102;
},
{
code = 190;
}
);
name = login;
"recovery_message" = "Please log into this app again to reconnect your Facebook account.";
"recovery_options" = (
OK,
Cancel
);
},
{
items = (
{
code = 341;
},
{
code = 9;
},
{
code = 2;
},
{
code = 4;
},
{
code = 17;
}
);
name = transient;
"recovery_message" = "The server is temporarily busy, please try again.";
"recovery_options" = (
OK
);
}
);
"ios_supports_system_auth" = 1;
name = MyApp;
"supports_implicit_sdk_logging" = 1;
};
code = 200;
}
)
2015-05-25 11:35:01.841 MyApp[1213:646722] FBSDKLog: Dynamically loaded library at /System/Library/Frameworks/Accounts.framework/Accounts
或者这个:
2015-05-25 12:04:59.336 MyApp[1221:650047] FBSDKLog: FBSDKTimeSpentData Restore: {"numInterruptions":0,"lastSuspendTime":1432544336,"secondsSpentInCurrentSession":3}
2015-05-25 12:04:59.343 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents: Recording event @ 1432580699: {
"_eventName" = "fb_mobile_activate_app";
"_logTime" = 1432580699;
"_ui" = UIAlertController;
"fb_mobile_launch_source" = Unclassified;
}
2015-05-25 12:04:59.344 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents Persist: Read 0 event states. First state has 0 events
2015-05-25 12:04:59.344 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents Persist: Clearing
2015-05-25 12:04:59.345 MyApp[1221:650047] FBSDKLog: FBSDKAppEvents: Recording event @ 1432580699: {
"_eventName" = "fb_mobile_deactivate_app";
"_logTime" = 1432580699;
"_ui" = UIAlertController;
"_valueToSum" = 3;
"fb_mobile_app_interruptions" = 0;
"fb_mobile_launch_source" = Unclassified;
"fb_mobile_time_between_sessions" = "session_quanta_5";
}
无论哪种方式,我的处理程序都不会被调用,但 logInWithReadPermissions 函数返回正常。
我已经在我的 AppDelegate 中实现了以下所有内容:
func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FBSDKApplicationDelegate.sharedInstance().application(
application,
didFinishLaunchingWithOptions: launchOptions)
}
func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool {
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}
我的 Info.plist 中有这些行:
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb140xxxxxxxxxxxxx</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>140xxxxxxxxxxxxx</string>
<key>FacebookDisplayName</key>
<string>MyApp</string>
上面有什么我遗漏的吗?如果没有,我该如何进一步调试呢?我可以打开或关闭任何日志记录吗?我在 XCode 或 Facebook 端的应用程序设置中有任何人能想到我可以查看的内容吗?
最佳答案
你说:
"I tried waiting indefinitely in the calling thread -- the handler is still never called, and nothing visible is happening on the device."
这个调用绝对不是同步的,如果你让主线程在一个紧凑的等待循环中忙碌,那么它就无法“给你回电话”。
另一件要检查的事情是确保您的应用程序委托(delegate)没有同时实现
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
如果您在应用委托(delegate)中实现此方法,则其他实现将被忽略:
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool
关于ios - FBSDKLoginManager.loginWithReadPermissions 不在 iOS 上调用处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30444761/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!