Browse Source

启动图 icon and 手机联系人

wennjie 6 years ago
parent
commit
e1417dc4b5
49 changed files with 274 additions and 220 deletions
  1. 1 0
      huiliaoAPP/App.js
  2. 1 0
      huiliaoAPP/android/app/build.gradle
  3. 4 0
      huiliaoAPP/android/app/src/main/AndroidManifest.xml
  4. 2 0
      huiliaoAPP/android/app/src/main/java/com/huiliaoapp/MainApplication.java
  5. BIN
      huiliaoAPP/android/app/src/main/res/ic_launcher.png
  6. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
  7. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
  8. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-ldpi/ic_launcher.png
  9. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
  10. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
  11. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
  12. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
  13. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  14. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
  15. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  16. BIN
      huiliaoAPP/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
  17. 1 1
      huiliaoAPP/android/app/src/main/res/values/strings.xml
  18. 2 0
      huiliaoAPP/android/settings.gradle
  19. 68 10
      huiliaoAPP/ios/huiliaoAPP.xcodeproj/project.pbxproj
  20. 29 5
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/Contents.json
  21. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-1024.png
  22. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png
  23. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-20@3x.png
  24. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-29@2x.png
  25. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-29@3x.png
  26. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-40@2x.png
  27. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-40@3x.png
  28. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-60@2x.png
  29. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-60@3x.png
  30. 1 1
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/Contents.json
  31. 52 0
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/Contents.json
  32. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch1125_2436.jpg
  33. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch1242_2208-2.jpg
  34. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch640_1136.jpg
  35. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch640_960.jpg
  36. BIN
      huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch750_1334-2.jpg
  37. 0 2
      huiliaoAPP/ios/huiliaoAPP/Info.plist
  38. 1 0
      huiliaoAPP/package.json
  39. 0 30
      huiliaoAPP/src/components/AuthButton.js
  40. 18 0
      huiliaoAPP/src/components/BackButton.js
  41. 0 46
      huiliaoAPP/src/components/LoginScreen.js
  42. 0 42
      huiliaoAPP/src/components/LoginStatusMessage.js
  43. 0 27
      huiliaoAPP/src/components/MainScreen.js
  44. 0 30
      huiliaoAPP/src/components/ProfileScreen.js
  45. 0 7
      huiliaoAPP/src/navigators/AppNavigator.js
  46. 26 3
      huiliaoAPP/src/navigators/StackNavigator.js
  47. 64 16
      huiliaoAPP/src/pages/Contact/index.js
  48. 0 0
      huiliaoAPP/src/tool/requestPermission.js
  49. 4 0
      huiliaoAPP/yarn.lock

+ 1 - 0
huiliaoAPP/App.js

