什么是应用内消息

通过AppGallery Connect(简称AGC)的应用内消息(App Messaging)服务,实现用户使用应用时,向活跃用户发送有针对性的消息来鼓励用户使用应用的关键功能,从而吸引这些用户。例如,通过应用内消息,您可以鼓励用户订阅、给出某个关卡的通过提示,或者推荐某个餐厅活动。
您可以定制这些消息的外观和形式,并通过事件作为触发器,在关键的时候呈现给用户。

您将建立什么

在本次Codelab中,您将建立一个集成应用内消息的应用。应用将会展示AGC上提前创建的的消息,并且能够展示出自定义的消息展示框。

您将会学到什么

开发环境及技能要求

运行终端要求

集成AGC应用内消息服务,需要完成以下准备工作

具体操作,请按照《AppGallery Connect集成准备》中详细说明来完成。

针对Android Studio开发环境,开发前需集成App Messaging SDK到您的Android Studio项目中。

  1. 登录AppGallery Connect网站,点击"我的项目"图标。
  2. 在项目下的应用列表中选择需要开通应用内消息服务的应用。
  3. 选择"项目设置"页签,单击"应用"栏下的"agconnect-services.json"下载配置文件。
  4. 将"agconnect-services.json"文件拷贝到应用级根目录下。
  5. 打开Android Studio应用级build.gradle文件,添加如下代码集成Analytics Kit和App Messaging SDK。
    dependencies { //配置如下地址 implementation 'com.huawei.hms:hianalytics:5.0.3.300' implementation 'com.huawei.agconnect:agconnect-appmessaging:1.4.1.300' }
  6. 点击界面上的"Sync Now"链接同步已完成的配置。
  1. 登录AppGallery Connect网站,点击"我的项目"图标。
  2. 在项目列表中找到您的项目,在项目下的应用列表中选择需要开通应用内消息服务的应用。
  3. 点击"增长 > 应用内消息",进入应用内消息页面,点击"立即开通"。
  4. 重新下载agconnect-services.json文件。

如果开通服务时提示设置数据存储位置,在操作完成后您需要重新下载agconnect-services.json文件并集成到您的工程中。

  1. 登录AppGallery Connect网站,点击"我的项目"图标。
  2. 在项目下的应用列表中选择需要开通应用内消息服务的应用。
  3. 选择"增长 > 应用内消息"。
  4. 点击"添加应用内消息"。
  5. 配置消息名称和消息描述。
  6. 设置样式和内容,本次codelab选择创建Banner消息,其余信息可自行填写。完成后点击"下一步"。
  7. 设置发送目标,新增条件为应用并选择当前应用的应用包名。
  8. 设置发送时间,按照如下图进行设置。
  9. 标记转化时间无需设置,直接点击右上角 "保存"按钮保存设置。

本次Codelab中您可以在Android Studio工程中创建一个布局页面,参照下图进行UI设计,新增一个TextView和两个Button。TextView展示当前手机的aaid,用于后续测试功能时使用。第一个按钮点击后可应用设置的自定义弹窗布局,第二个按钮点击后取消自定义弹窗布局,恢复默认布局。

  1. 创建主页面的布局。
    <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/add_custum_view" android:text="Set Custom View" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/textview" /> <Button android:id="@+id/remove_custum_view" android:text="Dismiss Custom View" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@id/add_custum_view" /> </androidx.constraintlayout.widget.ConstraintLayout>
  2. 初始化AGConnectAppMessaging实例。
    private AGConnectAppMessaging appMessaging; appMessaging = AGConnectAppMessaging.getInstance();
  3. 通过异步方式获取设备AAID,打印在工程的textview中,以便后续调试输入AAID。
    HmsInstanceId inst = HmsInstanceId.getInstance(this); Task<AAIDResult> idResult = inst.getAAID(); idResult.addOnSuccessListener(new OnSuccessListener<AAIDResult>() { @Override public void onSuccess(AAIDResult aaidResult) { String aaid = aaidResult.getId(); textView.setText(aaid); Log.d(TAG, "getAAID success:" + aaid ); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(Exception e) { Log.d(TAG, "getAAID failure:" + e); } });
  4. 设置强制请求AGC服务端消息数据的标记位,以便调试时能够实时获取数据。
    AGConnectAppMessaging.getInstance().setForceFetch();
  5. 设置弹窗的展示,点击和消失事件回调,分别展示不同的toast提示。
    appMessaging.addOnDisplayListener(new AGConnectAppMessagingOnDisplayListener() { @Override public void onMessageDisplay(AppMessage appMessage) { Toast.makeText(MainActivity.this, "Message showed", Toast.LENGTH_LONG).show(); } }); appMessaging.addOnClickListener(new AGConnectAppMessagingOnClickListener() { @Override public void onMessageClick(AppMessage appMessage) { Toast.makeText(MainActivity.this, "Button Clicked", Toast.LENGTH_LONG).show(); } }); appMessaging.addOnDismissListener(new AGConnectAppMessagingOnDismissListener() { @Override public void onMessageDismiss(AppMessage appMessage, AGConnectAppMessagingCallback.DismissType dismissType) { Toast.makeText(MainActivity.this, "Message Dismiss, dismiss type: " + dismissType, Toast.LENGTH_LONG).show(); } });
  6. 设置应用自定义布局的按钮点击事件。
    addView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { CustomView customView = new CustomView(MainActivity.this); appMessaging.addCustomView(customView); } });
  7. 设置取消自定义布局的按钮点击事件。
    rmView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { appMessaging.removeCustomView(); } });
  8. 自定义布局。
    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="500dp" android:layout_height="300dp" android:orientation="vertical"> <TextView android:textSize="20sp" android:gravity="center" android:text="Custom view" android:layout_width="match_parent" android:layout_height="wrap_content"/> <TextView android:id="@+id/id" android:text="test text" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:text="CLICK" android:id="@+id/click" android:layout_width="match_parent" android:layout_height="wrap_content"/> <Button android:layout_marginTop="10dp" android:text="DISMISS" android:id="@+id/dismiss" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
  9. 自定义布局文件,继承AGConnectMessagingDisplay类,重写displayMessage方法展示布局。
    public class CustomView implements AGConnectAppMessagingDisplay { private static final String TAG = "CustomView"; MainActivity activity; public CustomView(MainActivity activity) { this.activity = activity; } @Override public void displayMessage(@NonNull AppMessage appMessage, @NonNull AGConnectAppMessagingCallback callback) { Log.d(TAG, appMessage.getId() + ""); showDialog(appMessage, callback); } private void showDialog(@NonNull final AppMessage appMessage, @NonNull final AGConnectAppMessagingCallback callback) { View view = LayoutInflater.from(activity).inflate(R.layout.custom_view, null, false); final AlertDialog dialog = new AlertDialog.Builder(activity).setView(view).create(); Button click = view.findViewById(R.id.click); Button dismiss = view.findViewById(R.id.dismiss); TextView id = view.findViewById(R.id.id); id.setText("MessageID: " + appMessage.getId()); click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // set button callback callback.onMessageClick(appMessage); callback.onMessageDismiss(appMessage, AGConnectAppMessagingCallback.DismissType.CLICK); dialog.dismiss(); } }); dismiss.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //set button callback callback.onMessageDismiss(appMessage, AGConnectAppMessagingCallback.DismissType.CLICK); dialog.dismiss(); } }); dialog.show(); dialog.getWindow().setLayout((getScreenWidth(activity) / 4 * 3), LinearLayout.LayoutParams.WRAP_CONTENT); callback.onMessageDisplay(appMessage); } public static int getScreenWidth(Context context) { return context.getResources().getDisplayMetrics().widthPixels; } }
  1. 运行Android Studio工程生成APK包,并在测试手机中安装APK包。
  2. 打开应用后会看到设备的AAID。
  3. 在AGC的消息列表中选择已创建的消息,选择"调测"进入调测页面。
  4. 点击右上角新增测试用户。
  5. 输入步骤2中获取的测试设备的AAID。

    然后保存测试

  6. 在测试设备的应用中点击Set Custom View应用自定义布局,再次重复步骤3和步骤4,点击"保存测试"重新设置测试设备。将应用退回后台,等一秒后返回前台,会看到自定义布局的消息。
  7. 点击Dismiss Custom View还原应用自定义布局,再次设置测试设备,将应用退回后台,等一秒后返回前台,会看到消息布局还原为默认布局。

祝贺您,您已经成功地构建了您的第一个集成AGC 应用内消息服务的应用程序,并学到了如何集成App Messaging SDK, 以及如果在AGC管理台创建和调试新的消息

AGC应用内消息的相关API介绍请参见API索引
本Codelab中所用demo源码下载地址如下:

源码下载

已复制代码