信鸽推送快速集成

一、导入相关的包,和在build.gradle的一些配置

二.在AndroidManifest.xml的配置和注册

<!-- 信鸽推送 start -->
<!-- YOUR_PACKAGE_PATH.CustomPushReceiver需要改为自己的Receiver: -->
<receiver
    android:name=".XinGe.receiver.MessageReceiver"
    android:exported="true">
    <intent-filter>

        <!-- 接收消息透传 -->
        <action android:name="com.tencent.android.tpush.action.PUSH_MESSAGE" />
        <!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
        <action android:name="com.tencent.android.tpush.action.FEEDBACK" />
    </intent-filter>
</receiver>

<!--信鸽推送之华为配置 start******信鸽推送之华为Eclipse配置;这里注销使用AS配置可能影响环信的华为推送-->
<meta-data
    android:name="com.huawei.hms.client.appid"
    android:value="xxxxxxx" />

<activity
    android:name="com.huawei.hms.activity.BridgeActivity"
    android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale"
    android:excludeFromRecents="true"
    android:exported="false"
    android:hardwareAccelerated="true"
    android:theme="@android:style/Theme.Translucent">
    <meta-data
        android:name="hwc-theme"
        android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity>

<!-- android:process=":updateProvider"加个process标签可适配华为低版本crash问题;华为打包提示错误 -->
<provider
    android:name="com.huawei.hms.update.provider.UpdateProvider"
    android:authorities="你项目的包名.hms.update.provider"
    android:exported="false"
    android:grantUriPermissions="true" />

<receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver">
    <intent-filter>

        <!-- 接收通道发来的通知栏消息,兼容老版本PUSH -->
        <action android:name="com.huawei.intent.action.PUSH" />
    </intent-filter>
</receiver>

<!--&lt;!&ndash; xxx.xx.xx为CP自定义的广播名称,比如: com.huawei.hmssample. HuaweiPushRevicer-->
<receiver android:name=".XinGe.receiver.HwReceiver">
    <intent-filter>

        <!-- 必须,用于接收TOKEN -->
        <action android:name="com.huawei.android.push.intent.REGISTRATION" />
        <!-- 必须,用于接收消息 -->
        <action android:name="com.huawei.android.push.intent.RECEIVE" />
        <!-- 可选,用于点击通知栏或通知栏上的按钮后触发onEvent回调 -->
        <action android:name="com.huawei.android.push.intent.CLICK" />
        <!-- 可选,查看PUSH通道是否连接,不查看则不需要 -->
        <action android:name="com.huawei.intent.action.PUSH_STATE" />
    </intent-filter>
</receiver>
<!-- 信鸽推送之华为配置 end -->

<!-- 信鸽推送之小米配置 start;版本3.2.6-release已不需要注册 -->
<receiver
    android:name=".XinGe.receiver.MiReceiver"
    android:exported="true">
    <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>
<!-- 信鸽推送之小米配置 end -->

<!-- 信鸽推送之魅族配置 start ;版本3.2.6-release已不需要注册-->
<receiver android:name=".XinGe.receiver.MzReceiver">
    <intent-filter>
        <!-- 接收push消息 -->
        <action android:name="com.meizu.flyme.push.intent.MESSAGE" />
        <!-- 接收register消息 -->
        <action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
        <!-- 接收unregister消息 -->
        <action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />
        <action android:name="com.meizu.c2dm.intent.REGISTRATION" />
        <action android:name="com.meizu.c2dm.intent.RECEIVE" />
        <category android:name="你项目的包名" />
    </intent-filter>
</receiver>
<!-- 信鸽推送之魅族配置 end -->
<!--信鸽推送 end-->

三.信鸽推送设置账号和解绑指定账号

1.启动并注册

