精华内容
下载资源
问答
  • 大家好我是抹茶今天给大家带来...iApp获取当前应用是否有推送权限javags(APP_OPS_SERVICE,null,"android.content.Context.APP_OPS_SERVICE")java(aom,activity,"android.app.Activity.getSystemService","String",A...

    大家好我是抹茶今天给大家带来iApp“iApp检查与获取推送权限”的教程,希望对大家有用!iApp获取当前应用是否有推送权限

    javags(APP_OPS_SERVICE,null,"android.content.Context.APP_OPS_SERVICE")

    java(aom,activity,"android.app.Activity.getSystemService","String",APP_OPS_SERVICE)

    java(appinfo,activity,"android.content.ContextWrapper.getApplicationInfo")

    javags(uid,appinfo,"android.content.pm.ApplicationInfo.uid")

    java(appcontext,activity,"android.content.ContextWrapper.getApplicationContext")

    java(pkg,appcontext,"android.content.Context.getPackageName")

    javags(field,null,"android.app.AppOpsManager","OP_POST_NOTIFICATION")

    java(method,aom,"android.app.AppOpsManager.checkOpNoThrow","int",field,"int",uid,"String",pkg)

    javags(MODE_ALLOWED,null,"android.app.AppOpsManager","MODE_ALLOWED")

    201a90f651d6

    图片发自简书App

    获取完推送权限后我们接下来判断是否有推送权限。判断推送权限并发送到通知栏

    f(method==MODE_ALLOWED){

    java(nm,activity,"android.app.Activity.getSystemService","String","notification")

    javanew(nb,"android.app.Notification$Builder","Context",activity)

    java(null,nb,"android.app.Notification$Builder.setSmallIcon","int",17301543)

    //设置图标

    java(null,nb,"android.app.Notification$Builder.setTicker","java.lang.CharSequence","新通知")

    //提示内容

    java(null,nb,"android.app.Notification$Builder.setDefaults","int",-1)

    //发送推送时震动

    java(null,nb,"android.app.Notification$Builder.setContentTitle","java.lang.CharSequence","标题")

    //标题

    java(null,nb,"android.app.Notification$Builder.setContentText","java.lang.CharSequence","内容233")

    //内容

    java(null,nb,"android.app.Notification$Builder.setAutoCancel","boolean",true)

    java(nft,nb,"android.app.Notification$Builder.build")

    java(null,nm,"android.app.NotificationManager.notify","int",1,"android.app.Notification",nft)

    //推送到通知栏,并且不执行下面代码

    endcode

    }

    可以发送到通知栏的效果:

    201a90f651d6

    图片发自简书App

    打开获取权限窗口

    utw(null,"提示","发现程序无法推送通知栏了,想要最新资讯点击开启权限哟!","开启权限","取消",true,v){

    javags(SDK_INT,activity,"android.os.Build$VERSION","SDK_INT")

    javanew(intent,"android.content.Intent")

    f(SDK_INT>=26){

    java(null,intent,"android.content.Intent.setAction","String","android.settings.APP_NOTIFICATION_SETTINGS")

    java(null,intent,"android.content.Intent.putExtra","String","android.provider.extra.APP_PACKAGE","String",pkg)

    }else f(SDK_INT>=21){

    java(null,intent,"android.content.Intent.setAction","String","android.settings.APP_NOTIFICATION_SETTINGS")

    java(null,intent,"android.content.Intent.putExtra","String","app_package","String",pkg)

    java(null,intent,"android.content.Intent.putExtra","String","app_uid","int",uid)

    }else{

    java(null,intent,"android.content.Intent.setAction","String","android.settings.APP_NOTIFICATION_SETTINGS")

    java(uri,null,"android.net.Uri.fromParts","String","package","String",pkg,"String",null)

    java(null,intent,"android.content.Intent.setData","android.net.Uri",uri)

    }

    java(null,intent,"android.content.Intent.setFlags","int",268435456)

    java(null,activity,"android.app.Activity.startActivity","android.content.Intent",intent)

    }else{

    }

    //欢迎加入二次元iApp交流群:454141930

    没有获取到权限后的跳转效果:

    201a90f651d6

    图片发自简书App

    展开全文
  • function subscribeToChannel() { // Subscribes the device to the 'test' channel // Specify the push type as either 'android' for Android or 'ios' for iOS Cloud.PushNotifications.subscribeToken({ ...

    试试这个代码:

    app.js类:

    /*

    Push notifications through device token.

    Steps :

    1) Retrieve device token

    2) Subscribe for receiving notifications

    3) Notify

    4) Unsubscribe from receiving notifications

    */

    Titanium.UI.setBackgroundColor('#000');

    var GcmWin = Ti.UI.createWindow({

    backgroundColor : '#ccc',

    title : 'Android Cloud Push Notification'

    });

    var CloudPush = require('ti.cloudpush');

    CloudPush.debug = true;

    CloudPush.enabled = true;

    CloudPush.showTrayNotificationsWhenFocused = true;

    CloudPush.focusAppOnPush = false;

    var deviceToken;

    var Cloud = require('ti.cloud');

    Cloud.debug = true;

    var submit = Ti.UI.createButton({

    title : 'Retrieve Device token',

    color : '#000',

    height : 80,

    width : 200,

    top : 50

    });

    var subscribe = Ti.UI.createButton({

    title : 'Subscribe',

    color : '#000',

    height : 80,

    width : 200,

    top : 150

    });

    subscribe.addEventListener('click', subscribeToChannel);

    GcmWin.add(subscribe);

    var notify = Ti.UI.createButton({

    title : 'Notify',

    color : '#000',

    height : 80,

    width : 200,

    top : 250

    });

    notify.addEventListener('click', sendTestNotification);

    GcmWin.add(notify);

    var unsubscribe = Ti.UI.createButton({

    title : 'Unsubscribe',

    color : '#000',

    height : 80,

    width : 200,

    top : 350

    });

    unsubscribe.addEventListener('click', unsubscribeToChannel);

    GcmWin.add(unsubscribe);

    GcmWin.add(submit);

    submit.addEventListener('click', function(e) {

    CloudPush.retrieveDeviceToken({

    success : function deviceTokenSuccess(e) {

    alert('Device Token: ' + e.deviceToken);

    deviceToken = e.deviceToken;

    },

    error : function deviceTokenError(e) {

    alert('Failed to register for push! ' + e.error);

    }

    });

    });

    function subscribeToChannel() {

    // Subscribes the device to the 'test' channel

    // Specify the push type as either 'android' for Android or 'ios' for iOS

    Cloud.PushNotifications.subscribeToken({

    device_token : deviceToken,

    channel : 'test',

    type : Ti.Platform.name == 'android' ? 'android' : 'ios'

    }, function(e) {

    if (e.success) {

    alert('Subscribed');

    } else {

    alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));

    }

    });

    }

    function sendTestNotification() {

    // Sends an 'This is a test.' alert to specified device if its subscribed to the 'test' channel.

    Cloud.PushNotifications.notifyTokens({

    to_tokens : deviceToken,

    channel : 'test',

    payload : 'This is a test.'

    }, function(e) {

    if (e.success) {

    alert('Push notification sent');

    } else {

    alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));

    }

    });

    }

    function unsubscribeToChannel() {

    // Unsubscribes the device from the 'test' channel

    Cloud.PushNotifications.unsubscribeToken({

    device_token : deviceToken,

    channel : 'test',

    }, function(e) {

    if (e.success) {

    alert('Unsubscribed');

    } else {

    alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));

    }

    });

    }

    CloudPush.addEventListener('callback', function(evt) {

    //alert(evt);

    alert(evt.payload);

    });

    CloudPush.addEventListener('trayClickLaunchedApp', function(evt) {

    Ti.API.info('Tray Click Launched App (app was not running)');

    //alert('Tray Click Launched App (app was not running');

    });

    CloudPush.addEventListener('trayClickFocusedApp', function(evt) {

    Ti.API.info('Tray Click Focused App (app was already running)');

    //alert('Tray Click Focused App (app was already running)');

    });

    在tiapp.xml只是检查这下面lines.Add,如果不是有:

    ti.cloud

    ti.cloudpush

    这适用于我。希望这可以帮助。

    展开全文
  • 推送消息的到达率除了用户终端的网络信号影响之外,有很大一部分是系统屏蔽原因造成的,我们经常提的一个词“app保活”其实就是为了提升推送消息的到达率,但是及时给app做了保活仍然会被系统杀死,推送消息也是有...

    推送消息的到达率除了用户终端的网络信号影响之外,有很大一部分是系统屏蔽原因造成的,我们经常提的一个词“app保活”其实就是为了提升推送消息的到达率,但是及时给app做了保活仍然会被系统杀死,推送消息也是有几率被拦截的,并且app做了保活之后会加大用户手机的耗电量,对用户体验也是一种伤害。其实Android都是留了后门的,这个后门就是手机厂商的厂商通道,厂商通道拥有系统内的最高权限,因此通过厂商通道发送出去的透传消息是不会被系统拦截的,能够有效的提升推送消息的到达率。下面就以MobPush免费推送消息服务为例,介绍一下厂商通道的集成。

    MobPush接入华为、小米、OPPO和魅族官方提供的系统级推送通道。在华为、小米、OPPO和魅族的设备上,推送消息将能够通过对应的系统推送通道抵达终端,并且无需打开应用就能够收到推送,以此提高在华为,小米和魅族三种设备上的推送送达率,具体的推送通道集成如下:

    一、mob官网后台配置信息

    1、打开http://www.mob.com,登陆到后台,添加MobPush推送SDK:

    4a53bb1434d56c7f128f6d33f04f7981.png

    2、进入到特殊厂商配置选项:

    97129cb9a73e134df908fe7ec9b07c1f.png

    3、进入后按需配置各个推送平台的配置信息:

    2d70509794a21433160635b650740f64.png

    027d2e2c5187c0ce975c73bbf9767192.png

    FCM部分配置:

    1. 进入到FCM服务配置选项:

    6ca8875c0decdffa7c9434759e26aecd.png

    2. 进入后进行基础配置:

    2085db8bdc74587a042714a3a20e589a.png

    FCM证书:点击上传证书进行上传。

    在上传证书之前,需要现在Firebase的控制台下载证书,然后再点击上传。

    5a27f3fd36387aea01602e258d19d07e.png

    在左上角的Project Overview的图标那里选择项目设置,在右侧选择服务账号,Firebase Admin SDK 配置代码段切换到Java,点击生成新的私钥,保存下来,进行上传到Mob管理后台的FCM证书。

    推送默认标题:

    设置推送标题,在推送是通知消息标题采用此设置的标题,如果不设置则采用MobPush默认标题。

    配置完成点击保存配置,即可

    二、客户端集成配置信息

    1、和快速集成一样,添加引用jcenter(在项目根目录的build.gradle中添加)

    buildscript {

    repositories {

    jcenter()

    }

    dependencies {

    // 注册MobSDK

    classpath 'com.mob.sdk:MobSDK:+'

    // 注册google services FCM推送需要

    classpath 'com.google.gms:google-services:4.0.0'

    }

    }

    2、在快速集成的基础上添加gradle的推送插件配置信息(在使用MobPush模块的build.gradle中添加)

    // 添加插件

    apply plugin: 'com.mob.sdk'

    // 在MobSDK的扩展中注册MobPush的相关信息

    MobSDK {

    appKey "替换为mob官方申请的appkey"

    appSecret "替换为mob官方申请的appkey对应的appSecret"

    MobPush {

    //集成其他推送通道(可选)

    devInfo {

    //华为推送配置信息

    HUAWEI{

    appId "华为的appid"

    }

    //魅族推送配置信息

    MEIZU{

    appId "魅族的appid"

    appKey "魅族的appkey"

    }

    //小米推送配置信息

    XIAOMI{

    appId "小米的appid"

    appKey "小米的appkey"

    }

    //FCM推送通道配置

    FCM{

    //设置默认推送通知显示图标

    iconRes "@mipmap/ic_launcher"

    }

    //OPPO推送配置信息

    OPPO{

    appKey "OPPO的appKey"

    appSecret "OPPO的appSecret"

    }

    }

    }

    注:华为推送服务需要检验签名的一致性,华为推送官网需要填写指纹证书的SHA256,在终端采用keytool -list -v -keystore keyStoreFileName 获取偶对应的指纹证书,keyStoreFileName为证书名字加后缀

    注:FCM通道服务需在FCM官网控制台,下载google-services.json文件,复制到应用module中:

    4b77dd3ba99a00f1f2b9996d076d5461.png

    apply plugin: 'com.android.application'

    dependencies {

    compile fileTree(dir: 'libs', include: ['*.jar'])

    }

    android {

    ...

    }

    //在build.gradle文件的最后添加

    apply plugin: 'com.google.gms.google-services'

    3、添加防止二次混淆的代码(**重要**)

    -keep class com.huawei.**{*;}

    -keep class com.meizu.**{*;}

    -keep class com.xiaomi.**{*;}

    -keep class android.os.SystemProperties

    -keep class com.coloros.** {*;}

    -keep class com.google.** {*;}

    -keep class org.apache.thrift.**{*;}

    -dontwarn com.huawei.**

    -dontwarn com.meizu.**

    -dontwarn com.xiaomi.**

    -dontwarn android.os.SystemProperties

    -dontwarn com.coloros.**

    -dontwarn com.google.**

    -dontwarn org.apache.thrift.**

    集成完毕运行后可以在对应设备上可以接收到三个推送通道下发的推送消息,如需查询华为、魅族、OPPO和小米三个推送平台开发账号申请流程 以及离线集成方式,可至Mob官网(http://www.mob.com/product/mobpush)查看。

    展开全文
  • 安卓应用开发,在做推送功能时会用到推送权限是否打开的检测(虽然系统默认时打开的),但是有些用户可能会特意关掉(尤其时测试人员),那么如何获取到用户手机推送权限的状态呢,在网上搜到的代码有以下两种。...

    安卓应用开发,在做推送功能时会用到推送权限是否打开的检测(虽然系统默认时打开的),但是有些用户可能会特意关掉(尤其时测试人员),那么如何获取到用户手机推送权限的状态呢,在网上搜到的代码有以下两种。

    1: 亲测不准确不好用

    String CHECK_OP_NO_THROW = "checkOpNoThrow";

    String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";

    AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);

    ApplicationInfo appInfo = context.getApplicationInfo();

    String pkg = context.getApplicationContext().getPackageName();

    int uid = appInfo.uid;

    Class appOpsClass = null;

    /* Context.APP_OPS_MANAGER */

    try {

    appOpsClass = Class.forName(AppOpsManager.class.getName());

    Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE,

    String.class);

    Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);

    int value = (Integer) opPostNotificationValue.get(Integer.class);

    return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);

    } catch (Exception e) {

    e.printStackTrace();

    }

    2 有效可用 推荐使用

    NotificationManagerCompat manager = NotificationManagerCompat.from(App.getInstance().getContext());

    boolean isOpened = manager.areNotificationsEnabled();

    要注意的是,areNotificationsEnabled方法的有效性官方只最低支持到API 19,低于19的仍可调用此方法不过只会返回true,即默认为用户已经开启了通知。

    如果用户关闭了推送权限此时需要提示用户打开app详情页打开权限,代码如下:

    // 根据isOpened结果,判断是否需要提醒用户跳转AppInfo页面,去打开App通知权限

    Intent intent = new Intent();

    intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

    Uri uri = Uri.fromParts("package", App.getInstance().getApplication().getPackageName(), null);

    intent.setData(uri);

    startActivity(intent);

    展开全文
  • //这个是接入默认的极光推送之后(不是自定义的),通过pc端推送,在android端打印获取到的极光推送的channelId 。打印方法如下。 NotificationManager notificationManager = (NotificationManager) context....
  • 自己使用过的推送服务:极光推送(Jpush)、友盟推送、个推、阿里推送,其他的目前还没用用过,但使用起来应该都是比较类似的吧!本文将简单介绍下这次个推推送的接入流程,及相关的注意事项(个推开通厂商通道需要单独...
  • ![图片说明](https://img-ask.csdn.net/upload/201804/10/1523335601_892949.jpg) 请问有人知道这个权限问题吗?运行的时候自动添加debug导致错误
  • Unity之android推送

    千次阅读 2016-02-28 17:54:27
    最近在整理android相关的一些工作,想起很久前做的android推送功能,记得当时网上资料不多,新手做起来有些困难,因此决定写一篇详细的博客,供大家参考一下,0x01 交互 要想实现推送机制,那么第一步便是需要完成...
  • uniapp 判断是否开启推送权限

    千次阅读 2021-12-10 18:25:13
    //检查安卓推送权限 是否打开 function checkPushStatus(type) { if (type == 1) { //已不起作用 var main = plus.android.runtimeMainActivity(); var NotificationManagerCompat = plus.android.importClass...
  • Android推送目前常用的都是第三方推送服务,也可以自己搭建推送服务器来实现, 为了节约开发成本,目前主流的提供第三方推送服务的有:极光推送、个推、友盟、小米推送、百度推送等。 Android推送分为通知,透传...
  • Android 打开消息通知权限

    万次阅读 2018-11-05 14:35:14
    转载自https://blog.csdn.net/rocrocflying/article/details/78333256?locationNum=8&fps=1 ... 没有取得作者授权,如有不便,请联系我删除。 很多人或系统会关闭消息通知权限来组织手机天天就...
  • Android集成小米推送教程

    千次阅读 2021-02-22 16:29:27
    目前Android应用在后台杀死进程之后,就收不到通知了,想要接收消息推送,需要集成各个厂商的推送SDK,以小米为例 1.接入前准备 1. 登录小米开发者网站(https://dev.mi.com/console/appservice/),创建App并...
  • Android推送服务的几种实现方式

    千次阅读 2019-04-16 17:28:07
    现实生活中, 推送服务就像订杂志一样, 只要留下你的地址, 杂志就能如期送到你手里, 可以认为每个人都有唯一的一个地址, 但在目前的网络上, 这是办不到的, 因为不是每个人都有一个唯一的地址, 服务器想要给我们推送一...
  • android开发中 app的保活和推送到达都是个绕不过去的坎 他俩相辅相成 目前阿里推送的辅助推送通道可以进一步的帮助实现这个推送的到达率 ... 小米/华为/FCM/OPPO/VIVO/魅族 系统推送支持 1. 相关概念 ...
  • 付呗app作为一款我们公司主要的移动收单应用,为商户提供收款语音提醒功能,在推送语音方面面临着...面对商户日交易量增长,商户重需求,android碎片化严重,国产品牌手机严格控制后台推送等这些问题,android客...
  • 最近有时间在我们的应用中集成了华为,小米,OPPO,vivo四大平台的推送,一切顺利。 这里做一个记录, 开撸: 一、华为推送 1、下载HMS Agent套件,解压如下: 找到GetHMSAgent_cn.bat 打开如下,按照提示...
  • Android 多厂商推送集成

    千次阅读 2019-09-19 10:25:44
    好不容易集成完了个推的推送 SDK,美滋滋的准备划一会儿水,鸟哥吩咐为了保证应用杀死后也可以接收到推送,并且降低服务端的维护多渠道的开发成本,还得集成下个推的多厂商渠道。等等!!!什么是多厂商?! 我没...
  • Android11正式版发布了,那么什么时候用户朋友们可以收到Android11更新的推送消息呢?可能很多朋友还不太了解,今天小编就为大家带来关于Android11正式版发布什么时候推送Android11更新推送时间,希望大家能够喜欢...
  • 一、添加依赖//极光推送compile 'cn.jiguang.sdk:jpush:3.0.0'compile 'cn.jiguang.sdk:jcore:1.0.0'二、配置参数//defaultConfig{JPUSH_PKGNAME : applicationId,JPUSH_APPKEY : "501e0f31b4e163e1", //JPush上注册...
  • 这两天在研究推送的问题,后来...因为本人在集成的时候没注意导致推送失败:(1)注意两个权限的包名填写,我们有可能直接用案例上的拷贝到自己的manifest中时没有替换掉包名,切记,要替换成自己的项目的包名(红色部...
  • 原标题:Android应用推送角标设置方法Android最初原生是没有角标的,各大手机厂商推出了角标,适配也是相对麻烦,需要去适配各家,这里做了整理及使用方法先把工具类贴出来importandroid.app.Notification;...
  • 目前Android应用在后台杀死进程之后,就收不到通知了,想要接收消息推送,需要集成各个厂商的推送SDK,本次讲解华为集成最新教程 1.配置AppGallery Connect 1)注册成为开发者 在开发应用前需要在华为开发者联盟...
  • 为增加极光推送成功率 针对VIP用户需要联系商务 VIP专享高速推送通道、子账户管理、更高的推送频率、用户分群推送 联系商务 极光新的SDK,已集成了小米,华为,魅族的厂商通道功能
  • 但是,与那些库不同,推送库提供的推送服务具有较少的权限,并且它是开源的,从而保证了不滥用和不作恶。 是的,我说了,不要做恶。 我不喜欢来自某些“大公司”的库,这些库具有商业许可证,并且不是开源的。 我...
  • Android华为推送集成与测试

    千次阅读 2019-03-14 20:39:11
    Android推送一直是个大坑,好在统一联盟的的推送在测试了,希望早点一统推送,挖去开发者的心病吧。在此之前,该踩坑还是踩坑,按官方文档一步步踩吧。 集成 官方的开发准备 先集成必备套件 HMS SDK Agent ...
  • Android 极光推送快速接入

    千次阅读 2019-06-02 00:22:13
    一、关于极光推送 官网:极光推送 JPush 是一个大规模 App 推送平台,开发者集成 SDK 后,可以通过调用 API 推送消息。同时,JPush 提供可视化的 web 端控制台发送通知,统计分析推送效果。 JPush 全面支持 ...
  • unipush实现ios、android推送教程

    万次阅读 热门讨论 2020-01-19 19:43:01
    2.unipush支持很多推送模板,有兴趣了解的朋友可以在 官网 查看,因为要给ios实现推送的话只能使用透传模板,所以要实现给安卓和ios都可以推送的话,要在官网示例的透传模板代码上做些许修改; 3.即便代码和推送...
  • Android 推送静音

    2020-01-13 18:47:52
    Android8.0开始,推送的设置与过去的版本不一样了。 它的推送静音设置,并没有单独的静音选项来设置,而是通过对通知的重要性(Importance)来间接设置的。 重要性分为4类:Urgent、High、Medium、Low。其中Medium...
  • Android 集成极光推送和厂商通道

    千次阅读 2020-11-06 17:38:29
    Push 是经过考验的大规模 App 推送平台,每天推送消息量级为数百亿条。 开发者集成 SDK 后,可以通过调用 API 推送消息。同时,JPush 提供可视化的 web 端控制台发送通知,统计分析推送效果。 JPush 全面支持 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,024
精华内容 7,209
关键字:

安卓推送权限