测试A3L Messaging
                  
                  
                  
                  
                  
                  
                  
测试A3L Messaging
通过在Android和Fire OS设备上部署应用并发送测试消息来测试应用。本页介绍发送测试消息的三个选项:控制台、服务器端脚本和特定于解决方案的API。
要发送通知,您需要安装应用的设备的设备ID。有关如何获取设备ID的详细信息,请遵循初始化A3L Messaging中的步骤。
使用控制台进行测试
FCM和ADM都有控制台,可以用来发送推送通知。如果您更喜欢UI体验,可能需要使用此方法。
使用ADM控制台测试您的应用
要测试与ADM的集成,可以使用ADM控制台并按照以下指示发送推送通知。
  - 转到ADM控制台,并根据提示登录。
      
- 输入应用的客户端ID和客户端密钥。您应该在获取ADM凭证时就拥有了这些信息。
- 在设备注册ID字段中,输入初始化A3L Messaging时获取的设备ID。
- 选择数据消息。
- 为要发送的通知添加键值对。
    
      - 对于标题,将键设置为“a3l.notification.title”,并将值设置为所需的通知标题。
- 要添加正文,将键设置为“a3l.notification.body”,并将值设置为所需的通知文本。
- 或者,要添加图像,将键设置为“a3l.notification.image”,并将值设置为图像的URL。
- 添加任何其他所需字段。有关字段的详尽列表以及它们如何映射到Android通知,请参阅A3L Messaging通知键。
 
- 在消息将在经过以下时长后过期部分中选择消息的持续时间。
- 添加完键值对后,单击发送测试消息。
检查您的设备是否收到了通知。
还可以通过选择自己的键值对来发送自定义消息。可以选择键的名称,但请确保它们与A3L Messaging通知键不同。必须在A3LMessagingService类实现的onMessageReceived()方法中处理自定义消息。
使用Firebase控制台测试您的应用
要测试与FCM的集成,请使用Firebase控制台中的Notification Composer发送推送通知。
  - 转到Firebase控制台。
- 选择要为其发送测试推送通知的项目。
- 在左侧边栏上,展开Engage(互动)部分并选择Cloud Messaging。
- 单击New notification(新建通知)。
- 在Notification text(通知文本)字段中输入消息。您可以选择填写Notification title(通知标题)、Notification image(通知图像)或Notification name(通知名称)字段。
- 单击设备预览部分中的发送测试消息。
- 在叠加层中,在Add an FCM registration token(添加FCM注册令牌)字段中输入设备ID。您的设备ID是在初始化A3L Messaging时获取的。
- 单击Test(测试)。
您的应用应该会收到推送通知。
使用服务器端脚本进行测试
以下服务器端脚本让您能够向设备发送通知。
  - ADMWebServer.py是向Fire OS设备发送通知的Python脚本。
- FCMWebServer.py是向Android设备发送通知的Python脚本。
单击以下按钮获取脚本代码。要发送测试通知,请复制代码,将其粘贴到编辑器中,并更新注释中指示的值。然后将每个脚本保存为.py文件并运行脚本。
   已复制到剪贴板。
  
  
  ADMWebServer.py
  import requests
import json
# 更新这些值以发送推送通知
# 用于发送ADM消息的客户端ID
client_id = ""
# 用于发送ADM消息的客户端密钥
client_secret = ""
# 要向其发送通知的设备ID
deviceId = ""
notification = {
    "title":"A3L通知",
    "body":"A3L通知在Fire OS平台上正常运行!"
}
########### 请勿更改此行下方的任何代码  ##################
Auth_token_URL = "https://api.amazon.com/auth/O2/token"
auth_token_headers = {'Content-Type' : 'application/x-www-form-urlencoded', 'Accept-Charset' : 'application/x-www-form-urlencoded'}
auth_token_data = {'grant_type' : 'client_credentials', 'scope': 'messaging:push', 'client_id': client_id, 'client_secret': client_secret}
send_message_url_part = "https://api.amazon.com/messaging/registrations/"
send_message_headers = {'Accept' : 'application/json', 'Content-Type': 'application/json', 'x-amzn-type-version': 'com.amazon.device.messaging.ADMMessage@1.0', 'x-amzn-accept-type': 'com.amazon.device.messaging.ADMSendResult@1.0'}
a3l_prefix = "a3l.notification."
def transformAndroidNotifcationToA3LNotification(notification):
  a3l_notification = {"data":{}}
  for notification_key, notification_value in notification.items():
    a3l_notification["data"][ a3l_prefix + notification_key] = notification_value
  return a3l_notification
