React-native-onesignal: onOpened / onR Received Events لا تنطلق على android

تم إنشاؤها على ٩ يوليو ٢٠١٨  ·  35تعليقات  ·  مصدر: OneSignal/react-native-onesignal

وصف:
أهلا بالجميع. أواجه مشاكل مع أحداث onOpened / onReceived على android. يختلف السلوك في المحاكي وعلى جهاز حقيقي ، ولكن يتم تسليم رسالة دفع دقيقة في كلتا الحالتين.

على المحاكي:

  1. المقدمة - تم استدعاء حدث onReceived ، ولا يتم استدعاء onOpened إلا عند الضغط على الضغط (صحيح)
  2. الخلفية نشطة - لم يتم إطلاق أي شيء على الإطلاق (غير صحيح)
  3. الخلفية غير نشطة (التطبيق مغلق) - on يتم استدعاء الفتح فقط عند الضغط على الضغط (صحيح)

على جهاز حقيقي:

  1. المقدمة - لم يتم إطلاق أي شيء على الإطلاق (غير صحيح)
  2. الخلفية نشطة - لم يتم إطلاق أي شيء على الإطلاق (غير صحيح)
  3. الخلفية غير نشطة (التطبيق مغلق) - on يتم استدعاء الفتح فقط عند الضغط على الضغط (صحيح)

بيئة

  1. رد فعل - أصلية - إشارة واحدة: "3.2.4"
  2. رد فعل أصلي: "0.50.4"
  3. compileSdkVersion: "27"
  4. الإصدار: "27.0.3"
  5. Gradle: "4.1"

خطوات إعادة إنتاج المشكلة:
لا يمكنني تقديم خطوات لإعادة الإنتاج بسبب سياسة الثقة في شركتي.

أي شيء آخر:
android/build.gradle

"// ملف بناء المستوى الأعلى حيث يمكنك إضافة خيارات التكوين المشتركة لجميع المشاريع الفرعية / الوحدات النمطية.

