Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
react-native-social
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wind.wang
react-native-social
Commits
ecb4c7f4
Commit
ecb4c7f4
authored
Oct 22, 2021
by
wind.wang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加分享小程序
parent
69a49fc0
Changes
8
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
380 additions
and
237 deletions
+380
-237
BaseWXPayEntryActivity.java
...rc/main/java/com/rnsocial/pay/BaseWXPayEntryActivity.java
+51
-27
ReactShareModule.java
...id/src/main/java/com/rnsocial/share/ReactShareModule.java
+121
-88
Share.java
android/src/main/java/com/rnsocial/share/Share.java
+160
-121
index.js
index.js
+10
-0
RNSocialNativeBridgeManager.m
ios/clazz/RNSocialNativeBridgeManager.m
+8
-0
RNShareConfig.h
ios/clazz/share/RNShareConfig.h
+2
-0
RNShareConfig.m
ios/clazz/share/RNShareConfig.m
+27
-0
package.json
package.json
+1
-1
No files found.
android/src/main/java/com/rnsocial/pay/BaseWXPayEntryActivity.java
View file @
ecb4c7f4
...
@@ -3,53 +3,77 @@ package com.rnsocial.pay;
...
@@ -3,53 +3,77 @@ package com.rnsocial.pay;
import
android.app.Activity
;
import
android.app.Activity
;
import
android.content.Intent
;
import
android.content.Intent
;
import
android.os.Bundle
;
import
android.os.Bundle
;
//import android
.support
.annotation.Nullable;
//import android
x
.annotation.Nullable;
import
androidx.annotation.Nullable
;
import
androidx.annotation.Nullable
;
import
com.rnsocial.SocialConfig
;
import
com.rnsocial.SocialConfig
;
import
com.rnsocial.pay.channel.WechatPay
;
import
com.rnsocial.pay.channel.WechatPay
;
import
com.tencent.mm.opensdk.constants.ConstantsAPI
;
import
com.tencent.mm.opensdk.modelbase.BaseReq
;
import
com.tencent.mm.opensdk.modelbase.BaseReq
;
import
com.tencent.mm.opensdk.modelbase.BaseResp
;
import
com.tencent.mm.opensdk.modelbase.BaseResp
;
import
com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram
;
import
com.tencent.mm.opensdk.openapi.IWXAPI
;
import
com.tencent.mm.opensdk.openapi.IWXAPI
;
import
com.tencent.mm.opensdk.openapi.IWXAPIEventHandler
;
import
com.tencent.mm.opensdk.openapi.IWXAPIEventHandler
;
import
com.tencent.mm.opensdk.openapi.WXAPIFactory
;
import
com.tencent.mm.opensdk.openapi.WXAPIFactory
;
import
org.json.JSONException
;
import
org.json.JSONObject
;
/**
/**
* User : yh
* User : yh
* Date : 17/5/10
* Date : 17/5/10
*/
*/
public
class
BaseWXPayEntryActivity
extends
Activity
implements
IWXAPIEventHandler
{
public
class
BaseWXPayEntryActivity
extends
Activity
implements
IWXAPIEventHandler
{
private
IWXAPI
api
;
private
IWXAPI
api
;
@Override
@Override
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
protected
void
onCreate
(
@Nullable
Bundle
savedInstanceState
)
{
super
.
onCreate
(
savedInstanceState
);
super
.
onCreate
(
savedInstanceState
);
api
=
WXAPIFactory
.
createWXAPI
(
this
,
SocialConfig
.
getWechatId
());
api
=
WXAPIFactory
.
createWXAPI
(
this
,
SocialConfig
.
getWechatId
());
api
.
handleIntent
(
getIntent
(),
this
);
api
.
handleIntent
(
getIntent
(),
this
);
}
}
@Override
@Override
protected
void
onNewIntent
(
Intent
intent
)
{
protected
void
onNewIntent
(
Intent
intent
)
{
super
.
onNewIntent
(
intent
);
super
.
onNewIntent
(
intent
);
setIntent
(
intent
);
setIntent
(
intent
);
api
.
handleIntent
(
intent
,
this
);
api
.
handleIntent
(
intent
,
this
);
}
}
@Override
@Override
public
void
onReq
(
BaseReq
baseReq
)
{
public
void
onReq
(
BaseReq
baseReq
)
{
}
}
// -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
// -1 错误 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。
@Override
@Override
public
void
onResp
(
BaseResp
baseResp
)
{
public
void
onResp
(
BaseResp
baseResp
)
{
if
(
baseResp
.
errCode
==
0
){
if
(
baseResp
.
getType
()
==
ConstantsAPI
.
COMMAND_LAUNCH_WX_MINIPROGRAM
)
{
PayManager
.
getInstance
().
payResultCallBack
(
true
,
null
,
null
);
WXLaunchMiniProgram
.
Resp
launchMiniProResp
=
(
WXLaunchMiniProgram
.
Resp
)
baseResp
;
}
else
{
String
result
=
launchMiniProResp
.
extMsg
;
PayManager
.
getInstance
().
payResultCallBack
(
false
,
"pay.error"
,
"支付失败"
);
//20 成功, 30 失败
JSONObject
jsonValue
=
null
;
try
{
jsonValue
=
new
JSONObject
(
result
);
String
status
=
jsonValue
.
getString
(
"status"
);
String
message
=
jsonValue
.
getString
(
"errMsg"
);
if
(
status
==
"20"
)
{
PayManager
.
getInstance
().
payResultCallBack
(
true
,
null
,
null
);
}
else
{
PayManager
.
getInstance
().
payResultCallBack
(
false
,
status
,
message
);
}
}
this
.
finish
();
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
finish
();
}
else
if
(
baseResp
.
errCode
==
0
)
{
PayManager
.
getInstance
().
payResultCallBack
(
true
,
null
,
null
);
}
else
{
PayManager
.
getInstance
().
payResultCallBack
(
false
,
"pay.error"
,
"支付失败"
);
}
}
this
.
finish
();
}
}
}
android/src/main/java/com/rnsocial/share/ReactShareModule.java
View file @
ecb4c7f4
...
@@ -11,6 +11,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
...
@@ -11,6 +11,7 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
import
com.facebook.react.bridge.ReactMethod
;
import
com.facebook.react.bridge.ReactMethod
;
import
com.facebook.react.bridge.ReadableMap
;
import
com.facebook.react.bridge.ReadableMap
;
import
com.facebook.react.bridge.WritableMap
;
import
com.facebook.react.bridge.WritableMap
;
import
com.umeng.socialize.media.UMMin
;
/**
/**
* User : yh
* User : yh
...
@@ -18,57 +19,89 @@ import com.facebook.react.bridge.WritableMap;
...
@@ -18,57 +19,89 @@ import com.facebook.react.bridge.WritableMap;
*/
*/
public
class
ReactShareModule
extends
ReactContextBaseJavaModule
{
public
class
ReactShareModule
extends
ReactContextBaseJavaModule
{
private
final
static
String
REACT_NAME
=
"ReactShare"
;
private
final
static
String
REACT_NAME
=
"ReactShare"
;
public
ReactShareModule
(
ReactApplicationContext
reactContext
)
{
public
ReactShareModule
(
ReactApplicationContext
reactContext
)
{
super
(
reactContext
);
super
(
reactContext
);
}
}
@Override
@Override
public
String
getName
()
{
public
String
getName
()
{
return
REACT_NAME
;
return
REACT_NAME
;
}
}
@ReactMethod
@ReactMethod
public
void
share
(
final
ReadableMap
params
,
final
Callback
callback
){
public
void
share
(
final
ReadableMap
params
,
final
Callback
callback
)
{
final
Activity
activity
=
getCurrentActivity
();
final
Activity
activity
=
getCurrentActivity
();
if
(
params
==
null
){
if
(
params
==
null
)
{
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
return
;
}
if
(
activity
!=
null
)
{
activity
.
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
try
{
Share
.
share
(
activity
,
getShareContent
(
params
),
new
ShareListener
()
{
@Override
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
if
(
callback
==
null
)
{
return
;
}
WritableMap
resultMap
=
Arguments
.
createMap
();
resultMap
.
putBoolean
(
"success"
,
success
);
resultMap
.
putString
(
"message"
,
result
);
callback
.
invoke
(
resultMap
);
}
});
}
catch
(
Exception
e
)
{
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
}
}
}
if
(
activity
!=
null
){
});
activity
.
runOnUiThread
(
new
Runnable
()
{
}
@Override
}
public
void
run
()
{
try
{
@ReactMethod
Share
.
share
(
activity
,
getShareContent
(
params
),
new
ShareListener
()
{
public
void
shareToMiniProgram
(
final
ReadableMap
params
,
final
Callback
callback
)
{
@Override
final
Activity
activity
=
getCurrentActivity
();
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
if
(
params
==
null
)
{
if
(
callback
==
null
){
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
return
;
}
}
WritableMap
resultMap
=
Arguments
.
createMap
();
if
(
activity
!=
null
)
{
resultMap
.
putBoolean
(
"success"
,
success
);
activity
.
runOnUiThread
(
new
Runnable
()
{
resultMap
.
putString
(
"message"
,
result
);
@Override
callback
.
invoke
(
resultMap
);
public
void
run
()
{
}
try
{
});
Share
.
shareToMiniProgram
(
activity
,
params
,
new
ShareListener
()
{
}
catch
(
Exception
e
){
@Override
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
}
if
(
callback
==
null
)
{
return
;
}
}
WritableMap
resultMap
=
Arguments
.
createMap
();
resultMap
.
putBoolean
(
"success"
,
success
);
resultMap
.
putString
(
"message"
,
result
);
callback
.
invoke
(
resultMap
);
}
});
});
}
catch
(
Exception
e
)
{
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
}
}
}
});
}
}
}
@ReactMethod
@ReactMethod
public
void
shareImgWithBoard
(
final
ReadableMap
params
,
final
Callback
callback
){
public
void
shareImgWithBoard
(
final
ReadableMap
params
,
final
Callback
callback
)
{
final
Activity
activity
=
getCurrentActivity
();
final
Activity
activity
=
getCurrentActivity
();
if
(
params
==
null
)
{
if
(
params
==
null
)
{
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
return
;
}
}
if
(
activity
!=
null
)
{
if
(
activity
!=
null
)
{
activity
.
runOnUiThread
(
new
Runnable
()
{
activity
.
runOnUiThread
(
new
Runnable
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
...
@@ -76,7 +109,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
...
@@ -76,7 +109,7 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
Share
.
shareImgWithBoard
(
activity
,
params
,
new
ShareListener
()
{
Share
.
shareImgWithBoard
(
activity
,
params
,
new
ShareListener
()
{
@Override
@Override
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
if
(
callback
==
null
){
if
(
callback
==
null
)
{
return
;
return
;
}
}
WritableMap
resultMap
=
Arguments
.
createMap
();
WritableMap
resultMap
=
Arguments
.
createMap
();
...
@@ -85,68 +118,68 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
...
@@ -85,68 +118,68 @@ public class ReactShareModule extends ReactContextBaseJavaModule {
callback
.
invoke
(
resultMap
);
callback
.
invoke
(
resultMap
);
}
}
});
});
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
}
}
}
}
});
});
}
}
}
}
@ReactMethod
@ReactMethod
public
void
shareImg
(
final
ReadableMap
params
,
final
Callback
callback
)
{
public
void
shareImg
(
final
ReadableMap
params
,
final
Callback
callback
)
{
final
Activity
activity
=
getCurrentActivity
();
final
Activity
activity
=
getCurrentActivity
();
if
(
params
==
null
)
{
if
(
params
==
null
)
{
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
Toast
.
makeText
(
activity
,
"分享参数异常"
,
Toast
.
LENGTH_SHORT
).
show
();
return
;
return
;
}
}
if
(
activity
!=
null
)
{
if
(
activity
!=
null
)
{
activity
.
runOnUiThread
(
new
Runnable
()
{
activity
.
runOnUiThread
(
new
Runnable
()
{
@Override
@Override
public
void
run
()
{
public
void
run
()
{
try
{
try
{
Share
.
shareImg
(
activity
,
params
,
new
ShareListener
()
{
Share
.
shareImg
(
activity
,
params
,
new
ShareListener
()
{
@Override
@Override
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
public
void
onResult
(
boolean
success
,
String
result
,
Throwable
throwable
)
{
if
(
callback
==
null
){
if
(
callback
==
null
)
{
return
;
return
;
}
WritableMap
resultMap
=
Arguments
.
createMap
();
resultMap
.
putBoolean
(
"success"
,
success
);
resultMap
.
putString
(
"message"
,
result
);
callback
.
invoke
(
resultMap
);
}
});
}
catch
(
Exception
e
){
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
}
}
}
WritableMap
resultMap
=
Arguments
.
createMap
();
resultMap
.
putBoolean
(
"success"
,
success
);
resultMap
.
putString
(
"message"
,
result
);
callback
.
invoke
(
resultMap
);
}
});
});
}
catch
(
Exception
e
)
{
Log
.
e
(
REACT_NAME
,
e
.
getMessage
());
}
}
}
});
}
}
}
private
ShareContent
getShareContent
(
ReadableMap
params
){
private
ShareContent
getShareContent
(
ReadableMap
params
)
{
ShareContent
shareContent
=
new
ShareContent
();
ShareContent
shareContent
=
new
ShareContent
();
if
(
params
.
hasKey
(
"title"
)){
if
(
params
.
hasKey
(
"title"
))
{
shareContent
.
title
=
params
.
getString
(
"title"
);
shareContent
.
title
=
params
.
getString
(
"title"
);
}
}
if
(
params
.
hasKey
(
"url"
)){
if
(
params
.
hasKey
(
"url"
))
{
shareContent
.
url
=
params
.
getString
(
"url"
);
shareContent
.
url
=
params
.
getString
(
"url"
);
}
if
(
params
.
hasKey
(
"content"
)){
shareContent
.
content
=
params
.
getString
(
"content"
);
}
if
(
params
.
hasKey
(
"image"
)){
shareContent
.
image
=
params
.
getString
(
"image"
);
}
if
(
params
.
hasKey
(
"useContentTitle"
)){
shareContent
.
useContentTitle
=
params
.
getBoolean
(
"useContentTitle"
);
}
if
(
params
.
hasKey
(
"showPoster"
)){
shareContent
.
showPoster
=
true
;
}
return
shareContent
;
}
}
if
(
params
.
hasKey
(
"content"
))
{
shareContent
.
content
=
params
.
getString
(
"content"
);
}
if
(
params
.
hasKey
(
"image"
))
{
shareContent
.
image
=
params
.
getString
(
"image"
);
}
if
(
params
.
hasKey
(
"useContentTitle"
))
{
shareContent
.
useContentTitle
=
params
.
getBoolean
(
"useContentTitle"
);
}
if
(
params
.
hasKey
(
"showPoster"
))
{
shareContent
.
showPoster
=
true
;
}
return
shareContent
;
}
}
}
android/src/main/java/com/rnsocial/share/Share.java
View file @
ecb4c7f4
This diff is collapsed.
Click to expand it.
index.js
View file @
ecb4c7f4
...
@@ -79,6 +79,16 @@ class Social {
...
@@ -79,6 +79,16 @@ class Social {
}
}
})
})
}
}
launchMiniProgram
(
args
)
{
ReactSocial
.
launchMiniProgram
(
args
)
}
shareToMiniProgram
(
args
,
callback
)
{
ReactShare
.
shareToMiniProgram
(
args
,
(
result
)
=>
{
if
(
callback
)
{
callback
(
result
)
}
})
}
shareImgWithBoard
(
args
,
callback
)
{
shareImgWithBoard
(
args
,
callback
)
{
ReactShare
.
shareImgWithBoard
(
args
,
(
result
)
=>
{
ReactShare
.
shareImgWithBoard
(
args
,
(
result
)
=>
{
if
(
callback
)
{
if
(
callback
)
{
...
...
ios/clazz/RNSocialNativeBridgeManager.m
View file @
ecb4c7f4
...
@@ -31,6 +31,7 @@ RCT_EXPORT_METHOD(launchMiniProgram:(NSDictionary*)params)
...
@@ -31,6 +31,7 @@ RCT_EXPORT_METHOD(launchMiniProgram:(NSDictionary*)params)
}
}
@end
@end
@implementation
RNShareNativeBridge
@implementation
RNShareNativeBridge
RCT_EXPORT_MODULE
(
ReactShare
)
RCT_EXPORT_MODULE
(
ReactShare
)
...
@@ -61,6 +62,13 @@ RCT_EXPORT_METHOD(shareImgWithBoard:(NSDictionary*)params callback:(RCTResponseS
...
@@ -61,6 +62,13 @@ RCT_EXPORT_METHOD(shareImgWithBoard:(NSDictionary*)params callback:(RCTResponseS
}];
}];
}
}
RCT_EXPORT_METHOD
(
shareToMiniProgram
:
(
NSDictionary
*
)
params
callback
:
(
RCTResponseSenderBlock
)
callback
)
{
[[
RNShareConfig
shareInstance
]
shareToMiniProgram
:
params
callback
:
^
(
RNShareResponse
*
responseDO
)
{
callback
(@[[
responseDO
serialization
]]);
}];
}
@end
@end
...
...
ios/clazz/share/RNShareConfig.h
View file @
ecb4c7f4
...
@@ -37,6 +37,8 @@ typedef void (^RNShareResponseCallback)(RNShareResponse *responseDO);
...
@@ -37,6 +37,8 @@ typedef void (^RNShareResponseCallback)(RNShareResponse *responseDO);
-
(
void
)
shareHandler
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareHandler
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareImgWithBoardHandler
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareImgWithBoardHandler
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareImgHandler
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareImgHandler
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareToMiniProgram
:(
NSDictionary
*
)
data
callback
:(
RNShareResponseCallback
)
callback
;
-
(
void
)
shareHandler
:(
id
)
data
;
-
(
void
)
shareHandler
:(
id
)
data
;
-
(
void
)
initWechat
:(
NSString
*
)
appKey
appSecret
:(
NSString
*
)
appSecret
redirect
:(
NSString
*
)
redirect
;
-
(
void
)
initWechat
:(
NSString
*
)
appKey
appSecret
:(
NSString
*
)
appSecret
redirect
:(
NSString
*
)
redirect
;
...
...
ios/clazz/share/RNShareConfig.m
View file @
ecb4c7f4
...
@@ -204,6 +204,33 @@
...
@@ -204,6 +204,33 @@
}];
}];
}
}
-
(
void
)
shareToMiniProgram
:
(
NSDictionary
*
)
data
callback
:
(
RNShareResponseCallback
)
callback
;{
if
(
callback
){
_callback
=
[
callback
copy
];
}
__weak
typeof
(
self
)
weakSelf
=
self
;
RNShareParam
*
shareParam
=
[
self
formatParams
:
data
];
[
self
setShareParams
:
shareParam
];
UMSocialMessageObject
*
messageObject
=
[
UMSocialMessageObject
messageObject
];
UMShareMiniProgramObject
*
shareObject
=
[
UMShareMiniProgramObject
shareObjectWithTitle
:
shareParam
.
title
descr
:
shareParam
.
content
thumImage
:
shareParam
.
image
];
shareObject
.
webpageUrl
=
@"https://m.hisense.com"
;
shareObject
.
userName
=
data
[
@"appId"
];
shareObject
.
path
=
data
[
@"path"
];
messageObject
.
shareObject
=
shareObject
;
shareObject
.
hdImageData
=
[
NSData
dataWithContentsOfFile
:[[
NSBundle
mainBundle
]
pathForResource
:
@"logo"
ofType
:
@"png"
]];
if
(
data
[
@"miniProgramType"
])
{
shareObject
.
miniProgramType
=
[
data
[
@"miniProgramType"
]
intValue
];
//拉起小程序的类型
}
else
{
shareObject
.
miniProgramType
=
UShareWXMiniProgramTypeRelease
;
// 可选体验版和开发板
}
//调用分享接口
[[
UMSocialManager
defaultManager
]
shareToPlatform
:
UMSocialPlatformType_WechatSession
messageObject
:
messageObject
currentViewController
:
[
RNShareConfig
getRootViewController
]
completion
:^
(
id
result
,
NSError
*
error
){
[
weakSelf
shareCallback
:
result
error
:
error
];
}];
}
-
(
void
)
shareCallback
:
(
id
)
result
error
:
(
NSError
*
)
error
{
-
(
void
)
shareCallback
:
(
id
)
result
error
:
(
NSError
*
)
error
{
if
(
!
_callback
){
if
(
!
_callback
){
...
...
package.json
View file @
ecb4c7f4
...
@@ -18,5 +18,5 @@
...
@@ -18,5 +18,5 @@
"start"
:
"react-native start"
,
"start"
:
"react-native start"
,
"test"
:
"jest"
"test"
:
"jest"
},
},
"version"
:
"1.
3.9
"
"version"
:
"1.
4.0
"
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment