Jeepeng / react-native-xinge-push

信鸽推送React Native版,支持华为、小米、魅族官方推送通道
Apache License 2.0
78 stars 29 forks source link

升级到 0.6后, ios 不调用 register 方法 #17

Closed stevenxyj closed 6 years ago

stevenxyj commented 6 years ago

原来用 react-native-xinge-push 0.3 版本上,android, ios 推送都正常。 升级到 0.6 版 , android 版本推送正常, ios 上连 register 都不调用 0.6 版时,信鸽iOS SDK 升级到 v3.1.0,同时按说明的方法修改了 AppDelegate.m 中代码。

_initPush() {
    let accessId;
    let accessKey;

    if (IS_ANDROID) {
        accessId = 00000000;
        accessKey = 'xxxxxxxxxx';
    } 
    else {
        accessId = 0000000000;
        accessKey = 'xxxxxxxxx';
    }

    XGPush.enableDebug(true);
    XGPush.init(accessId, accessKey);

    XGPush.register('userid');
}
_onRegister(deviceToken) {
    Alert.alert('_onRegister', 'deviceToken: ' + deviceToken);
}

componentDidMount() {
    XGPush.addEventListener('register', this._onRegister);
    XGPush.addEventListener('notification', this._onNotification);
    if (IS_ANDROID) {
        XGPush.addEventListener('message', this._onMessage);
    }
    }

请问一下是会是什么原因?

调试下来好像 react-native-xinge-push-0.6\ios\XGPush\XGPushManager.m 中的 + (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 方法没有被调用。

但是 AppDelegate.m 中增加的 - (void)application:(UIApplication )application didRegisterForRemoteNotificationsWithDeviceToken:(NSData )deviceToken 方法可以被用

charmtiger commented 6 years ago

我也是有此问题

charmtiger commented 6 years ago

image 升级到0.6之后 android 调用 register 便会报错 代码如下

XGPush.register('mengti').then(result => {
      // do something
      // 或者在 onRegister 里处理,效果一样
    }).catch(err => {
    });
stevenxyj commented 6 years ago

charmtiger : android 下 register 报错

~\node_modules\react-native-xinge-push\android\src\main\java\com\jeepeng\react\xgpush\PushModule.java 中的 registerPush 方法要修改,改成如下就可以

@ReactMethod
public void registerPush(String account, final Promise promise) {
    XGPushManager.registerPush(this.reactContext, account, new XGIOperateCallback() {
charmtiger commented 6 years ago

@stevenxyj 多谢,这样是可以的

musicode commented 6 years ago

@Jeepeng 作者快来改 bug 哦

charmtiger commented 6 years ago

ios 调用 register 没有反应, 版本0.6

XGPush.register('mengti').then(result => {
      // do something
      // 或者在 onRegister 里处理,效果一样
      alert('register resolve')
    }).catch(err => {
      alert('register reject')
    });
musicode commented 6 years ago

在这请教大家一个问题,如果手机收到多条通知,点击其中一条,怎样让其他通知一起消失呢

musicode commented 6 years ago

@Jeepeng 最近会改这个 bug 么?

charmtiger commented 6 years ago

@musicode 信鸽貌似没有提供这个api,极光倒是有 clearAllNotifications

musicode commented 6 years ago

难道用了信鸽,就没法实现这个功能么,这有点坑啊

Jeepeng commented 6 years ago

@stevenxyj 关于register不调用问题,升级后漏写了,需要在AppDelegate.m添加以下代码

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [XGPushManager didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
musicode commented 6 years ago

@Jeepeng 还有上面提到的 registerPush 少写一个参数的问题

此外,是否能增加一个清空所有通知的接口呢?使用场景是,如果用户收到很多通知,点击一条进 app,可以调用该接口清空所有通知。

Jeepeng commented 6 years ago

@charmtiger @musicode 关于 registerPush 报错问题,是因为最新的SDK 将这个方法拆分开了:

// 启动并注册APP,同时绑定账号,推荐有帐号体系的APP使用(3.2.2不包括3.2.2之前的版本使用,有注册回调
void registerPush(Context context, String account, XGIOperateCallback callback )
// 启动并注册APP,同时绑定账号,推荐有帐号体系的APP使用(3.2.2以及3.2.2之后的版本使用,此接口会覆盖设备之前绑定过的账号,仅当前注册的账号生效)
void bindAccount(Context context, String account, XGIOperateCallback callback)

java 改了,我 js 这边忘记改了,目前已经修复

charmtiger commented 6 years ago

@Jeepeng 别忘了发布一下哈,另外 ios 注册无反应也是这个原因吗?

Jeepeng commented 6 years ago

@charmtiger 注册无反应问题前面的回复有提到,我再把其他 bug 修修,今天晚上发布

charmtiger commented 6 years ago

@Jeepeng 谢谢!辛苦了!

musicode commented 6 years ago

因为之前在这个 issue 问了一次关于清空通知的问题,最近我问信鸽客服,得到一下答复:

不好意思,重新更新一下,源代码是有设置了的,我们目前支持清除所有信鸽通知:public static void clearLocalNotifications(Context context) 

@Jeepeng 有空是否可以加上这个接口的支持呢