{"id":15801588,"url":"https://github.com/garrettmac/react-native-game-center","last_synced_at":"2025-10-29T00:31:29.258Z","repository":{"id":25549291,"uuid":"104404611","full_name":"garrettmac/react-native-game-center","owner":"garrettmac","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-17T06:38:06.000Z","size":1872,"stargazers_count":37,"open_issues_count":28,"forks_count":16,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-06T01:23:18.973Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/garrettmac.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-09-21T22:23:19.000Z","updated_at":"2024-08-25T02:51:15.000Z","dependencies_parsed_at":"2024-08-17T07:42:03.461Z","dependency_job_id":null,"html_url":"https://github.com/garrettmac/react-native-game-center","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garrettmac%2Freact-native-game-center","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garrettmac%2Freact-native-game-center/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garrettmac%2Freact-native-game-center/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/garrettmac%2Freact-native-game-center/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/garrettmac","download_url":"https://codeload.github.com/garrettmac/react-native-game-center/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238621143,"owners_count":19502601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-05T01:23:14.513Z","updated_at":"2025-10-29T00:31:28.823Z","avatar_url":"https://github.com/garrettmac.png","language":"Objective-C","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg alt=\"react-native-game-center\" src=\"snapshots/react-native-game-center.jpg\" width=\"308\"\u003e\u003c/p\u003e\u003cp align=\"center\"\u003eMeet react-native-game-center\u003c/p\u003e\u003cp align=\"center\"\u003e\u003ca href=\"http://standardjs.com/\"\u003e\u003cimg  src=\"https://img.shields.io/badge/code style-standard-brightgreen.svg?style=flat-square\"\u003e\u003c/a\u003e\u003ca href=\"http://standardjs.com/\"\u003e\u003cimg  src=\"https://img.shields.io/github/downloads/atom/atom/latest/total.svg\"\u003e\u003c/a\u003e\u003ca href=\"https://npmjs.org/package/react-native-game-center\"\u003e\u003cimg alt=\"npm version\" src=\"http://img.shields.io/npm/v/react-native-game-center.svg?style=flat-square\"\u003e\u003c/a\u003e\u003ca href=\"https://npmjs.org/package/react-native-game-center\"\u003e\u003cimg alt=\"npm version\" src=\"http://img.shields.io/npm/dm/react-native-game-center.svg?style=flat-square\"\u003e\u003c/a\u003e\u003ca href=\"https://github.com/garrettmac/react-native-game-center/pulls?q=is:pr is:closed\"\u003e\u003cimg alt=\"PR Stats\" src=\"https://img.shields.io/issuestats/i/github/garrettmac/react-native-game-center.svg?style=flat-square\"\u003e\u003c/a\u003e\u003ca href=\"https://github.com/garrettmac/react-native-game-center/issues?q=is:issue is:closed\"\u003e\u003cimg alt=\"Issue Stats\" src=\"https://img.shields.io/issuestats/p/github/garrettmac/react-native-game-center.svg\" style=\"flat-square\"\u003e\u003c/a\u003e   \u003ca\u003e\u003cimg  src=\"https://img.shields.io/github/forks/garrettmac/react-native-game-center.svg\"/\u003e\u003c/a\u003e\u003ca\u003e\u003cimg  src=\"https://img.shields.io/github/stars/garrettmac/react-native-game-center.svg\"/\u003e\u003c/a\u003e\u003ca\u003e\u003cimg  src=\"https://img.shields.io/badge/license-MIT-blue.svg\"/\u003e\u003ca\u003e\u003cimg  src=\"https://img.shields.io/twitter/url/https/github.com/garrettmac/react-native-game-center.svg?style=social\"\u003e\u003c/a\u003e\u003ca href=\"https://gitter.im/garrettmac/react-native-game-center?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge\"\u003e\u003cimg alt=\"Join the chat\" src=\"https://badges.gitter.im/garrettmac/react-native-game-center.svg\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n# React Native Game Center\nhire me!\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"app\" src=\"snapshots/app.png\"/\u003e\n\u003cimg alt=\"achivements\" src=\"snapshots/app-achivements.png\"/\u003e\n\u003cimg alt=\"leaderboard\" src=\"snapshots/app-leaderboard.png\"/\u003e\n\u003cimg alt=\"ifnotloggedin\" src=\"snapshots/ifnotloggedin.png\"/\u003e\n\n\u003c/p\u003e\n\n# Contents\n\n- [React Native Game Center](#react-native-game-center)\n  * [Contents](#contents)\n  * [Getting Started](#getting-started)\n  * [Basic Usage](#basic-usage)\n  * [Installation](#installation)\n  * [Set Up](#set-up)\n- [Example](#example)\n- [Methods](#methods)\n- [Init Method](#init-method)\n  * [init()](#init----promise--)\n- [Player Methods](#player-methods)\n  * [getPlayer()](#getplayer--promise--)\n  * [getPlayerImage()](#getplayerimage--promise--)\n  * [getPlayerFriends()](#getplayerfriends--promise--)\n- [Leaderboard Methods](#leaderboard-methods)\n  * [openLeaderboardModal()](#openleaderboardmodal--promise--)\n  * [submitLeaderboardScore()](#submitleaderboardscore--promise--)\n- [Achievements Methods](#achievements-methods)\n  * [openAchievementModal()](#openachievementmodal--promise--)\n  * [getAchievements()](#getachievements--promise--)\n  * [resetAchievements()](#resetachievements--promise--)\n  * [submitAchievementScore()](#submitachievementscore--promise--)\n\n- [TODO](#todo)\n\n# Getting Started\n\n- Install `react-native` first\n\n```bash\nnpm i react-native -g\nreact-native init myApp\ncd myApp\nyarn add react-native-game-center\nreact-native link\nreact-native run-ios\n```\n\n# Basic Usage\n\n- In your `index.js`, use:\n```bash\nimport RNGameCenter from \"react-native-game-center\"\n\nRNGameCenter.getPlayer().then(player=\u003econsole.log(\"player: \",player))\n```\n\n\n# Installation\n\n- From project root\n\n```bash\nyarn add react-native-game-center\nreact-native link\nreact-native run-ios\n```\nthen **Follow setup Instructions**\n\n# Set Up\n\u003e See [SETUP.md](SETUP.md)\n\n\n# Example\n\nor clone the repo and play with the example project\n\n```bash\n$ git clone https://github.com/garrettmac/react-native-game-center\n$ cd react-native-game-center/GameCenterExample\n$ yarn install\n$ npm start\n```\n\n\n\n\n\n# Init Method\n\n* [init() \u003cPromise?\u003e](#init----promise--)\n    - [Details](#details)\n    - [Parameters](#parameters)\n    - [Usage](#usage)\n\n## init() \u003cPromise?\u003e\n\n#### Details\n\nInitiates your app with Game Center.\nAdd this to the top of your app before your `AppRegister`.\n\n\n**ITUNES CONNECT APP DASHBOARD**\n\u003e https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/ng/app\n\n**Then**\n\u003e SELECT APP \u003e Feature \u003e Game Center\n\n#### Parameters\n\n| Name  | Required | Default    | Description |\n|--------------|--------------|--------------|--------------|\n| leaderboardIdentifier |  Yes | `undefined` | Your apps default leaderboard Identifier. You can can several of these but at least one is required.  |\n| achievementIdentifier | No | `undefined` | Your apps default achievement Identifier. Not required. Set this to avoid having to keep passing it in.  |\n\n\n#### Usage\n\n**Basic**\n\n```jsx\nconst leaderboardIdentifier=\"high_scores\"\n\n  GameCenter.init({leaderboardIdentifier})\n```\n\n**Advanced**\n\n```jsx\nconst leaderboardIdentifier=\"high_scores\"\nconst achievementIdentifier=\"novice_award\"\n\n\n//init app\nGameCenter.init({leaderboardIdentifier,achievementIdentifier})\n  .then(console.log)\n  .catch(console.warn)\n\n```\n\n\n\n\n\n\n# Player Methods\n\n[Player Methods](#player-methods)\n * [getPlayer \u003cPromise?\u003e](#getplayer--promise--)\n     - [Details](#details-1)\n     - [Parameters](#parameters-1)\n     - [Basic Usage](#basic-usage-1)\n     - [Response](#response)\n * [getPlayerImage \u003cPromise?\u003e](#getplayerimage--promise--)\n     - [Details](#details-2)\n     - [Parameters](#parameters-2)\n     - [Usage](#usage-1)\n     - [Success Response](#success-response)\n     - [Failed Response](#failed-response)\n   + [getPlayerFriends](#getplayerfriends)\n     - [Details](#details-3)\n     - [Parameters](#parameters-3)\n     - [Usage](#usage-2)\n     - [Response](#response-1)\n\n## getPlayer \u003cPromise?\u003e\n\n#### Details\n\nGets logged in user.\n\n#### Parameters\n\nNo Parameters\n\n#### Basic Usage\n\n```jsx\n  GameCenter.getPlayer().then(player=\u003e{\n      console.log(\"player: \", player);\n  })\n```\n\n#### Response\n\n```json\n{alias: \"Garrettmacmac\", displayName: \"Me\", playerID: \"G:8135064222\"}\n```\n\n\n\n\n## getPlayerImage \u003cPromise?\u003e\n\n\n#### Details\n\nGets logged player image if available.\nMost players don't have one.\n\n#### Parameters\n\nNo Parameters\n\n#### Usage\n\n```jsx\n  GameCenter.getPlayerImage().then(image=\u003e{\n      console.log(\"image: \", image);\n  })\n```\n####  Success Response\n\n```json\n{image: \"/path/to/image.png\"}\n```\n####  Failed Response\n\n```json\nError fetching player image\n```\n\n\n### getPlayerFriends\n\n#### Details\n\nGets a list of players.\nMost games don't have this anymore as Apple took away the game center App.\nNow you see lots of users connect via Facebook, SMS and by geolocation.\n\n#### Parameters\n\nNo Parameters\n\n#### Usage\n\n```jsx\n  GameCenter.getPlayerFriends().then(friends=\u003e{\n      console.log(\"friends: \", friends);\n  })\n```\n\n####  Response\nI don't know what this looks like, as I don't have friends 😫 and Apple said they are depreciating support for this is new versions.\n\n**Success**\n```json\n[...array of friends]\n```\nor\n\n```json\nundefined\n```\n\n**Failed**\n\n```json\nError fetching player friends\n```\n\n\n\n\n\n# Leaderboard Methods\n\n\n- [Leaderboard Methods](#leaderboard-methods)\n  * [openLeaderboardModal \u003cPromise?\u003e](#openleaderboardmodal--promise--)\n      - [Details](#details-4)\n      - [Parameters](#parameters-4)\n      - [Usage](#usage-3)\n      - [Success Response](#success-response-1)\n      - [Failed Response](#failed-response-1)\n  * [submitLeaderboardScore \u003cPromise?\u003e](#submitleaderboardscore--promise--)\n      - [Details](#details-5)\n      - [Parameters](#parameters-5)\n      - [Usage](#usage-4)\n      - [Response](#response-2)\n\n\n\n## openLeaderboardModal \u003cPromise?\u003e\n\n#### Details\n\nOpens Game Center Modal on Leaderboard Page\n\n#### Parameters\n\nNo Parameters\n\n#### Usage\n\n```jsx\n  GameCenter.openLeaderboardModal()\n  .then(success=\u003e{})//is open\n  .catch(error=\u003e{})//could not open\n\n```\n\n#### Success Response\n\n```json\nopened leaderboard modal\n```\n#### Failed Response\n\n```json\nopened leaderboard modal\n```\n\n\n\n## submitLeaderboardScore \u003cPromise?\u003e\n\n#### Details\nSubmit progress of users leaderboard\n\n#### Parameters\n\n| Name  | Required | Default    | Description |\n|--------------|--------------|--------------|--------------|\n| score |  Yes | n/a | some number to track for leaderboard    |\n| leaderboarIdentifier |  No* (see Response) | `leaderboarIdentifier` set up in Itunes Connect  |\n\n\n#### Usage\n\n\n\n\n**Basic**\n\n```jsx\nlet options={score:50};\n\n//reverts to default leaderboarIdentifier set up in init()\nGameCenter.submitLeaderboardScore(options)\n//now update state\nthis.setState(options)\n```\n\n**Advanced**\n```jsx\nlet options={\n  score:50,\n  leaderboarIdentifier:\"some_other_leaderboard\"\n};\n\nGameCenter.submitLeaderboardScore(options)\n  .then(res=\u003e{\n    if(res===\"Successfully submitted score\")\n          this.setState({score:50})\n  })\n  .catch(console.warn(\"Users progress is not being tracked due to error.\"))\n\n```\n\n\n#### Response\n\n**Success**\n\n```json\n\"Successfully submitted score\"\n```\n\n\n**Failed**\n\n```json\n\"Error submitting score.\"\n```\n\n\n\n\n\n\n\n# Achievements Methods\n\n- [Achievements Methods](#achievements-methods)\n  * [openAchievementModal \u003cPromise?\u003e](#openachievementmodal--promise--)\n      - [Details](#details-6)\n      - [Parameters](#parameters-6)\n      - [Usage](#usage-5)\n      - [Response](#response-3)\n  * [getAchievements \u003cPromise?\u003e](#getachievements--promise--)\n      - [Details](#details-7)\n      - [Parameters](#parameters-7)\n      - [Usage](#usage-6)\n      - [Response](#response-4)\n  * [resetAchievements \u003cPromise?\u003e](#resetachievements--promise--)\n      - [Details](#details-8)\n      - [Parameters](#parameters-8)\n      - [Usage](#usage-7)\n      - [Response](#response-5)\n  * [submitAchievementScore \u003cPromise?\u003e](#submitachievementscore--promise--)\n      - [Details](#details-9)\n      - [Parameters](#parameters-9)\n      - [Usage](#usage-8)\n      - [Response](#response-6)\n\n## openAchievementModal \u003cPromise?\u003e\n\n#### Details\n\nOpens Game Center Modal on Leaderboard Page\n\n#### Parameters\n\nNo Parameters\n\n#### Usage\n\n```jsx\n  GameCenter.openAchievementModal()\n  .then(success=\u003e{})//is open\n  .catch(error=\u003e{})//could not open\n\n```\n\n#### Response\n\n**Success**\n\n```json\nopened achievement modal\n```\n\n**Failed**\n\n```json\nopened achievement modal\n```\n\n\n\n## getAchievements \u003cPromise?\u003e\n\n#### Details\n\nGets players achievements if completed more than 0%.\nYou must declare `submitAchievementScore` at least once before calling this.\n\n#### Parameters\n\nNo Parameters\n\n#### Usage\n\n```jsx\n  GameCenter.getAchievements()\n  .then(achievements=\u003e{\n    console.log(achievements)\n    })\n  .catch(error=\u003e{})//failed\n\n```\n\n#### Response\n\n```json\n[{\"showsCompletionBanner\":false,\"lastReportedDate\":1506301241432,\"completed\":true,\"percentComplete\":100,\"identifier\":\"novice_award\"},{\"showsCompletionBanner\":false,\"lastReportedDate\":1506301211362,\"completed\":false,\"percentComplete\":5,\"identifier\":\"pro_award\"}]\n```\n\nor\n\n```json\n[]\n```\n\n\n\n## resetAchievements \u003cPromise?\u003e\n\n\u003e [![Reset Achievements](snapshots/resetAchievements.png)]\n\n#### Details\n\nResets the players achievements.\n\n#### Parameters\n\n\n| Name  | Required | Default    | Description |\n|--------------|--------------|--------------|--------------|\n| hideAlert |  No | `{hideAlert:false}` | Hide reset confirmation prompt   |\n\n\n#### Usage\n\n**Basic**\n\n```jsx\n  //Triggers confirmation prompt\n  GameCenter.resetAchievements()\n\n  // hides confirmation prompt\n  GameCenter.resetAchievements({hideAlert:true})\n```\n**Advanced**\n```jsx\n  GameCenter.resetAchievements(res=\u003e{\n    if(res.resetAchievements){\n      do something if user reset achievements\n    }\n  })\n  .catch(alert(\"Could not reset achievements at this time. Try again later.\"))\n```\n\n#### Response\n\nIf you pass in `{hideAlert:true}` into `GameCenter.resetAchievements()` Method **OR** the you don't pass in the `hideAlert` parameter and player presses \"Reset\"\n\n```json\n{\"resetAchievements\":true,\"message\":\"User achievements reset\"}\n```\n\nIf you don't pass in the `hideAlert` parameter and player presses \"No!\"\n\n```json\n{\"resetAchievements\":false,\"message\":\"User achievements not reset\"}\n```\n\n\n\n\n## submitAchievementScore \u003cPromise?\u003e\n\n\n#### Details\nSubmit progress of users achievements\n\n#### Parameters\n\n| Name  | Required | Default    | Description |\n|--------------|--------------|--------------|--------------|\n| percentComplete |  Yes | n/a | number, float, or string of the percent achievement is complete. **Range 1-100**    |\n| achievementIdentifier |  No* (see Response) | `achievementIdentifier` set up in Itunes Connect  |\n| hideCompletionBanner |  No | `false` | Hides Game center banner when complete   |\n\n\n#### Usage\n\n\n\n```jsx\nlet options={\n            percentComplete:50,\n            achievementIdentifier:\"novice_award\"\n          };\n\nGameCenter.submitAchievementScore(options).then(res=\u003e{\n  if(res){\n//success\n  }\n})\n.catch(alert(\"Could not update your achievements at this time. Try again later.\"))\n```\n\n\n#### Response\n\n**Success**\n\n```json\n[null]\n```\n\nNot required if `achievementIdentifier` set as default in `init()`. `achievementIdentifier` always reverts to default unless defended. However, will reject promise if not passed in `init()` or `submitAchievementScore()` function\n\n**Failed**\n\n```json\nNo Game Center `achievementIdentifier` passed and no default set\n```\n\n\n\n# TODO\n\n\nADD METHODS\n\n[ ] getLeaderboardPlayers()\n[ ] invite()\n[ ] challengeComposer()\n[ ] findScoresOfFriendsToChallenge()\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgarrettmac%2Freact-native-game-center","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgarrettmac%2Freact-native-game-center","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgarrettmac%2Freact-native-game-center/lists"}