Не получают push-уведомления onesignal в приложении для AndroidJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Не получают push-уведомления onesignal в приложении для Android

Сообщение Anonymous »

в моем MainActivity.java

Код: Выделить всё

// ─────────────────────────────────────────────
// OneSignal Identity + Permission Handling
// ─────────────────────────────────────────────

private IUserStateObserver identityObserver = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SharedPreferences prefs = getSharedPreferences("biratbazar_prefs", Context.MODE_PRIVATE);
boolean isLoggedIn = prefs.getBoolean("is_logged_in", false);
String savedUserId = prefs.getString("user_id", null);

// Observe user identity state
identityObserver = state -> {
String currentExternalId = state.getCurrent().getExternalId();
String currentOnesignalId = state.getCurrent().getOnesignalId();

Log.d("OneSignal", "User State Change: ExternalID="
+ currentExternalId + ", OneSignalID=" + currentOnesignalId);

boolean isIdentified = isLoggedIn
? (currentExternalId != null && currentExternalId.equals(savedUserId))
: (currentOnesignalId != null);

if (isIdentified && identityObserver != null) {
Log.d("OneSignal", "Identity confirmed. Requesting permission...");

IUserStateObserver toRemove = identityObserver;
identityObserver = null;
OneSignal.getUser().removeObserver(toRemove);

runOnUiThread(this::requestOneSignalPermission);
}
};

OneSignal.getUser().addObserver(identityObserver);

// Debug: subscription state
OneSignal.getUser().getPushSubscription().addObserver(state -> {
boolean hasToken = state.getCurrent().getToken() != null
&& !state.getCurrent().getToken().isEmpty();

Log.d("OneSignal", "Subscription Changed: ID="
+ state.getCurrent().getId()
+ ", OptedIn=" + state.getCurrent().getOptedIn()
+ ", HasToken=" + hasToken);
});

// Login with external ID if available
if (isLoggedIn && savedUserId != null) {
OneSignalManager.getInstance().login(savedUserId);
}
}

// ─────────────────────────────────────────────
// Request Permission
// ─────────────────────────────────────────────

private void requestOneSignalPermission() {
OneSignal.getNotifications().requestPermission(true, Continue.with(result -> {
if (result.isSuccess() && Boolean.TRUE.equals(result.getData())) {
Log.d("OneSignal", "Permission granted → opting in");
OneSignal.getUser().getPushSubscription().optIn();
} else {
Log.d("OneSignal", "Permission not granted or failed: " + result);
}
}));
}

// ─────────────────────────────────────────────
// Ensure opt-in on resume
// ─────────────────────────────────────────────

@Override
protected void onResume() {
super.onResume();

if (OneSignal.getNotifications().getPermission()) {
OneSignal.getUser().getPushSubscription().optIn();
}
}
в моем BiratBazarApp.java

Код: Выделить всё

package com.officersiam.biratbazar;

import android.app.Application;
import android.util.Log;
import com.google.firebase.FirebaseApp;
import com.onesignal.Continue;
import com.onesignal.OneSignal;
import com.onesignal.debug.LogLevel;

public class BiratBazarApp extends Application {

private static final String ONESIGNAL_APP_ID = "58eeb5a7-3adf-4d9d-8915-f45c6a542284";

@Override
public void onCreate() {
super.onCreate();

// 1. Initialize Firebase first
try {
FirebaseApp.initializeApp(this);
} catch (Exception e) {
Log.e("Firebase", "Firebase init error", e);
}

// 2.  Initialize OneSignal
OneSignalManager.getInstance().initialize(this, ONESIGNAL_APP_ID);
}
}
в моем OneSignalManager.java

Код: Выделить всё

package com.officersiam.biratbazar;

import android.content.Context;
import android.util.Log;
import com.onesignal.OneSignal;
import com.onesignal.debug.LogLevel;
import com.onesignal.user.subscriptions.IPushSubscriptionObserver;
import com.onesignal.user.subscriptions.PushSubscriptionChangedState;
import com.onesignal.inAppMessages.IInAppMessageLifecycleListener;
import com.onesignal.inAppMessages.IInAppMessageWillDismissEvent;
import com.onesignal.inAppMessages.IInAppMessageDidDismissEvent;
import com.onesignal.inAppMessages.IInAppMessageWillDisplayEvent;
import com.onesignal.inAppMessages.IInAppMessageDidDisplayEvent;
import java.util.concurrent.Executors;
import androidx.annotation.NonNull;

