Playservices を有効にしていないお客様のために、Baidu プッシュ サービスを実装しています。
すべてが順調に進んでいますが、最大 1 時間の大幅な遅延が発生しています。私たちはヨーロッパにいて、ヨーロッパのSamsung Galaxy S8でテストしています.
プッシュ通知は Baidu プッシュ コンソール経由で送信されるため、通知を遅らせる中間サーバーはありません。
というプロセスが実行されていることに気付きました:bdservice_v1
。このサービスは、通知を受け取り、それをメインのアプリ プロセスに渡す役割を担っていると思います。アプリが強制終了された場合でも、このプロセスを維持するにはどうすればよいですか?
アップデート:
私は今この問題を再検討しており、次の条件が満たされていればすべて問題ないことがわかりました.
- アプリがアンインストールされました
- デバイスが再起動されました
- アプリを再インストールしました
- 実行
PushManager.startWork
上記の遅延はPushManager.startWork
、特定の時間内に が実行されたためです (正確な時間はまだわかっていません)。Baidu はある種のキューイングを実装しており、見逃した通知を の後にデバイスにプッシュしていると思いますPushManager.startWork
。
その間、バイドゥのサポートに何度も連絡を取りましたが、何の連絡もありません。自動応答すらありません!
AndroidManifest.xml
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:installLocation="auto" android:versionCode="xxxx" android:versionName="xxxx" package="tld.d.x" tools:node="replace" xmlns:amazon="http://schemas.amazon.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<uses-sdk android:minSdkVersion="19" android:targetSdkVersion="28" />
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="false" />
<uses-feature android:name="android.hardware.nfc.hce" android:required="false" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:maxSdkVersion="18" android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-feature android:name="android.hardware.telephony" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
<uses-feature android:name="android.hardware.microphone" android:required="false" />
<uses-feature android:name="android.hardware.wifi" android:required="false" />
<permission android:name="tld.d.x.permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="tld.d.x.permission.RECEIVE_ADM_MESSAGE" />
<uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.tld.d.x" />
<permission
android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.tld.d.x"
android:protectionLevel="signature">
</permission>
<application android:allowBackup="false" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/d.x" tools:replace="android:label" android:usesCleartextTraffic="true">
<uses-library android:name="org.apache.http.legacy" android:required="false" />
<meta-data
tools:node="replace"
android:name="android.support.VERSION"
android:value="28.0.0"
/>
<activity android:alwaysRetainTaskState="true" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/d.x" android:launchMode="singleTask" android:name=".MainActivity" android:screenOrientation="fullSensor" android:theme="@style/DarkTheme" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/d.x">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:exported="true" android:name=".pushnotification.PushHandlerActivity" />
<receiver android:name=".pushnotification.NotificationBroadcastReceiver">
<intent-filter>
<action android:name="notification_cancelled" />
</intent-filter>
</receiver>
<meta-data android:name="AmazonAPIKey" android:value="iuztgjhklöopiuzhj" />
<service android:exported="false" android:name=".pushnotification.pushServiceProviders.AdmMessageHandler" />
<service android:name=".pushnotification.pushServiceProviders.FcmMessagingService"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<amazon:enable-feature android:name="com.amazon.device.messaging" android:required="true" />
<receiver android:name=".pushnotification.pushServiceProviders.AdmMessageHandler$MessageAlertReceiver" android:permission="com.amazon.device.messaging.permission.SEND">
<intent-filter>
<action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
<action android:name="com.amazon.device.messaging.intent.RECEIVE" />
<category android:name="tld.d.x" />
</intent-filter>
</receiver>
<activity android:alwaysRetainTaskState="false" android:excludeFromRecents="true" android:finishOnTaskLaunch="true" android:launchMode="singleInstance" android:name=".BackgroundCmdActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar">
...
</activity>
<provider android:authorities="tld.d.x.file_provider_authority" android:exported="false" android:grantUriPermissions="true" android:name="android.support.v4.content.FileProvider">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_provider_paths" />
</provider>
<service android:exported="true" android:name=".nfc.NfcHceService" android:permission="android.permission.BIND_NFC_SERVICE">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="android.nfc.cardemulation.host_apdu_service" android:resource="@xml/aid_list" />
</service>-->
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="tld.d.x.file_provider_authority"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths" />
</provider>
<!-- Baidu Start -->
<receiver android:name="com.baidu.android.pushservice.PushServiceReceiver"
android:process=":bdservice_v1" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
<action android:name="com.baidu.android.pushservice.action.media.CLICK" />
<!-- Drastically improves the receiving time -->
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.USER_PRESENT" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
</receiver>
<receiver android:name="com.baidu.android.pushservice.RegistrationReceiver"
android:process=":bdservice_v1" >
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.METHOD" />
<action android:name="com.baidu.android.pushservice.action.BIND_SYNC" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
</receiver>
<service android:name="com.baidu.android.pushservice.PushService" android:exported="true"
android:process=":bdservice_v1" >
<intent-filter >
<action android:name="com.baidu.android.pushservice.action.PUSH_SERVICE" />
</intent-filter>
</service>
<service android:name="com.baidu.android.pushservice.CommandService"
android:exported="true" />
<provider
android:name="com.baidu.android.pushservice.PushInfoProvider"
android:authorities="tld.d.x.bdpush"
android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.tld.d.x"
android:protectionLevel = "signature"
android:exported="true" />
<receiver android:name=".pushnotification.pushServiceProviders.BaiduPushMessageReceiver">
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.MESSAGE" />
<action android:name="com.baidu.android.pushservice.action.RECEIVE" />
<action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
</intent-filter>
</receiver>
<!-- Baidu Push -->
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
</manifest>