@@ -9,6 +9,7 @@ import { AppNavigator, middleware } from './src/navigators/AppNavigator';
 const store = createStore(AppReducer, applyMiddleware(middleware));
 
 class HuiLiaoApp extends React.Component {
+ 
   render() {
     return (
       <Provider store={store}>

+ 1 - 0
huiliaoAPP/android/app/build.gradle

@@ -138,6 +138,7 @@ android {
 }
 
 dependencies {
+    compile project(':react-native-contacts-picker')
     compile project(':react-native-image-crop-picker')
     compile fileTree(dir: "libs", include: ["*.jar"])
     compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"

+ 4 - 0
huiliaoAPP/android/app/src/main/AndroidManifest.xml

@@ -4,6 +4,10 @@
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
     <uses-permission android:name="android.permission.CAMERA"/>
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+
     <application
       android:name=".MainApplication"
       android:label="@string/app_name"

+ 2 - 0
huiliaoAPP/android/app/src/main/java/com/huiliaoapp/MainApplication.java

@@ -3,6 +3,7 @@ package com.huiliaoapp;
 import android.app.Application;
 
 import com.facebook.react.ReactApplication;
+import com.xb.contactpicker.ReactNativeContacts;
 import com.reactnative.ivpusic.imagepicker.PickerPackage;
 import com.facebook.react.ReactNativeHost;
 import com.facebook.react.ReactPackage;
@@ -24,6 +25,7 @@ public class MainApplication extends Application implements ReactApplication {
     protected List<ReactPackage> getPackages() {
       return Arrays.<ReactPackage>asList(
           new MainReactPackage(),
+            new ReactNativeContacts(),
             new PickerPackage()
       );
     }

BIN
huiliaoAPP/android/app/src/main/res/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-ldpi/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN
huiliaoAPP/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


+ 1 - 1
huiliaoAPP/android/app/src/main/res/values/strings.xml

@@ -1,3 +1,3 @@
 <resources>
-    <string name="app_name">huiliaoAPP</string>
+    <string name="app_name">汇聊</string>
 </resources>

+ 2 - 0
huiliaoAPP/android/settings.gradle

@@ -1,4 +1,6 @@
 rootProject.name = 'huiliaoAPP'
+include ':react-native-contacts-picker'
+project(':react-native-contacts-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-contacts-picker/android')
 include ':react-native-image-crop-picker'
 project(':react-native-image-crop-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-crop-picker/android')
 

+ 68 - 10
huiliaoAPP/ios/huiliaoAPP.xcodeproj/project.pbxproj

@@ -18,12 +18,10 @@
 		139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 139FDEF41B06529B00C62182 /* libRCTWebSocket.a */; };
 		13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
 		13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
-		13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
 		13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
 		140ED2AC1D01E1AD002B40FF /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
 		146834051AC3E58100842450 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 146834041AC3E56700842450 /* libReact.a */; };
 		2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
-		2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
 		2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
 		2D02E4C21E0B4AEC006451C7 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157351DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
 		2D02E4C31E0B4AEC006451C7 /* libRCTImage-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3E841DF850E9000B6D8A /* libRCTImage-tvOS.a */; };
@@ -35,10 +33,12 @@
 		2D16E6881FA4F8E400B85C8A /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D16E6891FA4F8E400B85C8A /* libReact.a */; };
 		2DCD954D1E0B4F2C00145EB5 /* huiliaoAPPTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* huiliaoAPPTests.m */; };
 		2DF0FFEE2056DD460020B375 /* libReact.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3DAD3EA31DF850E9000B6D8A /* libReact.a */; };
+		3A467E62F5A64656A979023B /* libRNContactsPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B67DBD86D72F4F5596A86A19 /* libRNContactsPicker.a */; };
 		5E9157361DD0AC6A00FF2AA8 /* libRCTAnimation.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E9157331DD0AC6500FF2AA8 /* libRCTAnimation.a */; };
 		832341BD1AAA6AB300B99B32 /* libRCTText.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 832341B51AAA6A8300B99B32 /* libRCTText.a */; };
 		AC0E38A9407146FD97D072A4 /* libimageCropPicker.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B01B1EB32104611B4BD75FB /* libimageCropPicker.a */; };
 		ADBDB9381DFEBF1600ED6528 /* libRCTBlob.a in Frameworks */ = {isa = PBXBuildFile; fileRef = ADBDB9271DFEBF0700ED6528 /* libRCTBlob.a */; };
+		AE3B4C4D21328968006E0B16 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
 		AE9332AE212FD01900A82ECC /* RSKImageCropper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE9332AD212FD01900A82ECC /* RSKImageCropper.framework */; };
 		AE9332AF212FD01900A82ECC /* RSKImageCropper.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AE9332AD212FD01900A82ECC /* RSKImageCropper.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		AE9332B2212FD01C00A82ECC /* QBImagePicker.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE9332B1212FD01C00A82ECC /* QBImagePicker.framework */; };
@@ -326,6 +326,13 @@
 			remoteGlobalIDString = 3400A8081CEB54A6008A0BC7;
 			remoteInfo = imageCropPicker;
 		};
