2014-01-02 2 views
0

Я пробовал push-уведомления от Parse.com в своем приложении для Android. Я также пишу PHP-файл для отправки уведомлений, и пока он хорошо работает. Теперь я хотел бы узнать, как использовать сообщение, полученное в приложении для Android, как переменную.Android - использование полученных push-уведомлений

Мой PHP-файл состоит в следующем:

<?php 
$APPLICATION_ID = "xxxxx"; 
$REST_API_KEY = "xxxxx"; 
$MESSAGE = "Test 123"; 


$url = 'https://api.parse.com/1/push'; 
$data = array(
    'where' => '{}', 
    'expiry' => 1451606400, 
    'data' => array(
     'alert' => $MESSAGE, 
    ), 
); 
$_data = json_encode($data); 
$headers = array(
    'X-Parse-Application-Id: ' . $APPLICATION_ID, 
    'X-Parse-REST-API-Key: ' . $REST_API_KEY, 
    'Content-Type: application/json', 
    'Content-Length: ' . strlen($_data), 
); 

$curl = curl_init($url); 
curl_setopt($curl, CURLOPT_POST, 1); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $_data); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
curl_exec($curl); 
?> 


<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"> 
<head> 
    <meta charset="utf-8" /> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
    <title>Send Push</title> 
</head> 
<body> 
    <?php if (isset($response)) { 
     echo '<h2>Response from Parse API</h2>'; 
     echo '<pre>' . htmlspecialchars($response) . '</pre>'; 
     echo '<hr>'; 
    } elseif ($_POST) { 
     echo '<h2>Error!</h2>'; 
     echo '<pre>'; 
     var_dump($APPLICATION_ID, $REST_API_KEY, $MESSAGE); 
     echo '</pre>'; 
    } ?> 

    <h2>Send Message to Parse API</h2> 
    <form id="parse" action="" method="post" accept-encoding="UTF-8"> 
     <p> 
      <label for="app">APPLICATION_ID</label> 
      <input type="text" name="app" id="app" value="<?php echo htmlspecialchars($APPLICATION_ID); ?>"> 
     </p> 
     <p> 
      <label for="api">REST_API_KEY</label> 
      <input type="text" name="api" id="api" value="<?php echo htmlspecialchars($REST_API_KEY); ?>"> 
     </p> 
     <p> 
      <label for="api">MESSAGE</label> 
      <textarea name="body" id="body"><?php echo htmlspecialchars($MESSAGE); ?></textarea> 
     </p> 
     <p> 
      <input type="submit" value="send"> 
     </p> 
    </form> 
</body> 
</html> 

и на моем Android приложение, которое я это заявил на моей основной деятельности:

Parse.initialize(this, "xxxxx", "xxxxxx"); 
PushService.setDefaultPushCallback(this, MainActivity.class); 
ParseInstallation.getCurrentInstallation().saveInBackground(); 
ParseAnalytics.trackAppOpened(getIntent()); 

и это на мой манифест, с правами доступа.

<receiver android:name="com.parse.ParseBroadcastReceiver" > 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
     <action android:name="android.intent.action.USER_PRESENT" /> 
    </intent-filter> 
</receiver> 

Так нижняя линия, которую я хочу, чтобы быть в состоянии сделать что-то вроде

btn1.setText(msg); 

где msg будет сообщение, полученное в нажимной уведомления

ответ

0

Я могу сказать вам, как я сделал, надеюсь, будет легко перевести на ваше использование:

Во-первых, я зарегистрировал обычный трансляционный приемник в своем манифесте:

<receiver android:name="com.parse.ParseBroadcastReceiver" > 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.USER_PRESENT" /> 
    </intent-filter> 
    </receiver> 
    <receiver android:name="mypackage.ParseSMSReceiver" > 
     <intent-filter> 
      <action android:name="mypackage.INCOMMING_PARSESMS" /> 
     </intent-filter> 
    </receiver> 

Теперь ParseSMSReceiver должен обрабатывать push-уведомления с некоторыми данными. Вот как я извлечь некоторые данные я получаю:

JSONObject json = new JSONObject(intent 
     .getExtras().getString(
       "com.parse.Data")); 

String sms = (String) json 
     .get(Constants.EXTRA_MESSAGE); 
String sender = (json 
     .has(Constants.EXTRA_SENDER)) ? (String) json 
     .get(Constants.EXTRA_SENDER) : null; 

Наконец, вот как я послать уведомление так, что они будут получены ParseSMSReceiver, содержащие ожидаемый данные:

JSONObject data = new JSONObject(); 
//this is the action matching my BroadcastReceiver 
data.put("action", "mypackage.INCOMMING_PARSESMS"); 
data.put(Constants.EXTRA_SENDER, sender); 
data.put(Constants.EXTRA_MESSAGE, message); 
data.put(Constants.EXTRA_CHANNELS, new JSONArray(channels)); 

ParsePush androidPush = new ParsePush(); 
androidPush.setQuery(query); 
androidPush.setData(data); 
androidPush.setExpirationTimeInterval(tenminutes); 
androidPush.sendInBackground(); 

Как вам возможно, вижу, я отправляю push-сообщения непосредственно из своего приложения, но концепция должна применяться так же хорошо, как и вы, используя PHP.

Надеется, что это помогает

редактировать:

Вы можете проверить код на андроид, не полагаясь на своем PHP коде. Панель управления на parse.com позволяет отправлять JSON push-уведомления напрямую. Сообщение JSON вы хотели бы отправить должно быть что-то вроде:

{ "action": "yourpackage.YOURACTIONSTRING", "msg" : "the message to be received" } 

yourpackage.YOURACTIONSTRING должен соответствовать андроида действия: имя вашего приемника в манифесте.

Кроме того, чтобы проверить возможность приема регулярных push-сообщений, попробуйте отправить обычное сообщение с панели управления.

edit2

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

public class ParseSMSReceiver extends BroadcastReceiver { 

private static final String TAG = ParseSMSReceiver.class.getName(); 

@Override 
public void onReceive(final Context context, final Intent intent) { 

     Bundle extras = intent.getExtras(); 
     String message = extras != null ? extras 
       .getString("com.parse.Data") : ""; 
     JSONObject jObject; 
     try { 
      jObject = new JSONObject(message); 
      Log.d("Log", 
        jObject.getString("msg") 
          + jObject.getString("action")); 
     } catch (JSONException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

} 
} 

ParseSMSReceiver должны находиться в правильном пакете, чтобы соответствовать андроида приемника: имя в манифесте.

Этот приемник будет автоматически прослушивать любую строку действий, определенную в части фильтра намерения.

Изменено «alert» на «msg», так как это то, что я использую в приведенном выше примере.

+0

Спасибо за помощь, я посмотрю, смогу ли я теперь управлять :) – Ric

+0

Мне не удалось заставить его работать. Я пробовал различный подход: http://paste2.org/mVJ1LA7C добавил эти 2 части кода к моей деятельности и php. не работает tho: \ что-то не так с моим новым кодом? – Ric

+0

Я опубликовал некоторые изменения – cYrixmorten

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