بناء {
مستودعات {
jcenter ()
متصفح الجوجل()
}
التبعيات {
classpath 'com.android.tools. البناء: gradle : 3.0.1 '

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

جميع المشاريع {
مستودعات {
maven {url " https://jitpack.io "} // المستخدمة لـ MPAndroidChart
mavenLocal ()
متصفح الجوجل()
jcenter ()
مخضرم {
يتم تثبيت // All of React Native (JS ، ومصادر Obj-C ، وثنائيات Android) من npm
url "$ rootDir /../ node_modules / رد فعل أصلي / android"
}
}
}

`android/app/build.gradle`

تطبيق البرنامج المساعد: "com.onesignal.androidsdk.onesignal-gradle-plugin"
تطبيق المكون الإضافي: "com.android.application"

استيراد com.android.build.OutputFile

بناء {
مستودعات {
maven {url ' https://plugins.gradle.org/m2/ '} // Gradle Plugin Portal
}
التبعيات {
classpath "gradle.plugin.com. oneSignal: one-gradle-plugin : [0.10.0، 0.99.99] '
}
}

تطبيق البرنامج المساعد: "com.onesignal.androidsdk.onesignal-gradle-plugin"

/ **

  • يسجل ملف React.gradle مهمة لكل متغير بناء (على سبيل المثال bundleDebugJsAndAssets
  • و bundleReleaseJsAndAssets).
  • يستدعي هؤلاء أساسًا react-native bundle مع الوسيطات الصحيحة أثناء إصدار Android
  • دورة. بشكل افتراضي ، يتم تخطي bundleDebugJsAndAssets ، كما هو الحال في وضع التصحيح / dev ، نفضل تحميل
  • حزمة مباشرة من خادم التطوير. أدناه يمكنك رؤية جميع التكوينات الممكنة
  • وافتراضاتهم. إذا قررت إضافة كتلة تكوين ، فتأكد من إضافتها قبل ملف
  • خط apply from: "../../node_modules/react-native/react.gradle" .
    *
  • project.ext.react = [
  • // اسم ملف الأصل الذي تم إنشاؤه والذي يحتوي على حزمة JS الخاصة بك
  • bundleAssetName: "index.android.bundle" ،
    *
  • // ملف الإدخال لتوليد الحزمة
  • ملف الإدخال: "index.android.js" ،
    *
  • // ما إذا كان سيتم تجميع JS والأصول في وضع التصحيح
  • bundleInDebug: خطأ ،
    *
  • // ما إذا كان سيتم تجميع JS والأصول في وضع الإصدار
  • bundleInRelease: صحيح ،
    *
  • // ما إذا كان سيتم تجميع JS والأصول في متغير بناء آخر (إذا تم تكوينه).
  • // راجع http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants
  • // يمكن أن تكون خاصية التكوين بالتنسيقات التالية
  • // 'bundleIn $ {productFlavor} $ {buildType}'
  • // 'bundleIn $ {buildType}'
  • // bundleInFreeDebug: صحيح ،
  • // bundleInPaidRelease: صحيح ،
  • // bundleInBeta: صحيح ،
    *
  • // ما إذا كان سيتم تعطيل وضع dev في متغيرات الإنشاء المخصصة (افتراضيًا يتم تعطيله فقط في الإصدار)
  • // على سبيل المثال: لتعطيل وضع dev في نوع البناء المرحلي (إذا تم تكوينه)
  • devDisabledInStaging: صحيح ،
  • // يمكن أن تكون خاصية التكوين بالتنسيقات التالية
  • // 'devDisabledIn $ {productFlavor} $ {buildType}'
  • // 'devDisabledIn $ {buildType}'
    *
  • // جذر مشروعك ، أي أين يعيش "package.json"
  • جذر: "../../"،
    *
  • // أين يتم وضع أصل حزمة JS في وضع التصحيح
  • jsBundleDirDebug: "$ buildDir / وسيط / أصول / تصحيح"،
    *
  • // أين يتم وضع أصل حزمة JS في وضع الإصدار
  • jsBundleDirRelease: "$ buildDir / وسيطة / أصول / إطلاق"،
    *
  • // أين تضع الموارد القابلة للرسم / أصول React Native ، مثل تلك التي تستخدمها عبر
  • // تتطلب ('./ image.png')) ، في وضع التصحيح
  • ResourcesDirDebug: "$ buildDir / intermediates / res / merged / debug" ،
    *
  • // أين تضع الموارد القابلة للرسم / أصول React Native ، مثل تلك التي تستخدمها عبر
  • // تتطلب ('./ image.png')) ، في وضع الإصدار
  • ResourcesDirRelease: "$ buildDir / intermediates / res / merged / release" ،
    *
  • // افتراضيًا يتم تخطي مهام gradle إذا لم يتغير أي من ملفات أو أصول JS ؛ هذا يعنى
  • // أننا لا ننظر إلى الملفات في android / أو ios / لتحديد ما إذا كانت المهام جاهزة
  • // تاريخ؛ إذا كان لديك أي مجلدات أخرى تريد تجاهلها لأسباب تتعلق بالأداء (gradle
  • // يفهرس الشجرة بأكملها) ، أضفهم هنا. بدلاً من ذلك ، إذا كان لديك ملفات JS في android /
  • // على سبيل المثال ، قد ترغب في إزالته من هنا.
  • الإدخال باستثناء: ["android / " ، "ios / "] ،
    *
  • // تجاوز العقدة التي يتم استدعاؤها وما هي الوسيطات الإضافية
  • nodeExecutableAndArgs: ["عقدة"]،
    *
  • // توفير حجج إضافية للرازم
  • extraPackagerArgs: []
  • ]
    * /

project.ext.react = [
cliPath: "node_modules / haul / bin / cli.js"
]

تطبيق من: "../../node_modules/react-native/react.gradle"

/ **

  • اضبط هذا على صواب لإنشاء ملفي APK منفصلين بدلاً من ملف واحد:

    • ملف APK يعمل فقط على أجهزة ARM


    • ملف APK يعمل فقط على أجهزة x86

  • الميزة هي أن حجم ملف APK يتم تقليله بنحو 4 ميجا بايت.
  • قم بتحميل جميع ملفات APK إلى متجر Play وسيقوم الأشخاص بتنزيلها
  • هو الصحيح بناءً على بنية وحدة المعالجة المركزية الخاصة بأجهزتهم.
    * /
    def enableSeparateBuildPerCPUArchitecture = خطأ

/ **

  • قم بتشغيل Proguard لتقليص Java bytecode في إصدارات الإصدارات.
    * /
    def enableProguardInReleaseBuilds = خطأ

ذكري المظهر {
الإصدار 27 من برنامج compileSdk
buildToolsVersion "27.0.3"

defaultConfig {
    applicationId "com.binomysteryshopper"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    vectorDrawables.useSupportLibrary = true
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
signingConfigs {
      release {
          if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
              storeFile file(MYAPP_RELEASE_STORE_FILE)
              storePassword MYAPP_RELEASE_STORE_PASSWORD
              keyAlias MYAPP_RELEASE_KEY_ALIAS
              keyPassword MYAPP_RELEASE_KEY_PASSWORD
          }
      }
  }
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86"
    }
}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release
    }
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
        def versionCodes = ["armeabi-v7a":1, "x86":2]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}

}

