Como posso adicionar anexos de mídia às minhas notificações por push em um aplicativo do iOS 10?

9

Existem vários exemplos de como você deve configurar seu projeto para adicionar notificações avançadas que usam tecnologia de 'anexos de mídia' para exibir imagens. Eu li a maioria deles, mas algo que eu perdi, porque meu projeto não exibe nenhuma notificação rica com essa carga útil (testado com APNS-Tool e Boodle):

{
    "aps":{
        "alert":{
            "title": "Rich test",
            "body": "Dancing Banana"
        },
        "mutable-content": 1
    }
}

A notificação é visível, mas no 3D Touch, não há informações adicionais exibidas (como a imagem ou o título modificado). Os pontos de interrupção da extensão de notificação e NSLog mensagens também não estão funcionando.

Este é o meu projeto de demonstração: link

O que eu fiz:

  1. Criado um novo projeto
  2. autorização implementada no estilo iOS:
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError * _Nullable error) {

        if (granted) {
            NSLog(@"Granted");

            [[UIApplication sharedApplication] registerForRemoteNotifications];

        } else {
            NSLog(@"Error registering: %@", error);
        }

    }];
  1. adicionou a depuração a AppDelegate:
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSLog(@"Token: %@", deviceToken);
}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
    NSLog(@"Error: %@", error);
}
  1. Adicionou um novo alvo ao projeto: extensão do serviço de notificação:

  • Adicionou banana.gif ao projeto

  • Código adicionado para adicionar o anexo de banana em NotificationService.m

  •     self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]", self.bestAttemptContent.title];
    
        // Add image attachment
        NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"banana" withExtension:@"gif"];
        NSError *error;
        UNNotificationAttachment *attachment = [UNNotificationAttachment attachmentWithIdentifier:@"banana" URL:fileURL options:nil error:&error];
        self.bestAttemptContent.attachments = @[attachment];
    

    O que eu senti falta?

    Informações adicionais: a mesma coisa funciona quando uso notificações locais em vez de notificações remotas.

        
    por gklka 03.10.2016 в 00:27
    fonte

    1 resposta

    2

    Você está na maior parte do caminho. A maneira como você enviará o anexo geralmente é um URL na sua carga útil. No entanto, se você quisesse codificar o anexo, como seu código, acho que funcionaria, mas acho que você perdeu um componente crítico. Eu acho que a extensão de serviço não tem acesso ao pacote principal ou seus recursos. Se você adicionou um recurso à extensão de serviço e tentou carregá-lo (usando algo como [NSBundle bundleForClass:[NotificationService class]] ), suspeito que funcionaria.

    No entanto, se você enviar o URL como parte da carga útil, carregará a imagem desse URL e não do pacote de qualquer maneira. Nesse caso, tenho certeza que você também tem que usar startAccessingSecurityScopedResource on NSURL (junto com stopAccessingSecurityScopedResource ).

    Espero que ajude!

        
    por Jerry 18.10.2016 / 04:00
    fonte