【问题标题】:CocoaSoundCloudAPI crashes when I connect to company FaceBook account. Fix required当我连接到公司 FaceBook 帐户时,CocoaSoundCloudAPI 崩溃。需要修复
【发布时间】:2012-04-21 14:30:49
【问题描述】:

(我之前曾尝试过 SoundCloud GoogleGroups(已失效?),并为此直接联系了我的 SoundCloud 联系人。被告知在此处发布问题。)

刚刚尝试在 iOS 上使用 SoundCloudAPI,我发现了一个严重的错误。要么这是 API 中的错误,要么是 SoundCloud 中的错误,或者(很可能)我做错了什么。 :) 但最终结果将是一个损坏的应用程序,所以我很想知道这里出了什么问题。

我按照 Tobias 视频和 CocoaSoundCloudAPI 自述文件设置了一个新的 iOS 项目。

使用 SCShareViewController 连接到我为公司创建的测试 SoundCloud 帐户。然后,我在应用程序中创建一个与测试公司 FaceBook 帐户的新连接。我点击安装,然后允许所有权限。

应用程序随后挂起,由于未捕获的异常“NSInvalidArgumentException”而终止应用程序 就行了(在 SCRecordingSaveViewController.m 中):

cell.textLabel.text = [connection objectForKey:@"display_name"];

每当我现在运行应用程序时,它都会在这一行崩溃。

当我转储连接 NSDictionary 的内容时,似乎 self.availableConnections 中列出了两个连接,一个“facebook_page”连接与我为公司 Facebook 页面提供的 display_name。但还有第二个“facebook_profile”,显示名称为空。正是这第二个连接导致 API 崩溃。大概 API 开发人员从来没有期望一个空的 display_name,但我也不明白为什么它会列出两个 FaceBook 连接。

如果我进一步调查“display_name”的值,那么 Xcode 会告诉我“Variable is not a CFString”,事实上,如果我查看类,那么它不是。

在浏览器中进入 SoundCloud,我可以列出连接,它会显示其中两个。一个是我公司 FB 帐户的名称,另一个是:

"http://facebook.com/profile.php?id=***** 是您的主要 Facebook 用户帐户"

如果我断开这两者,我可以再次使用 SoundCloudAPI 而不会崩溃。

然后我创建了新的个人测试 SoundCloud 和 FaceBook 帐户,并在应用程序中再次执行相同的操作。这次它没有崩溃(实际上效果很好),并且连接 NSDictionary 有一个连接“facebook_profile”,其显示名称有效。 SoundCloud 通过浏览器也只列出一个连接。

请注意,CocoaSoundCloudDemo 也会发生这种情况,无需更改代码。

我还可以修改代码以避免在连接到我的公司帐户时崩溃:-

// cell.textLabel.text = [connection objectForKey:@"display_name"]; 

id displayName = [connection objectForKey:@"display_name"];
if ([displayName isKindOfClass:[NSString class]]) 
{
    cell.textLabel.text = (NSString*)displayName;
}

...这给了我两行 FB 连接,但第二行是空白的。通过一些努力,我可以弄清楚他们在代码中所做的事情,并且如果 display_name 无效则不显示一行,但显然我宁愿不必这样做并使用标准 API 代码。

所以,长话短说:-

1) SoundCloud 是否允许您连接到公司的 Facebook 帐户?您是否需要在该 Facebook 帐户上进行一些特殊设置,以便 SoundCloud 只能看到“Facebook_profile”而不能看到“Facebook_page”?问题似乎出在 SoundCloud 本身,而不是 iOS API,而是 API 崩溃了。

2) 在我的测试应用程序中,如果用户尝试将 SoundCloud 帐户连接到公司 FaceBook 帐户(至少,使用我的最小设置),那么 SoundCloudAPI 将因异常而崩溃,并且我的整个应用程序将继续崩溃,直到用户使用浏览器登录 SoundCloud 并手动删除这两个连接。这肯定不好,但我已经用谷歌搜索过任何有类似问题的人,但一无所获。如果没有找到解决方案,我无法在我的应用程序中使用完整的 API,因为担心我的用户会遇到相同的崩溃错误,并且可能必须创建一个精简的自定义 UI,以避免需要共享到 FaceBook 等。

【问题讨论】:

  • 嗨,我是 SoundCloud iOS 团队的 Tobias。您正在尝试做的事情(据我了解您的描述)应该可以。我们会对此进行调查,但这可能需要几天时间。
  • 没问题,我不急。如果您需要,我可以提供更多信息,例如带有两个 FB 连接的 SoundCloud 站点的屏幕截图,或者 API 中连接列表中返回的数据。您应该能够通过创建一个新的 FB 帐户,选择公司帐户而不是个人帐户,然后使用 CocoaSoundCloudDemo 连接到 FB 来重现错误。这就是我所做的一切。
  • 只是想知道您是否在这方面取得了任何进展?即使这种进展只是你不能重复这个问题。在我知道它不会给我的用户带来问题之前,我无法将 SoundCloud 支持添加到我的应用中。
  • 嗨@MarkTerry,如果displayName 不是NSString,它到底是什么? :) 这将帮助我们重现错误。有没有可能是 NSNull?
  • 第一个显示名称是 __NSCFString,与我的 Facebook 帐户是同一个字符串。用于此的“类型”和“服务”将作为“facebook_page”出现。第二个 displayName(导致崩溃)是 NSNull。用于此的“类型”和“服务”将显示为“facebook_profile”。

标签: soundcloud


【解决方案1】:

很抱歉我们没有早点回复您。 从我们的 SDK 用户那里收到反馈总是好的,是的,我们应该检查一下 针对nil 值并相应地处理这种情况。

但是,我调查了您所描述的情况,并且确实有效 对我来说完美无缺。我一开始就正确显示了 Facebook 的两行 在我的 SoundCloud 个人资料设置中将我的 SoundCloud 帐户与新的 Facebook 页面相关联。

您也可以通过运行检查哪些帐户已连接

curl "https://api.soundcloud.com/me/connections.json?oauth_token=<YOUR_OAUTH_TOKEN> 

就我而言,我收到了类似的东西

{
"kind": "connection",
"id": 12345678,
"created_at": "2013/01/10 15:55:20 +0000",
"display_name": "Testpage",
"post_publish": true,
"post_favorite": true,
"type": "facebook_page",
"service": "facebook_page",
"uri": "https://api.soundcloud.com/connections/12345678"
},
{
"kind": "connection",
"id": 12345679,
"created_at": "2013/01/10 11:07:56 +0000",
"display_name": "Rob",
"post_publish": true,
"post_favorite": true,
"type": "facebook_profile",
"service": "facebook_profile",
"uri": "https://api.soundcloud.com/connections/12345679"
}

因此,在通过 SDK 上传新声音时,我在 Facebook 中获得了两行 分享部分。你还在遇到这个问题吗?

我们将很快发布对 iOS SDK 的更新,敬请期待并感谢您的反馈。

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多