2015-08-04 2 views
-1

Я пытаюсь использовать пример приложения для push-уведомления в приложении для Android.Push-уведомления в приемнике приложений для Android, веб-служба отправителя

У меня есть Broacast приемник и службы:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 

public class GcmIntentService extends IntentService 

Я получил RegID используя код ниже:

regid = gcm.register(SENDER_ID); 

1. Как я могу проверить RegID получил нормально или нет?

2. этого достаточно из моего приложения для получения уведомлений? Я прошу об этом, потому что большинство примеров, которые я видел, реализовал Sender in android app

3. У меня уже есть приемник вещания, почему мне нужна услуга?

4. Я планирую внедрить веб-сервер, который может связываться с GCM. Для этого моему приложению необходимо отправить redId на веб-сервер. Я понимаю потребности веб-службы ИДЕНТИФИКАТОР РЕГИСТРАЦИИ, Ключ API, Текст сообщения для отправки в GCM. Каков формат JSON? если да, то какой URL и тип метода GET или POST. или любой пример в ASP .net

5. Есть ли открытое программное обеспечение, в котором я могу проверить поведение получателя уведомлений о приложении, не выполняя собственный сервер?

Благодаря

ответ

1

Я стараюсь отвечать 1) Если гсм не может зарегистрировать, вы можете увидеть на LogCat. 2) Я не понял. 3) BroadcastReceiver не бодрствует. Также, если вам нужна фоновая задача, вы не можете этого сделать. Таким образом, вы можете использовать WakefulBroadcastReceiver и startWakefullService. Итак, вы можете, что хотите. 4) Вы можете получить дополнительную информацию там https://developers.google.com/cloud-messaging/ 5) Я нашел его https://github.com/uniqush, но ı не пробовал. Если у вас недостаточно времени, вы можете использовать Parse :)

+0

Спасибо за ответы. в отношении моего второго вопроса все примеры, которые я видел, отправляя regId и информацию пользователя на веб-сервер? это означает, что все устройства отправляют это? почему мы должны это делать? является ли другим для всех пользователей? – Ashok

+0

Да, все устройства должны отправлять regid на ваш сервер, так как серверы Google GCM распознают устройство с regid. –

+0

Но Push-уведомления отправляются всем пользователям приложений, то почему мы должны это делать? Одного регистрационного устройства должно быть достаточно правильно? – Ashok

1

1) Действительный регистрационный идентификатор GCM начинается с «APA ..». Поэтому распечатайте и проверьте это значение;

2) Старая документация предложил класс под названием GcmManager иметь дело с регистрацией устройства, и это было что-то вроде этого:

public class GcmManager { 

    private static final String PROPERTY_REG_ID = "registration_id"; 
    private static final String PROPERTY_APP_VERSION = "appVersion"; 
    private static final String TAG = GcmManager.class.getSimpleName(); 
    private GoogleCloudMessaging gcm; 
    private Context mContext; 

    public GcmManager(Context context) { 
     this.mContext = context.getApplicationContext(); 
    } 

    public void registerIfNeeded() { 
     final String regId = getRegistrationId(); 
     Log.d(TAG, "regId: " + regId); 
     if (regId.isEmpty()) { 
      registerInBackground(); 
     } 
     else { 
      new Thread(new Runnable() { 
       public void run() { 
        sendRegistrationIdToBackend(regId); 
       } 
      }).run(); 
     } 
    } 

    private void storeRegistrationId(Context context, String regId) { 
     final SharedPreferences prefs = getGcmPreferences(context); 
     int appVersion = getAppVersion(context); 
     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString(PROPERTY_REG_ID, regId); 
     editor.putInt(PROPERTY_APP_VERSION, appVersion); 
     editor.apply(); 
    } 

    public String getRegistrationId() { 
     final SharedPreferences prefs = getGcmPreferences(mContext); 
     String registrationId = prefs.getString(PROPERTY_REG_ID, ""); 
     if (registrationId.isEmpty()) { 
      Log.i(TAG, "Registration not found."); 
      return ""; 
     } 

     int registeredVersion = prefs.getInt(PROPERTY_APP_VERSION, Integer.MIN_VALUE); 
     int currentVersion = getAppVersion(mContext); 
     if (registeredVersion != currentVersion) { 
      Log.i(TAG, "App version changed."); 
      return ""; 
     } 
     return registrationId; 
    } 

    private void registerInBackground() { 
     new AsyncTask<Void, Void, String>() { 
      @Override 
      protected String doInBackground(Void... params) { 
       String msg = ""; 
       try { 
        if (gcm == null) { 
         gcm = GoogleCloudMessaging.getInstance(mContext); 
        } 
        String regId = gcm.register(Constants.GCM_SENDER_ID); 
        storeRegistrationId(mContext, regId); 
       } catch (IOException ex) { 
        msg = "Error :" + ex.getMessage(); 
       } 
       return msg; 
      } 

      @Override 
      protected void onPostExecute(String msg) { 
       final String regId = getRegistrationId(); 
       if (!regId.isEmpty()) { 
        sendRegistrationIdToBackend(regId); 
       } 
      } 

     }.execute(null, null, null); 
    } 

    private static int getAppVersion(Context context) { 
     try { 
      PackageInfo packageInfo = context.getPackageManager() 
        .getPackageInfo(context.getPackageName(), 0); 
      return packageInfo.versionCode; 
     } catch (PackageManager.NameNotFoundException e) { 
      throw new RuntimeException("Could not get package name: " + e); 
     } 
    } 

    private SharedPreferences getGcmPreferences(Context context) { 
     return context.getSharedPreferences(GcmManager.class.getSimpleName(), 
       Context.MODE_PRIVATE); 
    } 

    private void sendRegistrationIdToBackend(String regId) { 
     // Send registration Id to your API 
    } 
} 

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

3) Официальная документация WakefulBroadcastReceiver государств:

Помощника для общей картины реализации BroadcastReceiver, который принимает событие устройства пробуждения, а затем передает работу прочь к службе, обеспечивая при этом, что устройство делает не возвращайтесь спать во время перехода.

4 и 5) This answer показывает, как легко сделать запрос непосредственно к GCM, используя Postman. Это хороший подход для тестирования, и вы можете использовать запрос в качестве примера для своего собственного API

+0

Спасибо за ответы, если приложение установлено на 10 пользователей телефона, все пользователи отправляют regId на сервер? Я пробовал с одним пользователем regId для отправки Push-уведомлений, я получил уведомление Но это означает, что только один пользователь получит его? почему мы должны отправлять всех пользователей на сервер? В этом случае, как я могу отправить push-уведомление для всех пользователей приложения? Есть ли другой путь ? – Ashok

+0

Эта архитектура предоставляет сообщение от сервера к ОДНОМУ устройству, на которое ссылается уникальный идентификатор. Однако Google Cloud Messaging развилась, и есть документация по этому вопросу https://developers.google.com/cloud-messaging/notifications – deromirneves

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