描述:
无法获得 pushToken,仪表板上没有一个 ios 用户,我尝试了 evthing,我重新创建了证书、密钥,使用了配置工具,尝试了不同的真实设备。
在 android 上,一切都像魅力一样。
环境
latest 3.2.1
npm i --save react-native-onesignal
Version 9.3 (9E145)
我的 package.json
重现问题的步骤:
js代码
export default class App extends Component {
componentWillMount() {
OneSignal.setLogLevel(7, 0);
OneSignal.init('here my ONESIGNAL APP ID - I checked it twenty times', { kOSSettingsKeyAutoPrompt: true });
OneSignal.setSubscription(true);
OneSignal.enableSound(true);
OneSignal.enableVibrate(true);
OneSignal.inFocusDisplaying(2);
OneSignal.getPermissionSubscriptionState((response) => {
console.log('Received permission subscription state: ', response);
});
}
我收到了getPermissionSubscriptionState
回复:
{
emailAddress:null
emailSubscribed:false
emailUserId:null
hasPrompted:true
notificationsEnabled:true
pushToken:null
subscriptionEnabled:false
userId:null
userSubscriptionEnabled:true
}
当然,仪表板上没有一个 ios 用户。
另外我在 xcode 中看到日志
Called init with app ID: (null)
2018-05-14 11:21:03.636571+0300 rbtse[15320:6135130] Called init with app ID: xxxxxx-ea78-4b29-8b91-xxxxxxxxx (I changed app id)
2018-05-14 11:21:03.636758+0300 rbtse[15320:6135130] DEBUG: Downloading iOS parameters for this application
2018-05-14 11:21:03.642023+0300 rbtse[15320:6135181] VERBOSE: getNotificationTypes:mSubscriptionStatus: -1
2018-05-14 11:21:03.643531+0300 rbtse[15320:6135130] VERBOSE: registerForPushNotifications Called:waitingForApnsResponse: 1
2018-05-14 11:21:03.690752+0300 rbtse[15320:6135130] VERBOSE: oneSignalApplicationWillResignActive
2018-05-14 11:21:03.986984+0300 rbtse[15320:6135181] VERBOSE: network response (OSRequestGetIosParams): {
fba = 1;
}
2018-05-14 11:21:05.778574+0300 rbtse[15320:6135130] VERBOSE: oneSignalApplicationDidBecomeActive
2018-05-14 11:21:05.778918+0300 rbtse[15320:6135130] VERBOSE: getNotificationTypes:mSubscriptionStatus: -1
2018-05-14 11:21:05.792324+0300 rbtse[15320:6135130] VERBOSE: updateNotificationTypes called: 15
2018-05-14 11:21:05.792388+0300 rbtse[15320:6135130] VERBOSE: startedRegister: 1
我发现了同样的问题https://github.com/geektimecoil/react-native-onesignal/issues/502
所以我尝试降级到https://github.com/geektimecoil/react-native-onesignal/tree/3.1.4 - 按照所有步骤操作,现在它可以工作了!
所以最后一个版本不起作用
嗨,当您安装最新版本的 react-native-onesignal (3.2.2) 并运行react-native link react-native-onesignal
,您能否打开 Xcode 项目并验证 RCTOneSignal 是否正确显示为您项目中的依赖项?
pushToken
和userId
在真实设备上对我来说也是空的(在发布模式下)
[email protected]:
version "3.2.2"
resolved "https://registry.yarnpkg.com/react-native-onesignal/-/react-native-onesignal-3.2.2.tgz#d1ae1e95cc301b940120de29a29ae90f478c9a97"
dependencies:
invariant "^2.2.2"
(这次它不在我的 podfile 中)
@Jarred-Sumner 尝试从您的设备上卸载该应用程序,然后重新安装它,它是否提示您接受推送通知权限?
另外,只是为了检查一下,您确实在项目设置 > 功能中启用了推送通知功能,对吗?
@Jarred-Sumner 尝试从您的设备上卸载该应用程序,然后重新安装它,它是否提示您接受推送通知权限?
是的
另外,只是为了检查一下,您确实在项目设置 > 功能中启用了推送通知功能,对吗?
是的
我降级为v3.1.4
,现在它发送pushToken
和userId
@Jarred-Sumner 为了更好地理解这个问题,ID 为空,但推送通知真的有效吗? 他们不应该,但我想仔细检查一下。
另外,你可以尝试更新到3.2.2,用JS初始化,然后在调用init之前调用OneSignal.setLogLevel(6, 0)
吗? 你能告诉我你是否看到打印到控制台的任何错误吗?
问题在 3.2.2 上仍然存在。
设置日志级别打印以下输出
使用应用程序 ID 调用 init:(空)
(然后在日志下面的某个地方)
使用应用程序 ID 调用 init: (my-app-id)
但是 userId 仍然为空。 如果有帮助,我已经使用 CocoaPods 包含了该库
@hhunaid预计应用 ID 第一次为空(也许我们应该删除第一个日志语句以避免混淆)。
在用户接受真实 iOS 设备上的推送权限之前,用户 ID 也应该为空。 你能确认是这种情况吗? 如果是这样,你能不能发布一个链接到至少 15 秒的 Xcode 日志输出的日志级别(确保在调用 init 之前调用 setLogLevel)
@Nightsd01这不仅仅是 LOG 语句。 实际上有一个对具有空 appId 的 OneSignal 初始值设定项的调用。 我刚刚检查了一下,如果我在initOneSignal
方法中删除该 init 行,一切正常。
@hhunaid是的,预计对初始化程序的第一次调用将使用空应用 ID,这是我们的包装器 SDK 的工作量。 你是说如果你删除第一个调用,“一切正常”......?
为了排除您可能进行的其他更改,您能否再次取消对 initOneSignal 的注释以验证它停止工作...?
你可以发布你的package.json
以便我可以看到你使用的依赖项吗?
我已经尝试过使用和不使用提到的代码段,现在我可以自信地说它确实是罪魁祸首。 至少在我的应用程序中。
删除它会给我一个有效的 playerId 并且我的设备显示在 OneSignal 仪表板上。 这是以前没有发生的。
同样在这里。 PushToken 始终为空。 我将粘贴下面的屏幕截图。
我的 package.json 如下。
"abortcontroller-polyfill": "^1.1.9",
"immutability-helper": "^2.7.0",
"mobx": "^4.2.1",
"mobx-react": "^5.1.2",
"moment": "^2.22.1",
"react": "^16.3.2",
"react-native": "^0.55.4",
"react-native-amplitude-analytics": "^0.1.15",
"react-native-animatable": "^1.2.4",
"react-native-audio-recorder-player": "^1.0.15",
"react-native-iap": "^1.0.1",
"react-native-image-picker": "^0.26.10",
"react-native-linear-gradient": "^2.4.0",
"react-native-loading-spinner-overlay": "^0.5.2",
"react-native-localization": "^1.0.7",
"react-native-marquee": "^0.3.1",
"react-native-modalbox": "^1.4.2",
"react-native-onesignal": "^3.2.2",
"react-native-permissions": "^1.1.1",
"react-native-pinch-zoom-view": "^0.1.6",
"react-native-sentry": "^0.36.0",
"react-native-status-bar-height": "^2.0.0",
"react-native-swiper": "^1.5.13",
"react-navigation": "^2.0.1",
"serializr": "^1.2.0"
@doobolab您正在使用 JS 初始化,对吗?
你能告诉我你在你的项目中在哪里调用OneSignal.init()
吗?
对于我的生活,我_无法_重现这个问题。 如果有人可以在演示项目中重现此问题并将其发布,我们将能够_更快__更快地解决此问题。
@tavriaforever嗨,所以降级并调用 onesignal.init('app id') 会起作用吗?
同样的问题在这里,任何解决方案?
"react": "16.3.1",
"react-native": "0.55.3",
"react-native-onesignal": "^3.2.0",
@Nightsd01
我在我的根index.tsx
中调用它包装 RootStackNavigator。
class App extends React.Component {
public componentDidMount() {
OneSignal.init('****');
OneSignal.addEventListener('received', this.onReceived);
OneSignal.addEventListener('opened', this.onOpened);
OneSignal.addEventListener('ids', this.onIds);
OneSignal.enableVibrate(true);
OneSignal.enableSound(true);
.....
public render() {
return (
<Provider
store={ appStore }
user={ userStore }
player={ playerStore }
>
<View style={styles.container}>
<RootStackNavigator />
</View>
</Provider>
);
仍然遭受获得空令牌的痛苦。
@Nightsd01这里也一样。
在 RCTOneSignal.m 中使用appId:nil删除 init 有帮助
@Nightsd01我刚在 android 上试过,android 也有同样的问题。
我猜 JS 端初始化不是一个好主意。
我知道它使网络开发人员或没有本地背景的人更容易使用该库。
@hhunaid听起来我应该降级?
@doobolab @408dev是的,如果您遇到此问题,我建议您暂时降级到 3.1.4,直到我们解决此问题。 道歉。 请记住,JS init 在 3.1.4 中不受支持,因此您需要按照指南将本机初始化代码添加到您的项目中。
@hhunaid它确实让
作为更新,我们已经能够重现此问题并确定了原因,我们将很快推出更新以解决该问题。
大家好 - 这个问题已经在一个新的 PR (#512) 中得到解决。 我们希望在接下来的一两个小时内将其合并并发布新的更新。 谢谢你的耐心!
大家好@dooboolab @hhunaid @408dev @el-lsan @neo125874 @Jarred-Sumner
新的更新 (3.2.3)已经发布,应该可以解决这个问题。 如果您再次看到此问题(或其他问题),请随时告诉我,我们很乐意进行调查。
@Nightsd01
我正在使用
"react": "16.3.1",
"react-native": "0.55.3",
"react-native-onesignal": "^3.2.3",
在真实设备上一切正常,但我仍然在simulators
上随机收到null userId
simulators
并且我没有看到任何设备被添加到我的播放器列表中! (到目前为止,我测试了 50 次以上,只有 2 次有效!)
我尝试清理和重建应用程序以及rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
但我仍然没有从OneSignal.getPermissionSubscriptionState
获得预期的状态
{ userSubscriptionEnabled: true,
subscriptionEnabled: false,
pushToken: null,
emailAddress: null,
userId: null,
hasPrompted: true,
notificationsEnabled: true,
emailUserId: null,
emailSubscribed: false }
@el-lsan 这是预期的。 这是 Apple 的限制,而不是我们的限制。 iOS 模拟器无法接收推送通知。 他们不会获得 APNS 推送令牌,也不会注册 OneSignal。
如果您正在测试推送通知,则必须在真实的 iOS 设备上进行,无论您是否使用 OneSignal。
@Nightsd01
抱歉,我上一个帖子不是很清楚。 我的意思不是接收模拟器的推送,而是列出模拟器设备。
因此,在OneSignal.init('ONESIGNAL_APP_ID');
我希望模拟设备会以Ios Simulator Unsupported
标签列在我的订阅用户中,如下面的屏幕截图所示:
这是列出的模拟器的 OneSignal.getPermissionSubscriptionState 的响应:
但是大多数时候在模拟器上初始化失败,我在https://onesignal.com/apps/ONESIGNAL_APP_ID/players
下看不到它
@el-lsan 我有同样的问题推送令牌为空,您找到解决方案了吗?
@adirzoari更新到"react-native-onesignal": "^3.2.3"
该问题已针对真实设备修复,如果您的意思是为模拟器接收空令牌,我相信应该是这样。
另一方面,我希望为模拟器设置userId
,但由于某些奇怪的原因,它大部分时间都失败并返回 null!
我使用真实设备并获得空令牌
@adirzoari这很奇怪! 尝试清除缓存rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
并仔细检查步骤
@el-lsan pushToken 为空,但在 userId 中有唯一的字符串。 在一个信号中我得到
Google Play 服务库错误
我在 3.2.7(模拟器 - 正常/真实设备 - NOK)上遇到了同样的问题,但是按照@el-lsan 的建议清理缓存让它运行起来没有问题
@Nightsd01这里也一样。
在 RCTOneSignal.m 中使用appId:nil删除 init 有帮助
嗨,请您添加以下更改的图像。
@adirzoari更新到
"react-native-onesignal": "^3.2.3"
该问题已针对真实设备修复,如果您的意思是为模拟器接收空令牌,我相信应该是这样。另一方面,我希望为模拟器设置
userId
,但由于某些奇怪的原因,它大部分时间都失败并返回 null!
嗨,我在模拟器中得到pushToken:null ,并且只得到模拟器的 userId。
我会得到真实设备的pushToken吗,请确认,(我是否必须担心模拟器中的pushToken null问题?)。
最有用的评论
大家好@dooboolab @hhunaid @408dev @el-lsan @neo125874 @Jarred-Sumner
新的更新 (3.2.3)已经发布,应该可以解决这个问题。 如果您再次看到此问题(或其他问题),请随时告诉我,我们很乐意进行调查。