android 华为推送集成

由于谷歌服务中国无法使用,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属性

 

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

 
            
                
                
                
                
                
                
            
        

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

 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 华为推送集成)