+		AEAADD11213263FF00FED8AE /* PBXContainerItemProxy */ = {
+			isa = PBXContainerItemProxy;
+			containerPortal = 268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */;
+			proxyType = 2;
+			remoteGlobalIDString = F32424381F67FFC700255A5B;
+			remoteInfo = RNContactsPicker;
+		};
 /* End PBXContainerItemProxy section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -363,6 +370,7 @@
 		13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = huiliaoAPP/Info.plist; sourceTree = "<group>"; };
 		13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = huiliaoAPP/main.m; sourceTree = "<group>"; };
 		146833FF1AC3E56700842450 /* React.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = React.xcodeproj; path = "../node_modules/react-native/React/React.xcodeproj"; sourceTree = "<group>"; };
+		268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RNContactsPicker.xcodeproj; path = "../node_modules/react-native-contacts-picker/ios/RNContactsPicker.xcodeproj"; sourceTree = "<group>"; };
 		2D02E47B1E0B4A5D006451C7 /* huiliaoAPP-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "huiliaoAPP-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
 		2D02E4901E0B4A5D006451C7 /* huiliaoAPP-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "huiliaoAPP-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		2D16E6891FA4F8E400B85C8A /* libReact.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libReact.a; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -373,6 +381,7 @@
 		ADBDB91F1DFEBF0600ED6528 /* RCTBlob.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTBlob.xcodeproj; path = "../node_modules/react-native/Libraries/Blob/RCTBlob.xcodeproj"; sourceTree = "<group>"; };
 		AE9332AD212FD01900A82ECC /* RSKImageCropper.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = RSKImageCropper.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		AE9332B1212FD01C00A82ECC /* QBImagePicker.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = QBImagePicker.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+		B67DBD86D72F4F5596A86A19 /* libRNContactsPicker.a */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = archive.ar; path = libRNContactsPicker.a; sourceTree = "<group>"; };
 		DDD93A23D5194D9E8D22AB47 /* imageCropPicker.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = imageCropPicker.xcodeproj; path = "../node_modules/react-native-image-crop-picker/ios/imageCropPicker.xcodeproj"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
@@ -405,6 +414,7 @@
 				00C302EA1ABCBA2D00DB3ED1 /* libRCTVibration.a in Frameworks */,
 				139FDEF61B0652A700C62182 /* libRCTWebSocket.a in Frameworks */,
 				AC0E38A9407146FD97D072A4 /* libimageCropPicker.a in Frameworks */,
+				3A467E62F5A64656A979023B /* libRNContactsPicker.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -592,6 +602,7 @@
 				00C302DF1ABCB9EE00DB3ED1 /* RCTVibration.xcodeproj */,
 				139FDEE61B06529A00C62182 /* RCTWebSocket.xcodeproj */,
 				DDD93A23D5194D9E8D22AB47 /* imageCropPicker.xcodeproj */,
+				268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */,
 			);
 			name = Libraries;
 			sourceTree = "<group>";
@@ -646,6 +657,7 @@
 			isa = PBXGroup;
 			children = (
 				3B01B1EB32104611B4BD75FB /* libimageCropPicker.a */,
+				B67DBD86D72F4F5596A86A19 /* libRNContactsPicker.a */,
 			);
 			name = "Recovered References";
 			sourceTree = "<group>";
@@ -658,6 +670,14 @@
 			name = Products;
 			sourceTree = "<group>";
 		};
+		AEAADD0E213263FF00FED8AE /* Products */ = {
+			isa = PBXGroup;
+			children = (
+				AEAADD12213263FF00FED8AE /* libRNContactsPicker.a */,
+			);
+			name = Products;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -825,6 +845,10 @@
 					ProductGroup = 146834001AC3E56700842450 /* Products */;
 					ProjectRef = 146833FF1AC3E56700842450 /* React.xcodeproj */;
 				},
+				{
+					ProductGroup = AEAADD0E213263FF00FED8AE /* Products */;
+					ProjectRef = 268208B1EC93416CB5EA17A7 /* RNContactsPicker.xcodeproj */;
+				},
 			);
 			projectRoot = "";
 			targets = (
@@ -1103,6 +1127,13 @@
 			remoteRef = AE9332AB212FD00E00A82ECC /* PBXContainerItemProxy */;
 			sourceTree = BUILT_PRODUCTS_DIR;
 		};
+		AEAADD12213263FF00FED8AE /* libRNContactsPicker.a */ = {
+			isa = PBXReferenceProxy;
+			fileType = archive.ar;
+			path = libRNContactsPicker.a;
+			remoteRef = AEAADD11213263FF00FED8AE /* PBXContainerItemProxy */;
+			sourceTree = BUILT_PRODUCTS_DIR;
+		};
 /* End PBXReferenceProxy section */
 
 /* Begin PBXResourcesBuildPhase section */
@@ -1117,8 +1148,8 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
 				13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */,
