2016-02-23 2 views
2

Я пытаюсь внедрить GCM без BAAS в GCM. Я рассмотрел предыдущие примеры, используя мост, и из моих исследований следующее должно работать, не полагаясь на старый компонент TGCMReceiver.GCM в Delphi Seattle без BAAS

Но следующая строка всегда возвращает ноль, я бегу это после того, как приложение запускается на нажатие кнопки:

APushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); 

APushService всегда равна нулю.

Мой AndroidManifest выглядит следующим образом:

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

    <!-- This is the platform API where NativeActivity was introduced. --> 
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" /> 
    <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.WAKE_LOCK" /> 
    <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" /> 
    <permission android:name="com.embarcadero.Project1.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.embarcadero.Project1.permission.C2D_MESSAGE" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

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

     <meta-data android:name="com.google.android.gms.version" android:value="4323000" /> 


     <!-- 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="Project1" 
       android:configChanges="orientation|keyboard|keyboardHidden|screenSize" 
       android:launchMode="singleTask"> 
      <!-- Tell NativeActivity the name of our .so --> 
      <meta-data android:name="android.app.lib_name" 
       android:value="Project1" /> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" /> 

<receiver 
     android:name="com.embarcadero.gcm.notifications.GCMNotification" android:exported="true" 
     android:permission="com.google.android.c2dm.permission.SEND" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> 
      <category android:name="com.embarcadero.Project1" /> 
     </intent-filter> 
</receiver> 

     <receiver android:name="com.embarcadero.rtl.notifications.NotificationAlarm" /> 
<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="com.embarcadero.Project1" /> 
</intent-filter> 
</receiver> 

<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" /> 
    </application> 
</manifest> 
<!-- END_INCLUDE(manifest) --> 

Я попытался с помощью общего приложения TGCMReceiver, которое там от CodeRage9 с помощью X Е8, он не работает в XE10/Сиэтле, и действительно кажется, что XE10 является обновленный в этом отношении, но я не могу заставить ничего работать с простыми облачными сообщениями Google, и я ищу некоторые рекомендации.

+0

Ive также попробовал то, что указано здесь для XE 6. http://stackoverflow.com/questions/25205478/issue-with-gcm-push-notification-service-delphi-xe6/27690786 – FerretDriver

ответ

1

Ответ показан здесь: Issue with GCM Push notification service DELPHI XE6

За исключением .Active: = True не AutoActivate: = True, как указано Ответ.

TL; DR версия. Drop TKinvyProvider в форме с заполненным GCMAppID, Drop TPushEvent на форме с авторегрессией и автоактивностью установлен на false. В списке предоставления прав набор «Поддержка толчок уведомление: правда» .. добавить в следующую строку в ваш AndroidManifest.template.xml:

<service android:name="com.embarcadero.gcm.notifications.GCMIntentService" /> 

Прямо перед </application>.

Смежные вопросы