在 android 中关闭应用程序时,在真实设备上未收到一个信号通知

Posted

技术标签:

【中文标题】在 android 中关闭应用程序时,在真实设备上未收到一个信号通知【英文标题】:One Signal Notification did not receive on real device while application is closed in android 【发布时间】:2016-10-08 10:59:24 【问题描述】:

我为 One Signal Push 通知创建了演示应用程序。它在模拟器上工作正常,但在真实设备上测试时。应用关闭时没有收到推送通知的问题。

实现代码如下:

TestDemo.java 文件

public class TestDemo extends Application 

@Override
public void onCreate() 
    super.onCreate();
    OneSignal.setLogLevel(OneSignal.LOG_LEVEL.DEBUG, OneSignal.LOG_LEVEL.WARN);

    OneSignal.startInit(this)
            .setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
            .autoPromptLocation(true)
            .init();


private class ExampleNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler 
    @Override
    public void notificationOpened(OSNotificationOpenResult result) 
        OSNotificationAction.ActionType actionType = result.action.type;
        JSONObject data = result.notification.payload.additionalData;
        String customKey;

        if (data != null) 
            customKey = data.optString("customkey", null);
            if (customKey != null)
                Log.i("OneSignalExample", "customkey set with value: " + customKey);
        

        if (actionType == OSNotificationAction.ActionType.ActionTaken)
            Log.i("OneSignalExample", "Button pressed with id: " + result.action.actionID);
    


MainActivity.java 文件

public class MainActivity extends AppCompatActivity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() 
        @Override
        public void idsAvailable(String userId, String registrationId) 
            Log.d("UserId : ", userId);
            Log.d("Reg Id : ", registrationId);
        
    );


并且还被允许作为文档建议

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

如果有任何解决方案,请提供帮助...

谢谢...

【问题讨论】:

【参考方案1】:

以下是通知在 OneSignal 仪表板或 API 上显示为已发送但在您的设备或网站上不可见的原因:

应用目前处于焦点中

默认情况下,如果您的应用当前处于“焦点”状态(打开且可见),通知将不会显示在设备上。但是,您可以调用 inFocusDisplayingInAppAlert 以在您的应用中将通知显示为警报框,或调用 Notification 以显示通知。

应用被强制停止

当应用处于“强制停止”状态时,将不会收到大多数事件,包括用于推送通知的 GCM/FCM 消息。可以通过以下方式将应用置于此状态。

在设置 > 应用程序中,按下“强制停止”。 在某些设备上长按后退按钮。 使用像 Greenify 这样的第 3 方任务杀手。

应用在某些华为、小米或索尼设备上因自定义 Android 调整而关闭。可以更改以下设备设置来防止这种情况发生。

* Huawei - Go to Settings > "Protected apps", check your app.
* Xiaomi  - Make sure "Auto-start" property enabled for your app in the settings.
* Sony - Tap on the battery icon. Go to Power Management > STAMINA mode > Apps active in standby > Add your app.

要确认您的应用状态是问题,请发送一些通知并检查以下 GCM logcat 条目。

W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent  act=com.google.android.c2dm.intent.RECEIVE pkg=com.onesignal.example (has extras) 

某些设备制造商会将进入强制关闭状态的应用列入白名单。例如 Gmail 和 Whatsapp。

您遇到网络问题

您连接的网络/WiFi 可能已关闭您与 Google 服务器的连接。尝试禁用并重新启用您的互联网连接。详情请见this post。

【讨论】:

对于我来说,它在其他设备上运行良好,只有我的小米有问题。感谢您的信息 根据您的建议启用了我的应用程序的自动启动但它仍然无法正常工作:(任何解决方案..?? @RAJESH KUMAR ARUMUGAM 你还在面对那个 pblm 吗? @RAJESH KUMAR ARUMUGAM 更新您的手机并在可能的情况下授予运行背景权限 签入 Redmi Note 4 我当然会尝试 :) @jose

以上是关于在 android 中关闭应用程序时,在真实设备上未收到一个信号通知的主要内容,如果未能解决你的问题,请参考以下文章

在 Titanium Android 中关闭移动数据时,一次拍摄 getCurrentLocation 无法获取新位置

禁止在 android 设备管理中关闭设备

应用程序在模拟器中运行,但在我的 iPhone 中关闭

在Android Studio中关闭手机上的应用程序时如何不关闭套接字

如果从设置中关闭位置,则获取位置

即使在 Android 4.4.2 中关闭了位置服务,GetCurrentLocation 仍在 Cordova/PhoneGap 应用程序上工作