我一直在我的Android应用程序上尝试Parse.com的推送通知。 我还写了一个PHP文件来发送通知,到目前为止它运行良好。 现在我想知道如何将我的Android应用程序中收到的消息用作变量。
我的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 :(得分:0)
我可以告诉你我是如何做到的,希望很容易转化为你的用法:
首先,我在清单中注册了一个普通的BroadcastReceiver:
<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假设用一些数据来处理推送通知。以下是我如何提取我收到的一些数据:
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();
正如您所看到的,我直接从我的应用程序发送推送消息,但这个概念应该适用于您,使用PHP。
希望这有帮助
修改强>
您可以在不依赖PHP代码的情况下在Android上测试代码。 parse.com上的仪表板允许您直接发送JSON推送通知。您要发送的JSON消息应该是:
{ "action": "yourpackage.YOURACTIONSTRING", "msg" : "the message to be received" }
yourpackage.YOURACTIONSTRING应该与清单中接收者的动作android:name相匹配。
此外,要验证接收常规推送消息的能力,请尝试从仪表板发送正常消息。
<强> 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应该驻留在正确的包中,以匹配清单中的接收者android:name。
此接收器将自动侦听您在intent-filter部分中定义的任何动作字符串。
将“alert”更改为“msg”,因为这是我在上面的例子中使用的。