我在这里挣扎了一段时间,可能这是我的错误,但我无法在任何地方找到它,这是一个答案.
我在某些方面实现了PushKit,但没有一个是有效的.
我已经添加了正确的后台模式,以正确的方式实现了回调,didUpdatePushCredentials正在被正常调用...
但是,credentials: PKPushCredentials!变量,给我一个错误指针......它不是空的......不是零...没有任何东西......它根本就没有值......它被分配了垃圾......因为这个原因..我收到了EXC_BREAKPOINT ..
我试过3种不同的设备......行为相同......
我已经创建了VoIP推送证书......
我以不同的方式做到了:
总是一样......
这是代码:
extension AppDelegate : PKPushRegistryDelegate {
func registerForVoipPush() {
self.registry = PKPushRegistry(queue:nil)
if self.registry != nil {
self.registry!.delegate = self
self.registry!.desiredPushTypes = Set<String>(arrayLiteral: PKPushTypeVoIP)
}
//let notificationSettings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories:nil)
//UIApplication.sharedApplication().registerUserNotificationSettings(notificationSettings)
}
func pushRegistry(registry: PKPushRegistry!, didUpdatePushCredentials credentials: PKPushCredentials!, forType type: String!) {
//print out the VoIP token. We will use this to test the nofications.
NSLog("voip token: \(credentials.token)") …Run Code Online (Sandbox Code Playgroud) 我已经实现了PushKit.现在我想获得推送通知.有没有办法在线获取推送通知,因为我们有许多在线APNS服务接受设备令牌和.pem文件来发送远程通知?
我正试图在我的IOS应用程序中使用Sinch实现App-to-App调用.我已经在我的iOS应用程序中使用Sinch实现了Pushkit,但是当应用程序处于后台时推送通知不起作用.
我有两个问题.
我是否需要另一个Web服务来单独向我的应用发送推送通知以进行传入应用,或者Sinch自己处理它.
如果它确实处理了自己,那么我的代码中缺少什么.
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
[self handleLocalNotification:[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]];
self.push = [Sinch managedPushWithAPSEnvironment:SINAPSEnvironmentAutomatic];
self.push.delegate = self;
[self.push setDesiredPushTypeAutomatically];
[self.push registerUserNotificationSettings];
return YES;
}
- (BOOL)application:(UIApplication *)app
openURL:(NSURL *)url
options:(NSDictionary *)options {
return [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return [[GIDSignIn sharedInstance] handleURL:url
sourceApplication:sourceApplication
annotation:annotation];
}
- …Run Code Online (Sandbox Code Playgroud) 我有一个我正在处理的项目,该项目使用 VOIP 通知来“唤醒”已置于后台/终止的应用程序。这些通知会定期发送,在最近的 iOS 更新之前,一切似乎都运行良好。
似乎在应用程序处于后台一段时间后(某些用户在 5 分钟后发生,其他用户在 20 分钟后发生),设备在收到 voip 通知后不再处理任何代码。
我在苹果开发论坛上读过一些内容,其他一些开发人员也遇到了类似的问题,大家都猜测是否与新的 iOS 更新(10.3.1/10.3.2)有关。
有没有其他人遇到过这个问题,如果有,你能解决吗?
谢谢!
我制作了 VOIP 应用程序。为此,我将 PushKit 和 Callkit 与 pjsip 一起使用。
当后台应用程序收到呼叫通知时,我打开 callkit 屏幕,然后单击接受呼叫后使用 pjsip 连接。
1)调用结束问题
但是当调用hangout pjsip 成功调用hangout 但然后callkit 给我以下错误:
错误域=com.apple.callkit.error.request事务代码=4
为此,我检查了答案和结束呼叫 uuid 也相同,但又没有结束呼叫。我花了很多时间,但没有得到任何解决方案。
任何人有解决方案,请帮助我。
2) 接听电话后出现音频问题
接受呼叫音频后未配置。音频会话给我以下错误:
音频会话错误:错误域 = NSOSStatusErrorDomain 代码 = 561017449“(空)” [aurioc] 892:失败:'!pri'(启用 3,outf < 1 ch,44100 Hz,Int16> inf < 1 ch,44100 Hz,Int16 >)
对于上述错误,任何人都有解决方案,然后给我。
谢谢。
我已经实施了PushKit。我已按照以下步骤操作:
我能够获得didUpdatePushCredentials设备令牌。工作于 --> iPhone 5s , iPhone6 Plus
didUpdatePushCredentials 不适用于 --> iPhone6 和 iPhone7
我为所有设备使用相同的证书和构建。不知道确切的问题。如果有人遇到过这种问题,请分享解决方法。
我的代码和证书链接
代码 -> https://www.dropbox.com/sh/x2615t7xn8mavs3/AADbX5nBuF5_08YNPX8wI59ga?dl=0
cer -> https://www.dropbox.com/sh/70l4htj1c46emog/AABxBalaoN1JP22dQp8-mNXGa?dl=0
Solution -----> I have changed Bundle identifier And create New certificate with New BundleId.
Run Code Online (Sandbox Code Playgroud) 一旦我的 VoIP 呼叫按源或目的地断开连接,我将尝试删除 Callkit 屏幕。
我用了这个代码
CXEndCallAction *endaction = [[CXEndCallAction alloc] initWithCallUUID:[NSUUID UUID]];
CXCallController *callController = [[CXCallController alloc] initWithQueue:dispatch_get_main_queue()];
requestTransaction:[CXTransaction transactionWithActions:nil completion:completion]];
Run Code Online (Sandbox Code Playgroud)
但关闭 callkit 不起作用。任何人都可以帮我解决这个问题吗?
我正在使用 PushKit 和 CallKit 开发 VoIP 应用程序。我知道类似的问题在不同的论坛上经常被问到,但不幸的是从未得到真正的回答。此外,这些帖子中的大多数都是 2015 年左右的,所以我认为很可能已经发生了很多变化,因为有人可能同时想到了如何让这个工作发挥作用。
当应用程序在前台运行或发送到后台时,它也会使用沙箱服务器以及生产服务器接收推送通知。
我使用的是 iOS 11 和 Xcode 9,需要在“功能”中启用常规推送通知,以及手动将 voip 后台模式添加到 info.plist 以便调用委托方法。仅链接 CallKit 和 PushKit 不足以接收通知。我还启用了后台音频、后台获取和远程通知。我还在进行推送注册表注册之前创建了一个后台任务,并在收到推送令牌后结束该任务。
重启后唤醒应用程序或来电时强制退出。
我看到在仪器活动监视器中的来电上启动了该进程,但看起来有些东西无法正常工作,因为我没有收到来电用户界面。
-pushRegistry:didReceiveIncomingPushWithPayload:forType:或者也许(仅)-application:didFinishLaunchingWithOptions:?更新:
我自己想出了一个解决方案。这更多的是客户端和服务器之间的时间问题。所以这对我有用。
同样重要的是不要过早调用推送通知委托上的完成处理程序,这将使应用程序重新进入睡眠状态并且永远不会收到 INVITE。
也可能有帮助,并且可以让场景变得更加宽容。如果您的 sip 服务器多次发送邀请,请确保每次都使用最新的注册信息。意思是……假设第一个 INVITE 发送得太早,导致某些过时的注册信息,并且客户端仍然尝试在服务器上更新该信息……确保下一个 INVITE 使用更新的信息。某些 sip 服务器仅使用每次迭代可用的第一个信息。所以你会永远等待而没有收到客户端的任何信息。
在 XCode 项目中,我添加了权利文件。现在,如果我在该文件中添加任何值,例如。
com.apple.developer.pushkit.unrestricted-voip Bool 是的。
运行时报错。配置文件“开发”不包括 com.apple.developer.pushkit.unrestricted-VOIP 权利。
如何在权利条目的供应配置文件中添加值?
我必须在 Agora 的帮助下创建通话应用程序。当应用程序位于前台时,这是可以的,但我想在应用程序处于后台或终止时接受呼叫。我正在尝试使用 Callkeep 插件来接受后台呼叫我找到了一种通过 FCM 后台消息的方法,但我不知道如何为 IOS 实现解决方案,它没有 FCM 后台消息我尝试使用 VOIP 通知,但我不知道如何要将它们发送到我的 flutter 应用程序,我使用 Firebase 作为后端,我需要适用于 Android 和 IOS 的解决方案,谢谢
pushkit ×10
ios ×9
voip ×7
callkit ×3
agora.io ×1
dart ×1
entitlements ×1
flutter ×1
ios10.3 ×1
objective-c ×1
pjsip ×1
push ×1
silentpush ×1
sinch ×1
xcode ×1