Android 使用信鸽推送

第一步:注册,在腾讯移动推送,创建我的应用,得到ACCESS ID  和 ACCESS KEY

第二步:在AndroidManifest.xml添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.VIBRATE" />

第三步:导入依赖

defaultConfig {
   //和注册得到ACCESS ID  和 ACCESS KEY时的包名一样
    applicationId "你的包名"
   //可自行选择不同架构
    ndk {
    abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'   
​​​​//填入你组册得到的ACCESS ID和 ACCESS KEY
    manifestPlaceholders = [
        XG_ACCESS_ID : "**********",
        XG_ACCESS_KEY: "**********",
]
}
dependencies {
//信鸽jar
compile 'com.tencent.xinge:xinge:3.2.5'
//jg包
compile'com.tencent.jg:jg:1.1'
//wup包
compile 'com.tencent.wup:wup:1.0.0.E-release'
//mid包
compile 'com.tencent.mid:mid:4.0.6-release'
}

第四步:创建监听消息的类,继承XGPushBaseReceiver

public class MessageReceiver extends XGPushBaseReceiver {
    @Override
    public void onRegisterResult(Context context, int i, XGPushRegisterResult xgPushRegisterResult) {
        Log.d("XgMessageReceiver","xgPushRegisterResult="+xgPushRegisterResult );
    }

    @Override
    public void onUnregisterResult(Context context, int i) {
    }

    @Override
    public void onSetTagResult(Context context, int i, String s) {
    }

    @Override
    public void onDeleteTagResult(Context context, int i, String s) {
    }
    //发送应用内消息接受消息的方法
    @Override
    public void onTextMessage(Context context, XGPushTextMessage xgPushTextMessage) {
        Log.e("XgMessageReceiver", Textcontent"+xgPushTextMessage.getContent());

        //构造消息,显示在自定义通知栏
         XGLocalMessage msg = new XGLocalMessage();
	 msg.setTitle("信鸽推送");
         msg.setContent(message.getTitle());
         initCustomPushNotificationBuilder(context, msg);
        
    }

    @Override
    public void onNotifactionClickedResult(Context context, XGPushClickedResult xgPushClickedResult) {
    }
    //发送通知栏消息接受消息的方法
    @Override
    public void onNotifactionShowedResult(Context context, XGPushShowedResult xgPushShowedResult) {
        Log.d("XgMessageReceiver","Title="+xgPushShowedResult.getTitle()+"content="+xgPushShowedResult.getContent() );
    }


   /**
	 * 设置通知自定义View
	 * 
	 * @param context
	 */
	@SuppressWarnings("unused")
	private void initCustomPushNotificationBuilder(Context context, XGLocalMessage msg) {
		XGCustomPushNotificationBuilder build = new XGCustomPushNotificationBuilder();
		build.setSound(
				RingtoneManager.getActualDefaultRingtoneUri(
                                                // 设置声音 
						ProjectApplication.getApplication(), RingtoneManager.TYPE_ALARM))                            
				// setSound(
				// Uri.parse("android.resource://" + getPackageName()
				// + "/" + R.raw.wind)) 设定Raw下指定声音文件
				.setDefaults(Notification.DEFAULT_VIBRATE) // 振动
				.setFlags(Notification.FLAG_NO_CLEAR); // 是否可清除
		// 设置自定义通知layout,通知背景等可以在layout里设置
		build.setLayoutId(R.layout.layout_notification);
		// 设置自定义通知内容id
		build.setLayoutTextId(R.id.content);
		// 设置自定义通知标题id
		build.setLayoutTitleId(R.id.title);
		// 设置自定义通知图片id
		build.setLayoutIconId(R.id.icon);
		// 设置自定义通知图片资源
		build.setLayoutIconDrawableId(R.drawable.logo);
		// 设置状态栏的通知小图标
		build.setIcon(R.drawable.right);
		// 设置时间id
		build.setLayoutTimeId(R.id.time);
		// 若不设定以上自定义layout,又想简单指定通知栏图片资源
		// build.setNotificationLargeIcon(R.drawable.ic_action_search);
		// 客户端保存build_id
		 XGPushManager.setPushNotificationBuilder(ProjectApplication.getApplication(), 1, build);
		 
		 XGPushManager.addLocalNotification(context, msg);
	}
    	// 通知展示
	@Override
	public void onNotifactionShowedResult(Context context,
			XGPushShowedResult notifiShowedRlt) {
	}
      // 通知点击回调 actionType=1为该消息被清除,actionType=0为该消息被点击
	@Override
	public void onNotifactionClickedResult(Context context,
			XGPushClickedResult message) {
	}
}

第五步:在AndroidManifest.xml里注册MessageReceiver

<receiver android:name="完整包名"
    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>

/**

<!-- 【必须】 信鸽receiver广播接收 -->
        <receiver
            android:name="com.tencent.android.tpush.XGPushReceiver"
            android:process=":xg_service_v3">
            <intent-filter android:priority="0x7fffffff">

                <!-- 【必须】 信鸽SDK的内部广播 -->
                <action android:name="com.tencent.android.tpush.action.SDK" />
                <action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
                <!-- 【必须】 系统广播:网络切换 -->
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />

                <!-- 【可选】 系统广播:开屏 -->
                <action android:name="android.intent.action.USER_PRESENT" />

                <!-- 【可选】 一些常用的系统广播,增强信鸽service的复活机会,请根据需要选择. -->
                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
            <!-- 【可选】 usb相关的系统广播,增强信鸽service的复活机会,请根据需要添加 -->
            <intent-filter android:priority="0x7fffffff">
                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
                <action android:name="android.intent.action.MEDIA_REMOVED" />
                <action android:name="android.intent.action.MEDIA_CHECKING" />
                <action android:name="android.intent.action.MEDIA_EJECT" />

                <data android:scheme="file" />
            </intent-filter>
        </receiver>

        <!-- 【必须】 信鸽service -->
        <service
            android:name="com.tencent.android.tpush.service.XGPushServiceV3"
            android:exported="true"
            android:persistent="true"
            android:process=":xg_service_v3" />
 <!-- 【必须】 通知service,其中android:name部分要改为当前包名 -->
        <service
            android:name="com.tencent.android.tpush.rpc.XGRemoteService"
            android:exported="true">
            <intent-filter>

                <!-- 【必须】 请修改为当前APP名包.PUSH_ACTION,如demo的包名为:com.qq.xgdemo -->
                <action android:name="*****.PUSH_ACTION" />
            </intent-filter>
        </service>

        <!-- 【必须】 增强xg_service存活率 -->
        <service
            android:name="com.tencent.android.tpush.service.XGDaemonService"
            android:process=":xg_service_v3" />

     <!-- 【必须】 【注意】authorities修改为 包名.AUTH_XGPUSH, 如demo的包名为:com.qq.xgdemo -->
        <provider
            android:name="com.tencent.android.tpush.XGPushProvider"
            android:authorities="****.AUTH_XGPUSH"
            android:exported="true" />

        <!-- 【必须】 【注意】authorities修改为 包名.TPUSH_PROVIDER, 如demo的包名为:com.qq.xgdemo -->
        <provider
            android:name="com.tencent.android.tpush.SettingsContentProvider"
            android:authorities="****.TPUSH_PROVIDER"
            android:exported="false" />

        <!-- 【必须】 【注意】authorities修改为 包名.TENCENT.MID.V3, 如demo的包名为:com.qq.xgdemo -->
        <provider
            android:name="com.tencent.mid.api.MidProvider"
            android:authorities="****.TENCENT.MID.V3"
            android:exported="true" />
     **/

第六步:开启debug日志数据

XGPushConfig.enableDebug(getApplicationContext(), true);

第七步:token注册

XGPushManager.registerPush(getApplicationContext(), new XGIOperateCallback() {
        @Override
        public void onSuccess(Object data, int flag) {
            //token在设备卸载重装的时候有可能会变
            Log.d("TPush", "注册成功,设备token为:" + data);
        }

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

发送消息

接收消息:

猜你喜欢

转载自blog.csdn.net/sunshine_0707/article/details/81326677
今日推荐