التبعيات {
تجميع (مشروع (': رد فعل أصلي-واحد إشارة')) {
استبعاد المجموعة: "com.google.android.gms"
}
تجميع ("com.google.android.gms: play-services-base: 12.0.1") {
القوة = صحيح ؛
}
مشروع تجميع (': رد فعل أصلي الصوت')
ترجمة المشروع (': رد فعل أصلي الصوت')
مشروع تجميع (': رد فعل-أصلي-جلب-النقطة')
مشروع تجميع (': رد فعل أصلي fs')
مشروع تجميع (': تفاعل-أصلية-مشفر جغرافي')
مشروع تجميع (': React-native-image-crop-picker')
ترجمة المشروع (': رد فعل أصلي-التحقق من الإصدار')
مشروع تجميع (': رد فعل-أصلية-مخططات-غلاف')
مشروع تجميع (': رد فعل أصلي-سبينكيت')
مشروع تجميع (': رد فعل أصلي-svg')
تجميع المشروع (': خرائط تفاعلية أصلية')
تجميع fileTree (dir: "libs" ، بما في ذلك: ["* .jar"])
ترجمة "com.android. support: appcompat-v7 : 23.0.1"
تجميع "com.facebook. رد فعل: رد فعل أصلي : +" // من node_modules
}

// قم بتشغيل هذا مرة واحدة لتتمكن من تشغيل التطبيق باستخدام BUCK
// يضع جميع تبعيات الترجمة في libs المجلد ليستخدمها BUCK
مهمة copyDownloadableDepsToLibs (نوع: نسخ) {
من configurations.compile
في 'libs'
}

`android/app/src/main/java/com/binomysteryshopper/MainApplication.java`

حزمة com.binomysteryshopper ؛

استيراد android.app.Application ؛

استيراد com.facebook.react.ReactApplication ؛
استيراد com.geektime.rnonesignalandroid.ReactNativeOneSignalPackage ؛
استيراد com.zmxv.RNSound.RNSoundPackage ؛
استيراد com.rnim.rn.audio.ReactNativeAudioPackage ؛
استيراد com.RNFetchBlob.RNFetchBlobPackage ؛
استيراد com.rnfs.RNFSPackage ؛
استيراد com.reactnative.ivpusic.imagepicker.PickerPackage ؛
استيراد io.xogus.reactnative.versioncheck.RNVersionCheckPackage ؛
استيراد com.github.wuxudong.rncharts.MPAndroidChartPackage ؛
استيراد com.react.rnspinkit.RNSpinkitPackage ،
استيراد com.horcrux.svg.SvgPackage ؛
استيراد com.facebook.react.ReactNativeHost ؛
استيراد com.facebook.react.ReactPackage ؛
استيراد com.facebook.react.shell.MainReactPackage ؛
استيراد com.devfd.RNGeocoder.RNGeocoderPackage ؛
استيراد com.facebook.soloader.SoLoader ؛
استيراد com.airbnb.android.react.maps.MapsPackage ؛

استيراد java.util.Arrays ؛
استيراد java.util.List ؛

تطبيق MainApplication للفئة العامة يوسع تطبيقات التطبيق ReactApplication {

ReactNativeHost النهائي الخاص mReactNativeHost = new ReactNativeHost (this) {
@تجاوز
getUseDeveloperSupport () منطقية عامة {
إرجاع BuildConfig.DEBUG ؛
}

<strong i="13">@Override</strong>
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage(),
        new ReactNativeOneSignalPackage(),
        new RNSoundPackage(),
        new ReactNativeAudioPackage(),
        new RNFetchBlobPackage(),
        new RNFSPackage(),
        new PickerPackage(),
        new RNVersionCheckPackage(),
        new MPAndroidChartPackage(),
        new RNSpinkitPackage(),
        new RNGeocoderPackage(),
        new SvgPackage(),
        new MapsPackage()
  );
}

