自定义推送声音_ios自定义推送声音 - CSDN
精华内容
参与话题
  • 在 MyReceiver中写 package ... import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver;...import android.content.Cont...

    在 MyReceiver中写

    package com.xietong.software.receiver;
    
    import android.app.NotificationManager;
    import android.app.PendingIntent;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.os.Handler;
    import android.support.v4.app.NotificationCompat;
    import android.text.TextUtils;
    import com.xietong.software.activity.MainFragmentActivity;
    import com.xietong.software.activity.MeterApplication;
    import com.xietong.software.activity.R;
    import com.xietong.software.common.Constants;
    import com.xietong.software.db.DbHelper;
    import com.xietong.software.db.Rec_T_Users;
    import com.xietong.software.myUtils.L;
    
    import org.json.JSONException;
    import org.json.JSONObject;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    import cn.jpush.android.api.JPushInterface;
    
    import static android.content.Context.NOTIFICATION_SERVICE;
    
    /**
     * 自定义接收器
     *
     * 如果不定义这个 Receiver,则:
     * 1) 默认用户会打开主界面
     * 2) 接收不到自定义消息
     */
    public class MyReceiver extends BroadcastReceiver {
    	private static final String TAG = "JPush";
    	private Context context ;
    
    	private DbHelper dbHelper ;
    	Rec_T_Users users=new Rec_T_Users();
    
    	@Override
    	public void onReceive(Context context, Intent intent) {
    		Bundle bundle = intent.getExtras();
    
    
    
    		if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
    			String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
    			//send the Registration w to your server...
    
    		} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
    			L.e("[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
    			dbHelper=DbHelper.getInstance(context);
    
    			L.e("====+title====="+bundle.getString(JPushInterface.EXTRA_TITLE));
    			L.e("MeterApplication.islogin"+MeterApplication.islogin);
    
    			if (dbHelper.searchDesc(Rec_T_Users.class).size()>0){
    			Boolean bb=Boolean.valueOf(bundle.getString(JPushInterface.EXTRA_TITLE));
    				L.e("=======bb======="+bb);
    			if (MeterApplication.islogin==true||bundle.getString(JPushInterface.EXTRA_TITLE).equals("jj")) {
    				L.e("-------------------------------------------");
    				if (dbHelper.searchDesc(Rec_T_Users.class).get(0).getUserCode().equals(bundle.getString(JPushInterface.EXTRA_MESSAGE))) {
    					processCustomMessage(context, bundle);
    
    					}
    				}
    			}
    
    
    		} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
    
    			int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
    			L.e("[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
    
    		} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
    			L.e("[MyReceiver] 用户点击打开了通知");
    			//打开自定义的Activity
    			Intent i = new Intent(context, MainFragmentActivity.class);
    			i.putExtras(bundle);
    			//i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    			i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
    			context.startActivity(i);
    
    		} else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
    
    			L.e("[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
    			//在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..
    
    		} else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
    			boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
    			L.e("[MyReceiver]连接状态变化广播传过来的值" + intent.getAction() +" connected state change to "+connected);
    		}
    		else {
    			L.e("[MyReceiver] Unhandled intent - " + intent.getAction());
    		}
    	}
    
    	// 打印所有的 intent extra 数据
    	private static String printBundle(Bundle bundle) {
    		StringBuilder sb = new StringBuilder();
    		for (String key : bundle.keySet()) {
    			if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) {
    				sb.append("\nkey:" + key + ", value:" + bundle.getInt(key));
    			}else if(key.equals(JPushInterface.EXTRA_CONNECTION_CHANGE)){
    				sb.append("\nkey:" + key + ", value:" + bundle.getBoolean(key));
    			} else if (key.equals(JPushInterface.EXTRA_EXTRA)) {
    				if (TextUtils.isEmpty(bundle.getString(JPushInterface.EXTRA_EXTRA))) {
    					L.e("This message has no Extra data");
    					continue;
    				}
    
    				try {
    					JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA));
    					Iterator<String> it =  json.keys();
    
    					while (it.hasNext()) {
    						String myKey = it.next().toString();
    						sb.append("\nkey:" + key + ", value: [" +
    								myKey + " - " +json.optString(myKey) + "]");
    					}
    				} catch (JSONException e) {
    					L.e("Get message extra JSON error!");
    				}
    
    			} else {
    				sb.append("\nkey:" + key + ", value:" + bundle.getString(key));
    			}
    		}
    		return sb.toString();
    	}
    
    
    	private void processCustomMessage(Context context, Bundle bundle) {
    
    		NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
    		NotificationCompat.Builder notification = new NotificationCompat.Builder(context);
    
    		notification.setAutoCancel(true)
    				.setContentText("自定义推送声音111")
    				.setContentTitle("极光测试111")
    				.setSmallIcon(R.drawable.btn_chuli);
    
    		String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
    		String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
    		if (!TextUtils.isEmpty(extras)) {
    			try {
    				JSONObject extraJson = new JSONObject(extras);
    				if (null != extraJson && extraJson.length() > 0) {
    
    
    					String sound = extraJson.getString("sound");
    
    					if("jj.mp3".equals(sound)){
    						notification.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" +R.raw.jj));
    					}
    
    				}
    			} catch (JSONException e) {
    
    			}
    
    		}
    		Intent mIntent = new Intent(context,MainFragmentActivity.class);
    
    		mIntent.putExtras(bundle);
    		PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0);
    
    		notification.setContentIntent(pendingIntent);
    
    		notificationManager.notify(2, notification.build());
    
    	}
    
    
    
    }
    
    
    

     

    展开全文
  • 之前做的项目,现在需要添加新的功能,推送是响自定义声音,由于用的是mqtt做的推送,所以在项目中使用本地推送来模拟推送的效果。 以前用极光推送时,直接将文件添加到项目中,通过解析到内容来响不同自定义声音。...

    之前做的项目,现在需要添加新的功能,推送是响自定义声音,由于用的是mqtt做的推送,所以在项目中使用本地推送来模拟推送的效果。

    以前用极光推送时,直接将文件添加到项目中,通过解析到内容来响不同自定义声音。这次按照之前的做法做了,但是测试时发现不响le,反复查询没有找到问题,最后将文件删除,先将.caf音频文件放在项目文件夹下,然后在项目中右击选择“add Files to “项目名””选项后找到文件添加进去,再运行就可以响了。

    而之前一直是直接拖着音频文件放进去的,老是不响,查资料有的说是,这个文件必须添加到bundle resources里面,后来自己手动添加到bundle resources,依然不响,所以直接将文件move to trash,按上面方法重新添加一遍可行了,不知道是不是Xcode 的bug,有知道的可以解释一下



    展开全文
  • android 极光推送 自定义声音

    千次阅读 2018-03-16 12:09:41
    官方文档未写如何自定义声音https://docs.jiguang.cn/jpush/client/Android/android_sdk/但可以看到 客户端设置通知栏样式可以定义样式,那么可以禁用极光的声音,收到通知就播放一个声音就好:禁用: // 极光 ...

    官方文档未写如何自定义声音https://docs.jiguang.cn/jpush/client/Android/android_sdk/

    但可以看到 客户端设置通知栏样式

    可以定义样式,那么可以禁用极光的声音,收到通知就播放一个声音就好:

    禁用:

    		// 极光
    		JPushInterface.setDebugMode(IS_DEBUG);
    		JPushInterface.init(this);
    		BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(this);
    		builder.statusBarDrawable = R.drawable.icon_apk_fangzhi;
    		builder.notificationFlags = Notification.FLAG_AUTO_CANCEL//
    				| Notification.FLAG_SHOW_LIGHTS; // 设置为自动消失和呼吸灯闪烁
    		builder.notificationDefaults = //
    //				Notification.DEFAULT_SOUND | // 设置为铃声
    						Notification.DEFAULT_VIBRATE | // 设置为、震动
    						Notification.DEFAULT_LIGHTS; // 设置为呼吸灯闪烁
    		JPushInterface.setPushNotificationBuilder(1, builder);

    在广播里播放SoundHelper.get().palyOrder();:

    	@Override
    	public void onReceive(Context context, Intent intent) {
    		Bundle bundle = intent.getExtras();
    		if (null == bundle) {
    			return;
    		}
    		Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
    
    		if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
    			String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
    			Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
    			// send the Registration Id to your server...
    
    		} else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
    			Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
    			processCustomMessage(context, bundle);
    
    		} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
    			SoundHelper.get().palyOrder();

    SoundHelper类:

    package com.--.comm.helper;
    
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.media.AudioManager;
    import android.media.SoundPool;
    import android.os.Build;
    import android.view.View;
    
    //SoundPool.play(int soundID, float leftVolume, float rightVolume, int priority, int loop, float rate)
    //参数依次是: 
    //soundID:Load()返回的声音ID号 
    //leftVolume:左声道音量设置 
    //rightVolume:右声道音量设置 
    //priority:指定播放声音的优先级,数值越高,优先级越大。 
    //loop:指定是否循环:-1表示无限循环,0表示不循环,其他值表示要重复播放的次数 
    //rate:指定播放速率:1.0的播放率可以使声音按照其原始频率,而2.0的播放速率,可以使声音按照其 
    //原始频率的两倍播放。如果为0.5的播放率,则播放速率是原始频率的一半。播放速率的取值范围是0.5至2.0。
    public class SoundHelper {
    
    	private SoundPool soundPool;
    	private int idSure;
    	private int idCanel;
    	private int idOrder;
    
    	private static SoundHelper helper;
    
    	@SuppressLint("NewApi")
    	@SuppressWarnings("deprecation")
    	public SoundHelper() {
    		Context context = Application.mContext;
    
    		if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    			SoundPool.Builder spb = new SoundPool.Builder();
    			spb.setMaxStreams(10);
    			// spb.setAudioAttributes(null); // 转换音频格式
    			soundPool = spb.build(); // 创建SoundPool对象
    
    		} else {
    			soundPool = new SoundPool(2, AudioManager.STREAM_SYSTEM, 5);
    		}
    		idSure = soundPool.load(context, R.raw.h_sure_open, 1);
    		idCanel = soundPool.load(context, R.raw.h_cancel_back, 1);
    		idOrder = soundPool.load(context, R.raw.order, 1);
    	}
    
    	public static SoundHelper get() {
    		if (null == helper) {
    			helper = new SoundHelper();
    		}
    		return helper;
    	}
    
    	public void palyOrder() {
    			soundPool.play(idOrder, 1, 1, 10, 0, 1);
    		
    	}
    	
    	public void palySure() {
    		if (BaseApplication.get().isOpenSoundBtn() && DefaultShared.isH()) {
    			soundPool.play(idSure, 1, 1, 0, 0, 1);
    		}
    
    	}
    
    	public void palyCancel() {
    		if (BaseApplication.get().isOpenSoundBtn() && DefaultShared.isH()) {
    			soundPool.play(idCanel, 1, 1, 0, 0, 1);
    		}
    	}
    
    }

    IOS自定义声音比较简单:

    极光后台填入声音文件名(后台代码调用多一个参数而已),然后把声音文件放在工程里即可



    要实现不同的通知对不同的声音,安卓要自定义字段解决。

    展开全文
  • 融云自定义推送声音

    千次阅读 2018-02-26 17:09:29
    根据不同的业务需求,往往需要不同的推送声音来区分 代码如下 自定义MyReceiver继承BroadcastReceiver public class MyReceiver extends BroadcastReceiver { private static final String TAG = "JPush&...

    根据不同的业务需求,往往需要不同的推送声音来区分 代码如下

    自定义MyReceiver继承BroadcastReceiver
    
    
    public class MyReceiver extends BroadcastReceiver {
        private static final String TAG = "JPush";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Bundle bundle = intent.getExtras();
            // Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
            if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
                processCustomMessage(context, bundle);
                String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
                Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
                //send the Registration Id to your server...
            } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
                processCustomMessage(context, bundle);
                Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
                processCustomMessage(context, bundle);
            } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
                processCustomMessage(context, bundle);
                Log.d(TAG, "[MyReceiver] 接收到推送下来的通知");
                int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
                Log.d(TAG, "[MyReceiver] 接收到推送下来的通知的ID: " + notifactionId);
            } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
                Log.d(TAG, "[MyReceiver] 用户点击打开了通知"); //打开自定义的Activity
                Intent i = new Intent(context, MainActivity.class);
                i.putExtras(bundle);
                //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
                context.startActivity(i);
            } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
                processCustomMessage(context, bundle);
                Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
                //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等..
            } else if (JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
                processCustomMessage(context, bundle);
                boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
                Log.w(TAG, "[MyReceiver]" + intent.getAction() + " connected state change to " + connected);
            } else {
                Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
            }
        }
    
        /**
         * 实现自定义推送声音 * @param context * @param bundle
         */
        private void processCustomMessage(Context context, Bundle bundle) {
            NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
            NotificationCompat.Builder notification = new NotificationCompat.Builder(context);
           // notification.setAutoCancel(true).setContentText("自定义推送声音").setContentTitle("极光测试").setSmallIcon(R.mipmap.ic_launcher);
            String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
            String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);
            notification.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.aps_sound));
    /*        if (!TextUtils.isEmpty(extras)) {
                try {
                    JSONObject extraJson = new JSONObject(extras);
                    if (null != extraJson && extraJson.length() > 0) {
                        String sound = extraJson.getString("sound");
                        if (!TextUtils.isEmpty(sound)) {
                            notification.setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.aps_sound));
                        }
                    }
                } catch (JSONException e) {
                }
            }*/
            Intent mIntent = new Intent(context, MainActivity.class);
            mIntent.putExtras(bundle);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0);
            notification.setContentIntent(pendingIntent);
            notificationManager.notify(2, notification.build());
        }
    }
    
    具体的声音推送接受方式自己约定  方法有多种  

    别忘了,需要给用户设置别名

     //极光别名和Tag设置
        // 这是来自 JPush Example 的设置别名的 Activity 里的代码。一般 App 的设置的调用入口,在任何方便的地方调用都可以。
        private void setAlias(String alias) {
            // 调用 Handler 来异步设置别名
            mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, alias));
        }
    
        private final TagAliasCallback mAliasCallback = new TagAliasCallback() {
            @Override
            public void gotResult(int code, String alias, Set<String> tags) {
                String logs;
                switch (code) {
                    case 0:
                        logs = "Set tag and alias success";
                        // 建议这里往 SharePreference 里写一个成功设置的状态。成功设置一次后,以后不必再次设置了。
                        break;
                    case 6002:
                        logs = "Failed to set alias and tags due to timeout. Try again after 60s.";
                        // 延迟 60 秒来调用 Handler 设置别名
                        mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60);
                        break;
                    default:
                        logs = "Failed with errorCode = " + code;
                }
            }
        };
        private static final int MSG_SET_ALIAS = 1001;
        private final Handler mHandler = new Handler() {
            @Override
            public void handleMessage(android.os.Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case MSG_SET_ALIAS:
                        // 调用 JPush 接口来设置别名。
                        JPushInterface.setAliasAndTags(getApplicationContext(),
                                (String) msg.obj,
                                null,
                                mAliasCallback);
                        break;
                    default:
                }
            }
        };
    展开全文
  • 自定义极光推送声音

    2020-07-30 23:31:59
    这是一个快速集成极光消息推送的Demo,改Demo实现了推送声音的同时,让你了解如何自定义推送声音
  • 设置推送自定义声音

    2016-05-05 14:25:11
    只需要将声音文件添加到工程中,且添加时要勾选三个选项,然后在推送时将声音文件的名称加上即可;
  • 推送通知自定义提示声音

    千次阅读 2016-04-19 11:26:46
    自定义推送通知声音的时候,推送如果不是使用自定义消息,而是应用平台默认的通知的话,一般可能没有办法设置自定义的声音。解决办法。 为了修改自定义声音可以使用自定义消息,但是为了不增加额外的工作量,可以...
  • iOS开发之极光推送自定义推送声音

    万次阅读 热门讨论 2016-06-01 10:17:18
    项目中用到了自定义推送声音,于是就看了下官方文档。 官方文档上说: Preparing Custom Alert Sounds For remote notifications in iOS, you can specify a custom sound that iOS plays when it presents ...
  • IOS推送声音设置

    万次阅读 2016-04-19 11:11:56
    关于推送,官方文档、各种第三方推送文档都很全,就跳过了。 由于自定义通知声音还是由 iOS 系统来播放的,所以对音频数据格式有限制,可以是如下: 对应音频文件格式是 aiff,wav,caf 文件,文件也必须放到 ...
  • 关于iOS自定义推送消息铃声

    千次阅读 2017-11-23 10:22:44
    近期接触到一个项目,要求app在后台的时候,当app接收到推送消息时能播放一段音乐,正常的的推送消息逻辑只有当用户点击消息栏才能触发相关的方法,此时我就想到用自定义推送铃声的方法来解决这个问题。 推送的铃声...
  • 自定义Android消息推送提示音

    千次阅读 2019-08-10 12:43:05
    自定义推送通知声音的时候,推送如果不是使用自定义消息,而是应用平台默认的通知的话,一般可能没有办法设置自定义的声音。解决办法。 为了修改自定义声音可以使用自定义消息,但是为了不增加额外的工作量,可以...
  • Android华为推送自定义动作的实现

    千次阅读 2020-09-18 16:16:48
    一般推送的需求,大家都知道,点击推送的通知,跳转到某个页面,根据通知传过来的数据,比如url,去打开一个页面。 集成了华为推送的都知道,自定义的广播继承PushReceiver,会有点击通知栏的回调方法OnEvent,可以...
  • iOS-推送自定义提示音

    千次阅读 2018-08-23 16:28:47
    无论是信鸽推送,还是极光推送,其实就是将苹果原生的APS进行封装。具体操作步骤在相应的官网上都有详细介绍以及Demo。本文主要讲述自定义声音遇到的坑,以下是相关硬性条件: 1.音频文件格式: .aiff 、.wav 、.caf...
  • ios推送 sound怎么能够自定义声音呢??
  • 极光推送JPush---自定义提示音

    万次阅读 2018-05-24 13:07:10
    极光推送提供三种方法实现Notification通知 三方开发平台发送普通消息,客户端设置PushNotificationBuilder,实现基础的Notification通知 三方开放平台发送普通消息,客户端设置CustomPushNotificationBuilder,...
  • Android 极光推送 自定义通知铃声

    千次阅读 2018-04-10 12:01:39
    公司使用的推送功能使用的是极光推送,对于普通的通知,极光推送API自动集成了声音的提示,但是对于一些特殊的情况,我们就需要自定义声音提示。 有点坑的是极光并没有提供设置自定通知铃声的接口,所以只能自己来...
  • 开发笔记 - 自定义推送声音

    千次阅读 2016-01-24 09:44:07
    简单 自定义推送声音
  • 最近在调试APP的远程推送,需要做成类似微信视频通话或者语音通话的通知铃声。找了好多资料才知道怎么自定义铃声: 官方文档中有铃声格式和长度的说明:(见...
  • 信鸽推送_使用自定义参数

    千次阅读 2015-06-11 12:25:33
    2.这篇文章主要解决的问题是如何使用信鸽【自定义参数】跳转页面,在信鸽推送设置页面有这样的功能: 程序分为两种状态: 1.程序从后台被退出、程序在后台:这种情况下,接受到通知后,点击通知,会调用 - ...
  • unity消息推送- 接入小米推送SDK-自定义消息通知声音 虽然app消息推送功能一般在原生端做;但是,unity就要这么任性的无所不能,不废话,直接上步骤,快速实现消息推送功能。 具体步骤方法: 1.下载sdk ...
1 2 3 4 5 ... 20
收藏数 5,689
精华内容 2,275
关键字:

自定义推送声音