统一推送平台的规则说明

2017/10/27 meizupush

此文章将会根据不同厂商的SDK的接入方式逐步分析,进而梳理出最为精简的接入方式,同时说明各个接入配置的细节问题

一 接入准备工作

关于组件的基本配置将会全部打包到aar中的AndroidManifest中,用户只需要手动配置一些与包名相关的权限配置

1.1 小米

混淆配置

基于aar整体打包的方式

AppID和APPKey本地配置

  <meta-data
     android:name="XIAOMI_APP_ID"
     android:value="${XIAOMI_APP_ID}"/>

  <meta-data
     android:name="XIAOMI_APP_KEY"
     android:value="${XIAOMI_APP_KEY}"/>

Android Manifest 配置

    <!-- 小米个性化配置 需要到应用的主manifest中去配置-->
    <!-- the following 2 ${your packageName} should be changed to your package name -->
    <permission
    android:name="${your packageName}.permission.MIPUSH_RECEIVE"
    android:protectionLevel="signature" />
    <uses-permission android:name="${your packageName}.permission.MIPUSH_RECEIVE" />

UpsPushReceiver 配置

1.2 魅族

AppID和APPKey本地配置

  <meta-data
       android:name="MEIZU_APP_ID"
       android:value="${MEIZU_APP_ID}"/>

  <meta-data
      android:name="MEIZU_APP_KEY"
      android:value="${MEIZU_APP_KEY}"/>

Android Manifest 配置

    <!-- 魅族个性化配置 需要到应用的主manifest中去配置-->
    <uses-permission android:name="com.meizu.flyme.push.permission.RECEIVE"></uses-permission>
    <permission android:name="${PACKAGE_NAME}.push.permission.MESSAGE" android:protectionLevel="signature"/>
    <uses-permission android:name="${PACKAGE_NAME}.push.permission.MESSAGE"></uses-permission>
    
    <uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
    <permission android:name="${PACKAGE_NAME}.permission.C2D_MESSAGE"
                android:protectionLevel="signature"></permission>
    <uses-permission android:name="${PACKAGE_NAME}.permission.C2D_MESSAGE"/>

UpsPushReceiver 配置

1.3 华为

AppID和APPKey本地配置

<!-- APPID 华为移动服务配置 请将value替换成实际的appid -->
   <meta-data
        android:name="com.huawei.hms.client.appid"
        android:value="此处为华为开发者联盟为开发者应用分配的appid" />

Android Manifest 配置

    <!-- 华为个性化配置 需要到应用的主manifest中去配置-->
    <!-- the following 2 ${your packageName} should be changed to your package name -->
    <permission
    android:name="${your packageName}.permission.MIPUSH_RECEIVE"
    android:protectionLevel="signature" />
    <uses-permission android:name="${your packageName}.permission.MIPUSH_RECEIVE" />
    
    
    <!-- 华为移动服务配置,将xxx替换为实际包名 -->
    <provider
       android:name="com.huawei.hms.update.provider.UpdateProvider"
       android:authorities="com.meizu.upspushdemo.hms.update.provider"
       android:exported="false"
       android:grantUriPermissions="true" >
    </provider>

UpsPushReceiver 配置

二 统一推送配置

AndroidManifest 配置

        <!-- 统一推送配置 -->
        <receiver android:name=".UpsReceiver">
            <intent-filter>
            <!-- 接收push消息 -->
            <action android:name="com.meizu.ups.push.intent.MESSAGE" />
            </intent-filter>
        </receiver>

三 消息自定义行为分析

现在各个厂商目前支持以下四种类型,具体使用方式详见各个平台的服务端参考文档

通知栏行为 魅族 小米 华为 说明
打开应用 支持 支持 支持
打开应用页面 支持 支持 不支持 魅族只需传递Activity名称,小米需要传递转换后的intentUri
打开Web页面 支持 支持 支持 只需填写web url地址即可
打开自定Intent URI 支持 支持 支持 魅族可通过打开URL功能实现,小米可通过打开应用内页面传递转换的intentURI,华为通过自定义点击行为
应用客户端自定义 支持 支持 不支持 魅族支持客户端自定义功能,小米可通过不指定notifyEffect实现

统一传参方式

