وصف:
لقد اتبعت تعليمات React Native SDK من هنا - https://documentation.onesignal.com/docs/react-native-sdk-setup
لقد أضفت حزمة npm ، ونفذت react-native link
وأيضًا pod install
. كل شيء سار بسلاسة.
ثم شرعت في إنشاء ملحق الإخطار. عندما أصل إلى الجزء الذي طلبت منه إضافة libRCTOneSignal.a
في إعداد Link Binary with Libararies
، لا يمكنني العثور عليه في القائمة التي يعرضها Xcode. هذا كل ما أراه عندما أبحث عن إشارة واحدة:
هنا هو إعداد صفحات البحث الرئيسية الخاصة بي:
لقد حاولت الآن إضافة libreact-native-onesignal.a
، لكن عند البناء يظهر لي خطأ الارتباط هذا:
ld: library not found for -lreact-native-onesignal
clang: error: linker command failed with exit code 1 (use -v to see invocation)
بيئة
3.2.6
0.55.4
9.2
تبين أن react-native link
لم يعمل بشكل صحيح كالمعتاد: كان على DI فقط إضافة مشروع RCTOneSignal
يدويًا إلى Libraries
وبعد ذلك تمكنت من إضافة libRCTOneSignal.a
أعتقد أنه سيكون من الرائع أن تضيفوا الإرشادات الخاصة بالربط يدويًا بالإضافة إلى react-native link
حتى يتمكن الأشخاص من التحقق مما إذا كان الارتباط يعمل بشكل صحيح أم لا.
كيف أضفته
تحاول أيضًا معرفة كيفية إضافة مشروع RCTOneSignal إلى المكتبات بالضبط
nickyhajal @ abdul- elah - RCTOneSignal
يدويًا إلى Libraries
؟
يجب أن تكون هذه المشكلة في التوثيق أيضًا.
pacozaa يمكنك اتباع تعليمات Facebook هنا: https://facebook.github.io/react-native/docs/linking-libraries-ios
افتح node_modules / reaction-native-oneSignal / ios ثم اسحب RCTOneSignal.xcodeproj وأفلته في مكتبات مجلد مشروع XCode ، ثم سيظهر libRCTOneSignal.a في البحث.
لقد قمت بتحديث الوثائق في إعداد React-Native لتعكس ذلك. نشكرك على طرح هذا الأمر والمساعدة في تحسين وثائقنا!
لا يوجد مجلد مكتبات.
rgomezp معذرة ، هل يمكنك إعادة فتح المشكلة من فضلك؟ لا يمكن العثور على libRCTOneSignal.a في الامتداد في Xcode 12. ولكنه يعمل على Xcode 11.7
MrAlekhin ،
حاول الدخول إلى الدليل ios
وتشغيل pod deintegrate && pod install
هذا ما يحدث لي في Xcode 12. لا تستخدم البودات.
مرحبًا ،
يبدو أن هذه مشكلة لأولئك منكم الذين يستخدمون Xcode 12 ولا يستخدمون Cocoapods.
إعادة فتح لتتبع هذه المشكلة.
آخر يستخدم Xcode 12 دون استخدام البودات التي بها نفس المشكلة. :(
اضطررت إلى نقل lib إلى pods ، لكنها لا تعمل على هدف التدريج الخاص بي ، يرجى مراجعة ذلك يا رفاق في أسرع وقت ممكن 🙏
rgomezp آسف ، أي تحديثات على ذلك؟ حاول استخدام cocoapods ولكن لم تتم تهيئة OneSignal لسبب ما. باستخدام React Native 0.59
تواجه مشكلات مع react-native-onesignal
. هنا مثال 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 هل أي شخص يبحث في هذا؟
يستخدم مشروعنا 0.59 من التفاعل الأصلي (بدون cocoapods) ولا يعتمد على XCode 12 بسبب المشكلة هنا
rgomezp هل أي شخص يبحث في هذا؟
يستخدم مشروعنا 0.59 من التفاعل الأصلي (بدون cocoapods) ولا يعتمد على XCode 12 بسبب المشكلة هنا
كذلك هنا. رد الفعل الأصلي 0.59 و Xcode 12 بعد التحديث الأخير لدي الخطأ الموصوف. كل شيء يعمل بشكل جيد قبل التحديث. حتى أنني أزلت وأعدت تثبيت 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
التحديث 1:
إذا قمت ببناء التطبيق للإنتاج ، فإنه يعمل ... المشكلة هي عندما أحاول التشغيل على جهاز محاكاة (كلهم مع iOS مختلف)
التحديث 2:
يمكنني تصحيح الأخطاء حتى على الجهاز الفعلي.
التحديث 3:
يمكنني تصحيح الأخطاء ولكن لا تطلب oneignal موافقة المستخدم لذا لا تعمل الإشعارات. حتى أنني قمت بتحديث أحدث إصدار 3.9.2.
كان الحل بالنسبة لي هو الرجوع إلى إصدار xcode إلى 11.7 واستخدام نسخة احتياطية من مجلد ios. يبدو أن المشكلة مرتبطة بـ xcode 12+
حاولت الرجوع إلى إصدار أقدم من XCode ، كما قال
بالنسبة لي ، كان الحل الوحيد هو استبدال التثبيت اليدوي بتثبيت Cocoapods.
لقد اتبعت للتو التعليمات الواردة في الوثائق (https://documentation.onesignal.com/docs/react-native-sdk-setup).
أي حل لهذا؟
لقد قمت للتو بالتحديث إلى Xcode12 وأواجه هذا الخطأ عند الإنشاء أيضًا.
لقد قمت مؤخرًا بالتحديث إلى Xcode 12. أواجه نفس المشكلة مع عدم العثور على libRCTOneSignal.a. أعتقد أنني اتبعت الخطوات والحلول التي جربها الآخرون. أنا محتار.
قرأت عدة مقالات حول استبعاد arm64 لـ OneSignal. لقد جربت هذه دون حظ حتى الآن. ومع ذلك ، نظرًا لأنه يؤثر فقط على جهاز المحاكاة ، فمن المحتمل ألا أقضي وقتًا أطول بكثير في هذه المشكلة.
نفس الإصدار ، Xcode 12.4 و RN 0.59.10.
نفس المشكلة هنا.
مرحبًا ،
يبدو أن التركيبات اليدوية تعطلت بطريقة ما. سنحتاج إلى مزيد من البحث للتحقيق.
شكرا لصبرك.
في غضون ذلك ، إذا أمكن ، حاول التبديل إلى طريقة تثبيت Cocoapods
أواجه نفس المشكلة. اي حل؟
مرحبًا ، بدءًا من الإصدار 4.0.0 من React-Native-OneSignal ، لم يتم تحديث الملف الثنائي الموجود في RCTOneSignal.xcodeproj مما يعني أنك ستحتاج إلى استخدام Cocoapods لإضافة OneSignal إلى NotificationServiceExtension.
يمكنك القيام بذلك عن طريق إضافة ما يلي إلى Podfile الخاص بك:
target 'OneSignalNotificationServiceExtension' do
pod 'OneSignal', '>= 3.0', '< 4.0'
end
ثم قم بتحديث ملف NotificationService إلى ما يلي إذا كنت تستخدم 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)
}
}
}
أو ما يلي إذا كنت تستخدم 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>
يمكن العثور على دليل الإعداد الكامل هنا
التعليق الأكثر فائدة
تبين أن
react-native link
لم يعمل بشكل صحيح كالمعتاد: كان على DI فقط إضافة مشروعRCTOneSignal
يدويًا إلىLibraries
وبعد ذلك تمكنت من إضافةlibRCTOneSignal.a
أعتقد أنه سيكون من الرائع أن تضيفوا الإرشادات الخاصة بالربط يدويًا بالإضافة إلى
react-native link
حتى يتمكن الأشخاص من التحقق مما إذا كان الارتباط يعمل بشكل صحيح أم لا.