android vivo、華爲、小米、魅族、oppo廠家推送集成

前言

最近給公司項目集成推送,開始集成了極光推送,但是集成廠商後臺推送是要花錢的。老闆心疼錢,沒法子只能一個廠家一個廠家的對接推送了。廢話不多先從小米開始吧。

一、小米推送

創建應用,打開小米開放平臺點擊右上角進入登錄頁面。進入登陸界面後,輸入帳號、密碼並點擊登陸後進入小米開放平臺。

點擊移動開發服務中的消息推送按鈕進入推送後臺。

點擊“創建手機/平板應用”按鈕進入創建新應用界面。

接下來就是下載小米的sdk有一個MiPush_SDK_Client_... .jar,吧jar包放在libs下   下載地址     

配置AndroidManifest.xml文件

1、推送服務需要的權限列表:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />​

<uses-permission android:name="android.permission.INTERNET" /> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

<uses-permission android:name="android.permission.GET_TASKS" /> 

<uses-permission android:name="android.permission.VIBRATE"/> 

<permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE"
android:protectionLevel="signature" /> <!--這裏com.xiaomi.mipushdemo改成app的包名-->

<uses-permission android:name="com.xiaomi.mipushdemo.permission.MIPUSH_RECEIVE" /><!--這裏com.xiaomi.mipushdemo改成app的包名-->

2、推送服務需要配置的service和receiver:

<service android:enabled="true" android:process=":pushservice" android:name="com.xiaomi.push.service.XMPushService"/> 

<service android:name="com.xiaomi.push.service.XMJobService" android:enabled="true" android:exported="false" android:permission="android.permission.BIND_JOB_SERVICE" android:process=":pushservice" /> <!--注:此service必須在3.0.1版本以後(包括3.0.1版本)加入--> 

<service android:enabled="true" android:exported="true" android:name="com.xiaomi.mipush.sdk.PushMessageHandler" /> 

<service android:enabled="true" android:name="com.xiaomi.mipush.sdk.MessageHandleService" /> <!--注:此service必須在2.2.5版本以後(包括2.2.5版本)加入--> <receiver android:exported="true" android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver" > 

<intent-filter> 

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 

<category android:name="android.intent.category.DEFAULT" /> 

</intent-filter> 

</receiver> 

<receiver android:exported="false" android:process=":pushservice" android:name="com.xiaomi.push.service.receivers.PingReceiver" > 

<intent-filter> 

<action android:name="com.xiaomi.push.PING_TIMER" /> 

</intent-filter> 

</receiver>

3、 自定義一個BroadcastReceiver類

public class DemoMessageReceiver extends PushMessageReceiver {
    private String mRegId;
    private long mResultCode = -1;
    private String mReason;
    private String mCommand;
    private String mMessage;
    private String mTopic;
    private String mAlias;
    private String mUserAccount;
    private String mStartTime;
    private String mEndTime;
    @Override
    public void onReceivePassThroughMessage(Context context, MiPushMessage message) {
        mMessage = message.getContent();
        if(!TextUtils.isEmpty(message.getTopic())) {
            mTopic=message.getTopic();
        } else if(!TextUtils.isEmpty(message.getAlias())) {
            mAlias=message.getAlias();
        } else if(!TextUtils.isEmpty(message.getUserAccount())) {
            mUserAccount=message.getUserAccount();
        }
    }
    @Override
    public void onNotificationMessageClicked(Context context, MiPushMessage message) {
        mMessage = message.getContent();
        if(!TextUtils.isEmpty(message.getTopic())) {
            mTopic=message.getTopic();
        } else if(!TextUtils.isEmpty(message.getAlias())) {
            mAlias=message.getAlias();
        } else if(!TextUtils.isEmpty(message.getUserAccount())) {
            mUserAccount=message.getUserAccount();
        }
    }
    @Override
    public void onNotificationMessageArrived(Context context, MiPushMessage message) {
        mMessage = message.getContent();
        if(!TextUtils.isEmpty(message.getTopic())) {
            mTopic=message.getTopic();
        } else if(!TextUtils.isEmpty(message.getAlias())) {
            mAlias=message.getAlias();
        } else if(!TextUtils.isEmpty(message.getUserAccount())) {
            mUserAccount=message.getUserAccount();
        }
    }
    @Override
    public void onCommandResult(Context context, MiPushCommandMessage message) {
        String command = message.getCommand();
        List<String> arguments = message.getCommandArguments();
        String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);
        String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null);
        if (MiPushClient.COMMAND_REGISTER.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mRegId = cmdArg1;
            }
        } else if (MiPushClient.COMMAND_SET_ALIAS.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mAlias = cmdArg1;
            }
        } else if (MiPushClient.COMMAND_UNSET_ALIAS.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mAlias = cmdArg1;
            }
        } else if (MiPushClient.COMMAND_SUBSCRIBE_TOPIC.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mTopic = cmdArg1;
            }
        } else if (MiPushClient.COMMAND_UNSUBSCRIBE_TOPIC.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mTopic = cmdArg1;
            }
        } else if (MiPushClient.COMMAND_SET_ACCEPT_TIME.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mStartTime = cmdArg1;
                mEndTime = cmdArg2;
            }
        } 
    }
    @Override
    public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {
        String command = message.getCommand();
        List<String> arguments = message.getCommandArguments();
        String cmdArg1 = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);
        String cmdArg2 = ((arguments != null && arguments.size() > 1) ? arguments.get(1) : null);
        if (MiPushClient.COMMAND_REGISTER.equals(command)) {
            if (message.getResultCode() == ErrorCode.SUCCESS) {
                mRegId = cmdArg1;
            }
        } 
    }
}