<strong i="14">@Override</strong>
protected String getJSMainModuleName() {
  return "index";
}

} ؛

@تجاوز
العامة ReactNativeHost getReactNativeHost () {
إرجاع mReactNativeHost ؛
}

@تجاوز
الفراغ العام عند الإنشاء () {
super.onCreate () ؛
SoLoader.init (هذا ، / * exopackage الأصلي * / false) ؛
}
}

`AndroidManifest.xml`

الحزمة = "com.binomysteryshopper">









android: minSdkVersion = "16"
android: targetSdkVersion = "22" />

android: name = ". MainApplication"
android: allowBackup = "صحيح"
android: label = "@ string / app_name"
android: icon = "@ mipmap / ic_launcher"
android: largeHeap = "true"
android: theme = "@ style / AppTheme">

<activity
  android:name=".MainActivity"
  android:launchMode="singleTop"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
  android:screenOrientation="portrait"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/AppTheme">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="binoshopper" />
    </intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />


`my OneSignal init`

componentWillMount () {
OneSignal.init (ONESIGNAL_APP_ID ، {
kOSSettingsKeyAutoPrompt: صحيح ،
kOSSettingsKeyInAppLaunchURL: خطأ ،
kOSSettingsKeyPromptBeforeOpeningPushURL: صحيح ،
})
عرض (2)

OneSignal.addEventListener('received', this.onPushNotificationReceived)
OneSignal.addEventListener('opened', this.onPushNotificationOpened)

}

componentWillUnmount () {
OneSignal.removeEventListener ('مستلم' ، this.onPushNotificationReceived)
OneSignal.removeEventListener ('مفتوح' ، this.onPushNotificationOpened)
}

onPushNotificationReceived (إعلام) {
Alert.alert ('onReceived') // للاختبارات على جهاز حقيقي
}

onPushNotificationOpened (openResult) {
Alert.alert ('onOpened') // للاختبارات على جهاز حقيقي
}
""

التعليق الأكثر فائدة

sofianegargouri ها هي العلاقات العامة: https://github.com/geektimecoil/react-native-onesignal/pull/592

سنصدر تحديثًا إما غدًا أو بعد غد.

ال 35 كومينتر

على IOS ، إنه يعمل بشكل مثالي. لسوء الحظ ، لا يمكنني تقديم سجلات من android logcat ، لأنني لا أمتلك جهازًا حقيقيًا. كنت أختبر جهاز صديقي البعيد بسبب برنامج TeamViewer.

حاولت أيضًا الحصول على OneSignal.setLogLevel(0, 6) على جهاز حقيقي. ولكن لم يتم العثور على أي أخطاء ، ونجحت جميع الطلبات ، ولم يتم تشغيل الأحداث فقط.

مرحبًا @ Ble3k ، لقد كنا مشغولين جدًا في العمل على Flutter SDK مؤخرًا ولم يكن لدينا وقت للتحقيق في مشكلتك حتى الآن ، ومع ذلك سأحقق في مشكلتك غدًا وسأعود إليك قريبًا ، نعتذر عن التأخير!

مرحبا،

أردت فقط أن أقول أنني أرى نفس السلوك على 3.2.5 على جهاز مطور. غريب لأنني لم أغير أي شيء مؤخرًا وأنا متأكد من أنه نجح منذ بضعة أيام ، حيث يتم عرض دفعاتي المركزة على أنها نخب داخل التطبيق أتذكر أنني اختبرت هذه وكانت تعمل.

لن أقوم بإجراء مزيد من التحقيق لأننا قررنا الانتقال إلى دفع الإشعارات العادية حتى عندما يكون التطبيق مركّزًا

@ Nightsd01 Thx ، سينتظر التحقيق الخاص بك.

على Android يواجه تأخيرًا في تلقي الإشعارات ، وتم اختباره على هاتفي الذي يعمل بنظام Android وتلقي إشعارًا بعد 30-40 دقيقة ، واختباره عدة مرات

أي تحديث على هذا؟ أواجه نفس المشكلة على جهاز Android (Samsung Galaxy S7).

لم يتم إطلاق أي من أحداث onOpened أو onReceived ، ومع ذلك ، يتم تلقي الإخطار. نحتاج إلى أن نكون قادرين على توجيه المستخدم إلى شاشة معينة عند إطلاق الحدث onOpened.

