Open AlwaysLoveme opened 3 years ago
为了方便使用,我将它Fork了一份,感谢大牛!!! Capacitor 使用 npm 安装:
npm i cordova-plugin-jpush-capacitor@latest
ionic cap sync
ionic cap add ios
ionic cap sync
Xcode打开IOS项目,找到如下图中的jpush配置文件,替换成自己项目的APPKEY:
ionic cap add android
ionic cap sync
AndroidStudio打开生成的Android项目,找到如下图的标记文件,将APPKEY替换成自己的:
TS中使用,我是用ionic+vue3+capacitor, 纯属用来试水,新建src/utils/jpush.ts文件:
import { isPlatform } from '@ionic/vue';
class Jpush {
jpush: any;
constructor() {
if (window.JPush) {
this.jpush = window.JPush;
this.jpush.setDebugMode(true);
if (isPlatform('ios')) {
window.JPush.startJPushSDK();
}
this.jpush.init();
}
}
getRegistrationID() {
return new Promise(resolve => {
this.jpush.getRegistrationID(function (rId: string) {
resolve(rId);
console.log("JPushPlugin:registrationID is " + rId);
})
})
}
// 设置别名
setAlias(alias: string) {
return new Promise(((resolve, reject) => {
this.jpush.setAlias({
alias,
sequence: new Date().valueOf(),
}, (res: { alias: string, sequence: number }) => {
console.log('别名设置成功: ', res);
resolve(res);
}, (err: { code: number, sequence: number }) => {
console.log('别名设置失败: ', err);
setTimeout(() => this.setAlias(alias), 3000);
reject(err);
})
}))
}
// 设置角标 只限IOS
setBadge(badge: number) {
if (isPlatform('ios')) {
this.jpush.setBadge(badge);
}
}
}
export default Jpush
App.vue中使用:
<template>
<ion-app>
<ion-router-outlet />
</ion-app>
</template>
<script lang="ts">
import { Plugins } from "@capacitor/core";
import { defineComponent, onMounted } from 'vue';
import { IonApp, IonRouterOutlet } from '@ionic/vue';
import jpush from "@/utils/jpush";
const { SplashScreen } = Plugins;
export default defineComponent({
name: 'App',
components: {
IonApp,
IonRouterOutlet
},
setup() {
onMounted(() => {
// 由于是cordova插件,需要在deviceready回调后才能使用,用过Cordova的都懂
document.addEventListener('deviceready', () => {
new jpush().setAlias('app');
})
setTimeout(() => SplashScreen.hide(), 2000);
})
}
});
</script>
我测试下,AndroidManifest.xml的配置放在cordova的话应用进入后台就接收不到推送,放在app的话就可以
ios下能获取Registration ID, 但是无法收到通知... 后台提示消息送达了, 但是手机上没有通知. 按照官方文档说的各种办法试了不好用.
ios下能获取Registration ID, 但是无法收到通知... 后台提示消息送达了, 但是手机上没有通知. 按照官方文档说的各种办法试了不好用.
为啥我获取不到,安卓正常
ios下能获取Registration ID, 但是无法收到通知... 后台提示消息送达了, 但是手机上没有通知. 按照官方文档说的各种办法试了不好用.
为啥我获取不到,安卓正常
ios比Android多一句这个 window.JPush.startJPushSDK();
ios下能获取Registration ID, 但是无法收到通知... 后台提示消息送达了, 但是手机上没有通知. 按照官方文档说的各种办法试了不好用.
为啥我获取不到,安卓正常
ios比Android多一句这个 window.JPush.startJPushSDK();
To Native Cordova -> JPushPlugin startJPushSDK JPushPlugin19045247 ["options": []] To Native Cordova -> JPushPlugin initial JPushPlugin19045248 ["options": []] To Native Cordova -> JPushPlugin getRegistrationID JPushPlugin19045249 ["options": []] ⚡️ [log] - JPush Callback Error: null
苍天,还是不行
ios下能获取Registration ID, 但是无法收到通知... 后台提示消息送达了, 但是手机上没有通知. 按照官方文档说的各种办法试了不好用.
今天我也发现了,昨天刚集成好的时候,在极光后台推送了,IOS能正常接收到推送,今天不行了,Xcode控制台看了下,可能是DeviceToken 一直获取不到,没有回传给极光后台;
好用了!!! , 参考极光官方的swift文档, 在根目录APPDelegate.swift中调用极光的registerDeviceToken方法 https://github.com/jpush/jpush-swift-demo
好用了!!! , 参考极光官方的swift文档, 在根目录APPDelegate.swift中调用极光的registerDeviceToken方法 https://github.com/jpush/jpush-swift-demo
我引入报错啊
好用了!!! , 参考极光官方的swift文档, 在根目录APPDelegate.swift中调用极光的registerDeviceToken方法 https://github.com/jpush/jpush-swift-demo
我引入报错啊
需要按照文档生成bridge文件, 并在bridge中引入JPushService.h
参见我的工程 链接: https://pan.baidu.com/s/1Aj2j_FpQH8-tYCq7b7lujg 提取码: bqbg 复制这段内容后打开百度网盘手机App,操作更方便哦
好用了!!! , 参考极光官方的swift文档, 在根目录APPDelegate.swift中调用极光的registerDeviceToken方法 https://github.com/jpush/jpush-swift-demo
我引入报错啊
需要按照文档生成bridge文件, 并在bridge中引入JPushService.h
参见我的工程 链接: https://pan.baidu.com/s/1Aj2j_FpQH8-tYCq7b7lujg 提取码: bqbg 复制这段内容后打开百度网盘手机App,操作更方便哦
感谢 感谢,终于可以了,像微信,支付宝支付完了回到app,capacitor不会执行js的成功失败事件,你的会吗?现在只能靠订单支付轮询跳转
好用了!!! , 参考极光官方的swift文档, 在根目录APPDelegate.swift中调用极光的registerDeviceToken方法 https://github.com/jpush/jpush-swift-demo
可以的,我整合一下,多谢
ios的你们有报这个警告吗
ios的你们有报这个警告吗
有的,但是这个应该不影响业务,除非你要统计通知的点击量
真机运行正常,模拟器就会报错,后面注释了这块函数才可以运行
真机运行正常,模拟器就会报错,后面注释了这块函数才可以运行
推送你在真机调试啊,为什么要在模拟器调试推送呢
真机运行正常,模拟器就会报错,后面注释了这块函数才可以运行
推送你在真机调试啊,为什么要在模拟器调试推送呢
不是要调试,是一启动应用就卡死了
@menhal 我安装的 这个插件,没有 startJPushSDK() 方法呢?
完全获取不到 Registration ID,
import { JPush } from '@jiguang-ionic/jpush/ngx';
没有你说的这个方法呢?
@jiguang-ionic/jpush/ngx
@jiguang-ionic/jpush/ngx 这个包没有暴露出这个方法,不适用于Capacitor,
支持厂商通道吗?
@AlwaysLoveme 请问,我用ionic 6 + Capacitor +angular 怎么才能 设置 startJPushSDK() 方法呢?
@AlwaysLoveme 请问,我用ionic 6 + Capacitor +angular 怎么才能 设置 startJPushSDK() 方法呢?
集成了上面我说的那个改过的极光插件,在deviceready事件中直接window.JPush.startJPushSDK() 就可以,android平台不需要手动初始化
支持厂商通道吗?
厂商通道没试过,应该是可以的,
类型“Window & typeof globalThis”上不存在属性“JPush”,这个问题怎么解决?
类型“Window & typeof globalThis”上不存在属性“JPush”,这个问题怎么解决?
简单粗暴的方法:(window as any).JPush 或者定义类型:interface Window { JPush: any }
@AlwaysLoveme I see, 谢谢你
我运行下面命令安装该插件并同步到iOS npm i cordova-plugin-jpush-capacitor@latest ionic cap sync ios
在XCode编译的时候就会报 Undefined symbols for architecture x86_64: "_OBJCCLASS$_JCORELog", referenced from: objc-class-ref in libjpush-ios-3.7.4.a(JPUSHService.o) objc-class-ref in libjpush-ios-3.7.4.a(JPUSHHelper.o) "_OBJCCLASS$_JCOREIntegrate", referenced from: objc-class-ref in libjpush-ios-3.7.4.a(JPUSHService.o) "_kJPFNetworkDidReceiveMessageNotification", referenced from: -[JPushPlugin initPlugin] in JPushPlugin.o
请问有人遇到过吗?
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
node_modules对应包中没找到KEY的配置。
后面找到办法了,我在main\AndroidManifest.xml
中添加了:
<meta-data android:name="JPUSH_APPKEY" android:value="xxxxxx" tools:replace="android:value" />
,
它会替换capacitor-cordova-android-plugins下AndroidManifest.xml中的JPUSH_KEY配置。
现在能收到推送消息了。
非常感谢,这个issue帮了大忙。
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
node_modules对应包中没找到KEY的配置。 后面找到办法了,我在
main\AndroidManifest.xml
中添加了:<meta-data android:name="JPUSH_APPKEY" android:value="xxxxxx" tools:replace="android:value" />
, 它会替换capacitor-cordova-android-plugins下AndroidManifest.xml中的JPUSH_KEY配置。 现在能收到推送消息了。 非常感谢,这个issue帮了大忙。
OK,不客气
@AlwaysLoveme 你好,我用的是ionic6.3.9+capacitor4.6.1+ng14.1.0,添加cordova-plugin-jpush-capacitor之后(没有其它jpush依赖),执行ionic cap sync,重新打包时,提示这个错误
是还需要装jpush的相关依赖么?
@AlwaysLoveme 你好,我用的是ionic6.3.9+capacitor4.6.1+ng14.1.0,添加cordova-plugin-jpush-capacitor之后(没有其它jpush依赖),执行ionic cap sync,重新打包时,提示这个错误
是还需要装jpush的相关依赖么?
我在npm中找到原因了cordova-plugin-jpush-capacitor 安装了这两个插件后。可以正常打包了
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
可以在capacitor.config.ts中配置么?就像@capacitor/splash-screen
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
可以在capacitor.config.ts中配置么?就像@capacitor/splash-screen
这个暂不支持,因为插件还是用 cordova 开发的,无法支持在 capacitor.config.ts 读取,除非基于 Capacitor重新开发此插件
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
可以在capacitor.config.ts中配置么?就像@capacitor/splash-screen
这个暂不支持,因为插件还是用 cordova 开发的,无法支持在 capacitor.config.ts 读取,除非基于 Capacitor重新开发此插件
好的,٩( 'ω' )و 蟹蟹
android\capacitor-cordova-android-plugins\src\main\AndroidManifest.xml 我项目的这个文件,修改后,运行 capacitor run 时,总是会被重新生成,里面设置的APP_KEY会被替换成undefined,这个该怎么解决啊。
在 node_modules 里面改APP_KEY,
可以在capacitor.config.ts中配置么?就像@capacitor/splash-screen
这个暂不支持,因为插件还是用 cordova 开发的,无法支持在 capacitor.config.ts 读取,除非基于 Capacitor重新开发此插件
好的,٩( 'ω' )و 蟹蟹
我基于capacitor重新开发了此插件,欢迎使用,https://github.com/AlwaysLoveme/capacitor-plugin-jpush
最近找到一个大牛写的适配capacitor的插件,传送门:https://github.com/netsesame2/cordova-plugin-jpush