// 信鸽推送设置账号
XGPushManager.registerPush(getApplicationContext(), loginInfo.getST_CUSTOMER_CODE());
//此接口会覆盖设备之前绑定过的账号,仅当前注册的账号生效;----测试得到之前绑定的账号也可以接受到推送消息
//XGPushManager.bindAccount(getApplicationContext(), loginInfo.getST_CUSTOMER_CODE());

2.解绑账号

// *******解除信鸽推送的性别标签和账号的绑定*******
// 删除信鸽推送的性别标签
XGPushManager.deleteTag(getApplicationContext(), SharePreferenceXutil.getUserGender());
// 账号解绑
XGPushManager.registerPush(getApplicationContext(), "*");
//XGPushManager.delAccount(getApplicationContext(), SharePreferenceXutil.getCustomerCode());
// //信鸽反注册,相当于删除了标签和解绑了账号
// XGPushManager.unregisterPush(getApplicationContext());
// *******解除信鸽推送的性别标签和账号的绑定*******

四、设置小米、华为等的推送通道的账号,并注册信鸽

// 开启信鸽日志输出
        XGPushConfig.enableDebug(getApplicationContext(), true);
        // 设置小米APPID和APPKEY
        XGPushConfig.setMiPushAppId(getApplicationContext(), "xxxxxxxx");
        XGPushConfig.setMiPushAppKey(getApplicationContext(), "xxxxxxxxxxxxxx");
        // 打开第三方推送
        XGPushConfig.enableOtherPush(getApplicationContext(), true);
        //设置魅族APPID和APPKEY
        XGPushConfig.setMzPushAppId(this, "xxxxxxxxxx");
        XGPushConfig.setMzPushAppKey(this, "xxxxxxxxxxxxxxxxxx");

        // 信鸽注册代码
//        XGPushManager.bindAccount(this, SharePreferenceXutil.getCustomerCode(), new XGIOperateCallback() {
        XGPushManager.registerPush(this, new XGIOperateCallback() {
            @Override
            public void onSuccess(Object data, int flag) {
                L.e("注册成功,------------设备token为:" + data);
                final String xgToken = String.valueOf(data);
                if (!xgToken.equals(SharePreferenceXutil.getXGToken())) {
                    // 設置是否推送信息/更新推送列表
                    new GetNetworkInfo().setPush(xgToken, new CallBack() {
                        @Override
                        public void onResponse(String response) {
                            SetPushModel info = new Gson().fromJson(response, SetPushModel.class);
                            if (info.getRESULTCODE().getVIPCODE() == 0) {
                                // 保存信鸽Token
                                SharePreferenceXutil.saveXGToken(xgToken);
                            }
                        }
                    });
                }
                // 判断语言标签设置是否成功
                if (SharePreferenceXutil.getLanguageTag().equals("")) {
                    // 语言标签设置失败时才再次设置语言标签
                    Utils.setXgLanguageTag(getApplicationContext());
                }
            }

            @Override
            public void onFail(Object data, int errCode, String msg) {
                L.e("注册失败,-------------错误码:" + errCode + ",错误信息:" + msg);
            }
        });

五.点击推送消息跳转到相关的界面

    @Override
    protected void onResume() {
        super.onResume();
        init();
    }

