Facebook Analytics - не работает уведомление в приложении

Я уже получил push-уведомления, но теперь мне нужно интегрировать уведомления в приложении. Для этого я сделал следующее:

Добавлена ​​библиотека в файле Gradle:

compile "com.facebook.android:notifications:${libs.fb_in_app_notifications}"

Внесены изменения в мою основную деятельность:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Other non related code

    NotificationsManager.presentCardFromNotification(this);
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    setIntent(intent);
    NotificationsManager.presentCardFromNotification(this);
}

И скорректировал мой уже существующий FirebaseMessagingService чтобы отличить push-уведомления от уведомлений в приложении.

public class MyFirebaseMessagingService extends FirebaseMessagingService {

public static final String PUSH_NOTIFICATION_EXTRA = "push";
private static final String NOTIFICATION_TITLE = "title";
private static final String NOTIFICATION_BODY = "body";

public MyFirebaseMessagingService() {
}

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Bundle data = new Bundle();
    for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) {
        data.putString(entry.getKey(), entry.getValue());
    }

    Timber.d("onMessageReceived");
    if (NotificationsManager.canPresentCard(data)) {
        Timber.d("canPresentCard -> in-app notification");
        NotificationsManager.presentNotification(
                this,
                data,
                new Intent(getApplicationContext(), MainActivity.class)
        );
    } else {
        Timber.d("Can not present card -> push notification");
        Context context = this.getApplicationContext();
        Intent defaultAction = new Intent(context, MainActivity.class)
                .setAction(Intent.ACTION_DEFAULT)
                .putExtra(PUSH_NOTIFICATION_EXTRA, data);

        String title = data.getString(NOTIFICATION_TITLE);
        String body = data.getString(NOTIFICATION_BODY);

        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
                .setSmallIcon(R.drawable.launcher)
                .setContentTitle(title == null ? "" : title)
                .setContentText(body == null ? "" : body)
                .setAutoCancel(true)
                .setContentIntent(PendingIntent.getActivity(
                        context,
                        0,
                        defaultAction,
                        PendingIntent.FLAG_UPDATE_CURRENT
                ));

        NotificationManager mNotificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        mNotificationManager.notify(123, mBuilder.build());
    }
}
} 

Проблема в том, что метод NotificationsManager.canPresentCard() всегда возвращает ложь. Любая подсказка, почему это может происходить?

Редактировать 1: метод NotificationsManager.canPresentCard() возвращает ложь, потому что RemoteMessage что он не получает ключ fb_push_card для JSONObject, который он ожидает.

1 ответ

Пожалуйста, используйте этот код ниже, он работал идеально для меня: Добавить это в build.gradle:

compile 'com.facebook.android:notifications:1.+'

и добавьте этот код ниже:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Bundle data = new Bundle();
    for (Map.Entry<String, String> entry : remoteMessage.getData().entrySet()) {
      data.putString(entry.getKey(), entry.getValue());
    }

    NotificationsManager.presentNotification(
        this,
        data,
        new Intent(getApplicationContext(), MainActivity.class)
    );
}

В вашей деятельности добавьте этот код:

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    NotificationsManager.presentCardFromNotification(this);
  }
}

См. https://github.com/facebook/FBNotifications

Другие вопросы по тегам