+				AE3B4C4D21328968006E0B16 /* Images.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1126,7 +1157,6 @@
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1244,11 +1274,15 @@
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = huiliaoAPPTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
+				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
 					"-lc++",
@@ -1266,11 +1300,15 @@
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = huiliaoAPPTests/Info.plist;
 				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
+				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
 					"-lc++",
@@ -1284,12 +1322,14 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CURRENT_PROJECT_VERSION = 1;
 				DEAD_CODE_STRIPPING = NO;
 				DEVELOPMENT_TEAM = 87KURQP592;
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = huiliaoAPP/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1308,11 +1348,13 @@
 			isa = XCBuildConfiguration;
 			buildSettings = {
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+				ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
 				CURRENT_PROJECT_VERSION = 1;
 				DEVELOPMENT_TEAM = 87KURQP592;
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = huiliaoAPP/Info.plist;
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1342,10 +1384,14 @@
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOS/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
+				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
 					"-lc++",
@@ -1373,10 +1419,14 @@
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOS/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
+				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
 					"-lc++",
@@ -1403,10 +1453,14 @@
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOSTests/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
+				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
 					"-lc++",
@@ -1433,10 +1487,14 @@
 				HEADER_SEARCH_PATHS = (
 					"$(inherited)",
 					"$(SRCROOT)/../node_modules/react-native-image-crop-picker/ios/**",
+					"$(SRCROOT)/../node_modules/react-native-contacts-picker/ios/RNContactsPicker",
 				);
 				INFOPLIST_FILE = "huiliaoAPP-tvOSTests/Info.plist";
 				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
-				LIBRARY_SEARCH_PATHS = "$(inherited)";
+				LIBRARY_SEARCH_PATHS = (
+					"$(inherited)",
+					"\"$(SRCROOT)/$(TARGET_NAME)\"",
+				);
 				OTHER_LDFLAGS = (
 					"-ObjC",
 					"-lc++",

+ 29 - 5
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -1,34 +1,58 @@
 {
   "images" : [
     {
+      "size" : "20x20",
       "idiom" : "iphone",
-      "size" : "29x29",
+      "filename" : "icon-20@2x-ipad.png",
       "scale" : "2x"
     },
     {
+      "size" : "20x20",
       "idiom" : "iphone",
-      "size" : "29x29",
+      "filename" : "icon-20@3x.png",
       "scale" : "3x"
     },
     {
+      "size" : "29x29",
       "idiom" : "iphone",
-      "size" : "40x40",
+      "filename" : "icon-29@2x.png",
       "scale" : "2x"
     },
     {
+      "size" : "29x29",
       "idiom" : "iphone",
-      "size" : "40x40",
+      "filename" : "icon-29@3x.png",
       "scale" : "3x"
     },
     {
+      "size" : "40x40",
       "idiom" : "iphone",
-      "size" : "60x60",
+      "filename" : "icon-40@2x.png",
       "scale" : "2x"
     },
     {
+      "size" : "40x40",
+      "idiom" : "iphone",
+      "filename" : "icon-40@3x.png",
+      "scale" : "3x"
+    },
+    {
+      "size" : "60x60",
       "idiom" : "iphone",
+      "filename" : "icon-60@2x.png",
+      "scale" : "2x"
+    },
+    {
       "size" : "60x60",
+      "idiom" : "iphone",
+      "filename" : "icon-60@3x.png",
       "scale" : "3x"
+    },
+    {
+      "size" : "1024x1024",
+      "idiom" : "ios-marketing",
+      "filename" : "icon-1024.png",
+      "scale" : "1x"
     }
   ],
   "info" : {

BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-1024.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-20@2x-ipad.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-20@3x.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-29@2x.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-29@3x.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-40@2x.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-40@3x.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-60@2x.png


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/AppIcon.appiconset/icon-60@3x.png


+ 1 - 1
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/Contents.json

@@ -3,4 +3,4 @@
     "version" : 1,
     "author" : "xcode"
   }
-}
+}

+ 52 - 0
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/Contents.json

@@ -0,0 +1,52 @@
+{
+  "images" : [
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "2436h",
+      "filename" : "launch1125_2436.jpg",
+      "minimum-system-version" : "11.0",
+      "orientation" : "portrait",
+      "scale" : "3x"
+    },
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "736h",
+      "filename" : "launch1242_2208-2.jpg",
+      "minimum-system-version" : "8.0",
+      "orientation" : "portrait",
+      "scale" : "3x"
+    },
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "667h",
+      "filename" : "launch750_1334-2.jpg",
+      "minimum-system-version" : "8.0",
+      "orientation" : "portrait",
+      "scale" : "2x"
+    },
+    {
+      "orientation" : "portrait",
+      "idiom" : "iphone",
+      "filename" : "launch640_960.jpg",
+      "extent" : "full-screen",
+      "minimum-system-version" : "7.0",
+      "scale" : "2x"
+    },
+    {
+      "extent" : "full-screen",
+      "idiom" : "iphone",
+      "subtype" : "retina4",
+      "filename" : "launch640_1136.jpg",
+      "minimum-system-version" : "7.0",
+      "orientation" : "portrait",
+      "scale" : "2x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch1125_2436.jpg


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch1242_2208-2.jpg


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch640_1136.jpg


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch640_960.jpg


BIN
huiliaoAPP/ios/huiliaoAPP/Images.xcassets/LaunchImage.launchimage/launch750_1334-2.jpg


+ 0 - 2
huiliaoAPP/ios/huiliaoAPP/Info.plist

@@ -51,8 +51,6 @@
 	<string>是否允许此App访问你的相册?</string>
 	<key>NSPhotoLibraryUsageDescription</key>
 	<string>是否允许此App访问相册选取照片?</string>
-	<key>UILaunchStoryboardName</key>
-	<string>LaunchScreen</string>
 	<key>UIRequiredDeviceCapabilities</key>
 	<array>
 		<string>armv7</string>

+ 1 - 0
huiliaoAPP/package.json

@@ -16,6 +16,7 @@
     "prop-types": "^15.5.10",
     "react": "16.4.1",
     "react-native": "0.56.0",
+    "react-native-contacts-picker": "^0.0.7",
     "react-native-filesystem": "^0.1.0",
     "react-native-image-crop-picker": "^0.21.1",
     "react-native-keyboard-aware-scroll-view": "^0.7.0",

+ 0 - 30
huiliaoAPP/src/components/AuthButton.js

@@ -1,30 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import { Button } from 'react-native';
-import { NavigationActions } from 'react-navigation';
-
-const AuthButton = ({ logout, loginScreen, isLoggedIn }) => (
-  <Button
-    title={isLoggedIn ? 'Log Out' : 'Open Login Screen'}
-    onPress={isLoggedIn ? logout : loginScreen}
-  />
-);
-
-AuthButton.propTypes = {
-  isLoggedIn: PropTypes.bool.isRequired,
-  logout: PropTypes.func.isRequired,
-  loginScreen: PropTypes.func.isRequired,
-};
-
-const mapStateToProps = state => ({
-  isLoggedIn: state.auth.isLoggedIn,
-});
-
-const mapDispatchToProps = dispatch => ({
-  logout: () => dispatch({ type: 'Logout' }),
-  loginScreen: () =>
-    dispatch(NavigationActions.navigate({ routeName: 'Login' })),
-});
-
-export default connect(mapStateToProps, mapDispatchToProps)(AuthButton);

+ 18 - 0
huiliaoAPP/src/components/BackButton.js

@@ -0,0 +1,18 @@
+import React,{Component} from 'react';
+
+import {View,Image} from 'react-native';
+
+
+ class BackButton extends Component{
+
+    render(){
+        return (
+            <View style={{paddingLeft:11,paddingRight:6}}>
+                <Image source={require('../../assets/2x/return.png')} style={{height:19,width:10}}></Image>
+            </View>
+    )
+    }
+
+}
+
+export default BackButton;

+ 0 - 46
huiliaoAPP/src/components/LoginScreen.js

@@ -1,46 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { Button, StyleSheet, Text, View } from 'react-native';
-
-
-const styles = StyleSheet.create({
-  container: {
-    flex: 1,
-    justifyContent: 'center',
-    alignItems: 'center',
-    backgroundColor: '#F5FCFF',
-  },
-  welcome: {
-    fontSize: 20,
-    textAlign: 'center',
-    margin: 10,
-  },
-});
-
-const LoginScreen = ({ navigation }) => (
-  <View style={styles.container}>
-    <Text style={styles.welcome}>
-      Screen A
-    </Text>
-    <Text style={styles.instructions}>
-      This is great
-    </Text>
-    <Button
-      onPress={() => navigation.dispatch(resetAction)}
-      title="Log in"
-    />
-  </View>
-);
-
-LoginScreen.propTypes = {
-  navigation: PropTypes.object.isRequired,
-};
-
-LoginScreen.navigationOptions = {
-  title: '登录',
-  header:null
-  // headerMode: 'none'
-
-};
-
-export default LoginScreen;

+ 0 - 42
huiliaoAPP/src/components/LoginStatusMessage.js

@@ -1,42 +0,0 @@
-import React from 'react';
-import PropTypes from 'prop-types';
-import { connect } from 'react-redux';
-import { Button, StyleSheet, Text, View } from 'react-native';
-import { NavigationActions } from 'react-navigation';
-
-const styles = StyleSheet.create({
-  welcome: {
-    fontSize: 20,
-    textAlign: 'center',
-    margin: 10,
-  },
-});
-
-const LoginStatusMessage = ({ isLoggedIn, dispatch }) => {
-  if (!isLoggedIn) {
-    return <Text>Please log in</Text>;
-  }
-  return (
-    <View>
-      <Text style={styles.welcome}>
-        {'You are "logged in" right now'}
-      </Text>
-      <Button
-        onPress={() =>
-          dispatch(NavigationActions.navigate({ routeName: 'Profile' }))}
-        title="Profile"
-      />
-    </View>
-  );
-};
-
-LoginStatusMessage.propTypes = {
-  isLoggedIn: PropTypes.bool.isRequired,
-  dispatch: PropTypes.func.isRequired,
-};
-
-const mapStateToProps = state => ({
-  isLoggedIn: state.auth.isLoggedIn,
-});
-
-export default connect(mapStateToProps)(LoginStatusMessage);

+ 0 - 27
huiliaoAPP/src/components/MainScreen.js

@@ -1,27 +0,0 @@
-import React from 'react';
-import { StyleSheet, View } from 'react-native';
-
-import LoginStatusMessage from './LoginStatusMessage';
-import AuthButton from './AuthButton';
-
-const styles = StyleSheet.create({
-  container: {
-    flex: 1,
-    justifyContent: 'center',
-    alignItems: 'center',
-    backgroundColor: '#F5FCFF',
-  },
-});
-
-const MainScreen = () => (
-  <View style={styles.container}>
-    <LoginStatusMessage />
-    <AuthButton />
-  </View>
-);
-
-MainScreen.navigationOptions = {
-  title: 'Home Screen',
-};
-
-export default MainScreen;

+ 0 - 30
huiliaoAPP/src/components/ProfileScreen.js

@@ -1,30 +0,0 @@
-import React from 'react';
-import { StyleSheet, Text, View } from 'react-native';
-
-const styles = StyleSheet.create({
-  container: {
-    flex: 1,
-    justifyContent: 'center',
-    alignItems: 'center',
-    backgroundColor: '#F5FCFF',
-  },
-  welcome: {
-    fontSize: 20,
-    textAlign: 'center',
-    margin: 10,
-  },
-});
-
-const ProfileScreen = () => (
-  <View style={styles.container}>
-    <Text style={styles.welcome}>
-      Profile Screen
-    </Text>
-  </View>
-);
-
-ProfileScreen.navigationOptions = {
-  title: 'Profile',
-};
-
-export default ProfileScreen;

+ 0 - 7
huiliaoAPP/src/navigators/AppNavigator.js

@@ -8,19 +8,12 @@ const middleware = createReactNavigationReduxMiddleware(
   state => state.nav
 );
 
-
 const AppWithNavigationState = reduxifyNavigator(SwitchNavigator, 'root');
 
 const mapStateToProps = state => ({
   state: state.nav,
 });
 
-
-
-
 const AppNavigator = connect(mapStateToProps)(AppWithNavigationState);
 
-
-console.log(AppNavigator)
-console.log(middleware)
 export { SwitchNavigator, AppNavigator, middleware };

+ 26 - 3
huiliaoAPP/src/navigators/StackNavigator.js

@@ -3,6 +3,9 @@ import React from 'react';
 import { createStackNavigator} from 'react-navigation';
 import {Platform,StatusBar} from 'react-native';
 import BottomTabNavigator from './BottomTabNavigator'
+
+
+import BackButtom from '../components/BackButton';
 //mine
 
 import Setting from '../pages/Mine/Setting';
@@ -16,7 +19,19 @@ import Notice from '../pages/Mine/Notice';
 //message
 
 
+
+
 //contact
+
+let  headerStyle={}
+if(Platform.OS==='android'){
+    headerStyle ={
+      paddingTop:StatusBar.currentHeight,
+      height:40 + StatusBar.currentHeight +15
+    }
+}
+
+
 const StackNavigator = createStackNavigator({
     //  root
   Root:{screen:BottomTabNavigator},
@@ -39,12 +54,20 @@ const StackNavigator = createStackNavigator({
   headerMode: 'screen',
   mode: 'card',
   navigationOptions:{
+    headerBackImage:BackButtom,
     headerTintColor:'#ffffff',
-    headerBackTitle:null,
+    headerBackTitleStyle:{
+      fontSize:15
+    },
+    headerTitleStyle:{
+      fontSize:18,  //header 样式设置,
+      // flex: 1,
+      // textAlign:'center',
+      // backgroundColor:'#000'
+    },
     headerStyle:{
       backgroundColor:'#1c90f5',
-      paddingTop:Platform.OS ==='ios' ? 0 : StatusBar.currentHeight,
-      height:40 + (Platform.OS ==='ios' ? 0 : StatusBar.currentHeight +15)
+      ...headerStyle
     }
   },
   // onTransitionStart: ()=>{ console.log('导航栏切换开始'); },  // 回调

+ 64 - 16
huiliaoAPP/src/pages/Contact/index.js

@@ -1,24 +1,72 @@
-import React,{Component} from 'react';
-import { View ,Text } from 'react-native';
+/**
+ * Sample React Native App
+ * https://github.com/facebook/react-native
+ *
+ * @format
+ * @flow
+ */
+import React, {Component} from 'react';
+import {
+    StyleSheet,
+    Text,
+    View,
+    Platform
+} from 'react-native';
+import ContactPickerBridge from 'react-native-contacts-picker';
+import checkContactsPermission from '../../tool/requestPermission';
 