هل يعاني أي شخص من مشكلة في الأحداث (المستلمة ، المفتوحة) التي لم يتم إطلاقها بعد إعادة التحميل ، رد فعل تطبيق android الأصلي عن طريق الضغط مرتين على R ، أو باستخدام حزمة رد فعل - أصلي - إعادة تشغيل.

ackosumane أنا في الواقع أستخدم Expo و Updates.reload() في كثير من الأحيان في سير عمل التطوير الخاص بي.

وأنت على حق:

  • أنا قادر على تشغيل عمليات الاسترجاعات عند أول تشغيل للتطبيق
  • لا أرى عمليات الاسترجاعات التي تم إطلاقها بعد إعادة تحميل التطبيق لأول مرة

@ Nightsd01 لذا يبدو أن تكامل OneSignal RN Android لا يدعم حاليًا إعادة تحميل التطبيق جيدًا. إنه ليس مؤثرًا كما كنت أعتقد أنه في معظم الأوقات لن يقوم المستخدم بإعادة تحميل التطبيق ، ولكن هناك حالات إنتاج نريد من المستخدم فيها إعادة تحميل التطبيق (تحديثات OverTheAir مثل Expo / CodePush ، أو تسجيل خروج المستخدم؟). في مثل هذه الحالات ، سيكون من الرائع عدم كسر الدفعات بعد إعادة التحميل ؛)

@ Nightsd01 مرحبا ، أي تحديثات؟

مرحبًا بكم ، أنا أيضًا أواجه نفس المشكلة ، أي حلول لهذا ؟؟؟

كتحديث لهذه المشكلة: نخطط لإصلاح هذا في التحديث القادم!

@ Nightsd01 أي تاريخ؟ هل يوجد فرع يمكننا تفرع منه مع الإصلاح؟

sofianegargouri ها هي العلاقات العامة: https://github.com/geektimecoil/react-native-onesignal/pull/592

سنصدر تحديثًا إما غدًا أو بعد غد.

شكرًا @ Nightsd01 ، يمكن إغلاق هذه المشكلة على ما أعتقد

هل يمكنك نشر إصدار npm جديد مع الإصلاح من فضلك؟

بالنسبة لأي شخص عالق في هذه المشكلة ، يعمل الكود من السيد بشكل جيد الآن.

فقط قم بتشغيل ما يلي:

npm تثبيت git + https://github.com/geektimecoil/react-native-onesignal#master - حفظ

@ eabuslaiman30 لا تزال تواجه مشكلة. أنا أستخدم git + https://github.com/geektimecoil/react-native-onesignal#master كما ذكرت أعلاه. لم يتم تشغيل أي من الأحداث في android. يمكن لأي شخص أن يقترح أي إصدار مستقر؟ في السابق كنت أستخدم الإصدار 3.0.5 الذي كان يعمل بشكل جيد باستثناء توقف التطبيق ولم يتم تلقي الإخطار في نظام أندرويد 8.0 (أوريو). لإصلاح هذه المشكلة ، أقوم بالتحديث إلى أحدث إصدار وأتلقى هذا الخطأ.

@ eabuslaiman30 @ Nightsd01 حاولت أيضًا ومثل shahchaitanya ما زلت أواجه المشكلة.

لقد قمت بعمل علاقات عامة يبدو أنها تصلح المستمعين الذين لم يشتركوا مرة أخرى: https://github.com/geektimecoil/react-native-onesignal/pull/593

shahchaitanya يمكنك تحرير كود Java الخاص بالمشروع المحلي بهذا التغيير الصغير وهذا من شأنه أن يحل مشكلتك مؤقتًا.

مرحبًا slorber ، أطلق الحل الخاص بك على طريقة الفتح والتلقي. لكن حدث onIds لم يتم تشغيله بعد؟ هل تحققت من تشغيل حدث onIds أم لا في التعليمات البرمجية الخاصة بك؟ كنت أفكر في التمسك بالإصدار 3.0.5 من إشارات النرد الأصلية حتى يصبح الإصدار الأخير مستقرًا.

لقد اختبرت للتو وتم إطلاق جميع عمليات الاسترجاعات الثلاثة عند إعادة تشغيل التطبيق بالنسبة لي ، بدءًا من onIds.

