OneSignal создает несколько пользовательских записей для каждой установки приложения

Я перешел с parse.com на oneSignal для службы push-уведомлений. Я интегрировал SDK в свое приложение для Android, и он может создавать запись пользователя в oneSignal, когда приложение установлено. Но когда я удаляю и переустанавливаю свое приложение для Android, в oneSignal создается новая запись пользователя, что приводит к дублированию записей пользователей.

Как мне преодолеть эту проблему дублирования? Мне нужна только одна запись пользователя, даже если пользователь переустанавливает мое приложение.

В parse.com я использую для проверки кода облака синтаксического анализа на наличие дубликатов перед вставкой новых записей. Есть ли что-то подобное в oneSignal?


person Akshat    schedule 02.02.2016    source источник
comment
В настоящее время сижу здесь с той же проблемой, что и вы, любопытно, что вы в итоге сделали?   -  person Mattias    schedule 27.03.2016
comment
@mattias Извините за поздний ответ. Я пошел вперед с OneSignal. Я написал код на своей стороне сервера, чтобы «активировать» или деактивировать записи на основе уникального тега, но, к сожалению, пока не могу их удалить.   -  person Akshat    schedule 25.04.2016
comment
А, ладно, сделал что-то подобное, спасибо. Не похоже, что они хотят добавить возможность удалить их из API, по крайней мере, пока.   -  person Mattias    schedule 25.04.2016
comment
@mattias Вы обязательно должны представить эту идею. Гдеглин — генеральный директор OneSignal (ответ ниже), и я просил его об этом же. Возможно, вы тоже можете запросить это, поскольку это основное требование в push-фреймворках.   -  person Akshat    schedule 26.04.2016


Ответы (2)


SDK OneSignal делает все возможное, чтобы предотвратить создание дубликатов пользовательских записей. В основном это делается путем проверки рекламного идентификатора пользователя, в основном уникального идентификатора, который остается неизменным между разными установками приложения.

Однако некоторые пользователи Android отказались от предоставления приложениям возможности видеть свой рекламный идентификатор. В этих случаях OneSignal не может знать, что пользователь повторно установил приложение, и будет создана дублирующаяся запись пользователя.

Когда OneSignal в следующий раз попытается отправить уведомление предыдущей записи пользователя, серверы Google GCM уведомят систему OneSignal о том, что у пользователя есть более новый push-токен. В этот момент OneSignal отключит старую запись пользователя, чтобы ей не отправлялись уведомления в будущем. SDK OneSignal также гарантирует, что одно и то же уведомление никогда не будет отображаться на устройстве дважды.

person Gdeglin    schedule 02.02.2016
comment
Спасибо за ответ. Но использовать идентификатор объявления Google для уникальности пользователя немного сложно, верно? Во-первых - некоторые пользователи отказываются от этого, во-вторых - пользователи довольно часто меняют свои устройства. Ближайшая возможность, которую я вижу, решить эту проблему — позволить API удалять пользователей, которых в настоящее время нет. Или вы можете предложить лучшее решение? - person Akshat; 03.02.2016

вы должны сделать это таким образом, прежде чем создавать нового пользователя, проверьте, присутствует ли пользователь уже с помощью этого API idsAvailable в android https://documentation.onesignal.com/docs/android-native-sdk и такой же для сервера можно найти здесь https://documentation.onesignal.com/reference

person Mightian    schedule 02.02.2016
comment
Код инициализации OneSignal в классе приложения Android создает запись пользователя задолго до того, как мой код инициализируется для проверок. Я могу проверить существующих пользователей на наличие дубликатов позже, но я не могу удалить записи пользователей с помощью SDK или API... или могу? - person Akshat; 02.02.2016
comment
в вашем приложении перед вызовом init запустите этот вызов API - person Mightian; 02.02.2016
comment
Это неправильно, или вы не поняли мою проблему. Я не могу выполнить какой-либо код на серверах oneSignal, если не вызывается функция init(). (происходит API, регистрация ключей и т.д.). Кроме того, чтобы проверить, существует ли повторяющийся пользователь, я должен войти в систему на своих серверах, чего определенно не происходит в классе приложения Android (init() входит в класс приложения). - person Akshat; 02.02.2016