Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.074USD
STEEM
0.001STEEM
SBD
0.000SBD
Effective Power
5.007SP
├── Own SP
1.275SP
└── Incoming Deleg
+3.733SP

Detailed Balance

STEEM
balance
0.001STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
1.275SP
Delegated Out
0.000SP
Delegation In
3.733SP
Effective Power
5.007SP
Reward SP (pending)
0.000SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.000SBD
{
  "balance": "0.001 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "2072.955961 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "6070.703845 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

nameabhijeetmalamkar
id169026
rank1,452,329
reputation0
created2017-05-24T20:54:24
recovery_accountsteem
proxyNone
post_count1
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2017-07-14T19:23:33
last_root_post2017-07-14T19:23:33
last_vote_time1970-01-01T00:00:00
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.001 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares2072.955961 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares6070.703845 VESTS
reward_vesting_balance0.000000 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update2017-05-24T20:55:09
last_account_update2017-05-24T20:55:09
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5iLiF7ei9wG4RMf1dD891Z1KWFXdcTA8XNvSnDzYwQ7vuiWBvt",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "balance": "0.001 STEEM",
  "can_vote": true,
  "comment_count": 0,
  "created": "2017-05-24T20:54:24",
  "curation_rewards": 0,
  "delegated_vesting_shares": "0.000000 VESTS",
  "downvote_manabar": {
    "current_mana": 2035914951,
    "last_update_time": 1779050949
  },
  "guest_bloggers": [],
  "id": 169026,
  "json_metadata": "",
  "last_account_recovery": "1970-01-01T00:00:00",
  "last_account_update": "2017-05-24T20:55:09",
  "last_owner_update": "2017-05-24T20:55:09",
  "last_post": "2017-07-14T19:23:33",
  "last_root_post": "2017-07-14T19:23:33",
  "last_vote_time": "1970-01-01T00:00:00",
  "lifetime_vote_count": 0,
  "market_history": [],
  "memo_key": "STM7YV95LMWKMizH7EfkdyAzA2CA5dqYV1j9UqpZh3TccT9RhmscA",
  "mined": false,
  "name": "abhijeetmalamkar",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "other_history": [],
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM8U5aqk9UUcoUeL9Yc467A9TEtHP1DMdZKGGwM637BYyVapDAMQ",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "pending_claimed_accounts": 0,
  "post_bandwidth": 0,
  "post_count": 1,
  "post_history": [],
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5JAUVjoVaxe48yefjvDbdqxiPA6ASSFtS4QsA6XnRbrbbs8qAW",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting_json_metadata": "",
  "posting_rewards": 0,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "proxy": "",
  "received_vesting_shares": "6070.703845 VESTS",
  "recovery_account": "steem",
  "reputation": 0,
  "reset_account": "null",
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "sbd_balance": "0.000 SBD",
  "sbd_last_interest_payment": "1970-01-01T00:00:00",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "1970-01-01T00:00:00",
  "tags_usage": [],
  "to_withdraw": 0,
  "transfer_history": [],
  "vesting_balance": "0.000 STEEM",
  "vesting_shares": "2072.955961 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "vote_history": [],
  "voting_manabar": {
    "current_mana": "8143659806",
    "last_update_time": 1779050949
  },
  "voting_power": 0,
  "withdraw_routes": 0,
  "withdrawn": 0,
  "witness_votes": [],
  "witnesses_voted_for": 0,
  "rank": 1452329
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 3.733 SP to @abhijeetmalamkar
2026/05/17 20:49:09
delegateeabhijeetmalamkar
delegatorsteem
vesting shares6070.703845 VESTS
Transaction InfoBlock #106139344/Trx da95b67f432d4cdc06aea1a88e3a23ffb2b01fee
View Raw JSON Data
{
  "block": 106139344,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "6070.703845 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-05-17T20:49:09",
  "trx_id": "da95b67f432d4cdc06aea1a88e3a23ffb2b01fee",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 2.065 SP to @abhijeetmalamkar
2026/05/11 16:14:51
delegateeabhijeetmalamkar
delegatorsteem
vesting shares3358.493440 VESTS
Transaction InfoBlock #105961840/Trx 71a5112ca2d90c47c6fff85ce0b2a37a345665b8
View Raw JSON Data
{
  "block": 105961840,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "3358.493440 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-05-11T16:14:51",
  "trx_id": "71a5112ca2d90c47c6fff85ce0b2a37a345665b8",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 3.740 SP to @abhijeetmalamkar
2026/04/25 20:15:18
delegateeabhijeetmalamkar
delegatorsteem
vesting shares6083.219601 VESTS
Transaction InfoBlock #105507092/Trx 4449d25ceef589ed72af6406a89b2eb5b4be1609
View Raw JSON Data
{
  "block": 105507092,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "6083.219601 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-04-25T20:15:18",
  "trx_id": "4449d25ceef589ed72af6406a89b2eb5b4be1609",
  "trx_in_block": 4,
  "virtual_op": 0
}
steemdelegated 2.091 SP to @abhijeetmalamkar
2026/01/22 22:35:51
delegateeabhijeetmalamkar
delegatorsteem
vesting shares3400.040259 VESTS
Transaction InfoBlock #102840788/Trx 8c303d531f3945fcdff6895f00832585e744c91b
View Raw JSON Data
{
  "block": 102840788,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "3400.040259 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2026-01-22T22:35:51",
  "trx_id": "8c303d531f3945fcdff6895f00832585e744c91b",
  "trx_in_block": 5,
  "virtual_op": 0
}
steemdelegated 2.192 SP to @abhijeetmalamkar
2024/12/16 17:57:12
delegateeabhijeetmalamkar
delegatorsteem
vesting shares3564.259456 VESTS
Transaction InfoBlock #91287240/Trx ba6543b27f4eaf0a09ae3e255af0f615e8a10da9
View Raw JSON Data
{
  "block": 91287240,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "3564.259456 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2024-12-16T17:57:12",
  "trx_id": "ba6543b27f4eaf0a09ae3e255af0f615e8a10da9",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 2.296 SP to @abhijeetmalamkar
2023/11/13 09:43:36
delegateeabhijeetmalamkar
delegatorsteem
vesting shares3733.392988 VESTS
Transaction InfoBlock #79841533/Trx a3e5adbd19d89926de936c721474313343ac4131
View Raw JSON Data
{
  "block": 79841533,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "3733.392988 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2023-11-13T09:43:36",
  "trx_id": "a3e5adbd19d89926de936c721474313343ac4131",
  "trx_in_block": 2,
  "virtual_op": 0
}
steemdelegated 4.102 SP to @abhijeetmalamkar
2023/09/21 17:46:48
delegateeabhijeetmalamkar
delegatorsteem
vesting shares6670.671774 VESTS
Transaction InfoBlock #78342988/Trx 9464d3f15983537b30b11fb22c5756769a6c0b1d
View Raw JSON Data
{
  "block": 78342988,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "6670.671774 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2023-09-21T17:46:48",
  "trx_id": "9464d3f15983537b30b11fb22c5756769a6c0b1d",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 4.238 SP to @abhijeetmalamkar
2022/11/03 08:02:42
delegateeabhijeetmalamkar
delegatorsteem
vesting shares6892.353212 VESTS
Transaction InfoBlock #69108888/Trx 2442bb37b22274dcd6d7e2a8cade82e55ecc109c
View Raw JSON Data
{
  "block": 69108888,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "6892.353212 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2022-11-03T08:02:42",
  "trx_id": "2442bb37b22274dcd6d7e2a8cade82e55ecc109c",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 4.374 SP to @abhijeetmalamkar
2022/01/17 07:39:36
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7112.886443 VESTS
Transaction InfoBlock #60805482/Trx a2d230f8341a93f6676bc6de24d8474106944dbc
View Raw JSON Data
{
  "block": 60805482,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7112.886443 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2022-01-17T07:39:36",
  "trx_id": "a2d230f8341a93f6676bc6de24d8474106944dbc",
  "trx_in_block": 10,
  "virtual_op": 0
}
steemdelegated 4.487 SP to @abhijeetmalamkar
2021/06/13 21:43:09
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7296.655101 VESTS
Transaction InfoBlock #54604038/Trx bd8626f36f4438de74c9624f89f213d997949aec
View Raw JSON Data
{
  "block": 54604038,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7296.655101 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2021-06-13T21:43:09",
  "trx_id": "bd8626f36f4438de74c9624f89f213d997949aec",
  "trx_in_block": 1,
  "virtual_op": 0
}
steemdelegated 4.602 SP to @abhijeetmalamkar
2020/12/11 08:06:36
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7484.077075 VESTS
Transaction InfoBlock #49351627/Trx 78c1612cc44d8bd24275c6eefeeaf64aa521fd48
View Raw JSON Data
{
  "block": 49351627,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7484.077075 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-11T08:06:36",
  "trx_id": "78c1612cc44d8bd24275c6eefeeaf64aa521fd48",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 1.176 SP to @abhijeetmalamkar
2020/12/06 01:43:54
delegateeabhijeetmalamkar
delegatorsteem
vesting shares1912.543513 VESTS
Transaction InfoBlock #49203193/Trx a6d154dfcc70e073f5f2496af55f7afe8078c3d6
View Raw JSON Data
{
  "block": 49203193,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "1912.543513 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-12-06T01:43:54",
  "trx_id": "a6d154dfcc70e073f5f2496af55f7afe8078c3d6",
  "trx_in_block": 7,
  "virtual_op": 0
}
steemdelegated 4.612 SP to @abhijeetmalamkar
2020/11/25 14:26:48
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7501.203692 VESTS
Transaction InfoBlock #48906094/Trx 877f8655d9b3b8130105eef93f5bfc7568bbc548
View Raw JSON Data
{
  "block": 48906094,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7501.203692 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-11-25T14:26:48",
  "trx_id": "877f8655d9b3b8130105eef93f5bfc7568bbc548",
  "trx_in_block": 0,
  "virtual_op": 0
}
steemdelegated 4.730 SP to @abhijeetmalamkar
2020/05/09 02:38:27
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7693.090288 VESTS
Transaction InfoBlock #43213404/Trx 5af1b27d289a4472997f0dfe6695e40a228462cb
View Raw JSON Data
{
  "block": 43213404,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7693.090288 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-05-09T02:38:27",
  "trx_id": "5af1b27d289a4472997f0dfe6695e40a228462cb",
  "trx_in_block": 9,
  "virtual_op": 0
}
steemdelegated 1.201 SP to @abhijeetmalamkar
2020/05/08 05:46:09
delegateeabhijeetmalamkar
delegatorsteem
vesting shares1953.311140 VESTS
Transaction InfoBlock #43188945/Trx a5231f2e41df658976015cc5fb1b43f925a6791f
View Raw JSON Data
{
  "block": 43188945,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "1953.311140 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-05-08T05:46:09",
  "trx_id": "a5231f2e41df658976015cc5fb1b43f925a6791f",
  "trx_in_block": 14,
  "virtual_op": 0
}
steemdelegated 4.738 SP to @abhijeetmalamkar
2020/04/15 17:20:15
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7706.125305 VESTS
Transaction InfoBlock #42557595/Trx 4be9d663dffe7f8615f1e6381fe670debc2cb482
View Raw JSON Data
{
  "block": 42557595,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7706.125305 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2020-04-15T17:20:15",
  "trx_id": "4be9d663dffe7f8615f1e6381fe670debc2cb482",
  "trx_in_block": 0,
  "virtual_op": 0
}
2019/05/24 22:11:06
authorsteemitboard
bodyCongratulations @abhijeetmalamkar! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@abhijeetmalamkar/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@abhijeetmalamkar) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=abhijeetmalamkar)_</sub> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorabhijeetmalamkar
parent permlinkios-watchconnectivity-tutorial
permlinksteemitboard-notify-abhijeetmalamkar-20190524t221105000z
title
Transaction InfoBlock #33199592/Trx 3680dda672e4e467c5433732999ee58819bf265c
View Raw JSON Data
{
  "block": 33199592,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @abhijeetmalamkar! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@abhijeetmalamkar/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@abhijeetmalamkar) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=abhijeetmalamkar)_</sub>\n\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "abhijeetmalamkar",
      "parent_permlink": "ios-watchconnectivity-tutorial",
      "permlink": "steemitboard-notify-abhijeetmalamkar-20190524t221105000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-05-24T22:11:06",
  "trx_id": "3680dda672e4e467c5433732999ee58819bf265c",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemdelegated 4.859 SP to @abhijeetmalamkar
2019/05/12 10:52:57
delegateeabhijeetmalamkar
delegatorsteem
vesting shares7901.747772 VESTS
Transaction InfoBlock #32840662/Trx 02e7cc8e63ee2775e2b0af102e4e50a0c4434366
View Raw JSON Data
{
  "block": 32840662,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "7901.747772 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2019-05-12T10:52:57",
  "trx_id": "02e7cc8e63ee2775e2b0af102e4e50a0c4434366",
  "trx_in_block": 21,
  "virtual_op": 0
}
2018/05/25 04:11:51
authorsteemitboard
bodyCongratulations @abhijeetmalamkar! You have completed some achievement on Steemit and have been rewarded with new badge(s) : 1 Year on Steemit Click on any badge to view your Board of Honor. For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` > Do you like **SteemitBoard**'s project? **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorabhijeetmalamkar
parent permlinkios-watchconnectivity-tutorial
permlinksteemitboard-notify-abhijeetmalamkar-20180525t041150000z
title
Transaction InfoBlock #22729326/Trx 6d67dc283bb8141ecfc8756071465b8540f3e130
View Raw JSON Data
{
  "block": 22729326,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @abhijeetmalamkar! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n1 Year on Steemit\nClick on any badge to view your Board of Honor.\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\n> Do you like **SteemitBoard**'s project? **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "abhijeetmalamkar",
      "parent_permlink": "ios-watchconnectivity-tutorial",
      "permlink": "steemitboard-notify-abhijeetmalamkar-20180525t041150000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-05-25T04:11:51",
  "trx_id": "6d67dc283bb8141ecfc8756071465b8540f3e130",
  "trx_in_block": 9,
  "virtual_op": 0
}
2018/05/25 00:25:18
authorsteemitboard
bodyCongratulations @abhijeetmalamkar! You have received a personal award! [![](https://steemitimages.com/70x70/http://steemitboard.com/@abhijeetmalamkar/birthday1.png)](http://steemitboard.com/@abhijeetmalamkar) 1 Year on Steemit _Click on the badge to view your Board of Honor. > Do you like **SteemitBoard**'s project? **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
parent authorabhijeetmalamkar
parent permlinkios-watchconnectivity-tutorial
permlinksteemitboard-notify-abhijeetmalamkar-20180525t002520000z
title
Transaction InfoBlock #22724796/Trx 1827a7c7b2ae2dcea1949f251ee813732aeeb196
View Raw JSON Data
{
  "block": 22724796,
  "op": [
    "comment",
    {
      "author": "steemitboard",
      "body": "Congratulations @abhijeetmalamkar! You have received a personal award!\n\n[![](https://steemitimages.com/70x70/http://steemitboard.com/@abhijeetmalamkar/birthday1.png)](http://steemitboard.com/@abhijeetmalamkar)  1 Year on Steemit\n_Click on the badge to view your Board of Honor.\n\n\n> Do you like **SteemitBoard**'s project? **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
      "parent_author": "abhijeetmalamkar",
      "parent_permlink": "ios-watchconnectivity-tutorial",
      "permlink": "steemitboard-notify-abhijeetmalamkar-20180525t002520000z",
      "title": ""
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-05-25T00:25:18",
  "trx_id": "1827a7c7b2ae2dcea1949f251ee813732aeeb196",
  "trx_in_block": 58,
  "virtual_op": 0
}
steemdelegated 4.981 SP to @abhijeetmalamkar
2018/05/16 19:05:12
delegateeabhijeetmalamkar
delegatorsteem
vesting shares8101.264752 VESTS
Transaction InfoBlock #22488407/Trx cde93cc5aa6e7c6c9d13c76ff4b4fef325c2bc6f
View Raw JSON Data
{
  "block": 22488407,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "8101.264752 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-05-16T19:05:12",
  "trx_id": "cde93cc5aa6e7c6c9d13c76ff4b4fef325c2bc6f",
  "trx_in_block": 36,
  "virtual_op": 0
}
money-dreamersent 0.001 STEEM to @abhijeetmalamkar- "I just followed you!"
2018/01/11 05:05:27
amount0.001 STEEM
frommoney-dreamer
memoI just followed you!
toabhijeetmalamkar
Transaction InfoBlock #18875283/Trx d01c200e27a6d5df9701cb026068b60dbf91102a
View Raw JSON Data
{
  "block": 18875283,
  "op": [
    "transfer",
    {
      "amount": "0.001 STEEM",
      "from": "money-dreamer",
      "memo": "I just followed you!",
      "to": "abhijeetmalamkar"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-11T05:05:27",
  "trx_id": "d01c200e27a6d5df9701cb026068b60dbf91102a",
  "trx_in_block": 25,
  "virtual_op": 0
}
steemdelegated 17.618 SP to @abhijeetmalamkar
2018/01/09 04:21:39
delegateeabhijeetmalamkar
delegatorsteem
vesting shares28652.371982 VESTS
Transaction InfoBlock #18816837/Trx becac9e0509fe969efc1caefdd8d73ea52a1969e
View Raw JSON Data
{
  "block": 18816837,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "28652.371982 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2018-01-09T04:21:39",
  "trx_id": "becac9e0509fe969efc1caefdd8d73ea52a1969e",
  "trx_in_block": 2,
  "virtual_op": 0
}
2017/07/14 19:26:15
authorabhijeetmalamkar
body@@ -1,20 +1,109 @@ +!%5B%5D(https://steemitimages.com/DQmeB1JZZX8PJCCoV51ZMPDgig6X76exDoSTF35ei1M8zGD/image.png)%0A This tutorial covers
json metadata{"tags":["iwatch","swift3","ios","programming","tutorial"],"users":["escaping"],"app":"steemit/0.1","format":"markdown","image":["https://steemitimages.com/DQmeB1JZZX8PJCCoV51ZMPDgig6X76exDoSTF35ei1M8zGD/image.png"]}
parent author
parent permlinkiwatch
permlinkios-watchconnectivity-tutorial
titleiOS WatchConnectivity Tutorial
Transaction InfoBlock #13684035/Trx bea75b36aaf37353b38b4c3f1d163ae3ae3a38f2
View Raw JSON Data
{
  "block": 13684035,
  "op": [
    "comment",
    {
      "author": "abhijeetmalamkar",
      "body": "@@ -1,20 +1,109 @@\n+!%5B%5D(https://steemitimages.com/DQmeB1JZZX8PJCCoV51ZMPDgig6X76exDoSTF35ei1M8zGD/image.png)%0A\n This tutorial covers\n",
      "json_metadata": "{\"tags\":[\"iwatch\",\"swift3\",\"ios\",\"programming\",\"tutorial\"],\"users\":[\"escaping\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://steemitimages.com/DQmeB1JZZX8PJCCoV51ZMPDgig6X76exDoSTF35ei1M8zGD/image.png\"]}",
      "parent_author": "",
      "parent_permlink": "iwatch",
      "permlink": "ios-watchconnectivity-tutorial",
      "title": "iOS WatchConnectivity Tutorial"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2017-07-14T19:26:15",
  "trx_id": "bea75b36aaf37353b38b4c3f1d163ae3ae3a38f2",
  "trx_in_block": 20,
  "virtual_op": 0
}
2017/07/14 19:23:33
authorabhijeetmalamkar
bodyThis tutorial covers the basics of connecting an iOS and Watch app together, as well as sending data between the two. Language: Swift 3 Introduction You want to get up and running fast with building your first Apple Watch app and are probably frustrated beyond belief that there are very few resources that explain how the little lego piece actually come together. Well, look no further. This tutorial will explain everything to build a basic app in no time. After this, you should be able to venture off to build virtually any app you'd like, depending on your familiarity with iOS, WatchKit, and Object-Oriented Programming. What You Will Learn Overview of how WatchKit works with iOS How to CONNECT your Apple Watch app to your iPhone How to SEND data to your app from your iPhone How to SEND data to your phone from your Watch app. What You Will Not Learn How to build the interface layout for the WatchKit app How to build the storyboard layout for the iOS app I will give you some references at the end to point you in the right direction to figure that stuff out. Overview of WatchKit WatchKit is specifically designed to help you manage your UI in your Watch apps. Think of it like the Watch version of UIKit. Your app's logic lives in the WatchKit extension. Every interface element is a subclass of the WKInterfaceObject class. Your WatchKit UI is managed by an InterfaceController, a subclass of the WKInterfaceController class. When you add Interfaces (WatchKit's version of Views), you also need to add some logic to that interface using a subclass of the WKInterfaceController class. If you don't know how you would go about doing this, I would recommend learning the basics of iOS development by taking some courses on Lynda.com, TeamTreehouse.com, Udemy.com, or find an awesome technical book on iOS development from SafariBooksOnline.com. As of Swift 3, every Watch app is classified as a companion to an iOS app. That means, good luck selling your app in the App Store without an accompanying iOS application. Your watch app is nested inside of the iOS app in Xcode as a WatchKit extension. You will have three groups/folders/directories in which you will have to make some edits, either in program logic, or in design. Group 1: Your App Group 2: Your App WatchKit App Group 3: Your App WatchKit Extension Both the iOS and WatchKit applications will need to communicate via the WatchConnectivity framework using WCSession.default(). To respond to any messages being sent from either device, you will need to implement the WCSessionDelegate. You will pass messages back and forth using dictionaries [String:Any] (well, that's the preferred option) and will need to handle each case independently in the callback method, whereas the response will be handled in a closure from the method call where the request was made. In other words... iPhone App import WatchConnectivity and conform to WCSessionDelegate. use the static session delegate via WCSession.default(). Send data to Watch app using: WCSession.default().sendMessage(message, replyHandler:_ errorHandler:_) The message object should be a dictionary of type [String:Any] If you are looking for data to be returned from the Watch app, provide the logic in a closure defined in the replyHandler; otherwise, pass in nil. To respond to messages sent from the Watch app, you will use the WCSessionDelegate callback method func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void){...} WatchKit App import WatchConnectivity and conform to WCSessionDelegate. use the static session delegate via WCSession.default(). Send data to the iPhone app using: WCSession.default().sendMessage(message, replyHandler:_ errorHandler:_) The message object should be a dictionary of type [String:Any] If you are looking for data to be returned from the Watch app, provide the logic in a closure defined in the replyHandler; otherwise, pass in nil. To respond to messages sent from the iPhone app, you will use the WCSessionDelegate callback method func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void){...} These methods will not be required in your Watch app to properly conform to the WCSessionDelegate: func sessionDidBecomeInactive(_ session: WCSession) func sessionDidDeactivate(_ session: WCSession) func sessionWatchStateDidChange(_ session: WCSession) And finally, it is generally best practice to store any common images, the images and assets that will continually be used for the Watch app to be placed in the Watch's xcassets folder. Okay, now that you are confused, let's get to the details! To The Details Connecting the Apps Configuring the iOS App You need to import the WatchConnectivity framework into your view controller file in the iOS application. This gives you access to the class objects that are designed to communicate with the Watch companion application. You will need to import this on the Watch app side as well. The only real difference with the Watch app is that you will not have a view controller file, but an interface controller file. import WatchConnectivity Next, you will need to make sure that your application can support a session for WatchConnectivity. If it can, then you must set the view controller as its delegate and activate the default session. You will get an error here. You need to conform to WCSessionDelegate and implement a few methods before the IDE begins to calm down. // MARK: - View Life Cycle Callbacks override func viewDidLoad() { super.viewDidLoad() automaticallyAdjustsScrollViewInsets = false if WCSession.isSupported() { WCSession.default().delegate = self WCSession.default().activate() } else { print("\nViewController: connectionManager is nil\n") } } To conform to WCSessionDelegate, let's add an extension to the bottom of the view controller. Some people hate this approach. I have my way, but for tutorial purposes, I will follow the RayWenderlich approach. I am a huge fan of just getting code directly from COMMAND + CLICKING on the delegates and grabbing ALL OF THE METHODS out of the specification and begin to manipulate it and understand how things work. In this extension, I am providing you will all of the methods. They are already marked so that you will see when each of them fire in the console. If you feel frisky, delete some of the ones that are marked OPTIONAL to make your code file look spiffy. extension ViewController : WCSessionDelegate { func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { print("0. ViewController: ", "activationDidCompleteWith activationState") } /** ------------------------- iOS App State For Watch ------------------------ */ func sessionDidBecomeInactive(_ session: WCSession) { print("1. ViewController: ", "sessionDidBecomeInactive") } func sessionDidDeactivate(_ session: WCSession) { print("2. ViewController: ", "sessionDidDeactivate") } func sessionWatchStateDidChange(_ session: WCSession) { print("3. ViewController: ", "sessionDidDeactivate") } /** ------------------------- Interactive Messaging ------------------------- */ func sessionReachabilityDidChange(_ session: WCSession) { print("4. ViewController: ", "sessionReachabilityDidChange") } func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { print("5. ViewController: ", "didReceiveMessage") } func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) { print("6. ViewController: ", "didReceiveMessage") // This is where you handle any requests coming from your Watch App } func session(_ session: WCSession, didReceiveMessageData messageData: Data) { print("7. ViewController: ", "didReceiveMessageData") } func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Swift.Void) { print("8. ViewController: ", "didReceiveMessageData") } /** -------------------------- Background Transfers ------------------------- */ func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { print("9. ViewController: ", "didReceiveApplicationContext") } func session(_ session: WCSession, didFinish userInfoTransfer: WCSessionUserInfoTransfer, error: Error?) { print("10. ViewController: ", "didFinish userInfoTransfer") } func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { print("11. ViewController: ", "didReceiveUserInfo") } func session(_ session: WCSession, didFinish fileTransfer: WCSessionFileTransfer, error: Error?) { print("12. ViewController: ", "didFinish fileTransfer") } func session(_ session: WCSession, didReceive file: WCSessionFile) { print("13. ViewController: ", "didReceive file") } } To send data to your Watch App, once the Watch App has requested it, you will handle this in the method... func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) { print("6. ViewController: ", "didReceiveMessage") // build out your response message using a Dictionary let returnMessage: [String : Any] = [ "key1" : value1, "key2" : value2, "key3" : value3 ] // return your data in this manner replyHandler(returnMessage) // WARNING // You must call the replyHandler before the method ends, otherwise, your app will crash. } This is only one half of the transaction! You must configure your Watch app to connect to the iPhone app and handle any returned messages! Configuring the Watch App It might be a surprise to you, but you need to import WatchConnectivity again. import WatchConnectivity Next, you need to verify that the session is even possible. // MARK: - View Life Cycle Callbacks override func awake(withContext context: Any?) { super.awake(withContext: context) // Configure interface objects here. if WCSession.isSupported() { WCSession.default().delegate = self WCSession.default().activate() print("InterfaceController: Session Activated") // Request Data from iPhone App let requestMessage = ["message":"get-data"] WCSession.default().sendMessage(requestMessage, replyHandler: { (replyMessage) in print("Got a reply from the phone: \(replyMessage)") // handle reply message here }, errorHandler: { (error) in print("Got an error sending to the phone: \(error)") }) } else { print("\nViewController: connectionManager is nil\n") } } But none of this will work, unless you implement methods required for the WCSessionDelegate. extension InterfaceController : WCSessionDelegate { func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { print("1. InterfaceController: ", "activationDidCompleteWith activationState") // first } /** ------------------------- Interactive Messaging ------------------------- */ func sessionReachabilityDidChange(_ session: WCSession) { print("2. InterfaceController: ", "sessionReachabilityDidChange") // second } func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { print("3. InterfaceController: ", "didReceiveMessage") } func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) { // third print("4. InterfaceController: ", "didReceiveMessage") //print("Message Contents: ", message["message"]!) } func session(_ session: WCSession, didReceiveMessageData messageData: Data) { print("5. InterfaceController: ", "didReceiveMessageData") } func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Swift.Void) { print("6. InterfaceController: ", "didReceiveMessageData") } /** -------------------------- Background Transfers ------------------------- */ func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { print("7. InterfaceController: ", "didReceiveApplicationContext") } func session(_ session: WCSession, didFinish userInfoTransfer: WCSessionUserInfoTransfer, error: Error?) { print("8. InterfaceController: ", "didFinish userInfoTransfer") } func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) { print("9. InterfaceController: ", "didReceiveUserInfo") } func session(_ session: WCSession, didFinish fileTransfer: WCSessionFileTransfer, error: Error?) { print("10. InterfaceController: ", "didFinish fileTransfer") } func session(_ session: WCSession, didReceive file: WCSessionFile) { print("11. InterfaceController: ", "didReceive file") } } Sending Data Sending data to your Watch app from your iPhone or from your iPhone to your Watch App after triggering some event is very simple, though the code can look a little complex at first. let message = ["key":"value-to-send"] WCSession.default().sendMessage(message, replyHandler: { (replyMessage) in print("Got a reply from the phone: \(replyMessage)") if let returnedValues = replyMessage["returned-value"] as? NSArray { for val in returnedValues { // do something here with the data // Dispatch to Main Thread if affecting UI } } }, errorHandler: { (error) in print("Got an error sending to the phone: \(error)") }) Conclusion This has been a down and dirty on WatchConnectivity. There is a whole lot more to cover at another Bat Time and another Bat Channel, but this should get you started on the right foot. If you are bored with this tutorial, then continue in your development journey by tackling some of the more advanced topics such as: Working with Multiple Interface Controllers Creating Glances / Complications Notifications I truly hope this tutorial has helped you in your journey as an iOS developer who is gaining a specialty in Apple Watch app development.
json metadata{"tags":["iwatch","swift3","ios","programming","tutorial"],"users":["escaping"],"app":"steemit/0.1","format":"markdown"}
parent author
parent permlinkiwatch
permlinkios-watchconnectivity-tutorial
titleiOS WatchConnectivity Tutorial
Transaction InfoBlock #13683981/Trx 51f6780f0801261cdd8e7a20245e3f21ee5d64ae
View Raw JSON Data
{
  "block": 13683981,
  "op": [
    "comment",
    {
      "author": "abhijeetmalamkar",
      "body": "This tutorial covers the basics of connecting an iOS and Watch app together, as well as sending data between the two. Language: Swift 3\n\nIntroduction\n\nYou want to get up and running fast with building your first Apple Watch app and are probably frustrated beyond belief that there are very few resources that explain how the little lego piece actually come together. Well, look no further. This tutorial will explain everything to build a basic app in no time. After this, you should be able to venture off to build virtually any app you'd like, depending on your familiarity with iOS, WatchKit, and Object-Oriented Programming.\n\nWhat You Will Learn\n\nOverview of how WatchKit works with iOS\nHow to CONNECT your Apple Watch app to your iPhone\nHow to SEND data to your app from your iPhone\nHow to SEND data to your phone from your Watch app.\nWhat You Will Not Learn\n\nHow to build the interface layout for the WatchKit app\nHow to build the storyboard layout for the iOS app\nI will give you some references at the end to point you in the right direction to figure that stuff out.\n\nOverview of WatchKit\n\nWatchKit is specifically designed to help you manage your UI in your Watch apps. Think of it like the Watch version of UIKit. Your app's logic lives in the WatchKit extension. Every interface element is a subclass of the WKInterfaceObject class. Your WatchKit UI is managed by an InterfaceController, a subclass of the WKInterfaceController class. When you add Interfaces (WatchKit's version of Views), you also need to add some logic to that interface using a subclass of the WKInterfaceController class. If you don't know how you would go about doing this, I would recommend learning the basics of iOS development by taking some courses on Lynda.com, TeamTreehouse.com, Udemy.com, or find an awesome technical book on iOS development from SafariBooksOnline.com.\n\nAs of Swift 3, every Watch app is classified as a companion to an iOS app. That means, good luck selling your app in the App Store without an accompanying iOS application. Your watch app is nested inside of the iOS app in Xcode as a WatchKit extension. You will have three groups/folders/directories in which you will have to make some edits, either in program logic, or in design.\n\nGroup 1: Your App\nGroup 2: Your App WatchKit App\nGroup 3: Your App WatchKit Extension\nBoth the iOS and WatchKit applications will need to communicate via the WatchConnectivity framework using WCSession.default(). To respond to any messages being sent from either device, you will need to implement the WCSessionDelegate. You will pass messages back and forth using dictionaries [String:Any] (well, that's the preferred option) and will need to handle each case independently in the callback method, whereas the response will be handled in a closure from the method call where the request was made. In other words...\n\niPhone App\n\nimport WatchConnectivity and conform to WCSessionDelegate.\nuse the static session delegate via WCSession.default().\nSend data to Watch app using:\n WCSession.default().sendMessage(message, replyHandler:_ errorHandler:_)\nThe message object should be a dictionary of type [String:Any]\nIf you are looking for data to be returned from the Watch app, provide the logic in a closure defined in the replyHandler; otherwise, pass in nil.\nTo respond to messages sent from the Watch app, you will use the WCSessionDelegate callback method\nfunc session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void){...}\nWatchKit App\n\nimport WatchConnectivity and conform to WCSessionDelegate.\nuse the static session delegate via WCSession.default().\nSend data to the iPhone app using:\n WCSession.default().sendMessage(message, replyHandler:_ errorHandler:_)\nThe message object should be a dictionary of type [String:Any]\nIf you are looking for data to be returned from the Watch app, provide the logic in a closure defined in the replyHandler; otherwise, pass in nil.\nTo respond to messages sent from the iPhone app, you will use the WCSessionDelegate callback method\nfunc session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void){...}\nThese methods will not be required in your Watch app to properly conform to the WCSessionDelegate:\n func sessionDidBecomeInactive(_ session: WCSession)\n func sessionDidDeactivate(_ session: WCSession)\n func sessionWatchStateDidChange(_ session: WCSession)\nAnd finally, it is generally best practice to store any common images, the images and assets that will continually be used for the Watch app to be placed in the Watch's xcassets folder. Okay, now that you are confused, let's get to the details!\n\nTo The Details\n\nConnecting the Apps\n\nConfiguring the iOS App\n\nYou need to import the WatchConnectivity framework into your view controller file in the iOS application. This gives you access to the class objects that are designed to communicate with the Watch companion application. You will need to import this on the Watch app side as well. The only real difference with the Watch app is that you will not have a view controller file, but an interface controller file.\n\nimport WatchConnectivity\nNext, you will need to make sure that your application can support a session for WatchConnectivity. If it can, then you must set the view controller as its delegate and activate the default session. You will get an error here. You need to conform to WCSessionDelegate and implement a few methods before the IDE begins to calm down.\n\n// MARK: - View Life Cycle Callbacks\noverride func viewDidLoad() {\n    super.viewDidLoad()\n\n    automaticallyAdjustsScrollViewInsets = false\n    if WCSession.isSupported() {\n        WCSession.default().delegate = self\n        WCSession.default().activate()\n    }\n    else {\n        print(\"\\nViewController: connectionManager is nil\\n\")\n    }\n}\nTo conform to WCSessionDelegate, let's add an extension to the bottom of the view controller. Some people hate this approach. I have my way, but for tutorial purposes, I will follow the RayWenderlich approach. I am a huge fan of just getting code directly from COMMAND + CLICKING on the delegates and grabbing ALL OF THE METHODS out of the specification and begin to manipulate it and understand how things work. In this extension, I am providing you will all of the methods. They are already marked so that you will see when each of them fire in the console. If you feel frisky, delete some of the ones that are marked OPTIONAL to make your code file look spiffy.\n\nextension ViewController : WCSessionDelegate {\n\n    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {\n        print(\"0. ViewController: \", \"activationDidCompleteWith activationState\")\n    }\n\n\n    /** ------------------------- iOS App State For Watch ------------------------ */\n\n    func sessionDidBecomeInactive(_ session: WCSession) {\n        print(\"1. ViewController: \", \"sessionDidBecomeInactive\")\n    }\n\n\n    func sessionDidDeactivate(_ session: WCSession) {\n        print(\"2. ViewController: \", \"sessionDidDeactivate\")\n    }\n\n\n    func sessionWatchStateDidChange(_ session: WCSession) {\n        print(\"3. ViewController: \", \"sessionDidDeactivate\")\n    }\n\n\n    /** ------------------------- Interactive Messaging ------------------------- */\n\n    func sessionReachabilityDidChange(_ session: WCSession) {\n        print(\"4. ViewController: \", \"sessionReachabilityDidChange\")\n    }\n\n\n    func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {\n        print(\"5. ViewController: \", \"didReceiveMessage\")\n    }\n\n\n\n    func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) {\n        print(\"6. ViewController: \", \"didReceiveMessage\")\n        // This is where you handle any requests coming from your Watch App\n    }\n\n    func session(_ session: WCSession, didReceiveMessageData messageData: Data) {\n        print(\"7. ViewController: \", \"didReceiveMessageData\")\n    }\n\n    func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Swift.Void) {\n        print(\"8. ViewController: \", \"didReceiveMessageData\")\n    }\n\n    /** -------------------------- Background Transfers ------------------------- */\n\n    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {\n        print(\"9. ViewController: \", \"didReceiveApplicationContext\")\n    }\n\n    func session(_ session: WCSession, didFinish userInfoTransfer: WCSessionUserInfoTransfer, error: Error?) {\n        print(\"10. ViewController: \", \"didFinish userInfoTransfer\")\n    }\n\n    func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {\n        print(\"11. ViewController: \", \"didReceiveUserInfo\")\n    }\n\n    func session(_ session: WCSession, didFinish fileTransfer: WCSessionFileTransfer, error: Error?) {\n        print(\"12. ViewController: \", \"didFinish fileTransfer\")\n    }\n\n    func session(_ session: WCSession, didReceive file: WCSessionFile) {\n        print(\"13. ViewController: \", \"didReceive file\")\n    }\n}\nTo send data to your Watch App, once the Watch App has requested it, you will handle this in the method...\n\nfunc session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) {\n    print(\"6. ViewController: \", \"didReceiveMessage\")\n    // build out your response message using a Dictionary\n    let returnMessage: [String : Any] = [\n       \"key1\" : value1,\n       \"key2\" : value2,\n       \"key3\" : value3\n    ]\n    // return your data in this manner\n    replyHandler(returnMessage)\n    // WARNING\n    // You must call the replyHandler before the method ends, otherwise, your app will crash.\n}\nThis is only one half of the transaction! You must configure your Watch app to connect to the iPhone app and handle any returned messages!\n\nConfiguring the Watch App\n\nIt might be a surprise to you, but you need to import WatchConnectivity again.\n\nimport WatchConnectivity\nNext, you need to verify that the session is even possible.\n\n// MARK: - View Life Cycle Callbacks\noverride func awake(withContext context: Any?) {\n    super.awake(withContext: context)\n\n    // Configure interface objects here.\n    if WCSession.isSupported() {\n        WCSession.default().delegate = self\n        WCSession.default().activate()\n        print(\"InterfaceController: Session Activated\")\n\n        // Request Data from iPhone App\n        let requestMessage = [\"message\":\"get-data\"]\n\n        WCSession.default().sendMessage(requestMessage, replyHandler: { (replyMessage) in\n            print(\"Got a reply from the phone: \\(replyMessage)\")\n\n            // handle reply message here\n\n        }, errorHandler: { (error) in\n            print(\"Got an error sending to the phone: \\(error)\")\n        })\n    }\n    else {\n        print(\"\\nViewController: connectionManager is nil\\n\")\n    }\n}\nBut none of this will work, unless you implement methods required for the WCSessionDelegate.\n\nextension InterfaceController : WCSessionDelegate {\n\n    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {\n        print(\"1. InterfaceController: \", \"activationDidCompleteWith activationState\") // first\n    }\n\n    /** ------------------------- Interactive Messaging ------------------------- */\n\n    func sessionReachabilityDidChange(_ session: WCSession) {\n        print(\"2. InterfaceController: \", \"sessionReachabilityDidChange\") // second\n    }\n\n    func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {\n        print(\"3. InterfaceController: \", \"didReceiveMessage\")\n    }\n\n    func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void) { // third\n        print(\"4. InterfaceController: \", \"didReceiveMessage\")\n        //print(\"Message Contents: \", message[\"message\"]!)\n    }\n\n    func session(_ session: WCSession, didReceiveMessageData messageData: Data) {\n        print(\"5. InterfaceController: \", \"didReceiveMessageData\")\n    }\n\n    func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Swift.Void) {\n        print(\"6. InterfaceController: \", \"didReceiveMessageData\")\n    }\n\n    /** -------------------------- Background Transfers ------------------------- */\n\n    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {\n        print(\"7. InterfaceController: \", \"didReceiveApplicationContext\")\n    }\n\n    func session(_ session: WCSession, didFinish userInfoTransfer: WCSessionUserInfoTransfer, error: Error?) {\n        print(\"8. InterfaceController: \", \"didFinish userInfoTransfer\")\n    }\n\n    func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {\n        print(\"9. InterfaceController: \", \"didReceiveUserInfo\")\n    }\n\n    func session(_ session: WCSession, didFinish fileTransfer: WCSessionFileTransfer, error: Error?) {\n        print(\"10. InterfaceController: \", \"didFinish fileTransfer\")\n    }\n\n    func session(_ session: WCSession, didReceive file: WCSessionFile) {\n        print(\"11. InterfaceController: \", \"didReceive file\")\n    }    \n}\nSending Data\n\nSending data to your Watch app from your iPhone or from your iPhone to your Watch App after triggering some event is very simple, though the code can look a little complex at first.\n\nlet message = [\"key\":\"value-to-send\"]\n\nWCSession.default().sendMessage(message, replyHandler: { (replyMessage) in\n    print(\"Got a reply from the phone: \\(replyMessage)\")\n\n    if let returnedValues = replyMessage[\"returned-value\"] as? NSArray {\n        for val in returnedValues {\n            // do something here with the data\n            // Dispatch to Main Thread if affecting UI\n        }\n    }\n}, errorHandler: { (error) in\n    print(\"Got an error sending to the phone: \\(error)\")\n})\nConclusion\n\nThis has been a down and dirty on WatchConnectivity. There is a whole lot more to cover at another Bat Time and another Bat Channel, but this should get you started on the right foot. If you are bored with this tutorial, then continue in your development journey by tackling some of the more advanced topics such as:\n\nWorking with Multiple Interface Controllers\nCreating Glances / Complications\nNotifications\nI truly hope this tutorial has helped you in your journey as an iOS developer who is gaining a specialty in Apple Watch app development.",
      "json_metadata": "{\"tags\":[\"iwatch\",\"swift3\",\"ios\",\"programming\",\"tutorial\"],\"users\":[\"escaping\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
      "parent_author": "",
      "parent_permlink": "iwatch",
      "permlink": "ios-watchconnectivity-tutorial",
      "title": "iOS WatchConnectivity Tutorial"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2017-07-14T19:23:33",
  "trx_id": "51f6780f0801261cdd8e7a20245e3f21ee5d64ae",
  "trx_in_block": 18,
  "virtual_op": 0
}
steemdelegated 17.828 SP to @abhijeetmalamkar
2017/06/12 16:22:54
delegateeabhijeetmalamkar
delegatorsteem
vesting shares28994.044039 VESTS
Transaction InfoBlock #12760425/Trx b99669158fdec8649c96abd7afbcda2082492b89
View Raw JSON Data
{
  "block": 12760425,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "28994.044039 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2017-06-12T16:22:54",
  "trx_id": "b99669158fdec8649c96abd7afbcda2082492b89",
  "trx_in_block": 13,
  "virtual_op": 0
}
steemdelegated 5.093 SP to @abhijeetmalamkar
2017/06/08 22:16:51
delegateeabhijeetmalamkar
delegatorsteem
vesting shares8283.044039 VESTS
Transaction InfoBlock #12652370/Trx 8321fcee3da5ffd34276ccb2e4125b33ac93d1fb
View Raw JSON Data
{
  "block": 12652370,
  "op": [
    "delegate_vesting_shares",
    {
      "delegatee": "abhijeetmalamkar",
      "delegator": "steem",
      "vesting_shares": "8283.044039 VESTS"
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2017-06-08T22:16:51",
  "trx_id": "8321fcee3da5ffd34276ccb2e4125b33ac93d1fb",
  "trx_in_block": 5,
  "virtual_op": 0
}
abhijeetmalamkarupdated their account properties
2017/05/24 20:55:09
accountabhijeetmalamkar
active{"account_auths":[],"key_auths":[["STM5iLiF7ei9wG4RMf1dD891Z1KWFXdcTA8XNvSnDzYwQ7vuiWBvt",1]],"weight_threshold":1}
json metadata
memo keySTM7YV95LMWKMizH7EfkdyAzA2CA5dqYV1j9UqpZh3TccT9RhmscA
owner{"account_auths":[],"key_auths":[["STM8U5aqk9UUcoUeL9Yc467A9TEtHP1DMdZKGGwM637BYyVapDAMQ",1]],"weight_threshold":1}
posting{"account_auths":[],"key_auths":[["STM5JAUVjoVaxe48yefjvDbdqxiPA6ASSFtS4QsA6XnRbrbbs8qAW",1]],"weight_threshold":1}
Transaction InfoBlock #12219139/Trx de4b19181753b4ade903268abbab7fcf4241ef94
View Raw JSON Data
{
  "block": 12219139,
  "op": [
    "account_update",
    {
      "account": "abhijeetmalamkar",
      "active": {
        "account_auths": [],
        "key_auths": [
          [
            "STM5iLiF7ei9wG4RMf1dD891Z1KWFXdcTA8XNvSnDzYwQ7vuiWBvt",
            1
          ]
        ],
        "weight_threshold": 1
      },
      "json_metadata": "",
      "memo_key": "STM7YV95LMWKMizH7EfkdyAzA2CA5dqYV1j9UqpZh3TccT9RhmscA",
      "owner": {
        "account_auths": [],
        "key_auths": [
          [
            "STM8U5aqk9UUcoUeL9Yc467A9TEtHP1DMdZKGGwM637BYyVapDAMQ",
            1
          ]
        ],
        "weight_threshold": 1
      },
      "posting": {
        "account_auths": [],
        "key_auths": [
          [
            "STM5JAUVjoVaxe48yefjvDbdqxiPA6ASSFtS4QsA6XnRbrbbs8qAW",
            1
          ]
        ],
        "weight_threshold": 1
      }
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2017-05-24T20:55:09",
  "trx_id": "de4b19181753b4ade903268abbab7fcf4241ef94",
  "trx_in_block": 3,
  "virtual_op": 0
}
steemcreated a new account: @abhijeetmalamkar
2017/05/24 20:54:24
active{"account_auths":[],"key_auths":[["STM58gPbe55iuapcAHZAotVNeJJKgoGHvVpfxGiDbXBgqxxobmqC9",1]],"weight_threshold":1}
creatorsteem
delegation301000.000000 VESTS
extensions[]
fee1.000 STEEM
json metadata
memo keySTM6n6uDmBacbpEeE2752ooGdFnyU6c6L7d79EZYDF1ZpBnHmqLHK
new account nameabhijeetmalamkar
owner{"account_auths":[],"key_auths":[["STM7SwGgt1PBDdphLmSdS1gUTH9tJrtPf3hsn1Tt649nPJzcwHNZi",1]],"weight_threshold":1}
posting{"account_auths":[],"key_auths":[["STM7cNREeas1xwu73EybLAkBJ49ETvFrj1CYbFVZjVhvu12T5Nn7P",1]],"weight_threshold":1}
Transaction InfoBlock #12219124/Trx 67af9b40932ab14ba219fc83484a82aa35b7bbd4
View Raw JSON Data
{
  "block": 12219124,
  "op": [
    "account_create_with_delegation",
    {
      "active": {
        "account_auths": [],
        "key_auths": [
          [
            "STM58gPbe55iuapcAHZAotVNeJJKgoGHvVpfxGiDbXBgqxxobmqC9",
            1
          ]
        ],
        "weight_threshold": 1
      },
      "creator": "steem",
      "delegation": "301000.000000 VESTS",
      "extensions": [],
      "fee": "1.000 STEEM",
      "json_metadata": "",
      "memo_key": "STM6n6uDmBacbpEeE2752ooGdFnyU6c6L7d79EZYDF1ZpBnHmqLHK",
      "new_account_name": "abhijeetmalamkar",
      "owner": {
        "account_auths": [],
        "key_auths": [
          [
            "STM7SwGgt1PBDdphLmSdS1gUTH9tJrtPf3hsn1Tt649nPJzcwHNZi",
            1
          ]
        ],
        "weight_threshold": 1
      },
      "posting": {
        "account_auths": [],
        "key_auths": [
          [
            "STM7cNREeas1xwu73EybLAkBJ49ETvFrj1CYbFVZjVhvu12T5Nn7P",
            1
          ]
        ],
        "weight_threshold": 1
      }
    }
  ],
  "op_in_trx": 0,
  "timestamp": "2017-05-24T20:54:24",
  "trx_id": "67af9b40932ab14ba219fc83484a82aa35b7bbd4",
  "trx_in_block": 7,
  "virtual_op": 0
}

Account Metadata

POSTING JSON METADATA
None
JSON METADATA
None
{
  "posting_json_metadata": {},
  "json_metadata": {}
}

Auth Keys

Owner
Single Signature
Public Keys
STM8U5aqk9UUcoUeL9Yc467A9TEtHP1DMdZKGGwM637BYyVapDAMQ1/1
Active
Single Signature
Public Keys
STM5iLiF7ei9wG4RMf1dD891Z1KWFXdcTA8XNvSnDzYwQ7vuiWBvt1/1
Posting
Single Signature
Public Keys
STM5JAUVjoVaxe48yefjvDbdqxiPA6ASSFtS4QsA6XnRbrbbs8qAW1/1
Memo
STM7YV95LMWKMizH7EfkdyAzA2CA5dqYV1j9UqpZh3TccT9RhmscA
{
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM8U5aqk9UUcoUeL9Yc467A9TEtHP1DMdZKGGwM637BYyVapDAMQ",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5iLiF7ei9wG4RMf1dD891Z1KWFXdcTA8XNvSnDzYwQ7vuiWBvt",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM5JAUVjoVaxe48yefjvDbdqxiPA6ASSFtS4QsA6XnRbrbbs8qAW",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "memo": "STM7YV95LMWKMizH7EfkdyAzA2CA5dqYV1j9UqpZh3TccT9RhmscA"
}

Witness Votes

0 / 30
No active witness votes.
[]