【问题标题】:Posting to correct Instagram Account with UIActivityViewController使用 UIActivityViewController 发布以更正 Instagram 帐户
【发布时间】:2019-11-22 19:38:26
【问题描述】:

我正在使用 UIActivityViewController 将图像从我的应用程序发布到 Instagram 应用程序。

请注意,我的应用不使用 Instagram API 或登录用户的 Instagram 帐户。

let sharingImage = button.backgroundImage(for: [])
let avc = UIActivityViewController(activityItems: [sharingImage as AnyObject], applicationActivities: nil)

avc.excludedActivityTypes = [.addToReadingList,.airDrop,.assignToContact,.copyToPasteboard,.openInIBooks,.postToFacebook,.postToFlickr,.postToTencentWeibo,.postToTwitter,.postToVimeo,.postToWeibo,.saveToCameraRoll,.message,.mail,.print]
if let wPPC = avc.popoverPresentationController {
    wPPC.sourceView = followUsButton
}
self.present(avc, animated: true, completion: nil)

我使用多个帐户登录我的 Instagram 应用程序。从我的应用程序共享后,Instagram 会尝试向当前登录的帐户“A”(在 Instagram 应用程序内)发帖。这是有道理的。

但是,如果我现在切换到 Instagram 应用并切换到其中的帐户“B”,请返回我的应用,然后再次尝试分享,它会继续尝试向帐户“A”发帖。

修复它的唯一方法是杀死我的应用程序并重新启动它,然后它会加载正确的当前登录帐户“B”。

有没有办法在共享时以编程方式重新加载正确的 Insta 帐户?

【问题讨论】:

  • 您是否也使用 Photos 等原生 iOS 应用对其进行了测试?
  • 照片应用也有同样的错误行为。
  • 如果您能够使用 activityviewcontroller 分享您发布方式的样板代码,这将非常有帮助。
  • @JulianSilvestri 已发布
  • 以防万一,当您说切换帐户时出现问题时,您的意思是在我的应用程序中,您立即尝试从同一个 ViewController 发布?您移动到父视图(因此破坏旧视图)返回,然后移动到与 1/? 相同的视图

标签: ios swift uiactivityviewcontroller


【解决方案1】:

这只是一种解决方法,但目前可能是您唯一的选择,因为您发现即使是原生照片也有相同的问题,因此需要 Apple 来解决它。

在您的应用程序的Info.plist 中,添加一个布尔键UIApplicationExitsOnSuspend,其值为YES。请参阅Information Property List Key Reference 了解更多信息。

这样,应用程序在进入后台状态时会终止,一旦您返回它,它将重新加载。用户可能不会注意到差异。

也许在杀死应用之前,你可以在以下位置添加一些界面状态保存功能:

 optional func applicationWillTerminate(_ application: UIApplication)

我不知道您的应用程序是如何布局的,但您可以创建一个可以实现 Codable 的单例类,并继续跟踪所有具有保存和加载功能的应用程序状态变量。应用启动时终止和加载会触发保存。

我希望它会在某种程度上有所帮助。

EDIT1:应该在 iOS 13 中工作 下面的代码应该可以工作并终止您的应用程序,但不建议这样做,并且您在上传到 AppStore 时可能会遇到问题。我想您可以通过向 Apple 审核团队解释他们在 SDK 中存在错误并指出问题来挑战拒绝。

DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
    UIApplication.shared.perform(#selector(NSXPCConnection.suspend))
     DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
      exit(0)
     }
}

【讨论】:

  • 这似乎是迄今为止最好的解决方法。不过,工作量很大。
  • @Kashif 也许在这里保存类是一个不错的选择。请参阅我对答案的更新。
  • 看来UIApplicationExitsOnSuspend 现在已被 Apple 弃用。有其他选择吗?
  • @Kashif 我已经更新了答案,希望对您有所帮助,但是在上传到 AppStore 时可能会给您带来问题
【解决方案2】:

简短的回答,我怀疑。

UIActivityViewController 不能让您控制用户的登录状态(这就是使用它有趣的原因)。 IMO,这是苹果方面的一个错误。因此,除非有一种秘密方法可以清除 iOS 运行时存储在您的应用程序内存中的授权令牌,否则我看不出您如何实现您想要的。

另外,如果照片应用程序具有相同的行为,那不是一个好兆头...

以防万一,当你说切换帐户时出现问题,你的意思是

  1. 在我的应用程序中,您立即尝试从同一个 ViewController 发布?
  2. 您移回父视图(因此销毁旧视图),然后移至与 1/相同的视图?

在这两种情况下你有相同的结果吗?我问是因为在新视图中实例化新的UIActivityViewController 时,运行时可能会获取新的用户登录配置文件,而如果您从用于从旧帐户发布的同一视图中实例化它,它可能不会这样做(因此它将使用旧登录名)

【讨论】:

  • 我尝试关闭 ViewController 并再次打开它,但似乎没有效果。
  • 好的,这是一个错误。 iOS 端的 IMO。如果您是开发团队的一员,我建议您记录错误报告,并从 Apple 支持获得确认,以免对您的可交付成果产生影响。祝你好运。
【解决方案3】:

这是 iOS 问题,并非特定于您的应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-10
    • 2023-04-07
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多