public class OneSignalManager {
private static OneSignalManager instance;
private boolean isInitialized = false;

private OneSignalManager() {}

public static synchronized OneSignalManager getInstance() {
if (instance == null) {
instance = new OneSignalManager();
}
return instance;
}

public void initialize(Context context, String appId) {
if (isInitialized) return;

// Set log level for debugging
OneSignal.getDebug().setLogLevel(LogLevel.VERBOSE);

// Initialize OneSignal
OneSignal.initWithContext(context, appId);
isInitialized = true;
Log.d("OneSignalManager", "OneSignal initialized with App ID: " + appId);
}

public void login(String externalId) {
Executors.newSingleThreadExecutor().execute(() -> OneSignal.login(externalId));
}

public void logout() {
Executors.newSingleThreadExecutor().execute(() -> OneSignal.logout());
}

public void addPushSubscriptionObserver(IPushSubscriptionObserver observer) {
OneSignal.getUser().getPushSubscription().addObserver(observer);
}

public void addTrigger(String key, String value) {
Executors.newSingleThreadExecutor().execute(() -> OneSignal.getInAppMessages().addTrigger(key, value));
}

public void addIAMLifecycleListener(IInAppMessageLifecycleListener listener) {
OneSignal.getInAppMessages().addLifecycleListener(listener);
}

public void removeIAMLifecycleListener(IInAppMessageLifecycleListener listener) {
OneSignal.getInAppMessages().removeLifecycleListener(listener);
}
}
в моем BiratBazarNotificationService.java

Код: Выделить всё

package com.officersiam.biratbazar.notification;

import com.onesignal.notifications.INotificationReceivedEvent;
import com.onesignal.notifications.INotificationServiceExtension;

/**
* Declared in AndroidManifest with:
*   
*
* Allows us to intercept / modify notifications before they are displayed.
*/
public class BiratBazarNotificationService implements INotificationServiceExtension {

@Override
public void onNotificationReceived(INotificationReceivedEvent event) {
// Display all notifications as-is.
// To suppress a notification call event.preventDefault() without display().
event.getNotification().display();
}
}
в моем progaurd-rules.pro

Код: Выделить всё

# ============================================================
#  BiratBazar — ProGuard Rules
# ============================================================

# ── App classes ─────────────────────────────────────────────
-keep class com.officersiam.biratbazar.** { *; }

# ── OneSignal ───────────────────────────────────────────────
-keep class com.onesignal.** { *; }
-keepclassmembers class com.onesignal.** {
public (...);
}
-keep class com.onesignal.OSRemoteNotificationReceivedHandler { *; }
-dontwarn com.onesignal.**

# ── Firebase / FCM ──────────────────────────────────────────
-keep class com.google.firebase.** { *; }
-keepclassmembers class com.google.firebase.** {
public (...);
}
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.firebase.**
-dontwarn com.google.android.gms.**

# ── AndroidX WorkManager (OneSignal background jobs) ────────
-keep class androidx.work.** { *;  }
-keepclassmembers class androidx.work.** {
public (...);
}
-dontwarn androidx.work.**

# ── WebView JavaScript Interface ────────────────────────────
-keepclassmembers class * {
@android.webkit.JavascriptInterface ;
}

# ── ViewBinding ─────────────────────────────────────────────
-keep class * implements androidx.viewbinding.ViewBinding {
public static * inflate(...);
public static * bind(android.view.View);
}

# ── Material / BottomSheet ──────────────────────────────────
-keep class com.google.android.material.** { *; }
-dontwarn com.google.android.material.**

# ── Lottie ──────────────────────────────────────────────────
-keep class com.airbnb.lottie.** { *; }
-dontwarn com.airbnb.lottie.**

# ── General Android safety nets ─────────────────────────────
# Preserve all native method names
-keepclasseswithmembernames class * {
native ;
}

# Preserve custom View constructors (used by XML inflation)
-keepclasseswithmembers class * {
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
}

# Keep Parcelable implementations
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}

# Keep Serializable implementations
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

# Keep R class fields (referenced by name in some libs)
-keepclassmembers class **.R$* {
public static ;
}

# Keep enums
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}

# ── Debugging (remove/disable in production if preferred) ───
-keepattributes SourceFile,LineNumberTable
-renamesourcefileattribute SourceFile
в моем AndroidMenifest.xml в моем build.gradle (приложение)

Код: Выделить всё

plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}

dependencies {

// Firebase
implementation platform('com.google.firebase:firebase-bom:34.12.0')
implementation 'com.google.firebase:firebase-messaging'
implementation 'com.google.firebase:firebase-analytics'

// OneSignal
implementation 'com.onesignal:OneSignal:[5.6.1, 5.9.99]'
}
в моем build.gradle (проекте)

Код: Выделить всё

plugins {
id 'com.android.application' version '8.2.2' apply false
id 'com.android.library' version '8.2.2' apply false
id 'com.google.gms.google-services' version '4.4.4' apply false
}
Изображение

Изображение

Изображение

после того, как на панели Onesignal отображается сообщение о том, что никогда не подписывался, даже после того, как я нажимаю кнопку «Разрешить» в запросе разрешения push-уведомлений, включите уведомления, чтобы мгновенно получать новости. этот статус никогда не меняется, чтобы подписаться

Изображение
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»