حتى إذا لم يتم إطلاق onIds ، فلن يكون الأمر كبيرًا بالنسبة لي حيث من غير المرجح أن تتغير المعرفات عبر إعادة التشغيل وقد تم إرسالها بالفعل إلى الواجهة الخلفية الخاصة بي.

slorber بالنسبة لي ، يعد الأمر مهمًا إذا لم يتم تشغيل onIds عند إعادة تشغيل أحد التطبيقات. أقوم بتخزين idToken في التخزين المحلي والخلفية أيضًا. عند تسجيل الخروج ، قمت بإزالته من الخلفية وبطريقة ما إذا قام المستخدم بمسح التخزين المحلي ، فكيف يمكنني الحصول على معرف المستخدم إذا لم يتم تشغيل onIds في كل مرة. في الإصدار السابق حتى 3.2.0 (تحديث رئيسي) ، يتم تشغيل onIds في كل مرة أثناء إعادة تشغيل التطبيق.

يا شباب slorber shahchaitanya. اسمح لي بنسخ بعض كود التنفيذ الخاص بي ، ربما سيساعدك (كنت بحاجة إلى إضافة بعض سطور التعليمات البرمجية التي لم تكن مطلوبة في إصدار سابق).

OneSignal.init('YOUR_APP_ID');
OneSignal.addEventListener('ids', this.onIds);
OneSignal.configure();

على سبيل المثال ، لم أكن أستخدم وظيفة "init" في الإصدارات السابقة حيث يبدو أن التهيئة كانت تتم من كود Java.

أيضًا ، أنا أستخدم npm install git+https://github.com/geektimecoil/react-native-onesignal\#master --save كتبعية وأتلقى ثلاثة أحداث بشكل صحيح (onIds ، المستلمة ، المفتوحة).

أنا أستخدم أيضًا init والتهيئة وأتذكر أنه كانت هناك مشكلة في عدم إطلاق المعرفات عند عدم استدعاء التكوين

    OneSignal.init(OneSignalAppId, OneSignalSettings);
    OneSignal.addEventListener('received', onReceived);
    OneSignal.addEventListener('opened', onOpened);
    OneSignal.addEventListener('ids', onIds);
    // Quickfix for ids event not firing!
    // See https://github.com/geektimecoil/react-native-onesignal/issues/200#issuecomment-288579373
    OneSignal.configure();
    OneSignal.inFocusDisplaying(inFocusDisplaying);
    OneSignal.setSubscription(true);
    OneSignal.syncHashedEmail(email);
    OneSignal.sendTags(tags);

slorber @ eabuslaiman30 الآن تعمل بشكل جيد. فاتني إضافة OneSignal.configure (). في السابق لم أكن بحاجة إليه لتشغيل مستمع onIds. مرحبًا slorber الآن لست بحاجة إلى إضافة هذا التصحيح الذي ذكرته أعلاه. حل @ eabuslaiman30 يعمل بشكل جيد.

shahchaitanya رائع ، أنا سعيد لأنه نجح!

سنخرج بإصدار رسمي قريبًا بما في ذلك هذا الإصلاح.

لقد أصلحت مؤخرًا مشكلة مهمة إلى حد ما في Android SDK ، لذلك أنا في انتظار مراجعة هذه العلاقات العامة قبل إصدار تحديث رسمي أصلي.

شكرا لسعة صدرك الجميع! في هذه الأثناء يمكنك ببساطة استخدام المعلم

shahchaitanya الحدث ids يهدف ببساطة إلى إطلاق النار عندما يكون معرّف المستخدم أو رمز الدفع مع تغيير OneSignal. إذا لم يتغيروا منذ آخر مرة استخدموا فيها تطبيقك ، فلن يتم إطلاق الأحداث افتراضيًا.

هذا رمز قديم محير ، وأعتزم إعادة تشكيله في الإصدار الرئيسي التالي ليكون أكثر سهولة.

يمكنك إجبارهم على إطلاق النار عن طريق الاتصال بـ configure() ، لكنني لا أوصي بذلك. الحل الأكثر أناقة هو استدعاء OneSignal.getPermissionSubscriptionState() والذي سيحتوي على معرف OneSignal الخاص بالمستخدم

يجب الآن إصلاح المشكلة في 3.2.6 (مع العديد من الأشياء الأخرى). شكرا لسعة صدرك الجميع!