def getAccessToken():
  r = requests.post(Auth_token_URL, data = auth_token_data, headers = auth_token_headers)
  json_response = r.json()
  auth_token = json_response["access_token"]
  return auth_token
def sendMessage():
  auth_token = "Bearer " + getAccessToken()
  send_message_url = send_message_url_part + deviceId + "/messages"
  send_message_headers['Authorization'] = auth_token
  send_message_data = transformAndroidNotifcationToA3LNotification(notification)
  r = requests.post(send_message_url, data = json.dumps(send_message_data), headers = send_message_headers)
  print('成功发送消息:',r.json())
sendMessage()
 
   已复制到剪贴板。
  
  
  FCMWebServer.py
  import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging
# 更新这些值以发送推送通知
# 这是Admin SDK JSON文件,其中包含 
# 您的Firebase服务器凭证
admin_sdk_json_file = "Admin SDK JSON文件的路径"
# 要向其发送通知的设备ID
registration_token = ""
########### 请勿更改此行下方的任何代码  ##################
cred = credentials.Certificate(admin_sdk_json_file)
firebase_admin.initialize_app(cred)
def send_to_token():
  message = messaging.Message(
    notification=messaging.Notification(
          title='A3L通知',
          body='A3L通知在Android平台上正常运行!',
      ),
    token = registration_token
  )
  response = messaging.send(message)
  print('成功发送消息:', response)
send_to_token()
 
使用特定于解决方案的API测试
FCM和ADM都提供了可用于向设备发送消息的API。有关如何通过这些API发送消息的详细说明,请参考以下指南。
A3L Messaging通知键
A3L Messaging通知键与Android通知键类似。所有A3L Messaging通知键都会在基本字段名之前附加前缀"a3l.notification."。此前缀有助于避免与具有相似字段名的Android通知键发生冲突。
A3L Messaging通知字段的行为与对应Android通知字段相同。字段的数据类型和功能相同。下表列出了A3L Messaging通知字段和对应Android通知字段的完整列表。
  
    
    
  
  
    
      | A3L Messaging通知字段 | Android通知字段 | 
  
  
    
      | a3l.notification.title | title | 
    
      | a3l.notification.body | body | 
    
      | a3l.notification.image | image | 
    
      | a3l.notification.icon | icon | 
    
      | a3l.notification.color | color | 
    
      | a3l.notification.sound | sound | 
    
      | a3l.notification.tag | tag | 
    
      | a3l.notification.click_action | click_action | 
    
      | a3l.notification.channel_id | channel_id | 
    
      | a3l.notification.sticky | sticky | 
    
      | a3l.notification.event_time | event_time | 
    
      | a3l.notification.local_only | local_only | 
    
      | a3l.notification.notification_priority | notification_priority | 
    
      | a3l.notification.default_sound | default_sound | 
    
      | a3l.notification.visibility | visibility | 
    
      | a3l.notification.notification_count | notification_count | 
  
故障排除
如果在使用模拟器设备时,A3L崩溃,并出现No Valid Platform Found(未找到有效平台)错误,则模拟器可能未安装Google Play服务。在此情况下,可能需要先设置Google Play服务,然后才能在这些设备上进行测试。