ããã«ã¡ã¯ç§ã¯Main.jsã«å«ããOneSignalControllerãæã£ãŠããŸã
class OneSignalController extends Component {
props: Props
constructor(props) {
super(props);
}
componentWillMount() {
OneSignal.addEventListener('opened', this.onOpened);
OneSignal.addEventListener('ids', this.onIds);
}
componentWillUnmount() {
OneSignal.removeEventListener('opened', this.onOpened);
OneSignal.removeEventListener('ids', this.onIds);
}
onIds = (device) => {
this.props.dispatch_set_device_id(device.userId);
}
render() {
return null;
}
}
redux-persist
ã䜿çšããŠããŸããã rehydration
ãå®äºããåã«ã¢ããªãèµ·åããããããŸããã
ã ããç§ã¯ç§ã®index.android.js
ãããããããã§ã
...
this.state = { rehydrated: false };
}
componentWillMount() {
Storage.restoreData(store, {}, () => {
this.setState({ rehydrated: true });
});
}
render() {
return (
this.state.rehydrated === true
? <Provider store={store}>
<View style={styles.container}>
<Main />
</View>
</Provider>
: null
);
}
ããããoneSignalãå®è¡ããŠãã onIds
é¢æ°ã¯ããªã¬ãŒãããªããªããŸãã
onIdsã«åé¡ããããŸãããåŒã³åºãããªãããšããããŸãã ãã ããããã¯redux-persistãšã¯é¢ä¿ãããŸããã
OneSignalãµãŒããŒã«å°éã§ããªãããã§ããïŒ ãã ããDocã¯ããšã«ããnullãè¿ãå¿ èŠããããšèšã£ãŠããŸãã ãã®åé¡ã¯æ°åã®è©Šè¡ããšã«çºçããŸãããäžè²«æ§ããããŸããã ãã®ã€ãã³ããä»ã©ãã»ã©ä¿¡é Œã§ãããããããŸããã
ä»æ¥ãã·ãã¥ã¬ãŒã¿ãŒããã§ãã¯ããŠããŸããããOneSignal.requestPermissionsïŒïŒãä»ããŠã¢ã¯ã»ã¹èš±å¯ãåãå ¥ããåŸããonIdsãã€ãã³ããååŸããã®ã«10ç§ããããŸããã
ã¢ããªå ã®å¥ã®å Žæã«åãã€ãã³ããé 眮ããŠãæŽæ°ãããã³ã«IDãååŸã§ãããã©ããã確èªããŸããïŒãã¢ãããžã§ã¯ãã®åäœïŒãããŸã£ããæ©èœããŸããã
ããã«ããç»é²ããããã€ãã³ãããã©ã®ãããªå Žåã§ãããªã¬ãŒãããªãåå ã«ã€ããŠäœã§ãããã¯æ確ã§ã¯ãããŸããã
çãããã¢ããªãéããŠå床éãããšãã«ã€ãã³ããåŒã³åºãããããšã¯ãããŸããã IDãå©çšå¯èœãªå Žåãããã¯æ¯åããªã¬ãŒãããã¹ãã§ã¯ãããŸãããïŒ
ãã1ã€ã®åé¡ã¯ããŠãŒã¶ãŒãããã·ã¥éç¥ãåãå ¥ãããšã5åã«1åïŒå¹³åïŒããªã¬ãŒãããªãããšã§ãã æåã®åé¡ã«åé¡ããªããã°ãããã¯åé¡ã«ãªããªãã®ã§ã次ã«ãŠãŒã¶ãŒãã¢ããªãéãããšãã«IDãååŸã§ããŸãã
ãã®libã䜿ãå§ããã°ããã§ãåãåé¡ãçºçããŸããã ããã§ãredux-persistã䜿çšããŠããŸãïŒ ãããŠãå°ãæãäžããåŸãç§ã¯ãããredux-persistã«é¢ä¿ããŠããŸãã ãŸãã¯ã ids
ã€ãã³ããžã®é
延ãµãã¹ã¯ãªãã·ã§ã³ã
次ã®ã³ãŒãã¯ã index.xxx.js
ã«æ£ããé
眮ãããšïŒã€ãŸããã¢ããªã®èµ·åã®éåžžã«æ©ã段éã§ïŒãã¢ããªãåèµ·åãããã³ã«ããªã¬ãŒãããŸãã
//... other imports
import OneSignal from "react-native-onesignal";
OneSignal.addEventListener('ids', (device) => {
console.log("[OneSignal]>>ids: ", device);
});
// ....
AppRegistry.registerComponent ....
ãã ããredux-persist rehydration =>ã®åŸã«OneSignal.addEventListener('ids' ...
ãåŒã³åºãããå Žåã¯ãã³ãŒã«ããã¯ã«å¥ããåããŸãã
ä¿®æ£ã¯ãä»ã®ãšãããç§ãïŒããã¯ïŒïŒä¿®æ£ããæ¹æ³ã§ãïŒçŸåšã®react-native-onesignalãªãªãŒã¹3.0.3ïŒïŒ
OneSignal.configure()
ãšåŒã°ããææžåãããŠããªãjsåŽã®ã¡ãœãããããããã€ãã£ãåŽïŒ androidããã³ios ïŒãids
ã€ãã³ããjsåŽã«ãããŒããã£ã¹ãããŸãã
ãããã£ãŠããidsãã®ã€ãã³ããªã¹ããŒãè¿œå ããçŽåŸã«åŒã³åºããŸãã
// ... after store rehydration complete ...
OneSignal.addEventListener('ids', (device) => {
// ... do whatever with device
});
OneSignal.configure(); // add this to trigger `ids` event
ãã€ãã£ãåŽã§ã©ã®ããã«å®è£
ãããŠããããè©äŸ¡ãããšãããããã2å以äžåŒã³åºãã®ã¯ããªãå®å
šãªããã§ãïŒå
éšã€ãã³ããã³ãã©ãŒã眮ãæããã ãã§ããã以äžã¯äœæãããŸããïŒã ãã ããæ¯åids
ãªã¹ããŒãèµ·åããããšã«æ³šæããŠãã ããã
ã¢ããªã®èµ·ååŸã«ãªã¹ããŒãè¿œå ããããšãã«ãä»ã®ã€ãã³ããæ©èœãããã©ããçåã«æããŸãã
ããã¯ãããããå éšãµãã¹ã¯ã©ã€ããŒãã¥ãŒãæã€react-native-onesignallibã«ãã£ãŠããé©åã«ä¿®æ£ãããã¯ãã ãšæããŸãã ã€ãã³ããªã¹ããŒã®ç»é²ãé ããŠãããã®ã·ããªãªã§ã¯ãè¿ãå°æ¥ããã«ãªã¯ãšã¹ããå®è¡ããŠã¿ãŸãã
OneSignal.configureïŒïŒ;ãåŒã³åºãå Žåã€ãã³ããªã¹ããŒã®åã§ã¯ãããã¯æ£åžžã«æ©èœããŸãã ãããredux-persistã§ãããã©ããããããããŸããã
onIdsã€ãã³ããçºçããªããšããäžå®å®ãªåäœã§ãã®åé¡ãçºçããããšãç°¡åã«èª¬æããŸãã
ã¢ããªã®èµ·åã®å°ãåŸã«ããŒããããå¥ã®ã³ã³ããŒãã³ãã«configureé¢æ°ãè¿œå ããã®ã§ã1ã€ã®onIdsã€ãã³ããçºçããããšãããã°ã2ã€çºçããããšããããŸãïŒå ã®ã€ãã³ãããŸã çºçããããšãããããïŒã
ç§ã¯ããããªãªãŒã¹ãã«ãã§ãã¹ãããŠããããçŸåšAndroidãReact Native 0.38ã§ãããã°ããŠããããšã¯æ³šç®ã«å€ããŸããä»ã®äººãããã¯åé·ãªæ°žç¶çãªåé¡ã§ãããšç€ºåããŠããã®ã§ãç§ãããã䜿çšããŠããããšã«æ³šæããŠãã ããã
configureãè€æ°ååŒã³åºãããšã«å®éã«æªåœ±é¿ããªãå Žåã¯ãåé¡ãªããšæããŸãã ãŠãŒã¶ãŒããšãã©ãã¢ããªã±ãŒã·ã§ã³ãåéãããã³ã«ãAPIã«2åãããããããšã«å¯ŸåŠããŸãã
ãããè¡ãããšã§äœããã®åŠå®çãªçµæïŒéå¹çæ§ä»¥å€ïŒãããå Žåãããã¯ç§ã«ãšã£ãŠå°éåéã§ã¯ãªãã®ã§ãç§ã«ç¥ãããŠãã ããã
ç§ãåãã§ãçç£äžã§ãã ;ïŒã¯ããAPIã2ååŒã³åºããŠããŸãã :(
ããã«ã¡ã¯@ edo1493 ãç§ãåãåé¡ãæ±ããŠããŸãã APIã2ååŒã³åºãã«ã¯ã©ãããã°ããã§ããïŒ
ã¢ããªããªããŒãããªããšïŒéçºã¢ãŒãïŒãã€ãã³ãã¯35ç§åŸã«ã®ã¿çºçããããšã«æ°ä»ããŸãã
ç·šéïŒ
ããã¯ãã¢ããªã®æåã®ããŒãæã«çºçããŸã
ãã©ãããã©ãŒã ïŒAndroid
ãã¶ã@ jkasten2ãããã§åœ¹ç«ã€ã§ããããç§ã¯ããããã®ç¹å®ã®ã©ã€ãã©ãªã®åé¡ã§ã¯ãªããšæããŸãã
@ edo1493 onIds
ã¯ãOneSignalãµãŒããŒãããã¬ãŒã€ãŒ/ãŠãŒã¶ãŒIDãååŸã§ããªãéãèµ·åããŸããã ããã¯ã userId
ãnull
userId
ãªãããšã¯æ±ºããŠãªãããšãæå³ããŸãããAPN / FCMãæéå
ã«å¿çããªãå Žåã pushToken
ã¯å¯èœæ§ããããŸãã åé¡ã¯ãæ¥ç¶ã«é¢é£ããŠããããã§ãã ãã€ãã£ãã³ãŒãã§setLogLevel
ãåŒã³åºããŠããããã¯ãŒã¯åŒã³åºãã®ãã°ãæå¹ã«ããŠã¿ãŠãã ããã Androidã§åé¡ãåçŸã§ããå Žåã¯ãlogcatã§è¡ãããåŒã³åºããšiOSã§ã®Xcodeãã°ã®è©³çŽ°ã衚瀺ãããŸãã
ãã ãããã®åé¡ã¯redux-persist
é¢é£ããŠããããã§ãããOneSignalãã©ã°ã€ã³ã䜿çšããjavascriptã¬ã€ã€ãŒã®åé¡ãæå³ããŠããå¯èœæ§ããããŸãã @avishayil redux-persist
åé¡ãåçŸããŠãåé¡ãç¹å®ããŠã¿ãŠãã ããã ãããžã§ã¯ããå
±æãããããããã°ãè©Šãããšãã§ããŸãã
@ jkasten2çŸåšããããžã§ã¯ãã§redux-persistã䜿çšããŠããªããããåçŸããæéãèŠã€ããã®ãé£ããã§ãããã ããã«ãã人ã®äžäººããåçŸãããåé¡ã§redux-persistã䜿çšããŠãªããžããªãå ±æããæ¹ãç°¡åã ãšæããŸãã
reduxã䜿çšããŠããããããã¯ãŸã åé¡ã§ãã
ããããšã@rcugut ïŒ OneSignal.configure()
ããã«ä¿®æ£ããŠãã ããïŒ ç§ãredux-persist
ãŸãïŒ ãããä¿®æ£ããå¿
èŠããããŸãïŒ
.configureãè¿œå ãããšãç§ãä¿®æ£ãããŸãããreact-persistã䜿çšããŠããŸããã
ç§ã«ãšã£ãŠã¯OneSignal.configure()
ããã¯ãæ©èœããŸããã OneSignal.removeEventListener("ids", this.onIds)
ãæ©èœããŠããªãããšã«æ°ã¥ããŸããã ãããé¢é£ããŠãããã©ããããããªãã ãããä¿®æ£ããæ¹æ³ã¯ãããŸããïŒ
@junedomingoãšåãããšã«çŽé¢ããŠãã
Androidã§ã¯ãã¢ããªã®æåã®ããŒãæã«ã35ç§åŸã«idsã€ãã³ããåŒã³åºãããŸã
Androidã§ã¯åé¡ãããŸãããã€ãã³ãã¯åé¡ãªãçºçããŸãã
ããããç§ã¯iOSã§èŠåŽããŠããŸããã onIds()
é¢æ°ã«ã¯æ±ºããŠå
¥ããŸãã...
ã€ãã³ããªã¹ããŒã®ååŸããã³åæ°Žåãå®äºããåãŸãã¯åŸã«OneSignal.configure()
è¿œå ããŠãïŒã¯ãã redux-persist
ã䜿çšããŠããŸãïŒã圹ã«ç«ã¡ãŸããã§ããã
誰ãã¢ã€ãã¢ã¯ãããŸããïŒ
@ jkasten2ç§ã¯@junedomingoãidsãªã¹ããŒã«ã€ããŠããã§èšåããã®ãšåãåé¡ã
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
public void idsAvailable(String userId, String registrationId) {
final WritableMap params = Arguments.createMap();
params.putString("userId", userId);
params.putString("pushToken", registrationId);
sendEvent("OneSignal-idsAvailable", params);
}
});
30ç§åŸã«å¿çããŸãïŒ
äœãã¢ã€ãã¢/解決çã¯ãããŸããïŒ
OneSignal.setRequiresUserPrivacyConsentïŒtrueïŒ;ãããå Žå
ããªããåæãäžãããŸã§ããã¯æ©èœããŸããïŒ
OneSignal.provideUserConsentïŒtrueïŒ;
ãªã¹ããŒãè¿œå ããåŸãOneSignal.configureïŒïŒãåŒã³åºããŸãã
åžæã¯ããªãã®ããã«åããŸã!!!
åãåé¡
ããŒãžã§ã³ïŒv3.3.1
ãã©ãããã©ãŒã ïŒiOS
ããã§ãããããã«ãuserIdã¯nullã§ããã29ç§åŸã«ã®ã¿ã€ãã³ããªã¹ããŒãuserIdã§ããªã¬ãŒãããŸãã ããã¯ãã¢ããªã®ã¯ãªãŒã³ã€ã³ã¹ããŒã«åŸã®æåã®èµ·åæã§ãã
ãŸã ãã®åé¡ãæ±ããŠãã人ã¯ããŸããïŒ
ãã®ã€ãã³ãã¯ãAndroidã®ã¯ãªã¢ããŒãã§çŽ30ç§åŸã«ã®ã¿ããªã¬ãŒãããŸãã
@damathryxããã«ã¡ã¯ãæåã®èµ·åã®åé¡ã§åã
ãã®åé¡ã¯åéããå¿ èŠããããŸãð©
ç§ã«ãšã£ãŠãããã·ã¥éç¥ã¯.configure
ãªãã§ã¯Androidã«å±ããŸããã IDã¯æ£åžžã«ããªã¬ãŒãããããã€ã¹æ
å ±ã¯åä¿¡ãããŸãããéç¥èªäœã¯æ©èœããŸããã
æãåèã«ãªãã³ã¡ã³ã
ãã®libã䜿ãå§ããã°ããã§ãåãåé¡ãçºçããŸããã ããã§ãredux-persistã䜿çšããŠããŸãïŒ ãããŠãå°ãæãäžããåŸãç§ã¯ãããredux-persistã«é¢ä¿ããŠããŸãã ãŸãã¯ã
ids
ã€ãã³ããžã®é 延ãµãã¹ã¯ãªãã·ã§ã³ã次ã®ã³ãŒãã¯ã
index.xxx.js
ã«æ£ããé 眮ãããšïŒã€ãŸããã¢ããªã®èµ·åã®éåžžã«æ©ã段éã§ïŒãã¢ããªãåèµ·åãããã³ã«ããªã¬ãŒãããŸãããã ããredux-persist rehydration =>ã®åŸã«
OneSignal.addEventListener('ids' ...
ãåŒã³åºãããå Žåã¯ãã³ãŒã«ããã¯ã«å¥ããåããŸããä¿®æ£ã¯ãä»ã®ãšãããç§ãïŒããã¯ïŒïŒä¿®æ£ããæ¹æ³ã§ãïŒçŸåšã®react-native-onesignalãªãªãŒã¹3.0.3ïŒïŒ
OneSignal.configure()
ãšåŒã°ããææžåãããŠããªãjsåŽã®ã¡ãœãããããããã€ãã£ãåŽïŒ androidããã³ios ïŒãids
ã€ãã³ããjsåŽã«ãããŒããã£ã¹ãããŸãããããã£ãŠããidsãã®ã€ãã³ããªã¹ããŒãè¿œå ããçŽåŸã«åŒã³åºããŸãã
ãã€ãã£ãåŽã§ã©ã®ããã«å®è£ ãããŠããããè©äŸ¡ãããšãããããã2å以äžåŒã³åºãã®ã¯ããªãå®å šãªããã§ãïŒå éšã€ãã³ããã³ãã©ãŒã眮ãæããã ãã§ããã以äžã¯äœæãããŸããïŒã ãã ããæ¯å
ids
ãªã¹ããŒãèµ·åããããšã«æ³šæããŠãã ãããã¢ããªã®èµ·ååŸã«ãªã¹ããŒãè¿œå ããããšãã«ãä»ã®ã€ãã³ããæ©èœãããã©ããçåã«æããŸãã
ããã¯ãããããå éšãµãã¹ã¯ã©ã€ããŒãã¥ãŒãæã€react-native-onesignallibã«ãã£ãŠããé©åã«ä¿®æ£ãããã¯ãã ãšæããŸãã ã€ãã³ããªã¹ããŒã®ç»é²ãé ããŠãããã®ã·ããªãªã§ã¯ãè¿ãå°æ¥ããã«ãªã¯ãšã¹ããå®è¡ããŠã¿ãŸãã