//    @Override
//    protected void onPause() {
//        super.onPause();
//        XGPushManager.onActivityStoped(this);
//    }

    private void init() {
        //获取点击的推送消息的回掉返回的数据
        XGPushClickedResult click = XGPushManager.onActivityStarted(this);
        if (click == null) { // 判断是否来自信鸽的打开方式
             startActivity(new Intent(this,MainActivity.class));
        } else {
            if (click.getActionType() == XGPushClickedResult.NOTIFACTION_CLICKED_TYPE) {
                // 通知在通知栏被点击啦。。。。。
                // APP自己处理点击的相关动作
                // 这个动作可以在activity的onResume也能监听,请看第3点相关内容
                PushParsing info = new Gson().fromJson(click.getCustomContent(), PushParsing.class);// 解析返回数据中CustomContent类中的数据
                content = info.getST_CODE();
                selectId = Integer.parseInt(info.getNO_TYPE());
                // Android6.0以上(包括6.0)系统,不能只是在AndroidManifest.xml中进行配置,还要在程序代码中进行动态设置相应的权限。
                //不判断是否有权限直接跳转到相应的界面的过程中会崩溃
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                        //requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 2);//给了权限也不会直接跳转到相关界面,会跳转到主界面
                        ToastXutil.showToast(this, getString(R.string.language_needPhoneAuthorize));
                        startActivity(new Intent(this, MainActivity.class));
                        finish();
                    } else {
                        jumpOtherActivity();
                    }
                } else {
                    jumpOtherActivity();
                }
            } else if (click.getActionType() == XGPushClickedResult.NOTIFACTION_DELETED_TYPE) {
                // 通知被清除啦。。。。
                // APP自己处理通知被清除后的相关动作
            }
        }
    }

    private void jumpOtherActivity() {
        Intent intent = new Intent();
        switch (selectId) {
            case 0:
                SharePreferenceXutil.saveStopHref(false);// 不阻止网址内的超链接跳转
                intent.setClass(getApplicationContext(), xxx1.class);
                intent.putExtra("url", content);
                break;
            case 1:
                intent.setClass(getApplicationContext(), xxx2.class);
                intent.putExtra("code", content);
                break;
            case 2:
                intent.setClass(getApplicationContext(), xxx3.class);
                intent.putExtra("Index", 1);
                ArrayList<String> listCode = SharePreferenceXutil.getTypeCode();
                if (listCode.indexOf(content) == -1) {
                    ToastXutil.showToast(getApplicationContext(), "No Type");
                    SharePreferenceXutil.saveTypeNameId(0);
                } else {
                    SharePreferenceXutil.saveTypeNameId(listCode.indexOf(content) + 1);
                    intent.putExtra("ST_CODE", content);
                }
                break;
            case 3:
                String classifyStr = content.substring(0, content.indexOf(";"));
                String brandsStr = content.substring(content.indexOf(";") + 1);
                String classifyNames = getString(R.string.language_classify) +SharePreferenceXutil.getLanguageId();
                intent.setClass(getApplicationContext(), xxx3.class);
                intent.putExtra("Index", 1);

                if (brandsStr.length() == 0) {
                    Utils.saveClassifyOrBrand(1, classifyStr, "0");
                    Utils.saveClassifyAndBrands(classifyNames, classifyStr);
                    intent.putExtra("filterField", "st_web_catalog" + "_" + classifyStr);
                } else {
                    String brandsNames = getString(R.string.language_brands) +SharePreferenceXutil.getLanguageId();
                    Utils.saveClassifyOrBrand(2, classifyStr, brandsStr);
                    Utils.saveClassifyAndBrands(classifyNames, classifyStr);
                    Utils.saveClassifyAndBrands(brandsNames, brandsStr);
                    intent.putExtra("filterField", "st_web_catalog" + "_" + classifyStr + ";st_web_subcatalog_" + brandsStr);
                }
                break;
            case 4:
                intent.setClass(getApplicationContext(), xxx4.class);
                intent.putExtra("OrderCode", content);// 订单号
                break;
            default:
                intent.setClass(getApplicationContext(), MainActivity.class);
                break;
        }
        startActivity(intent);
        WelcomeActivity.this.finish();
    }

//    @Override
//    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
//        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
//        if (requestCode == 1)
//            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 取得权限
//                jumpOtherActivity();//给了权限也不会跳到相应的界面
//            } else {
//                // 未取得权限
//                ToastXutil.showToast(this, getString(R.string.language_needPhoneAuthorize));
//            }
//    }

六.导入权限和代码混淆等其他详情查看官方文档

http://xg.qq.com/docs/android_access.html

展开阅读全文

没有更多推荐了,返回首页