0

我正在尝试通过 FCM 传递“徽章”号码。我知道 onMessageReceived() 仅在以下情况下被调用:[有效负载仅包含“数据”,没有消息]

我在服务器端使用“com.google.firebase:firebase-messaging:11.0.2”和pyfcm来发送我的通知。

result = push_service.notify_multiple_devices(
    registration_ids=ids, data_message={'badge': '5'}
)
>> all success.

我的服务:

public class MyFCMService extends FirebaseMessagingService {
  private static final String TAG = "MyFCMService";
  public MyFCMService() {
  }

  @Override
  public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.d(TAG, remoteMessage.getData().toString());
    super.onMessageReceived(remoteMessage);
  }
}

manifest.xml 中的我的服务:

<service android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
    </intent-filter>
</service>
<service
    android:name=".MyFCMService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

我已阅读内容,但没有关闭应用程序(只需按 HOME),但 logcat(verbose) 仍然没有显示任何内容。有什么可能的原因吗?

4

1 回答 1

0

我在清单文件中复制我的代码时找到了原因......

它应该是

<application>
    ...
    <service
        android:name=".libs.fcm.MyFCMService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
</application>

不是

<service
    android:name=".libs.fcm.MyFCMService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>
<application>
    ...
</application>

结果:

D/MyFCMService: {badge=5}

并且徽章编号可以由 ShortcutBadger 通过通知与 datapayload 包含徽章来更新。

pyfcm:
result = push_service.notify_multiple_devices(registration_ids=registration_ids, data_message=data_message, click_action=click_action, message_title=message_title,message_body=message_body, message_icon=message_icon)


Android Service
@Override
public void handleIntent(Intent intent) {
    if(intent.hasExtra("badge"))
}
于 2017-07-31T05:19:53.243 回答