مرحبا! ما زلت أتلقى هذه المشكلة على Android (لم يتم فحص نظام iOS بالكامل).

  • التطبيق قيد التركيز - يتم تشغيل الحدث المفتوح بشكل صحيح
  • تم رفض التطبيق - يتم تشغيل الحدث الذي تم فتحه بشكل صحيح
  • التطبيق في الخلفية - الحدث المفتوح لا ينطلق أبدًا

أنا في الإصدار 3.2.6 وإعداد مستمع الحدث الخاص بي هو ...

componentDidMount() {

        OneSignal.init(APP_ID, { kOSSettingsKeyAutoPrompt: true });

        OneSignal.addEventListener('ids', this.onIds);

        OneSignal.addEventListener('opened', (result) => alert('text'));

        OneSignal.inFocusDisplaying(2);

        // OneSignal.setLogLevel(0, 6);

        OneSignal.configure();
}

componentWillUnmount() {
    OneSignal.removeEventListener('ids', this.onIds);
    OneSignal.removeEventListener('opened', (result) => alert('text'));
}

joefazz لا يمكنني إعادة إظهار مشكلتك ، هل يمكنك محاولة تشغيل yarn remove react-native onesignal و yarn add react-native-onesignal فقط للتأكد من تحديثه إلى 3.2.6؟ إذا كان الأمر كذلك ، فسأعيد فتح المشكلة.

هل تحدث المشكلة لك بنسبة 100٪؟

هل أنت قادر على إعادة إنتاج هذه المشكلة في مشروعنا التجريبي؟

يحدث 100٪ من الوقت ولا يزال يحدث بعد الإزالة والقراءة.

سأحاول إعادة الإنتاج في وقت لاحق اليوم وسأقوم بتحرير هذا التعليق مع النتائج التي توصلت إليها.

لا أعرف مدى ملاءمتها ولكن في المشروع الذي أعمل عليه كنا على الإصدار 3.0.9 وقمنا بالترقية حتى 3.2.6. قمت بتشغيل إلغاء ارتباط التفاعل الأصلي ثم قمت بإعادة ربط نظام iOS وترقيته يدويًا وإزالة جميع عمليات التهيئة الأصلية لاستخدام طريقة OneSignal.init ().

تحرير: لست متأكدًا مما حدث ولكنه يعمل بنسبة 100٪ على Android الآن ، شكرًا على مساعدتك آسف للتعليق على مشكلة مغلقة 😅

إذا رأى أي شخص هذه المشكلة مرة أخرى في الإصدار 3.2.6 أو أعلى ، فلا تتردد في فتح إصدار جديد.

joefazz سعيد لسماع ذلك! لقد أصلحت المشكلة التي تسببت في المشكلة الأولية ، لكن من المحتمل تمامًا أن يكون هناك نوع من حالة السباق مستمرة. إذا رأيت هذه المشكلة مرة أخرى ، فلا تتردد في فتح إصدار جديد

في تطبيقي ، يعمل الإصدار الجديد على إصلاح مشكلاتي ولا أرى السلوك الذي تم الإبلاغ عنه بواسطة joefazz

مرحبًا بالجميع ، لدي نفس المشكلة لم يتم إطلاق OneSignal.addEventListener('opened', (result) => console.log(result)); من الإطلاق الثاني للتطبيق. في وضع الخلفية ، أول إشعار يتم فيه فتح حدث "فتح" ، قم بإغلاق التطبيق => الحصول على إشعار => لن يتم إطلاق "الفتح" مرة أخرى.

فقط android - 8 verison
فقط بعد الإشعار الثاني عندما يكون التطبيق في الخلفية
رد فعل - أصلية - إشارة واحدة - 3.9.1

أواجه نفس المشكلة. لن يتم فتح الاتصال عندما يكون التطبيق في الخلفية هل هناك أي إصلاح

@ kostiantyn-solianyk shrolr ،
للتلخيص ، لا يتم تشغيل حدث "الفتح" في المرة الثانية التي يتم فيها فتح التطبيق في Android 8.

يتم إهمال الأحداث التقليدية في الإصدار الرئيسي القادم (الآن في بيتا). أوصي بالترحيل إلى الإصدار التجريبي ومحاولة إعادة إظهار المشكلة.

إذا استمرت المشكلة ، فيرجى إخبارنا بفتح مشكلة جديدة.

هتافات

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات