我正在尝试将Amazon Device Messaging与Android Studio集成.首先我跟着(整合你的app-with-adm).我打电话的时候
ADM adm = new ADM(getActivity());
if (adm.isSupported()) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
logcat上有这个输出:
E/AndroidRuntime(24472):java.lang.RuntimeException:Stub!
E/AndroidRuntime(24472):at com.amazon.device.messaging.ADM.(Unknown Source)
所以我跟随Amazons(将Amazon Libraries与Android Studio集成)的结果相同.
我的AndroidManifest.xml看起来像这样:
...
<uses-permission android:name="de.mypackage.permission.RECEIVE_ADM_MESSAGE" />
<uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
<permission android:name=".permission.RECEIVE_ADM_MESSAGE" android:protectionLevel="signature" />
...
<application
android:name=".MyPackageApplication"
android:allowBackup="true"
android:allowClearUserData="true"
android:hardwareAccelerated="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
...
<service android:name=".service.ADMNotificationService" android:exported="false" />
<amazon:enable-feature android:name="com.amazon.device.messaging" android:required="true" />
<receiver android:name=".service.ADMNotificationService$MessageAlertReceiver"
android:permission="com.amazon.device.messaging.permission.SEND">
<intent-filter>
<action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
<action android:name="com.amazon.device.messaging.intent.RECEIVE" />
<category android:name="de.mypackage"/>
</intent-filter>
</receiver>
...
</application>
Run Code Online (Sandbox Code Playgroud)
本地build.gradle看起来像这样:
... …Run Code Online (Sandbox Code Playgroud) android android-studio amazon-device-messaging build.gradle android-gradle-plugin
我看到AWS发布API用于向设备发送推送通知. http://docs.aws.amazon.com/sns/latest/api/API_Publish.html
根据:https: //aws.amazon.com/blogs/aws/push-notifications-to-mobile-devices-using-amazon-sns/ 我们可以"通过调用发布功能将消息直接发送到特定设备设备的ARN.您可以通过将端点ARN存储在Amazon DynamoDB中并在服务器上使用多线程代码来轻松扩展它以处理数百万用户.
如果我想向100K用户(没有注册到特定主题)发送推送通知,是否有多发布(或批量发布)API,我不需要调用"推送通知"API对于每个用户?
我正在按照此官方文档将亚马逊设备消息传递集成到我的应用程序中。根据文档,我必须创建一个扩展ADMMessageHandlerJobBase的类 (MyADMMessageHandler.java)并在 AndroidManifest.xml 中将我的类声明为服务
AndroidManifest.xml
<service android:name=".pn.MyADMMessageHandler"
android:exported="false"
android:permission="android.permission.BIND_JOB_SERVICE"/>
Run Code Online (Sandbox Code Playgroud)
但是当我构建我的应用程序时,我收到了这个错误
AndroidManifest.xml:153: Error: MyADMMessageHandler must extend android.app.Service [Instantiatable]
<service android:name=".pn.MyADMMessageHandler"
Explanation for issues of type "Instantiatable":
Activities, services, broadcast receivers etc. registered in the manifest
file (or for custom views, in a layout file) must be "instantiatable" by
the system, which means that the class must be public, it must have an
empty public constructor, and if it's an inner class, it must be a static …Run Code Online (Sandbox Code Playgroud) 当我构建我的Android应用程序的亚马逊(Kindle)风格时,我遇到了这个运行时错误:
Caused by: java.lang.RuntimeException: Stub!
at com.amazon.device.messaging.ADMMessageReceiver.<init>()
Run Code Online (Sandbox Code Playgroud)
我需要本地amazon-device-messaging.jar文件来编译我的应用程序,但是我不需要在运行时包含它,因为亚马逊设备将具有必要的类和方法.如何更新我的Android Studio build.gradle文件来执行此操作?
我试图发送以下请求:
POST /messaging/registrations/(REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE)/messages HTTP/1.1
Host: api.amazon.com
Authorization: Bearer (MY_ACCESS_TOKEN)
Content-Type: application/json
X-Amzn-Type-Version: com.amazon.device.messaging.ADMMessage@1.0
Accept: application/json
X-Amzn-Accept-Type: com.amazon.device.messaging.ADMSendResult@1.0
{
"data":{"message":"value1","title":"value2"},
"consolidationKey":"Some Key",
"expiresAfter":86400
}
Run Code Online (Sandbox Code Playgroud)
为了获得这样的响应格式:
HTTP/1.1 200
X-Amzn-Data-md5: t5psxALRTM7WN30Q8f20tw==
X-Amzn-RequestId: e8bef3ce-242e-11e2-8484-47f4656fc00d
Content-Type: application/json
X-Amzn-Type-Version: com.amazon.device.messaging.ADMSendResult@1.0
Content-Length: 308
{"registrationID":(REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE)}
Run Code Online (Sandbox Code Playgroud)
要做到这一点我尝试使用此代码:
private void sendNotification(String registrationID,String message,
String title,String accessToken)
{
//registrationID content (REGISTRATION_ID_FOR_DESTINATION_APP_INSTANCE) that can vary
string url = "https://api.amazon.com/messaging/registrations/"+ registrationID +"/messages";
var client = new HttpClient();
//set Request headers
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
"Bearer", accessToken);
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("X-Amzn-Type-Version",
"com.amazon.device.messaging.ADMMessage@1.0");
client.DefaultRequestHeaders.Add("X-Amzn-Accept-Type",
"com.amazon.device.messaging.ADMSendResult@1.0"); …Run Code Online (Sandbox Code Playgroud) android ×2
amazon ×1
amazon-sns ×1
asp.net ×1
build.gradle ×1
c# ×1
gradle ×1
httpclient ×1
json.net ×1
kindle ×1
kindle-fire ×1