android 华为推送集成

作者: 石头_起航 | 来源:发表于2019-06-03 15:22 被阅读18次

    由于谷歌服务中国无法使用,android推送一直是一个大问题,低版本的android通过极光推送等,可以通过唤醒的方式从而达到消息送达的目的,但是随着版本的升级。极光推送在APP被杀死之后无法被唤醒,从而无法接受到推送的消息(极光推送有集成系统级推送方案但是收费,腾讯信鸽、友盟现在免费集成了系统通道)。下面主要是说华为推送的集成。
    华为推送地址
    首先咱们需要进行开发者注册,并且认证、获取SHA256证书指纹这些步骤就不说了。说集成的具体步骤(android studio集成方式)。
    第一步 下载HMS SDK Agent套件 套件下载地址(如果地址不可用的话请直接在上面华为推送地址里面自行查找) ,下载完成后进行解压,里面有“readme.txt”有各个文件的说明,我们需要运行“GetHMSAgent_cn.bat”这个文件,然后根据提示输入包名、appid,如果只集成推送的话只输入这两个几个,cpid 直接点击回车即可,然后根据提示选择是否为游戏,然后输出一个文件夹,“copysrc”这个文件夹,我们需要把“AndroidManifest.xml” 里面的内容复制到自己项目“AppManifestConfig.xml”中,然后“java”中的复制到自己项目中,路径形式和文件中保持一致 如下图所示。

    项目结构图.png 第二步 打开项目的build.gradle文件,如下图! 项目的build.gradle.png

    在allprojects->repositories 里面配置HMS SDK的maven仓。

                repositories {
                    jcenter()
                    maven {url 'http://developer.huawei.com/repo/'}
                }
            }   
    

    第三步 打开工程app下的build.gradle文件,如下图。


    工程builde.gradle.png

    配置依赖文件 (这里配置的版本号是2.6.3.301)

      dependencies {
       implementation 'com.huawei.android.hms:push:2.6.3.301'   
      } 
    

    第四步 以上配置完资源,我们需要新建一个“PushReceiver” 并且继承“PushReceiver” 具体路径“com.huawei.hms.support.api.push.PushReceiver” 中简单方法如下

    public class MyPushReceiver extends PushReceiver {
        @Override
        public void onToken(Context context, String token) {
            super.onToken(context, token);
            Log.e("====token======>>>", "" + token);
        }
    
        @Override
        public boolean onPushMsg(Context context, byte[] msgBytes, Bundle extras) {
            return super.onPushMsg(context, msgBytes, extras);
        }
    
        @Override
        public void onPushState(Context context, boolean pushState) {
            super.onPushState(context, pushState);
        }
    }
    

    然后还需新建“MyApplication” 继承“Application”并且对华为推送进行初始化

    public class MyApplication extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            HMSAgent.init(this);
        }
    }
    

    然后在“AndroidManifest.xml”配置application的name属性

     <application
            android:name=".MyApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
    

    然后在“AndroidManifest.xml”替换下面receiver的name 为刚才新建的“MyPushReceiver”

     <receiver
                android:name=".MyPushReceiver"
                android:permission="com.im.oa.myapplication.permission.PROCESS_PUSH_MSG">
                <intent-filter>
                    <!-- 必须,用于接收token -->
                    <action android:name="com.huawei.android.push.intent.REGISTRATION" />
                    <!-- 必须, 用于接收透传消息 -->
                    <action android:name="com.huawei.android.push.intent.RECEIVE" />
                    <!-- 必须, 用于接收通知栏消息点击事件 此事件不需要开发者处理,只需注册就可以-->
                    <action android:name="com.huawei.intent.action.PUSH_DELAY_NOTIFY" />
                </intent-filter>
            </receiver>
    

    第五步 在启动页请求一下华为推送

     HMSAgent.connect(this, new ConnectHandler() {
                @Override
                public void onConnect(int rst) {
                    Log.e("====connect======>>>", "" + rst);
                }
            });
            HMSAgent.Push.getToken(new GetTokenHandler() {
                @Override
                public void onResult(int rst) {
                    Log.e("====getToken=====>>>", "" + rst);
                }
            });
    

    其中rst为0时表示成功,其他错误码参考华为推送错误码
    当上面rst为0时 ,“MyPushReceiver”中会接受到华为分配的token,我们可以拿着这个token在华为控制台来进行推送测试。

    写在最后,由于华为推送没有向极光推送那样的设置别名的方法,所以我们需要把华为分配的token记录到自己的库中,推送时根据用户取出相应token,并且我还没有找到华为的推送记录在哪里,所以最好做一下消息同送回执。

    写在最后

    数据库记录token的字段一定要设置足够长,由于我是荣耀手机并且官方文档中token实例和我手机生成的token一模一样,我以为所有华为(包括荣耀)手机生成token长度一样,所以我数据库设计长度为50,万万没想到华为有的手机(emui9.1不知道和这个有没有关系)生成的token长度特别长,导致数据库存储失败,所以无法进行推送。切记这个坑!!!!

    相关文章

      网友评论

        本文标题:android 华为推送集成

        本文链接:https://www.haomeiwen.com/subject/tsecxctx.html