Пушкит с Sinch VOIP не работает с pushkit

Я начинаю с разработки iOS, и я пытаюсь реализовать приложение для приложения с Sinch в моем приложении IOS. Я реализовал Pushkit в моем приложении iOS с Sinch, но push-уведомление не работает, когда приложение находится в фоновом режиме.

У меня есть два вопроса.

(1) Мне нужен другой веб-сервис для отправки push-уведомления моему приложению для входящего приложения отдельно или Sinch обрабатывает его сам.

(2) Если он сам справляется, чего мне не хватает в моем коде.

Благодарю.

#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]; } - (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } - (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } - (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } - (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } - (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. } - (id<SINClient>)client { return _sinchClient; } -(void)clientDidFail:(id<SINClient>)client error:(NSError *)error{ NSLog(@"fail"); } -(void)clientDidStart:(id<SINClient>)client{ NSLog(@"Start"); [self voipRegistration]; } - (void)client:(id<SINClient>)client logMessage:(NSString *)message area:(NSString *)area severity:(SINLogSeverity)severity timestamp:(NSDate *)timestamp { // If you want all messages remove the if statement if (severity == SINLogSeverityCritical) { NSLog(@"%@", message); } } - (void)initSinchClientWithUserId:(NSString *)userId { if (!_sinchClient) { _sinchClient = [Sinch clientWithApplicationKey:@"<my-key>" applicationSecret:@"<my-secret>" environmentHost:@"sandbox.sinch.com" userId:userId]; _sinchClient.delegate = self; [_sinchClient setSupportCalling:YES]; [_sinchClient startListeningOnActiveConnection]; [_sinchClient enableManagedPushNotifications]; [_sinchClient start]; } } - (void)handleLocalNotification:(UILocalNotification *)notification { if (notification) { id<SINNotificationResult> result = [self.sinchClient relayLocalNotification:notification]; if ([result isCall] && [[result callResult] isTimedOut]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Missed call" message:[NSString stringWithFormat:@"Missed call from %@", [[result callResult] remoteUserId]] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alert show]; } } } -(void)voipRegistration { PKPushRegistry* voipRegistry = [[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()]; voipRegistry.delegate = self; voipRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP]; } -(void)pushRegistry:(PKPushRegistry *)registry didUpdatePushCredentials:(PKPushCredentials *)credentials forType:(NSString *)type { [_sinchClient registerPushNotificationData:credentials.token]; } -(void)pushRegistry:(PKPushRegistry *)registry didInvalidatePushTokenForType:(PKPushType)type{ NSLog(@"invalidated"); } -(void)pushRegistry:(PKPushRegistry *)registry didReceiveIncomingPushWithPayload:(PKPushPayload *)payload forType: (NSString *)type { //notify NSDictionary* dic = payload.dictionaryPayload; NSString* sinchinfo = [dic objectForKey:@"sin"]; UILocalNotification* notif = [[UILocalNotification alloc] init]; notif.alertBody = @"incoming call"; [[UIApplication sharedApplication] presentLocalNotificationNow:notif]; if (sinchinfo == nil) return; dispatch_async(dispatch_get_main_queue(), ^{ [_sinchClient relayRemotePushNotificationPayload:sinchinfo]; }); } 

One Solution collect form web for “Пушкит с Sinch VOIP не работает с pushkit”

Если вы включили Pushkit и Sinch, то push-уведомление может не попасть в функцию делегата PushKit – didReceiveIncomingPushWithPayload. Но вы можете получить push-уведомление о функции SINManagedPushDelegate – didReceiveIncomingPushWithPayload. Push-уведомление не подходит, но вы можете получить событие входящего вызова там, где приложение находится в фоновом режиме. Вы можете инициировать локальное уведомление, если приложение находится в фоновом режиме, чтобы сообщить об этом входящему звонку.

Надеюсь, это будет полезно для вас.

  • Сделать программный вызов с помощью PJSIP 2.5 в iOS
  • Прямой VoIP-вызов от одного устройства iOS к другому
  • Что такое трюк, используемый некоторыми приложениями для iphone sip для взаимодействия с UDP только sip-серверами?
  • Как сделать несколько звонков с одной учетной записи sip на несколько учетных записей sip?
  • Как передавать данные между двумя фоновыми приложениями
  • Соединение сокета iOS9 было убито, когда приложение приостановлено, хотя приложение зарегистрировано как VOIP
  • SIP-вызов получает статус «Сообщение о статусе по умолчанию» в iOS
  • Twillo Client Api позволяет пользователю звонить из приложения в приложение вместо обычного вызова в iOS?
  • Opus для iOS, сбой с частотой дискретизации 16000
  • Как сохранить вибрацию устройства в фоновом режиме
  • Приложение XMPP chat отклонено для использования службы VoIP в качестве фонового режима
  • Как реализовать голос через ip в iOS?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.