传参的方式目前有两种方式

  • 当执行打开应用,打开应用内页面时,将参数通过intent的方式传递给Activity,开发者通过getIntent().getStringExtra("key")方式获取 因此只需要在组建intent uri时将参数值以key-value方式拼装即可,如下:
intent:#Intent;component=com.meizu.upspushdemo/.TestActivity;S.key=value;end
  • 当点击通知栏时,将参数回调给开发者,开发者在只需在onNotificationArrived,onNotificationClicked时接收参数,在应用客户端自定义时,这种方法较为适用 开发者。在接收到该自定义参数时,自行决定后续动作

3.1 打开应用

  • 魅族
    • 点击动作:打开应用
  • 小米
    • 点击动作:打开应用
  • 华为
    • 点击通知:打开应用
    • 后续动作:直接打开应用

3.2 打开应用内页面

  • 魅族
    • 点击动作:打开应用页面
    • 页面名称: 打开页面只需要填写应用页面的全路径名称,例如com.meizu.upspushdemo.TestActivty
  • 小米
    • 点击动作:打开应用内指定页面
    • 页面地址:intent Uri

通过如下代码打开页面需要获取Intent uri,具体获取方法如下:

 Intent intent = new Intent(this,TestActivity.class);
 intent.putExtra("key","value");
 UpsLogger.i(this,"intent uri "+intent.toUri(Intent.URI_INTENT_SCHEME));

得到Intent uri字符传如下:

 intent:#Intent;component=com.meizu.upspushdemo/.TestActivity;S.key=value;end

3.3 打开web页面

  • 魅族
    • 点击动作:打开URI页面
    • Url: 标准URI格式如下:https://www.baidu.com
  • 小米
    • 点击动作:打开网页
    • Url: 标准URI格式如下:https://www.baidu.com
  • 华为
    • 点击通知:打开网页
    • 输入网址: 标准URI格式如下:https://www.baidu.com

3.4 应用客户端自定义

目前仅仅魅族与小米支持

  • 魅族
    • 点击动作:应用客户端自定义
    • 自定义内容:完全由用户填写
  • 小米
    • 点击动作:由应用客户端自定义
    • 传输数据:由用户自己填写

NOTE: 由于小米不提供远程仓库支持,ups_pushsdk不会将MiPush_SDK_Client_3_4_5.jar包含进最终的aar包中,此时需要开发者自己手动将此jar包引入到自己的工程中

  • 小米服务端客户端自定义API使用方式

在推送时只要不指定notify_effect,即是代表自定义动作 服务端推送代码如下

    /**
     * 创建自定义消息内容的格式
     * **/
    private static Message buildCustomMessage() throws Exception {
        //自定义消息体
        String messagePayload = "This is a message";
        String title = "notification title";
        String description = "notification description";
        Message message = new Message.Builder()
                .title(title)
                .description(description)
                .payload(messagePayload)
                .restrictedPackageName(MY_PACKAGE_NAME)
                .passThrough(0)  //消息使用通知栏方式
                .notifyType(1)
                .build();
        return message;
    }

3.5 打开自定Intent URI

  • 魅族
    • 点击动作:打开URI页面
    • Url: 标准URI格式如下:https://www.baidu.com
  • 小米
    • 点击动作:打开应用内指定页面
    • 页面地址: 标准URI经过Intent.toURI得出
  • 华为
    • 点击通知:打开应用
    • 后续行为->自定义动作: 标准URI经过Intent.toURI得出

3.5.1 URI转换方式

  • URI 原始格式如下
upspushscheme://com.meizu.upspush/notify_detail?title=ups title&content=ups content
  • Uri 经过如下代码
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("upspushscheme://com.meizu.upspush/notify_detail?title=ups title&content=ups content"));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
UpsLogger.e(this,intent.toUri(Intent.URI_INTENT_SCHEME));

转换后格式如下

intent://com.meizu.upspush/notify_detail?title=ups title&content=ups content#Intent;scheme=upspushscheme;launchFlags=0x10000000;end
  • Android Manifest TestActivity 必须如下配置如下
<activity android:name=".TestActivity">
 <intent-filter>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.DEFAULT"/>
      <data android:scheme="upspushscheme" //scheme类型
            android:host="com.meizu.upspush" //host全称
            android:path="/notify_detail"/>  //path路径             
 </intent-filter>           
</activity>

Search

    Post Directory