+if(Platform.OS==='android'){
+    checkContactsPermission()
+}
 
-class Contact extends Component {
-    constructor(props){
-        super(props)
-    }
-    componentWillMount(){
-
-        console.log('contact')
 
-    }
-    render(){
+export default class ContactPicker extends Component {
+    render() {
         return (
-            <View>
-                <Text>Contact</Text>
+            <View style={styles.container}>
+                <Text style={styles.welcome} onPress={this.openContactPicker}>打开通讯录选择器</Text>
+                <Text style={styles.welcome} onPress={this.getAllContact}>获取全部通讯录</Text>
+                <Text style={styles.welcome} onPress={this.checkContactPermissions}>是否有通讯录权限</Text>
             </View>
-        )
+        );
     }
-}
 
-export default Contact;
+    openContactPicker = () => {
+        ContactPickerBridge.openContactPicker((result) => {
+            console.log('openContactPicker ---->', JSON.stringify(result));
+        });
+    };
+
+    getAllContact = () => {
+        ContactPickerBridge
+            .getAllContact((result) => {
+                console.log('getAllContact ---->', JSON.stringify(result));
+            });
+    };
+
+    checkContactPermissions = () => {
+        ContactPickerBridge
+            .checkContactPermissions((result) => {
+                console.log('getAllContact ---->', JSON.stringify(result));
+            });
+    };
+}
 
+const styles = StyleSheet.create({
+    container: {
+        flex: 1,
+        justifyContent: 'center',
+        alignItems: 'center',
+        backgroundColor: '#F5FCFF',
+    },
+    welcome: {
+        fontSize: 20,
+        textAlign: 'center',
+        margin: 10,
+    },
+    instructions: {
+        textAlign: 'center',
+        color: '#333333',
+        marginBottom: 5,
+    },
+});

huiliaoAPP/src/uitl/requestPermission.js → huiliaoAPP/src/tool/requestPermission.js


+ 4 - 0
huiliaoAPP/yarn.lock

@@ -5455,6 +5455,10 @@ react-native-collapsible@^0.9.0:
   dependencies:
     prop-types "^15.5.10"
 
+react-native-contacts-picker@^0.0.7:
+  version "0.0.7"
+  resolved "http://registry.npm.taobao.org/react-native-contacts-picker/download/react-native-contacts-picker-0.0.7.tgz#5b37024bf6efcb1a86bdd7c6ea289ccc9400512b"
+
 react-native-dismiss-keyboard@1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/react-native-dismiss-keyboard/-/react-native-dismiss-keyboard-1.0.0.tgz#32886242b3f2317e121f3aeb9b0a585e2b879b49"