繁体   English   中英

当应用未运行时,Android设备未响应远程推送通知而显示警报

[英]Android device not showing alert in response to remote push notification when the app is not running

我在这里看到很多其他问题,如果一个应用程序被强制停止,它将不会收到通知。

但是,我没有强制停止这个应用程序。 我只是按下后退按钮。 我也试过按下主页按钮。 在这两种情况下都没有警报

但是,如果应用程序在前台运行,则会触发PushReceived事件,并且AData.Message会显示正确的文本。 因此,似乎远程通知正在发送到设备,只是应用程序永远不会被唤醒来处理它们。

该应用程序是用Delphi XE8编写的,我在KitKat和JellyBean上进行了测试,结果相同。

我怀疑问题出在Android Manifest文件中。 其副本如下。 除此之外,我不知道该往哪里去。 据我所知,当收到推送时,它应该在Firemonkey框架中运行一小段代码,显示推送消息而不启动完整的应用程序。

我正在使用本教程中描述的应用程序试图找出它在我的实时应用程序中无法正常工作的原因。 这曾经像我在XE7中预期的那样工作。

http://docwiki.embarcadero.com/RADStudio/XE8/en/Mobile_Tutorial:_Using_Remote_Notifications_%28iOS_and_Android%29

我正在使用Kinvey仪表板上的Engagement选项卡发送测试推送,因此我认为服务器端是正确的。 正如我所说,他们正在使用前台的应用程序。

加里

<?xml version="1.0" encoding="utf-8"?>
<!-- BEGIN_INCLUDE(manifest) -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.gwsystemsdns.net.pushtest"
    android:versionCode="1"
    android:versionName="1.0.0"
    android:installLocation="preferExternal">

<!-- This is the platform API where NativeActivity was introduced. -->
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="11" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<permission android:name="net.gwsystemsdns.net.pushtest.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="net.gwsystemsdns.net.pushtest.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<uses-feature android:glEsVersion="0x00020000" android:required="True"/>
<application android:persistent="False" 
    android:restoreAnyVersion="False" 
    android:label="PushTest" 
    android:debuggable="True" 
    android:largeHeap="False"
    android:icon="@drawable/ic_launcher"
    android:theme="@style/AppTheme"
    android:hardwareAccelerated="true">


    <!-- Our activity is a subclass of the built-in NativeActivity framework class.
         This will take care of integrating with our NDK code. -->
    <activity android:name="com.embarcadero.firemonkey.FMXNativeActivity"
            android:label="PushTest"
            android:configChanges="orientation|keyboard|keyboardHidden"
            android:launchMode="singleTask">
        <!-- Tell NativeActivity the name of our .so -->
        <meta-data android:name="android.app.lib_name"
            android:value="PushTest" />
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter> 
    </activity>

    <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />
    <receiver android:exported="true" android:name="com.embarcadero.gcm.notifications.GCMNotification" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="net.gwsystemsdns.net.pushtest" />
</intent-filter>
</receiver>

</application>
</manifest>
<!-- END_INCLUDE(manifest) -->

我的Push Received事件演示了前景推送的接收。

procedure TfrmMain.PushEvents1PushReceived(Sender: TObject; const AData: TPushData);
begin
  Memo1.Lines.Add('Push Received');
  Memo1.Lines.Add('Push = ' + AData.Message);
end;

我发现了这个问题。 XE8清单模板文件中缺少此行:

    <%activity%>
    <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
    <%receivers%>
</application>

它像这样进入AndroidManifest.template.xml文件(紧跟在<%receivers%>标签之后:

    <%activity%>
    <service android:name="com.embarcadero.gcm.notifications.GCMIntentService" />
    <%receivers%>
    <receiver android:name="com.embarcadero.firemonkey.notifications.FMXNotificationAlarm" />
</application>

按照Embarcadero的docwiki。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM