Пушкит с 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-уведомление не подходит, но вы можете получить событие входящего вызова там, где приложение находится в фоновом режиме. Вы можете инициировать локальное уведомление, если приложение находится в фоновом режиме, чтобы сообщить об этом входящему звонку.

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

  • Callkit использует Bluetooth-гарнитуру в качестве аудиовыхода
  • Прямой VoIP-вызов от одного устройства iOS к другому
  • Обнаруживает, переместился ли iPhone с Wi-Fi на 3G или наоборот
  • Разница между voip push и регулярным нажатием при пробуждении приложения из фона
  • Уведомление Voip Pushkit не будет перезапускать приложение, если оно было принудительно завершено, и устройство было перезагружено
  • Приложение IOS voip с комплектом Push
  • Как использовать setKeepAliveTimeout: обработчик - IOS?
  • Внедрение VOIP в iPhone и iPad
  • Поддерживать VoIP-сокет при повторном подключении WiFi и перезагрузку устройства (iOS)?
  • Как изменить учетную запись реестра pjsip во время перерегистрации?
  • iOS 5/6: низкий объем после первого использования CoreAudio
  • Interesting Posts

    Отключить звуковые дорожки в прямом эфире с помощью AVPlayer

    Не удалось SSL SSL-соединение SSL. Я проверил с openssl & мой сервер работает с tls 1.2V

    XCode 4.5 дает мне файл «SenTestingKit / SenTestKit.h» не найден, но работает в версии 4.4.1

    Приложение отклонено из-за отсутствующих описаний использования (Xcode8)

    Определить конец неявной анимации при изменении UICollectionViewLayout

    Клавиатура не будет отменена в приложении

    Профиль предоставления, сохраненный в файле проекта XCode для приложений iOS

    Apple В получении покупки приложения в неправильном формате

    Как установить заставку для iOS в PhoneGap

    Результаты тестов Apple Matrix Multiplication Непоследовательность

    Подписка на уведомления из CBCharacteristic не работает

    Понимание функции executeSegueWithIdentifier

    Adobe AIR Mobile / OAuth2.0

    iCloud NSUbiquitousKeyValueСохранить начальную задержку синхронизации / доступа – как обращаться?

    Ошибка WatchKit – не удается найти класс контроллера интерфейса '' для создания экземпляра

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.