2015-10-19 2 views
1

Я использую оповещения обозревателя в моем проекте. Уведомления прекрасно работают во всем приложении.Показывать оповещения обозревателя Android после переустановки

Клиент должен подписаться на каналы, добавив их вручную. Каналы сохраняются в массиве общих предпочтений. Мы не работаем с учетными записями пользователей.

Проблема: всякий раз, когда я переустанавливаю приложение (очищая общие настройки/каналы), я все равно получаю push-уведомления один или два раза, прежде чем сервер Parse будет синхронизироваться с списком каналов (пустой).

я в основном получить 1-2 или 3 уведомления толчка от Parse на пустой список каналов ...

Что-то я узнал, что с тестированием заключается в следующем: я использовал первую установку с правом клиента + клавиша приложения , Я добавил несколько каналов и удалил приложение после. Перед повторной установкой приложения я создал созданные ключи в коде и переустановил приложение под «плохие» ключи ... Но я все равно мог получать уведомления под неправильным ключом (на протяжении всего приложения) ... хотя я получил несанкционированное исключение. В журнале ввода синтаксического анализа на веб-сайте указано, что он не отправил push на какое-либо устройство, что абсолютно неверно.

В моем классе приложений я обязательно должен отписаться от своих каналов, чтобы быть в безопасности;

public class Application extends android.app.Application { 

@Override 
public void onCreate() { 

    Parse.initialize(this, "APP_ID", "CLIENT_ID"); 
    ParseInstallation.getCurrentInstallation().saveInBackground(); 

    ParseInstallation install = ParseInstallation.getCurrentInstallation(); 
    install.remove("channels"); 
    install.saveInBackground(); 

    super.onCreate(); 

    } 
} 

Я могу отключить уведомления в приложении. Если я это сделаю, и THEN переустановит приложение, я больше не буду делать ложные попытки. Но я не могу поместить этот код в onDestroy/onPause, и это не будет «чистым» способом.

ответ

0

Я исправил проблему, добавив некоторый код JS Cloud в Parse и добавив пользовательский идентификатор установки в приложение для Android. Это предотвращает получение новых объектов установки старыми уведомлениями.

Похоже, что это проблема, которая возникает только на Android. Я добавил следующий код (found online) в моем приложении, чтобы сделать его работу:

Application.java

private void setupParse(Context context) { 
    Parse.initialize(this, <PARSE_APP_ID>, <PARSE_CLIENT_KEY>); 
    ParseInstallation.getCurrentInstallation().put("uniqueId", getWifiMacAddress(context)); 
    ParseInstallation.getCurrentInstallation().saveInBackground(); 
} 

private String getWifiMacAddress(Context context) { 
    WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    if (wifiManager != null && wifiManager.getConnectionInfo() != null) { 
     return wifiManager.getConnectionInfo().getMacAddress(); 
    } 

    return ""; 
} 

main.js

// Parse CloudCode 
Parse.Cloud.beforeSave(Parse.Installation, function(request, response) { 
    Parse.Cloud.useMasterKey(); 

    var uniqueId = request.object.get("uniqueId"); 
    if (uniqueId == null || uniqueId == "") { 
    console.warn("No uniqueId found, exit"); 
    response.success(); 
    } 

    var query = new Parse.Query(Parse.Installation); 
    query.equalTo("uniqueId", uniqueId); 
    query.addAscending("createdAt"); 
    query.find().then(function(results) { 
    for (var i = 0; i < results.length; ++i) { 
     if (results[i].get("installationId") != request.object.get("installationId")) { 
     console.warn("App id " + results[i].get("installationId") + ", delete!"); 
     results[i].destroy().then(function() { 
      console.warn("Delete success"); 
      }, 
      function() { 
      console.warn("Delete error"); 
      } 
     ); 
     } else { 
     console.warn("Current App id " + results[i].get("installationId") + ", dont delete"); 
     } 
    } 
    response.success(); 
    }, 
    function(error) { 
     response.error("Can't find Installation objects"); 
    } 
); 
}); 

Развертывание кода в облаке может быть трудным, следуйте этому руководству о том, как (Выберите свою ОС на сайте): https://parse.com/apps/quickstart#cloud_code/

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

После того, как вы добавили код облака, войдите в систему, чтобы проанализировать и выбрать приложение. Затем в меню выберите облако, и он должен показать развернутую JS (main.js) из GitHub.

После этого для целей тестирования вы можете выбрать «Данные» под ядром, чтобы следить за объектом установки, чтобы убедиться, что объект установки исправлен.

Я надеялся, что это поможет :)

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