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

Sub*_*ani 2 android push-notification android-studio onesignal

我为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);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

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);
        }
    });

}
Run Code Online (Sandbox Code Playgroud)

并且还获得了关于文件的建议的许可

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

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

谢谢...

Gde*_*lin 5

以下是通知可能会在OneSignal信息中心或API上显示,但在您的设备或网站上无法显示的原因:

该应用目前是焦点

默认情况下,如果您的应用当前处于"焦点"(打开且可见),则通知将不会显示在设备上.但是,您可以调用inFocusDisplaying与InAppAlert显示在您的应用程序通知为警告框,或Notification显示通知.

该应用程序是强制停止

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

  • 从设置>应用程序,按下"强制停止".
  • 长按某些设备上的后退按钮.
  • 使用像Greenify这样的第三方任务杀手.
  • 由于他们的自定义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.
    
    Run Code Online (Sandbox Code Playgroud)

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

W/GCM-DMM: broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.onesignal.example (has extras) }
Run Code Online (Sandbox Code Playgroud)

一些设备制造商将白名单应用程序进入强制关闭状态.例如Gmail和Whatsapp.

你有网络问题

您连接的网络/ WiFi可能已关闭与Google服务器的连接.尝试禁用并重新启用您的互联网连接.有关详细信息,请参阅此帖子.