gpt4 book ai didi

ios - 从中国商店禁用 Callkit 最佳方法?

转载 作者:可可西里 更新时间:2023-11-01 04:23:07 27 4
gpt4 key购买 nike

我们正在使用 CallKit 框架来促进 Voip 功能的本地使用。用户可以在我们的 Messenger 应用程序中进行语音和视频通话。

但由于中国政府的原因,Apple 从中国移除了 CallKit 应用。

目前像我们这样的 CallKit 应用最好的方法是什么?

我们不想从中国删除我们的应用程序,我们也不会因为中国而从我们的应用程序中删除所有 CallKit 功能..

最佳答案

我同意 txulu 的观点,似乎 CallKit 只需要为中国用户禁用/不使用 - 请参阅 Apple Developer forums 上的有用回复.

普遍的共识似乎是,只要你能向 App Review 解释你如何为中国用户禁用 CallKit 功能,那应该是可以接受的,除非/直到 Apple 发布具体指南。

对于您的特定问题 Ahmet,听起来 CallKit 可能会提供您应用程序的一些核心功能。如果是这种情况并且您确实需要支持中国的用户,您可能需要考虑使用另一个 VOIP 框架来重建您的应用程序来调用电话(VOIP 在中国仍然允许......只是不使用 CallKit)。或者,如果用户在中国,您可以在您的应用中禁用和隐藏通话功能。

我的应用程序仅使用 CallKit 来观察从我的应用程序发起的调用何时结束,因此我能够设计一个解决方法。对于中国的用户,我现在观察 UIApplicationDidBecomeActiveNotification 并根据通话开始后耗时来猜测从应用程序发起的电话调用是否已结束。它不如使用 CallKit 的 CXCallObserver 好,但它似乎足以满足我的目的。


更新!我的应用程序通过了 App Store 审核并修复了所述问题。

  • 昨天提交了一个新版本。
  • 在评论者信息部分包含一条短消息,内容为“在此版本及更高版本中,我们不为中国用户使用 CallKit 功能。我们使用 NSLocale 检测用户的区域。”
  • 应用在大约 12 小时后获得批准,应用审核团队没有提出任何问题或意见。

检测中国用户

为了确定用户是否在中国,我使用 NSLocale 获取用户的 currentLocale 和 countryCode。如果 countryCode 包含中国的 ISO 代码之一(CN、CHN),我会设置一个标志来说明我不能使用 CallKit,也不能在我的应用程序中初始化或使用 CallKit 功能。

- (void)viewDidLoad {
[super viewDidLoad];

NSLocale *userLocale = [NSLocale currentLocale];
if ([userLocale.countryCode containsString: @"CN"] || [userLocale.countryCode containsString: @"CHN"]) {
NSLog(@"currentLocale is China so we cannot use CallKit.");
self.cannotUseCallKit = YES;
} else {
self.cannotUseCallKit = NO;
// setup CallKit observer
self.callObserver = [[CXCallObserver alloc] init];
[self.callObserver setDelegate:self queue:nil];
}
}

要对此进行测试,您可以在“设置”>“通用”>“语言和地区”>“地区”中更改地区。当我将区域设置为“中国”但将语言设置为英语时,[NSLocale currentLocale] 返回 "en_CN"


swift 5

效用函数

func isCallKitSupported() -> Bool {
let userLocale = NSLocale.current

guard let regionCode = userLocale.regionCode else { return false }

if regionCode.contains("CN") ||
regionCode.contains("CHN") {
return false
} else {
return true
}
}

主视图 Controller

class MainViewController: UIViewController {
...
var callObserver = CXCallObserver()
...
override func viewDidLoad() {
super.viewDidLoad()
if isCallKitSupported() {
callObserver.setDelegate(self, queue: nil)
}
...
}
...
}

注意:countryCode 现在是 regionCode 并且只返回“US”、“CN”等。国家代码前没有语言,如“en_CN”。

关于ios - 从中国商店禁用 Callkit 最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016603/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com