將自定義的BroadcastReceiver註冊到AndroidManifest.xml文件中

<receiver
  android:exported="true"
  android:name="com.xiaomi.mipushdemo.DemoMessageReceiver">
          <!--這裏com.xiaomi.mipushdemo.DemoMessageRreceiver改成app中定義的完整類名-->
  <intent-filter>
    <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
  </intent-filter>
    <intent-filter>
    <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
  </intent-filter>
  <intent-filter>
    <action android:name="com.xiaomi.mipush.ERROR" />
  </intent-filter>
</receiver>

正式代碼開始

在 Application 中的 onCreate 方法初始化

//APP_ID   APP_KEY   是開始創建小米應用獲取過來的值
MiPushClient.registerPush(this, APP_ID, APP_KEY);

目前爲止小米推送算是集成完畢了。我的項目中和用到了UserAccount,個人覺得它比別名更加適合我們公司的項目,就沒有用別名。

後臺根據  "該用戶的唯一識別"   這個字段來推送

//小米設置UserAccount
MiPushClient.setUserAccount(this,"該用戶的唯一識別",null);


//用戶退出登錄時要刪除UserAccount
MiPushClient.unsetUserAccount(this,"該用戶的唯一識別",null);

在接廠商推送的時候,都應該有接入跳轉指定activity,我也簡單介紹一下這個吧

//我指定跳轉的是登錄頁
<activity
      android:name=".ui.acticity.login.LoginActivity">
      //intent-filter  是必須加的   小米文檔可能沒寫  其他廠家推送又是有用到的
      //hwpush_detail   piccscheme   可以自己心情來修改
      <intent-filter>
           <action android:name="android.intent.action.VIEW" />

           <category android:name="android.intent.category.DEFAULT" />

            <data
                 android:host="包名"
                 android:path="/hwpush_detail"
                 android:scheme="piccscheme" />
      </intent-filter>
</activity>

在LoginActivity中onCreate加入

Intent intent = getIntent();
//uriString   這個值給後臺  後臺根據它來跳轉 
//該uriString就Constants.EXTRA_PARAM_INTENT_URI對應的值
//intent:#Intent;component. ... .LoginActivity;end 這個是我返回來的值
//在頁面接收值的話   我是叫後臺吧數據 直接寫在intent:後  #前
//intent:url=123#Intent;........
//url  就是後臺給傳的值  123
String uriString = intent.toUri(Intent.URI_INTENT_SCHEME);
String url = uriString.substring(uriString.indexOf("url=") + 4,uriString.lastIndexOf("#"));

二、華爲推送

華爲推送挺坑的,我也是文檔加博客才弄清楚的廢話不多,開始了

創建應用

登錄【華爲開發者聯盟】https://developer.huawei.com/consumer/cn/

申請PUSH服務

註冊完成以後

1、在項目根目錄下打開build.gradle

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

下項目app下的build.gradle寫入

  //華爲Push通道
    implementation 'com.huawei.android.hms:push:2.6.3.306'
    implementation 'com.meizu.flyme.internet:push-internal:3.8.3'
    implementation 'org.jsoup:jsoup:1.12.1'

2、下載SDK

https://obs.cn-north-2.myhwclouds.com/hms-ds-wf/sdk/HMSAgent_2.6.3.306.zip

減壓文件    雙擊 GetHMSAgent_cn.bat文件   根據彈窗口提示  輸入自己應用到的內容

完成後生成一個copysrc文件夾,AppManifestConfig.xml配置文件就根據  copysrc文件夾下的AppManifestConfig.xml來配置

然後把java文件中的hms直接複製到自己項目中,修改一下包名就好了

3、初始化Agent    後臺根據token來進行單個用戶推送

/**
 * 初始化HMS Agent
 */

public class MyApplication extends Application {
    @Override
    public void onCreate() {        
        super.onCreate();
        HMSAgent.init(this);
    }    
    
    /**
     * SDK連接HMS
     */

    HMSAgent.connect(this, new ConnectHandler() {
        @Override
        public void onConnect(int rst) {
            showLog("HMS connect end:" + rst);
        }
    }); 
    /**
     * 獲取token
     */

    private void getToken() {
        showLog("get token: begin");
        HMSAgent.Push.getToken(new GetTokenHandler() {
            @Override
            public void onResult(int rtnCode, TokenResult tokenResult) {
                showLog("get token: end" + rtnCode);
            }
        }); 
    }       
}      

4、然後就是跳轉指定界面了

//我指定跳轉的是登錄頁
<activity
      android:name=".ui.acticity.login.LoginActivity">
      //intent-filter  是必須加的   小米文檔可能沒寫  其他廠家推送又是有用到的
      //hwpush_detail   piccscheme   可以自己心情來修改
      <intent-filter>
           <action android:name="android.intent.action.VIEW" />

           <category android:name="android.intent.category.DEFAULT" />

            <data
                 android:host="包名"
                 android:path="/hwpush_detail"
                 android:scheme="piccscheme" />
      </intent-filter>
</activity>

在LoginActivity中onCreate加入

Intent intent = getIntent();
//uriString   這個值給後臺  後臺根據它來跳轉 
//該uriString就Constants.EXTRA_PARAM_INTENT_URI對應的值
//intent:#Intent;....LoginActivity;end 這個是我返回來的值
//在頁面接收值的話   我是叫後臺吧數據 直接寫在intent:後  #前
//intent:url=123#Intent;........
//url  就是後臺給傳的值  123
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String intentUri = intent.toUri(Intent.URI_INTENT_SCHEME);
String url = uriString.substring(uriString.indexOf("url=") + 4,uriString.lastIndexOf("#"));

三、vivo推送

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章