Descrição:
Segui as instruções para React Native SDK daqui - https://documentation.onesignal.com/docs/react-native-sdk-setup
Eu adicionei o pacote npm, executei react-native link
e também pod install
. Tudo correu bem.
Em seguida, prossigo para a criação da extensão de notificação. Quando chego à parte em que sou instruído a adicionar libRCTOneSignal.a
na configuração Link Binary with Libararies
, não consigo encontrá-lo na lista que o Xcode mostra. Aqui está tudo o que vejo quando procuro por um sinal:
Aqui está minha configuração de páginas de pesquisa de cabeçalho:
Agora tentei adicionar libreact-native-onesignal.a
, mas ao construir recebo este erro de vinculação:
ld: library not found for -lreact-native-onesignal
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Ambiente
3.2.6
0.55.4
9.2
Acontece que react-native link
não funcionou corretamente como de costume: DI apenas tinha que adicionar manualmente o projeto RCTOneSignal
em Libraries
e então fui capaz de adicionar libRCTOneSignal.a
Acho que seria bom se vocês pudessem adicionar as instruções para vinculação manual além de react-native link
para que as pessoas possam verificar se o link funcionou corretamente :)
como você adicionou isso?
Também tentando descobrir exatamente como adicionar o projeto RCTOneSignal às bibliotecas
@nickyhajal @ abdul-elah-js @steverob Alguém pode explicar como adicionar manualmente o projeto RCTOneSignal
em Libraries
?
Esse problema também deve estar na documentação.
@pacozaa você pode seguir as instruções do Facebook aqui: https://facebook.github.io/react-native/docs/linking-libraries-ios
Abra node_modules / react-native-onesignal / ios e arraste e solte RCTOneSignal.xcodeproj para a pasta do projeto XCode Bibliotecas, então libRCTOneSignal.a aparecerá na pesquisa.
Eu atualizei a documentação na configuração do React-Native para refletir isso. Obrigado por trazer isso à tona e ajudar a melhorar nossa documentação!
Nenhuma pasta Bibliotecas.
@rgomezp Desculpe, você poderia reabrir o problema? libRCTOneSignal.a não pode ser encontrado na extensão no Xcode 12. Mas funciona no Xcode 11.7
@MrAlekhin ,
Tente entrar no diretório ios
e execute pod deintegrate && pod install
Isso está acontecendo comigo no Xcode 12. Não usando pods.
Olá,
Parece que isso é um problema para aqueles que estão usando o Xcode 12 e _não_ estão usando Cocoapods.
Reabrindo para rastrear este problema.
Outro usando o Xcode 12 sem usar pods com o mesmo problema. :(
Tive que mover a biblioteca para pods, mas não está funcionando no meu destino de teste😢 pessoal, revisem isso o mais rápido possível 🙏
@rgomezp , desculpe, alguma atualização sobre isso? tentou usar cocoapods, mas OneSignal não foi inicializado por algum motivo. usando React Native 0,59
Problemas com react-native-onesignal
. Aqui está o exemplo do Pod:
# Uncomment the next line to define a global platform for your project
platform :ios, '10.0'
target 'example' do
# Comment the next line if you don't want to use dynamic frameworks
# Pods for example
pod 'Branch', '0.28.1'
pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal'
pod 'React', :path => '../node_modules/react-native/'
end
target 'exampleDev' do
# Comment the next line if you don't want to use dynamic frameworks
# Pods for exampleDev
pod 'Branch', '0.28.1'
pod 'React', :path => '../node_modules/react-native/'
pod 'react-native-onesignal', :path => '../node_modules/react-native-onesignal'
end
target 'OneSignalNotificationServiceExtension' do
# Comment the next line if you don't want to use dynamic frameworks
pod 'OneSignal', '>= 2.14.2', '< 3.0'
# Pods for OneSignalNotificationServiceExtension
end
target 'DevOneSignalNotificationServiceExtension' do
# Comment the next line if you don't want to use dynamic frameworks
pod 'OneSignal', '>= 2.14.2', '< 3.0'
# Pods for DevOneSignalNotificationServiceExtension
end
@rgomezp, alguém está investigando isso?
Nosso projeto usa 0,59 react-native (sem cocoapods) e não é baseado no XCode 12 por causa do problema aqui
@rgomezp, alguém está investigando isso?
Nosso projeto usa 0,59 react-native (sem cocoapods) e não é baseado no XCode 12 por causa do problema aqui
Mesmo aqui. react-native 0,59 e Xcode 12 após a última atualização, eu tenho o erro descrito. Tudo funcionando bem antes da atualização. Eu até removi e reinstalei o sinal nativo-reativo 3.9.2
clang: error: no such file or directory: '/Users/leonardo/Library/Developer/Xcode/DerivedData/xxxxx/Build/Products/Debug-iphonesimulator/libRCTOneSignal.a'
Command Ld failed with a nonzero exit code
Atualização 1:
Se eu construir o aplicativo para produção ele funciona ... O problema é quando tento rodar no simulador (todos eles com iOS diferente)
Atualização 2:
Posso depurar até no dispositivo físico.
Atualização 3:
Posso depurar, mas o oneignal não solicita o consentimento do usuário, portanto as notificações não funcionam. Até atualizei a última versão 3.9.2.
A solução para mim foi fazer o downgrade do xcode para 11.7 e usar um backup da pasta ios. O problema parece estar relacionado ao xcode 12+
Tentei fazer downgrade do XCode, como disse @Tebrynn , mas continuo recebendo o mesmo problema.
Para mim, a única solução foi substituir a instalação manual pela instalação do Cocoapods.
Acabei de seguir as instruções da documentação (https://documentation.onesignal.com/docs/react-native-sdk-setup).
Alguma solução para isso?
Acabei de atualizar para o Xcode12 e estou enfrentando esse erro na compilação também.
Recentemente, atualizei para o Xcode 12. Estou tendo o mesmo problema por não encontrar libRCTOneSignal.a. Acredito que segui as etapas e soluções alternativas que outros tentaram. Estou perplexo.
Eu li vários artigos sobre a exclusão de arm64 para OneSignal. Tentei sem sorte até agora. No entanto, como isso afeta apenas o simulador, provavelmente não gastarei muito mais tempo com esse problema.
Mesmo problema, Xcode 12.4 e RN 0.59.10.
O mesmo problema aqui.
Olá,
Parece que as instalações manuais falharam de alguma forma. Precisamos cavar mais para investigar.
Obrigado pela sua paciência.
Enquanto isso, se possível, tente mudar para um método de instalação Cocoapods
Eu estou enfrentando o mesmo problema. Qualquer solução?
Olá, a partir do React-Native-OneSignal versão 4.0.0, o binário contido no RCTOneSignal.xcodeproj não foi atualizado, o que significa que você precisará usar Cocoapods para adicionar OneSignal ao NotificationServiceExtension.
Você pode fazer isso adicionando o seguinte ao seu Podfile:
target 'OneSignalNotificationServiceExtension' do
pod 'OneSignal', '>= 3.0', '< 4.0'
end
Em seguida, atualize o arquivo NotificationService para o seguinte se você estiver usando Swift
import UserNotifications
import OneSignal
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var receivedRequest: UNNotificationRequest!
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: <strong i="10">@escaping</strong> (UNNotificationContent) -> Void) {
self.receivedRequest = request;
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
OneSignal.didReceiveNotificationExtensionRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
OneSignal.serviceExtensionTimeWillExpireRequest(self.receivedRequest, with: self.bestAttemptContent)
contentHandler(bestAttemptContent)
}
}
}
Ou o seguinte se você estiver usando Objective-C
#import <OneSignal/OneSignal.h>
#import "NotificationService.h"
<strong i="14">@interface</strong> NotificationService ()
<strong i="15">@property</strong> (nonatomic, strong) void (^contentHandler)(UNNotificationContent *contentToDeliver);
<strong i="16">@property</strong> (nonatomic, strong) UNNotificationRequest *receivedRequest;
<strong i="17">@property</strong> (nonatomic, strong) UNMutableNotificationContent *bestAttemptContent;
<strong i="18">@end</strong>
<strong i="19">@implementation</strong> NotificationService
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.receivedRequest = request;
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
[OneSignal didReceiveNotificationExtensionRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent];
// DEBUGGING: Uncomment the 2 lines below and comment out the one above to ensure this extension is excuting
// Note, this extension only runs when mutable-content is set
// Setting an attachment or action buttons automatically adds this
// NSLog(@"Running NotificationServiceExtension");
// self.bestAttemptContent.body = [@"[Modified] " stringByAppendingString:self.bestAttemptContent.body];
self.contentHandler(self.bestAttemptContent);
}
- (void)serviceExtensionTimeWillExpire {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
[OneSignal serviceExtensionTimeWillExpireRequest:self.receivedRequest withMutableNotificationContent:self.bestAttemptContent];
self.contentHandler(self.bestAttemptContent);
}
<strong i="20">@end</strong>
O guia de configuração completo pode ser encontrado aqui
Comentários muito úteis
Acontece que
react-native link
não funcionou corretamente como de costume: DI apenas tinha que adicionar manualmente o projetoRCTOneSignal
emLibraries
e então fui capaz de adicionarlibRCTOneSignal.a
Acho que seria bom se vocês pudessem adicionar as instruções para vinculação manual além de
react-native link
para que as pessoas possam verificar se o link funcionou corretamente :)