未在后台收到带有应用的GCM通知且content-available = 1

时间:2016-07-28 13:45:43

标签: android push-notification google-cloud-messaging background-process ionic2

我开发了一款Ionic 2应用并在Android模拟器上进行测试。

当应用程序处于后台并且通知没有标题,没有消息和content-available = 1时,通知应该直接发送到应用程序通知处理程序。但它没有发生。

我可以在前台接收应用程序的通知。

如果我有标题和消息,我会在通知区域收到通知。但我需要以静默方式直接将通知发送到应用程序,而不通过通知区域。

以下是我发送推送通知的代码:

{
   "delay_while_idle": true,
   "priority": "high",
   "sound": "default",
   "color": "FFFF00",
   //payload   
   "data": {
       "content-available": "1",
       "some_var": "some_value",
       "ohter_var": "other_value",       
   }
}

我怎样才能向我的Android应用发送无声通知?

1 个答案:

答案 0 :(得分:1)

Android GCM和FCM都可以在应用后台工作。

为此,您需要在清单中使用intent Filter添加以下服务类。

<!-- [START gcm_listener] -->
        <service
            android:name=".gcm.GcmListener"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
        <service
            android:name=".gcm.TokenRefreshService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
        </service>
        <service
            android:name=".gcm.RegistrationIntentService"
            android:exported="false" />
        <!-- [END gcm_listener] -->


public class GcmListener extends GcmListenerService {
}


public class TokenRefreshService extends InstanceIDListenerService {
    @Override
    public void onTokenRefresh() {
        super.onTokenRefresh();
        Intent intent = new Intent(this, RegistrationIntentService.class);
        startService(intent);
    }
}

获取令牌:

public class RegistrationIntentService extends IntentService {
    // TODO: Rename actions, choose action names that describe tasks that this
    private String TAG = "RegistrationIntentService";

    public RegistrationIntentService() {
        super("RegistrationIntentService");
    }


    @Override
    protected void onHandleIntent(Intent intent) {
     InstanceID instanceID = InstanceID.getInstance(this);
        String token = instanceID.getToken("PRODUCT_ID",
                GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
}
}