مستندات سیبچه
به مستندات سیبچه خوش آمدید.
در صورتی که توسعهدهنده یونیتی هستید، مستندات مربوط به خود را میتوانید از منوی سمت راست با انتخاب مورد «نصب کیت توسعهدهندگان یونیتی» پیدا کنید؛ همچنین اگر توسعهدهنده کرونا هستید، بایستی گزینه «نصب کیت توسعهدهندگان کرونا» را انتخاب کنید و در غیر اینصورت مستندات زیرشاخه «نصب کیت توسعهدهندگان» را بررسی و مطالعه نمایید.
موفق باشید :)
نصب کیت توسعهدهندگان
نیازمندیهای نصب کیت توسعهدهندگان
- بارگذاری برنامه در پنل توسعهدهندگان سیبچه
- دریافت کلید برنامه از پنل توسعهدهندگان
- آخرین نسخهی Xcode
نصب کیت توسعهدهندگان
نصب از طریق Cocoapods
کافی است دستور روبرو را بر روی فایل podfile خود اضافه نمایید:
pod 'SibcheStoreKit', '~> 4.1'
سپس پاد اضافهشده را نصب نمایید
pod repo update
pod install
نصب دستی
کیت توسعهدهندگان سیبچه را میتوانید از اینجا دانلود کرده و به پروژه خود اضافه کنید. برای اینکار فایل دانلود شده را از حالت زیپ در بیاورید. سپس فایل SibcheStoreKit.framework را به داخل پروژه خود کپی کرده و همانند زیر به پروژه اضافه نمایید:
سپس فایل پلاگین را انتخاب نموده و گزینه add
را بزنید. سپس همانند شکل زیر، از بخش General
از داخل تنظیمات پروژه، SibcheStoreKit.framework را از قسمت Linked Frameworks and Libraries
حذف نمایید:
سپس دکمه + از بخش Embedded Binaries
را انتخاب نموده و SibcheStoreKit.framework
را انتخاب نموده و دکمه Add
را بزنید. همانند عکسهای زیر:
تنظیمات اولیه
افزودن Scheme مختص برنامه شما
برای اضافه کردن scheme اختصاصی بایستی طبق مراحل زیر تنظیمات برنامه را داخل Xcode باز کرده و سپس به تب info مراجعه نمایید:
سپس همانند شکل، url اختصاصی اپلیکیشن را اضافه نمایید:
به جای test، نام دلخواهی را تنظیم کرده و به جای testapp بایستی scheme مورد نظرتان را وارد نمایید. به عنوان مثال scheme تنظیم شده تلگرام tg
و scheme تنظیم شده برای برنامه اینستاگرام instagram
میباشد. لیست کامل scheme برنامههای معروف را میتوانید از
اینجا
مشاهده نمایید.
افزودن کیت توسعهدهنده به AppDelegate
#import "AppDelegate.h"
#import <SibcheStoreKit/SibcheStoreKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[SibcheStoreKit initWithApiKey:YOUR_API_KEY withScheme:YOUR_SCHEME];
return YES;
}
import SibcheStoreKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
SibcheStoreKit.initWithApiKey(YOUR_API_KEY, withScheme: YOUR_SCHEME)
return true
}
ابتدا کد اجرای کیت توسعهدهندگان را داخل تابع didFinishLaunchingWithOptions
اضافه نمایید:
لازم به ذکر است که به جای YOUR_API_KEY
بایستی کلید برنامه گرفته شده از پنل توسعهدهندگان سیبچه را قرار دهید و به جای YOUR_SCHEME
واژه scheme اضافه شده در مرحله قبل را جایگذاری نمایید.
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
[SibcheStoreKit openUrl:url options:options];
return YES;
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
SibcheStoreKit.open(url, options: options)
return true
}
سپس امکان فراخوانی باز شدن url را نیز به کیت توسعهدهندگان بدهید:
کلاسهای مورد استفاده در کیت توسعهدهندگان
برای خرید، فعالسازی و استفاده از بستههای سیبچه، کلاسهای زیر ایجاد شده است که در ادامه در مورد هر کدام توضیحاتی ارائه خواهیم کرد.
SibchePackage
: این کلاس، نمایانگر بسته قابل خریدی هست که داخل پنل توسعهدهندگان اقدام به تعریفشان کردهاید.SibchePurchasePackage
: این کلاس، نمایانگر خرید متناظری از کاربر هست که به یک بسته SibchePackage اختصاص یافته است. این کلاس، شامل اطلاعات خرید، زمان خرید، و تاریخ انقضا و ... خواهد بود.SibcheError
: این کلاس، در مواقع رخداد خطا به شما ارجاع داده خواهد شد که شامل اطلاعات بیشتر از خطاهای رخ داده است. اطلاعاتی از قبیل خطا و Http status code و ...
SibchePackage
سه نوع بسته قابل خرید داریم که عبارتند از:
- بستههای قابل خرید مصرفی یا
SibcheConsumablePackage
: بستههایی که قابل مصرف هستند که خریداری شده و داخل بازی یا برنامه مصرف میشود. مانند بستهی ۵۰۰ سکه طلا یا شارژ قابل مصرف داخل برنامه.
این بسته ها تا زمانی که مصرف نشدهاند، فعال و معتبر میباشند و پس از مصرف، قابل خرید مجدد هستند.
- بستههای قابل خرید غیر مصرفی یا
SibcheNonConsumablePackage
: بستههایی که قابل مصرف نیستند و فقط یکبار خریداری میشوند. مانند بستهی باز شدن قابلیت آپلود آواتار یا تغییر نام.
این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بستههای فعال کاربر خواهند بود.
- بستههای اشتراک یا
SibcheSubscriptionPackage
: بستههایی هستند که به مدت محدود قابل استفاده بوده و پس از اتمام زمان آنها، کاربر مجاز به استفاده از آن قابلیت نیست. به عنوان مثال، قابلیت استفاده از امکانات ویژه به مدت یک سال
- (NSString*)packageId;
- (NSString*)type;
- (NSString*)code;
- (NSString*)name;
- (NSString*)packageDescription;
- (NSNumber*)price;
- (NSNumber*)totalPrice;
- (NSNumber*)discount;
var packageId: String
var type: String
var code: String
var name: String
var packageDescription: String
var price: NSNumber
var totalPrice: NSNumber
var discount: NSNumber
همه این سه مدل از مدل والد SibchePackage
گرفته شدهاند و به صورت عمومی شامل توابع روبرو هستند.
- (NSNumber*)duration;
- (NSString*)group;
var duration: String
var group: String
علاوه بر این توابع، کلاس SibcheSubscriptionPackage
شامل توابع اضافی تر روبرو نیز هست:
SibchePurchasePackage
- (NSString*)purchasePackageId;
- (NSString*)type;
- (NSString*)code;
- (NSDate*)expireAt;
- (NSDate*)createdAt;
- (SibchePackage*)package;
var purchasePackageId: String
var type: String
var code: String
var expireAt: NSDate
var createdAt: NSDate
var package: SibchePackage
این کلاس، شامل تناظر خرید کاربر به بستههای شما میباشد. این کلاس شامل توابع روبروست:
SibcheError
@property NSNumber* errorCode;
@property NSString* message;
@property NSNumber* statusCode;
var NSNumber: errorCode
var message: String
var NSNumber: statusCode
این کلاس در مواقع بروز خطا به شما داده خواهد شد و شامل خصوصیات روبرو میباشد:
- errorCode: همان شماره خطایی هست که مطابق جدول زیر ایجاد شده است.
- message: پیغام خطایی هست که از طرف سرور دریافت شده است.
- statusCode: همان شماره خطای http هست که سرور در جواب درخواست ما داده است.
شماره errorCode | دلیل خطای مربوطه |
---|---|
1000 | خطای نامشخص |
1001 | این بسته قبلا خریداری شده است |
1002 | کاربر از ادامه عملیات منصرف شد |
1003 | در فرایند ورود (لاگین) دچار مشکل شدهایم |
1004 | برنامه به درستی initiate نشده است |
گرفتن لیست بستههای قابل خرید
[SibcheStoreKit fetchInAppPurchasePackages:^(BOOL isSuccessful, SibcheError* error, NSArray *packagesArray) {
// Your block code for handling of packages list
}];
SibcheStoreKit.fetch { (isSuccessful, error, packagesArray) in
// Your block code for handling of packages list
}
پس از تنظیم برنامه، میتوانید بستههای قابل خرید را مشاهده نمایید. کافیست همانند کد روبرو اقدام به فراخوانی تابع مورد نظر نمایید:
در پاسخ، در صورت موفقیت، کیت توسعهدهندگان بستههای قابل خرید را به عنوان پارامتر پاسخ به شما تحویل میدهد. این پارامتر آرایهای از بستههای قابل خرید میباشد. این بستهها از نوع SibchePackage
هستند.
در صورت ناموفق بودن درخواست، پارمتری با نام error از نوع SibcheError
ارسال میشود.
گرفتن اطلاعات بسته مشخص
// Both package bundle code & package id is acceptable
[SibcheStoreKit fetchInAppPurchasePackage:@"com.example.testapp" withPackagesCallback:^(BOOL isSuccessful, SibcheError* error, SibchePackage *package) {
// Your block code for handling of packages list
}];
// Both package bundle code & package id is acceptable
SibcheStoreKit.fetch(inAppPurchasePackage: "com.example.testapp") { (isSuccessful, error, package) in
// Your block code for handling of packages list
}
با در اختیار داشتن آیدی یا کد باندل بسته مورد نظر میتوانید اطلاعات آن بسته را در اختیار بگیرید. نحوه استفاده از این API به شکل روبرو است:
پارامتر اول داده شده، همان callback ارسال شده ما است که پس از مشخص شدن وضعیت درخواست، فراخوانی خواهد شد. در صورت موفقیت، بستهی مورد نظر در قالب آبجکت SibchePackage
(بسته به نوع بسته) به شما ارسال خواهد شد.
خرید بسته مشخص
// Both package bundle code & package id is acceptable
[SibcheStoreKit purchasePackage:@"com.example.testapp" withCallback:^(BOOL isSuccessful, SibcheError* error, SibchePurchasePackage* purchasePackage) {
// Your block code for handling of purchase callback
}];
// Both package bundle code & package id is acceptable
SibcheStoreKit.purchasePackage("com.example.testapp") { (isSuccessful, error, purchasePackage) in
// Your block code for handling of purchase callback
}
پس از گرفتن لیست بستهها، میتوانید درخواست خرید این بستهها را از طریق کد روبرو به کیت توسعهدهندگان بدهید. در ادامه، کیت توسعهدهندگان، در صورت نیاز کاربر را لاگین کرده و فرایند پرداخت را پیگیری خواهد کرد. سپس موفق یا ناموفق بودن خرید را به همراه SibchePurchasePackage
به اطلاع شما خواهد رساند.
گرفتن لیست بسته های خریداری شده
[SibcheStoreKit fetchActiveInAppPurchasePackages:^(BOOL isSuccessful, SibcheError* error, NSArray *purchasePackagesArray) {
// Your block code for handling of packages list
}];
SibcheStoreKit.fetchActive { (isSuccessful, error, purchasePackagesArray) in
// Your block code for handling of packages list
}
با استفاده از این دستور، میتوانید لیست بستههای فعال (خریداری شده) کاربر را بدست آورید. کافیست همانند کد روبر، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در پاسخ، کیت توسعهدهندگان موفقیت/عدم موفقیت درخواست و نیز آرایهای از بستههای خریداری شدهی فعال را برمیگرداند. توجه نمایید که این آرایه، آرایهای از نوع SibchePurchasePackage
است.
منظور از بستههای فعال، بستههایی هستند که خریداری شدهاند و هنوز مصرف نشدهاند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بستههای فعال برای هر کدام از نوع بستهها به شرح زیر میباشد:
SibcheConsumablePackage
: بستههایی که خریداری شدهاند ولی هنوز مصرف (Consume) نشدهاند.SibcheNonConsumablePackage
: بستههایی که خریداری شدهاند. چون این بستهها یکبار خرید هستند، در صورت خرید، به صورت مادامالعمر فعال هستند.SibcheSubscriptionPackage
: بستههایی که خریداری شدهاند ولی هنوز از تاریخ انقضای آنها باقی مانده است.
مصرف کردن بستهها در سمت کلاینت
[SibcheStoreKit consumePurchasePackage:purchasePackageData.purchasePackageId withCallback:^(BOOL isSuccessful, SibcheError* error) {
// Your block code for handling of package consume
}];
SibcheStoreKit.consumePurchasePackage(purchasePackageData.purchasePackageId) { (isSuccessful, error) in
// Your block code for handling of package consume
}
برای مصرف کردن بستههای قابل مصرف (Consumable) بایستی شبیه دستور زیر، تابع مربوطه از کیت توسعهدهندگان را فراخوانی کنیم:
در پاسخ پس از مشخص شدن وضعیت درخواست، کیت توسعهدهندگان callback داده شده را فراخوانی خواهد کرد. در صورت موفقیت، یعنی بسته مورد نظر با موفقیت مصرف شده و در صورت عدم موفقیت، در مصرف بسته مورد نظر، دچار مشکلی شدهایم.
مصرف کردن بستهها در سمت سرور
برای این کار بایستی، کد purchasePackageId
که بخشی از کلاس SibchePurchasePackage
میباشد را در دست داشته باشید. سپس لینکی به شکل زیر درست کنید و دیتای وریفای را از سرور بگیرید (آدرسها Case sensitive هستند!):
https://api.sibche.com/sdk/userInAppPurchasePackages/{purchasePackageId}/verifyConsume
همچنین برای این درخواست، بایستی هدر HTTP با اسم App-Key
تنظیم نمایید. این کلید از طریق پنل توسعهدهندگان به صورت اختصاصی برای هر برنامه قابل دریافت است. اسم این کلید، کلید سرور نام دارد و عبارت ۳۰ کاراکتری است.
curl --header "App-Key: YOUR_SERVER_KEY" -X POST \
'https://api.sibche.com/sdk/userInAppPurchasePackages/1/verifyConsume'
نمونه کد قابل فراخوانی برای curl به شکل روبرو خواهد بود:
در جواب، سرور پاسخی با یکی از HTTP Response Code های زیر خواهد داد:
{
"message" : "your package is already is used or not found",
"status_code" : 404
}
- HTTP Status Code 404 (Not Found):
در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
{
"message" : "app-key is not valid",
"status_code" : 401
}
- HTTP Status Code 401 (Unauthorized): یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
- HTTP Status Code 202 (Accepted / OK): در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت، سرور در متن پاسخ، هیچ نوشتهای بر نخواهد گرداند.
درخواست وارد شدن (Login) کاربر به کیت توسعهدهندگان سیبچه
[SibcheStoreKit loginUser:^(BOOL isLoginSuccessful, SibcheError* error, NSString *userName, NSString *userId) {
// Your code for handling of login result
}];
SibcheStoreKit.loginUser { (isLogginSuccessful, error, userName, userId) in
// Your code for handling of login result
}
با استفاده از این دستور، میتوانید به کتابخانه سیبچه، درخواست لاگین کاربر را بدهید. کافیست همانند کد روبر، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در جواب، کیت توسعهدهندگان، موفقیت لاگین و اروری که بهش برخورده را برمیگرداند. همچنین، در صورت موفقیت و در صورت موجود بودن، نام کاربر و آیدی کاربر را برمیگرداند.
درخواست خارج شدن (Logout) کاربر از کیت توسعهدهندگان سیبچه
[SibcheStoreKit logoutUser:^{
// Your code for handling of logout result
}];
SibcheStoreKit.logoutUser {
// Your code for handling of logout result
}
با استفاده از این دستور میتوانید کاربر فعلی لاگین کرده داخل سیستم را از کیت توسعهدهندگان خارج نمایید و کلیه اطلاعات session او را پاک نمایید. این تابع پس از اتمام کار، در قالب callback به شما جواب خواهد داد.
گرفتن اطلاعات کاربر فعلی
[SibcheStoreKit getCurrentUserData:^(BOOL isSuccessful, SibcheError *error, LoginStatusType loginStatus, NSString *userCellphoneNumber, NSString *userId) {
// Your code for handling of get current user data result
}];
SibcheStoreKit.getCurrentUserData { (isSuccessful, error, loginStatus, userCellphoneNumber, userId) in
// Your code for handling of get current user data result
}
زمانی که نیاز دارید تا شماره تلفن و نیز شماره کاربری (userId) کاربر را دریافت نمایید، میتوانید از تابع روبرو استفاده نمایید.
در جواب، کیت توسعهدهندگان، نتیجه موفق بودن عملیات و نیز ارور رخ داده را برمیگرداند. در حالت عادی، بایستی عملیات موفق باشد ولی ناموفق بودن عملیات میتواند به دلایل شبکهای مختلفی همانند موارد زیر باشد:
- دسترسی به اینترنت مقدور نبود
- هر اتفاق ناخواسته شبکهای رخ داده است
- سرور سیبچه در دسترس نیست
همچنین در جواب، پارامتر سومی هم دارد که وضعیت کاربر را از لحاظ لاگین بودن/نبودن به اطلاع شما میرساند. در صورتی که لاگین باشد، از نوع loginStatusTypeIsLoggedIn
جواب خواهد داد. در صورت لاگین نبودن نیز جواب داده شده از نوع loginStatusTypeIsLoggedOut
میباشد. در صورتی که عملیات ناموفق باشد و از وضعیت لاگین بودن کاربر مطمئن نباشیم نیز جواب loginStatusTypeHaveTokenButFailedToCheck
را خواهیم داد.
پارامترهای بعدی نیز شامل شماره تلفن کاربر و نیز id کاربر میباشد که در پاسخ به شما داده خواهد شد.
نصب کیت توسعهدهندگان یونیتی
نیازمندیهای نصب کیت توسعهدهندگان یونیتی
- بارگذاری برنامه در پنل توسعهدهندگان سیبچه
- دریافت کلید برنامه از پنل توسعهدهندگان
- آخرین نسخهی Xcode
- داشتن unity v2019.1 به بالا
نصب کیت توسعهدهندگان یونیتی
کیت توسعهدهندگان سیبچه مختص یونیتی را میتوانید از اینجا دانلود کرده و به پروژه خود اضافه کنید.
تنظیمات اولیه (یونیتی)
تنظیمات مورد نیاز پروژه به صورت خودکار داخل پروژه در زیربخش
Editor
اضافه شده است که فایلی با نام
SibcheBuildPostProcessor.cs
میباشد.
این فایل شامل دو بخش تنظیم میباشد که یکی برای اضافه کردن scheme یا همان url اختصاصی برای بازی شما میباشد و بخش دیگر، برای اضافه کردن فایل پروژه به صورت داینامیک به پروژه میباشد. در مورد هر دو بخش به تفضیل توضیح خواهیم داد.
افزودن Scheme مختص برنامه شما
AddCustomUrlScheme(path, "testapp", "test");
همانند کد روبرو میتوانید url اختصاصی خود را بر روی پروژه تنظیم نمایید.
به جای test، نام دلخواهی را تنظیم کرده و به جای testapp بایستی scheme مورد نظرتان را وارد نمایید. به عنوان مثال scheme تنظیم شده تلگرام tg
و scheme تنظیم شده برای برنامه اینستاگرام instagram
میباشد. لیست کامل scheme برنامههای معروف را میتوانید از
اینجا
مشاهده نمایید.
افزودن فایل .framework به عنوان کتابخانه دینامیک (embedded framework)
AddSibcheFrameworkAsEmbed(path);
این بخش نیز کلیه تنظیمات مربوط به دینامیک کردن پروژه را انجام داده و کافیست اجازه دهید به همان شکلی که هست باقی بماند:
افزودن init اولیه کتابخانه سیبچه
using SibcheStoreKit;
public class GameController : MonoBehaviour
{
// ...
private void Start()
{
//Other initiation tasks
// Sibche StoreKit initiation
Sibche.Initialize(YOUR_API_KEY, YOUR_SCHEME);
}
// ...
}
در جایی از ورودی کلاس اصلی (تابع Start) بایستی تابع init کتابخانه سیبچه را فراخوانی نمایید تا برای استفادههای آتی آماده شده باشد:
به جای YOUR_API_KEY
بایستی api key دریافت شده از پنل دولوپری سیبچه را وارد نمایید. همچنین به جای YOUR_SCHEME
بایستی scheme تعریف شده از مراحل قبلی را وارد نمایید.
کلاسهای مورد استفاده در کیت توسعهدهندگان (یونیتی)
برای خرید، فعالسازی و استفاده از بستههای سیبچه، کلاسهای زیر ایجاد شده است که در ادامه در مورد هر کدام توضیحاتی ارائه خواهیم کرد.
SibchePackage
: این کلاس، نمایانگر بسته قابل خریدی هست که داخل پنل توسعهدهندگان اقدام به تعریفشان کردهاید.SibchePurchasePackage
: این کلاس، نمایانگر خرید متناظری از کاربر هست که به یک بسته SibchePackage اختصاص یافته است. این کلاس، شامل اطلاعات خرید، زمان خرید، و تاریخ انقضا و ... خواهد بود.SibcheError
:این کلاس، در مواقع رخداد خطا به شما ارجاع داده خواهد شد که شامل اطلاعات بیشتر از خطاهای رخ داده است. اطلاعاتی از قبیل خطا و Http status code و ...
SibchePackage
سه نوع بسته قابل خرید داریم که عبارتند از:
-
بستههای قابل خرید مصرفی یا
SibcheConsumablePackage
: بستههایی که قابل مصرف هستند که خریداری شده و داخل بازی یا برنامه مصرف میشود. مانند بستهی ۵۰۰ سکه طلا یا شارژ قابل مصرف داخل برنامه.
این بسته ها تا زمانی که مصرف نشدهاند، فعال و معتبر میباشند و پس از مصرف، قابل خرید مجدد هستند.
-
بستههای قابل خرید غیر مصرفی یا
SibcheNonConsumablePackage
: بستههایی که قابل مصرف نیستند و فقط یکبار خریداری میشوند. مانند بستهی باز شدن قابلیت آپلود آواتار یا تغییر نام.
این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بستههای فعال کاربر خواهند بود.
-
بستههای اشتراک یا
SibcheSubscriptionPackage
: بستههایی هستند که به مدت محدود قابل استفاده بوده و پس از اتمام زمان آنها، کاربر مجاز به استفاده از آن قابلیت نیست. به عنوان مثال، قابلیت استفاده از امکانات ویژه به مدت یک سال
public string packageId;
public string type;
public string code;
public string name;
public string packageDescription;
public int price;
public int totalPrice;
public int discount;
همه این سه کلاس از کلاس والد SibchePackage
گرفته شدهاند و به صورت عمومی شامل خصوصیات روبرو هستند.
public int duration;
public string group;
علاوه بر این توابع، کلاس SibcheSubscriptionPackage
شامل خصوصیات اضافیتر روبرو نیز هست:
SibchePurchasePackage
public string purchasePackageId;
public string type;
public string code;
public DateTime expireAt;
public DateTime createdAt;
public SibchePackage package;
این کلاس، شامل تناظر خرید کاربر به بستههای شما میباشد. این کلاس شامل خصوصیات روبرو است:
SibcheError
public string message;
public int errorCode;
public int statusCode;
این کلاس در مواقع بروز خطا به شما داده خواهد شد و شامل خصوصیات روبرو میباشد:
- errorCode: همان شماره خطایی هست که مطابق جدول زیر ایجاد شده است.
- message: پیغام خطایی هست که از طرف سرور دریافت شده است.
- statusCode: همان شماره خطای http هست که سرور در جواب درخواست ما داده است.
شماره errorCode | دلیل خطای مربوطه |
---|---|
1000 | خطای نامشخص |
1001 | این بسته قبلا خریداری شده است |
1002 | کاربر از ادامه عملیات منصرف شد |
1003 | در فرایند ورود (لاگین) دچار مشکل شدهایم |
1004 | برنامه به درستی initiate نشده است |
گرفتن لیست بستههای قابل خرید (یونیتی)
Sibche.FetchPackages((bool isSuccessful, SibcheError error, List<SibchePackage> packages) =>
{
if (isSuccessful)
{
// Success block
} else
{
// failure block
Debug.Log(error.message);
}
});
پس از تنظیم برنامه، میتوانید بستههای قابل خرید را مشاهده نمایید. کافیست همانند کد روبرو، اقدام به فراخوانی تابع مورد نظر نمایید:
در پاسخ، در صورت موفقیت، کیت توسعهدهندگان بستههای قابل خرید را به عنوان پارامتر پاسخ به شما تحویل میدهد. این پارامتر آرایهای از بستههای قابل خرید میباشد. این بستهها از نوع SibchePackage
هستند.
در صورت ناموفق بودن درخواست، پارمتری با نام error از نوع SibcheError
ارسال میشود، وگرنه به صورت null داده خواهد شد.
گرفتن اطلاعات بسته مشخص (یونیتی)
// Both package bundle code & package id is acceptable
Sibche.FetchPackage(packageId, (bool isSuccessful1, SibcheError error, SibchePackage package) =>
{
if (isSuccessful)
{
// Success block
} else
{
// failure block
Debug.Log(error.message);
}
});
با در اختیار داشتن آیدی یا کد باندل بسته مورد نظر میتوانید اطلاعات آن بسته را در اختیار بگیرید. نحوه استفاده از این API به شکل روبرو است:
پارامتر اول داده شده، همان callback ارسال شده ما است که پس از مشخص شدن وضعیت درخواست، فراخوانی خواهد شد. در صورت موفقیت، بستهی مورد نظر در قالب آبجکت SibchePackage
(بسته به نوع بسته) به شما ارسال خواهد شد.
خرید بسته مشخص (یونیتی)
Sibche.Purchase(packageCode, (bool isSuccessful, SibcheError error, SibchePurchasePackage purchasedPackage) =>
{
if (isSuccessful)
{
// Success block
} else
{
// failure block
Debug.Log(error.message);
}
});
پس از گرفتن لیست بستهها، میتوانید درخواست خرید این بستهها را از طریق کد روبرو به کیت توسعهدهندگان بدهید.
در ادامه، کیت توسعهدهندگان، در صورت نیاز کاربر را لاگین کرده و فرایند پرداخت را پیگیری خواهد کرد. سپس موفق یا ناموفق بودن خرید را به همراه SibchePurchasePackage
به اطلاع شما خواهد رساند.
گرفتن لیست بسته های خریداری شده (یونیتی)
Sibche.FetchActivePackages((bool isSuccessful, SibcheError error, List<SibchePurchasePackage> purchasedPackages) =>
{
if (isSuccessful)
{
// Success block
} else
{
// failure block
Debug.Log(error.message);
}
});
با استفاده از این دستور، میتوانید لیست بستههای فعال (خریداری شده) کاربر را بدست آورید. کافیست همانند کد روبرو، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در پاسخ، کیت توسعهدهندگان موفقیت/عدم موفقیت درخواست و نیز آرایهای از بستههای خریداری شدهی فعال را برمیگرداند. توجه نمایید که این آرایه، آرایهای از نوع SibchePurchasePackage
است.
منظور از بستههای فعال، بستههایی هستند که خریداری شدهاند و هنوز مصرف نشدهاند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بستههای فعال برای هر کدام از نوع بستهها به شرح زیر میباشد:
SibcheConsumablePackage
: بستههایی که خریداری شدهاند ولی هنوز مصرف (Consume) نشدهاند.SibcheNonConsumablePackage
: بستههایی که خریداری شدهاند. چون این بستهها یکبار خرید هستند، در صورت خرید، به صورت مادامالعمر فعال هستند.SibcheSubscriptionPackage
: بستههایی که خریداری شدهاند ولی هنوز از تاریخ انقضای آنها باقی مانده است.
مصرف کردن بستهها در سمت کلاینت (یونیتی)
Sibche.Consume(purchasedPackage.purchasePackageId, (bool isSuccessful, SibcheError error) =>
{
if (isSuccessful)
{
// Success block
} else
{
// failure block
Debug.Log(error.message);
}
});
برای مصرف کردن بستههای قابل مصرف (Consumable) بایستی شبیه دستور روبرو، تابع مربوطه از کیت توسعهدهندگان را فراخوانی کنیم:
در پاسخ پس از مشخص شدن وضعیت درخواست، کیت توسعهدهندگان callback داده شده را فراخوانی خواهد کرد. در صورت موفقیت، یعنی بسته مورد نظر با موفقیت مصرف شده و در صورت عدم موفقیت، در مصرف بسته مورد نظر، دچار مشکلی شدهایم.
مصرف کردن بستهها در سمت سرور (یونیتی)
برای این کار بایستی، کد purchasePackageId
که بخشی از کلاس SibchePurchasePackage
میباشد را در دست داشته باشید. سپس لینکی به شکل زیر درست کنید و دیتای وریفای را از سرور بگیرید (آدرسها Case sensitive هستند!):
https://api.sibche.com/sdk/userInAppPurchasePackages/{purchasePackageId}/verifyConsume
همچنین برای این درخواست، بایستی هدر HTTP با اسم App-Key
تنظیم نمایید. این کلید از طریق پنل توسعهدهندگان به صورت اختصاصی برای هر برنامه قابل دریافت است. اسم این کلید، کلید سرور نام دارد و عبارت ۳۰ کاراکتری است.
curl --header "App-Key: YOUR_SERVER_KEY" -X POST \
'https://api.sibche.com/sdk/userInAppPurchasePackages/1/verifyConsume'
نمونه کد قابل فراخوانی برای curl به شکل روبرو خواهد بود:
در جواب، سرور پاسخی با یکی از HTTP Response Code های روبرو خواهد داد:
- HTTP Status Code 404 (Not Found):
{
"message" : "your package is already is used or not found",
"status_code" : 404
}
در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
- HTTP Status Code 401 (Unauthorized):
{
"message" : "app-key is not valid",
"status_code" : 401
}
یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
- HTTP Status Code 202 (Accepted / OK):
در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت، سرور در متن پاسخ، هیچ نوشتهای بر نخواهد گرداند.
درخواست وارد شدن کاربر به کیت توسعهدهندگان سیبچه (یونیتی)
Sibche.Login((bool isLoginSuccessful, SibcheError error, string userName, string userId) =>
{
// Login handle block
});
با استفاده از این دستور، میتوانید به کتابخانه سیبچه، درخواست لاگین کاربر را بدهید. کافیست همانند کد روبرو، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در جواب، کیت توسعهدهندگان، موفقیت لاگین و اروری که بهش برخورده را برمیگرداند. همچنین، در صورت موفقیت و در صورت موجود بودن، نام کاربر و آیدی کاربر را برمیگرداند.
درخواست خارج شدن کاربر از کیت توسعهدهندگان سیبچه (یونیتی)
Sibche.Logout(() =>
{
// Logout handle block
});
با استفاده از این دستور میتوانید کاربر فعلی لاگین کرده داخل سیستم را از کیت توسعهدهندگان خارج نمایید و کلیه اطلاعات session او را پاک نمایید. این تابع پس از اتمام کار، در قالب callback به شما جواب خواهد داد.
گرفتن اطلاعات کاربر فعلی (یونیتی)
Sibche.GetCurrentUserData((bool isSuccessful, SibcheError error, LoginStatusType loginStatus, string userCellphoneNumber, string userId) =>
{
// GetCurrentUserData handle block
});
زمانی که نیاز دارید تا شماره تلفن و نیز شماره کاربری (userId) کاربر را دریافت نمایید، میتوانید از تابع روبرو استفاده نمایید.
در جواب، کیت توسعهدهندگان، نتیجه موفق بودن عملیات و نیز ارور رخ داده را برمیگرداند. در حالت عادی، بایستی عملیات موفق باشد ولی ناموفق بودن عملیات میتواند به دلایل شبکهای مختلفی همانند موارد زیر باشد:
- دسترسی به اینترنت مقدور نبود
- هر اتفاق ناخواسته شبکهای رخ داده است
- سرور سیبچه در دسترس نیست
همچنین در جواب، پارامتر سومی هم دارد که وضعیت کاربر را از لحاظ لاگین بودن/نبودن به اطلاع شما میرساند. در صورتی که لاگین باشد، از نوع loginStatusTypeIsLoggedIn
جواب خواهد داد. در صورت لاگین نبودن نیز جواب داده شده از نوع loginStatusTypeIsLoggedOut
میباشد. در صورتی که عملیات ناموفق باشد و از وضعیت لاگین بودن کاربر مطمئن نباشیم نیز جواب loginStatusTypeHaveTokenButFailedToCheck
را خواهیم داد.
پارامترهای بعدی نیز شامل شماره تلفن کاربر و نیز id کاربر میباشد که در پاسخ به شما داده خواهد شد.
نصب کیت توسعهدهندگان کرونا
نیازمندیهای نصب پلاگین کرونا
- بارگذاری برنامه در پنل توسعهدهندگان سیبچه
- دریافت کلید برنامه از پنل توسعهدهندگان
- آخرین نسخهی Xcode
- داشتن آخرین نسخه از کرونا (نسخهی بالاتر از 2020.3577)
نصب پلاگین کرونا
اضافه کردن پلاگین سیبچه به پروژه کرونا
plugins =
{
["plugin.SibcheStoreKit"] =
{
publisherId = "com.sibche",
supportedPlatforms = {
iphone = { url="https://raw.githubusercontent.com/sibche/SibcheStoreKit-Corona/master/iphone.tgz" },
["iphone-sim"] = { url="https://raw.githubusercontent.com/sibche/SibcheStoreKit-Corona/master/iphone-sim.tgz" },
android = false,
macos = false,
win32 = false
},
},
},
برای نصب پلاگین سیبچه بایستی کد روبرو را داخل فایل build.settings
وارد نموده و سپس گزینه نصب پلاگینها (Download Plugins
) را از منوی Xcode نصب نمایید.
تنظیمات اولیه (کرونا)
افزودن Scheme مختص برنامه شما
برای اضافه کردن scheme اختصاصی بایستی طبق مراحل زیر تنظیمات برنامه را داخل Xcode باز کرده و سپس به تب info مراجعه نمایید:
سپس همانند شکل، url اختصاصی اپلیکیشن را اضافه نمایید:
به جای test، نام دلخواهی را تنظیم کرده و به جای testapp بایستی scheme مورد نظرتان را وارد نمایید. به عنوان مثال scheme تنظیم شده تلگرام tg
و scheme تنظیم شده برای برنامه اینستاگرام instagram
میباشد. لیست کامل scheme برنامههای معروف را میتوانید از
اینجا
مشاهده نمایید.
افزودن init اولیه کتابخانه سیبچه
local SibcheStoreKit = require "sibche.wrapper"
SibcheStoreKit.init(YOUR_API_KEY, YOUR_SCHEME)
بایستی در ابتدای برنامه، پلاگین سیبچه را وارد کرده و متد init
را همانند کد روبرو فراخوانی نمایید
به جای YOUR_API_KEY
بایستی api key دریافت شده از پنل دولوپری سیبچه را وارد نمایید. همچنین به جای YOUR_SCHEME
بایستی scheme تعریف شده از مراحل قبلی را وارد نمایید.
آبجکتهای مورد استفاده در پلاگین سیبچه (کرونا)
برای خرید، فعالسازی و استفاده از بستههای سیبچه، آبجکت (table) های زیر ایجاد شده است که در ادامه در مورد هر کدام توضیحاتی ارائه خواهیم کرد.
SibchePackage
: این آبجکت، نمایانگر بسته قابل خریدی هست که داخل پنل توسعهدهندگان اقدام به تعریفشان کردهاید.SibchePurchasePackage
: این آبجکت، نمایانگر خرید متناظری از کاربر هست که به یک بسته SibchePackage اختصاص یافته است. این آبجکت، شامل اطلاعات خرید، زمان خرید، و تاریخ انقضا و ... خواهد بود.SibcheError
:این آبجکت، در مواقع رخداد خطا به شما ارجاع داده خواهد شد که شامل اطلاعات بیشتر از خطاهای رخ داده است. اطلاعاتی از قبیل خطا و Http status code و ...
SibchePackage
سه نوع بسته قابل خرید داریم که عبارتند از:
-
بستههای قابل خرید مصرفی یا
SibcheConsumablePackage
: بستههایی که قابل مصرف هستند که خریداری شده و داخل بازی یا برنامه مصرف میشود. مانند بستهی ۵۰۰ سکه طلا یا شارژ قابل مصرف داخل برنامه.
این بسته ها تا زمانی که مصرف نشدهاند، فعال و معتبر میباشند و پس از مصرف، قابل خرید مجدد هستند.
-
بستههای قابل خرید غیر مصرفی یا
SibcheNonConsumablePackage
: بستههایی که قابل مصرف نیستند و فقط یکبار خریداری میشوند. مانند بستهی باز شدن قابلیت آپلود آواتار یا تغییر نام.
این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بستههای فعال کاربر خواهند بود.
-
بستههای اشتراک یا
SibcheSubscriptionPackage
: بستههایی هستند که به مدت محدود قابل استفاده بوده و پس از اتمام زمان آنها، کاربر مجاز به استفاده از آن قابلیت نیست. به عنوان مثال، قابلیت استفاده از امکانات ویژه به مدت یک سال
sibchePackage.packageId (string)
sibchePackage.type (string)
sibchePackage.code (string)
sibchePackage.name (string)
sibchePackage.packageDescription (string)
sibchePackage.price (int)
sibchePackage.totalPrice (int)
sibchePackage.discount (int)
همه این سه آبجکت از آبجکت والد SibchePackage
گرفته شدهاند و به صورت عمومی شامل خصوصیات روبرو هستند.
sibchePackage.duration (int)
sibchePackage.group (string)
علاوه بر این خصوصیات، آبجکت SibcheSubscriptionPackage
شامل خصوصیات اضافیتر روبرو نیز هست:
SibchePurchasePackage
sibchePurchasePackage.purchasePackageId (string)
sibchePurchasePackage.type (string)
sibchePurchasePackage.code (string)
sibchePurchasePackage.expireAt ()
sibchePurchasePackage.createdAt ()
sibchePurchasePackage.package (SibchePackage)
این آبجکت، شامل تناظر خرید کاربر به بستههای شما میباشد. این آبجکت شامل خصوصیات روبرو است:
SibcheError
event.errorMessage;
event.errorCode;
event.errorStatusCode;
این آبجکت در مواقع بروز خطا داخل همان پارامترهای callback به شما داده خواهد شد و شامل خصوصیات زیر میباشد:
- errorCode: همان شماره خطایی هست که مطابق جدول زیر ایجاد شده است.
- errorMessage: پیغام خطایی هست که از طرف سرور دریافت شده است.
- errorStatusCode: همان شماره خطای http هست که سرور در جواب درخواست ما داده است.
شماره errorCode | دلیل خطای مربوطه |
---|---|
1000 | خطای نامشخص |
1001 | این بسته قبلا خریداری شده است |
1002 | کاربر از ادامه عملیات منصرف شد |
1003 | در فرایند ورود (لاگین) دچار مشکل شدهایم |
1004 | برنامه به درستی initiate نشده است |
گرفتن لیست بستههای قابل خرید (کرونا)
local function fetchInAppPurchasePackagesCallback(event)
print(inspect(event))
if(event.isSuccessful) then
-- success block: e.g. fill packages with event.packagesArray
else
-- failure block: e.g. show error to user based on event.errorCode
end
end
SibcheStoreKit.fetchInAppPurchasePackages(fetchInAppPurchasePackagesCallback)
پس از تنظیم برنامه، میتوانید بستههای قابل خرید را مشاهده نمایید. کافیست همانند کد روبرو اقدام به فراخوانی تابع مورد نظر نمایید:
در پاسخ، در صورت موفقیت، پلاگین بستههای قابل خرید را به عنوان پارامتر پاسخ به شما تحویل میدهد. این پارامتر آرایهای از بستههای قابل خرید میباشد. این بستهها از نوع SibchePackage
هستند.
در صورت ناموفق بودن درخواست، پارمترهایی با نام errorMessage
و errorCode
و errorStatusCode
ارسال میشود، وگرنه به صورت null داده خواهد شد.
گرفتن اطلاعات بسته مشخص (کرونا)
local function fetchInAppPurchasePackageCallback(event)
print(inspect(event))
if(event.isSuccessful) then
-- success block: e.g. use event.package into your game
else
-- failure block: e.g. show error to user based on event.errorCode
end
end
SibcheStoreKit.fetchInAppPurchasePackage(ِYOUR_PACKAGE_ID_OR_CODE, fetchInAppPurchasePackageCallback)
با در اختیار داشتن آیدی یا کد باندل بسته مورد نظر میتوانید اطلاعات آن بسته را در اختیار بگیرید. نحوه استفاده از این API به شکل روبرو است:
پارامتر دوم داده شده، همان callback ارسال شده ما است که پس از مشخص شدن وضعیت درخواست، فراخوانی خواهد شد. در صورت موفقیت، بستهی مورد نظر در قالب آبجکت SibchePackage
(بسته به نوع بسته) به شما ارسال خواهد شد.
خرید بسته مشخص (کرونا)
local function purchasePackageCallback(event)
print(inspect(event))
if(event.isSuccessful and event.purchasePackage) then
-- success block
else
-- failure block
end
end
SibcheStoreKit.purchasePackage(ِYOUR_PACKAGE_ID_OR_CODE, purchasePackageCallback)
پس از گرفتن لیست بستهها، میتوانید درخواست خرید این بستهها را از طریق کد روبرو به پلاگین بدهید. در ادامه، کیت توسعهدهندگان، در صورت نیاز کاربر را لاگین کرده و فرایند پرداخت را پیگیری خواهد کرد. سپس موفق یا ناموفق بودن خرید را به همراه SibchePurchasePackage
به اطلاع شما خواهد رساند.
گرفتن لیست بسته های خریداری شده (کرونا)
local function fetchActiveInAppPurchasePackagesCallback( event )
print(inspect(event))
end
SibcheStoreKit.fetchActiveInAppPurchasePackages(fetchActiveInAppPurchasePackagesCallback)
با استفاده از این دستور، میتوانید لیست بستههای فعال (خریداری شده) کاربر را بدست آورید. کافیست همانند کد روبرو، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در پاسخ، کیت توسعهدهندگان موفقیت/عدم موفقیت درخواست و نیز آرایهای از بستههای خریداری شدهی فعال را برمیگرداند. توجه نمایید که این آرایه، آرایهای از نوع SibchePurchasePackage
است.
منظور از بستههای فعال، بستههایی هستند که خریداری شدهاند و هنوز مصرف نشدهاند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بستههای فعال برای هر کدام از نوع بستهها به شرح زیر میباشد:
SibcheConsumablePackage
: بستههایی که خریداری شدهاند ولی هنوز مصرف (Consume) نشدهاند.SibcheNonConsumablePackage
: بستههایی که خریداری شدهاند. چون این بستهها یکبار خرید هستند، در صورت خرید، به صورت مادامالعمر فعال هستند.SibcheSubscriptionPackage
: بستههایی که خریداری شدهاند ولی هنوز از تاریخ انقضای آنها باقی مانده است.
مصرف کردن بستهها در سمت کلاینت (کرونا)
local function consumePurchasePackageCallback( event )
print(inspect(event))
end
local function purchasePackageCallback( event )
print(inspect(event))
if(event.isSuccessful and event.purchasePackage) then
if(event.purchasePackage.package.type == "ConsumableInAppPackage") then
SibcheStoreKit.consumePurchasePackage(event.purchasePackage.purchasePackageId, consumePurchasePackageCallback)
end
end
end
SibcheStoreKit.purchasePackage(ِYOUR_PACKAGE_ID_OR_CODE, purchasePackageCallback)
برای مصرف کردن بستههای قابل مصرف (Consumable) بایستی شبیه دستور روبرو، تابع مربوطه از پلاگین را فراخوانی کنیم:
در پاسخ پس از مشخص شدن وضعیت درخواست، کیت توسعهدهندگان callback داده شده را فراخوانی خواهد کرد. در صورت موفقیت، یعنی بسته مورد نظر با موفقیت مصرف شده و در صورت عدم موفقیت، در مصرف بسته مورد نظر، دچار مشکلی شدهایم.
مصرف کردن بستهها در سمت سرور (یونیتی)
برای این کار بایستی، کد purchasePackageId
که بخشی از کلاس SibchePurchasePackage
میباشد را در دست داشته باشید. سپس لینکی به شکل زیر درست کنید و دیتای وریفای را از سرور بگیرید (آدرسها Case sensitive هستند!):
https://api.sibche.com/sdk/userInAppPurchasePackages/{purchasePackageId}/verifyConsume
همچنین برای این درخواست، بایستی هدر HTTP با اسم App-Key
تنظیم نمایید. این کلید از طریق پنل توسعهدهندگان به صورت اختصاصی برای هر برنامه قابل دریافت است. اسم این کلید، کلید سرور نام دارد و عبارت ۳۰ کاراکتری است.
curl --header "App-Key: YOUR_SERVER_KEY" -X POST \
'https://api.sibche.com/sdk/userInAppPurchasePackages/1/verifyConsume'
نمونه کد قابل فراخوانی برای curl به شکل روبرو خواهد بود:
در جواب، سرور پاسخی با یکی از HTTP Response Code های زیر خواهد داد:
- HTTP Status Code 404 (Not Found):
در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
{
"message" : "your package is already is used or not found",
"status_code" : 404
}
- HTTP Status Code 401 (Unauthorized):
یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
{
"message" : "app-key is not valid",
"status_code" : 401
}
- HTTP Status Code 202 (Accepted / OK):
در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت، سرور در متن پاسخ، هیچ نوشتهای بر نخواهد گرداند.
درخواست وارد شدن کاربر داخل پلاگین سیبچه (کرونا)
local function loginCallback(event)
print(inspect(event))
end
SibcheStoreKit.loginUser(loginCallback)
با استفاده از این دستور، میتوانید به کتابخانه سیبچه، درخواست لاگین کاربر را بدهید. کافیست همانند کد روبرو، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در جواب، پلاگین سیبچه، موفق بودن ورود (لاگین) و خطایی که با آن برخورد کرده را برمیگرداند. همچنین، در صورت موفقیت و در صورت موجود بودن، نام کاربر و آیدی کاربر را برمیگرداند.
درخواست خارج شدن کاربر از پلاگین سیبچه (کرونا)
local function logoutCallback(event)
print(inspect(event))
end
SibcheStoreKit.logoutUser(logoutCallback)
با استفاده از این دستور میتوانید کاربر فعلی لاگین کرده داخل سیستم را از پلاگین خارج نمایید و کلیه اطلاعات session او را پاک نمایید. این تابع پس از اتمام کار، در قالب callback به شما جواب خواهد داد.
گرفتن اطلاعات کاربر فعلی (کرونا)
local function getCurrentUserCallback(event)
print(inspect(event))
end
SibcheStoreKit.getCurrentUserData(getCurrentUserCallback)
زمانی که نیاز دارید تا شماره تلفن و نیز شماره کاربری (userId) کاربر را دریافت نمایید، میتوانید از تابع روبرو استفاده نمایید.
در جواب، کیت توسعهدهندگان، نتیجه موفق بودن عملیات و نیز ارور رخ داده را برمیگرداند. در حالت عادی، بایستی عملیات موفق باشد ولی ناموفق بودن عملیات میتواند به دلایل شبکهای مختلفی همانند موارد زیر باشد:
- دسترسی به اینترنت مقدور نبود
- هر اتفاق ناخواسته شبکهای رخ داده است
- سرور سیبچه در دسترس نیست
همچنین در جواب، پارامتر سومی هم دارد که وضعیت کاربر را از لحاظ لاگین بودن/نبودن به اطلاع شما میرساند. در صورتی که لاگین باشد، از نوع loginStatusTypeIsLoggedIn
جواب خواهد داد. در صورت لاگین نبودن نیز جواب داده شده از نوع loginStatusTypeIsLoggedOut
میباشد. در صورتی که عملیات ناموفق باشد و از وضعیت لاگین بودن کاربر مطمئن نباشیم نیز جواب loginStatusTypeHaveTokenButFailedToCheck
را خواهیم داد.
پارامترهای بعدی نیز شامل شماره تلفن کاربر و نیز id کاربر میباشد که در پاسخ به شما داده خواهد شد.
نصب کیت توسعهدهندگان ریاکت نیتیو
نیازمندیهای نصب کیت توسعهدهندگان
- بارگذاری برنامه در پنل توسعهدهندگان سیبچه
- دریافت کلید برنامه از پنل توسعهدهندگان
- آخرین نسخهی Xcode
نصب کیت توسعهدهندگان ریاکت نیتیو
npm install --save react-native-sibche-storekit
## OR
yarn add react-native-sibche-storekit
کافی است در داخل پروژه ریاکت خود دستور روبرو را اجرا نمایید. با این کار، پکیج سیبچه بر روی پروژه شما نصب خواهد شد.
سپس از طریق پاد، پلاگین سیبچه را نصب نمایید
pod repo update
pod install
تنظیمات اولیه
افزودن Scheme مختص برنامه شما
برای اضافه کردن scheme اختصاصی بایستی طبق مراحل زیر تنظیمات برنامه را داخل Xcode باز کرده و سپس به تب info مراجعه نمایید:
سپس همانند شکل، url اختصاصی اپلیکیشن را اضافه نمایید:
به جای test، نام دلخواهی را تنظیم کرده و به جای testapp بایستی scheme مورد نظرتان را وارد نمایید. به عنوان مثال scheme تنظیم شده تلگرام tg
و scheme تنظیم شده برای برنامه اینستاگرام instagram
میباشد. لیست کامل scheme برنامههای معروف را میتوانید از
اینجا
مشاهده نمایید.
افزودن کیت توسعهدهنده به AppDelegate
#import "AppDelegate.h"
#import <SibcheStoreKit/SibcheStoreKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[SibcheStoreKit initWithApiKey:YOUR_API_KEY withScheme:YOUR_SCHEME];
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"CallRecorder"
initialProperties:nil];
...
}
ابتدا کد اجرای کیت توسعهدهندگان را داخل تابع didFinishLaunchingWithOptions
اضافه نمایید:
(برای دیدن کد این قسمت، بایستی از تب بالا، زبان Objective-c را انتخاب نمایید)
لازم به ذکر است که به جای YOUR_API_KEY
بایستی کلید برنامه گرفته شده از پنل توسعهدهندگان سیبچه را قرار دهید و به جای YOUR_SCHEME
واژه scheme اضافه شده در مرحله قبل را جایگذاری نمایید.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
[SibcheStoreKit openUrl:url options:nil];
return [RCTLinkingManager application:application openURL:url
sourceApplication:sourceApplication annotation:annotation];
}
سپس امکان فراخوانی باز شدن url را نیز به کیت توسعهدهندگان بدهید:
کلاسهای مورد استفاده در کیت توسعهدهندگان
برای خرید، فعالسازی و استفاده از بستههای سیبچه، کلاسهای زیر ایجاد شده است که در ادامه در مورد هر کدام توضیحاتی ارائه خواهیم کرد.
SibchePackage
: این کلاس، نمایانگر بسته قابل خریدی هست که داخل پنل توسعهدهندگان اقدام به تعریفشان کردهاید.SibchePurchasePackage
: این کلاس، نمایانگر خرید متناظری از کاربر هست که به یک بسته SibchePackage اختصاص یافته است. این کلاس، شامل اطلاعات خرید، زمان خرید، و تاریخ انقضا و ... خواهد بود.SibcheError
: این کلاس، در مواقع رخداد خطا به شما ارجاع داده خواهد شد که شامل اطلاعات بیشتر از خطاهای رخ داده است. اطلاعاتی از قبیل خطا و Http status code و ...
SibchePackage
سه نوع بسته قابل خرید داریم که عبارتند از:
- بستههای قابل خرید مصرفی یا
SibcheConsumablePackage
: بستههایی که قابل مصرف هستند که خریداری شده و داخل بازی یا برنامه مصرف میشود. مانند بستهی ۵۰۰ سکه طلا یا شارژ قابل مصرف داخل برنامه.
این بسته ها تا زمانی که مصرف نشدهاند، فعال و معتبر میباشند و پس از مصرف، قابل خرید مجدد هستند.
- بستههای قابل خرید غیر مصرفی یا
SibcheNonConsumablePackage
: بستههایی که قابل مصرف نیستند و فقط یکبار خریداری میشوند. مانند بستهی باز شدن قابلیت آپلود آواتار یا تغییر نام.
این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بستههای فعال کاربر خواهند بود.
- بستههای اشتراک یا
SibcheSubscriptionPackage
: بستههایی هستند که به مدت محدود قابل استفاده بوده و پس از اتمام زمان آنها، کاربر مجاز به استفاده از آن قابلیت نیست. به عنوان مثال، قابلیت استفاده از امکانات ویژه به مدت یک سال
{
packageId: string,
type: string,
code: string,
name: string,
packageDescription: string,
price: number,
totalPrice: number,
discount: number
}
همه این سه مدل از مدل والد SibchePackage
گرفته شدهاند و به صورت عمومی شامل توابع روبرو هستند.
{
duration: number,
group: string
}
علاوه بر این توابع، کلاس SibcheSubscriptionPackage
شامل توابع اضافی تر روبرو نیز هست:
SibchePurchasePackage
{
purchasePackageId: string,
type: string,
code: string,
expireAt: number,
createdAt: number,
package: SibchePackage
}
این کلاس، شامل تناظر خرید کاربر به بستههای شما میباشد. این کلاس شامل توابع روبروست:
SibcheError
{
errorCode: number,
message: string,
statusCode: number
}
این کلاس در مواقع بروز خطا به شما داده خواهد شد و شامل خصوصیات روبرو میباشد:
- errorCode: همان شماره خطایی هست که مطابق جدول زیر ایجاد شده است.
- message: پیغام خطایی هست که از طرف سرور دریافت شده است.
- statusCode: همان شماره خطای http هست که سرور در جواب درخواست ما داده است.
شماره errorCode | دلیل خطای مربوطه |
---|---|
1000 | خطای نامشخص |
1001 | این بسته قبلا خریداری شده است |
1002 | کاربر از ادامه عملیات منصرف شد |
1003 | در فرایند ورود (لاگین) دچار مشکل شدهایم |
1004 | برنامه به درستی initiate نشده است |
گرفتن لیست بستههای قابل خرید
import SibcheStoreKit from "react-native-sibche-storekit";
SibcheStoreKit.fetchInAppPurchasePackages((isSuccessful, error, packagesArray) => {
console.log(isSuccessful, error, packagesArray);
});
پس از تنظیم برنامه، میتوانید بستههای قابل خرید را مشاهده نمایید. کافیست همانند کد روبرو اقدام به فراخوانی تابع مورد نظر نمایید:
در پاسخ، در صورت موفقیت، کیت توسعهدهندگان بستههای قابل خرید را به عنوان پارامتر پاسخ به شما تحویل میدهد. این پارامتر آرایهای از بستههای قابل خرید میباشد. این بستهها از نوع SibchePackage
هستند.
در صورت ناموفق بودن درخواست، پارمتری با نام error از نوع SibcheError
ارسال میشود.
گرفتن اطلاعات بسته مشخص
SibcheStoreKit.fetchInAppPurchasePackage(PACKAGE_ID_OR_CODE, (isSuccessful, error, packageItem) => {
console.log("=====> specific package", isSuccessful, error, packageItem);
});
با در اختیار داشتن آیدی یا کد باندل بسته مورد نظر میتوانید اطلاعات آن بسته را در اختیار بگیرید. نحوه استفاده از این API به شکل روبرو است:
پارامتر اول داده شده، همان callback ارسال شده ما است که پس از مشخص شدن وضعیت درخواست، فراخوانی خواهد شد. در صورت موفقیت، بستهی مورد نظر در قالب آبجکت SibchePackage
(بسته به نوع بسته) به شما ارسال خواهد شد.
خرید بسته مشخص
SibcheStoreKit.purchasePackage("ava.test", (isSuccessful, error, purchasePackage) => {
console.log("Result of purchase", isSuccessful, error, purchasePackage);
if (isSuccessful) {
// Success block
}else{
// Failure block
}
});
پس از گرفتن لیست بستهها، میتوانید درخواست خرید این بستهها را از طریق کد روبرو به کیت توسعهدهندگان بدهید. در ادامه، کیت توسعهدهندگان، در صورت نیاز کاربر را لاگین کرده و فرایند پرداخت را پیگیری خواهد کرد. سپس موفق یا ناموفق بودن خرید را به همراه SibchePurchasePackage
به اطلاع شما خواهد رساند.
گرفتن لیست بسته های خریداری شده
SibcheStoreKit.fetchActiveInAppPurchasePackages((isSuccessful, error, purchasePackagesArray) => {
console.log("=====> Active pacakges", isSuccessful, error, purchasePackagesArray);
});
با استفاده از این دستور، میتوانید لیست بستههای فعال (خریداری شده) کاربر را بدست آورید. کافیست همانند کد روبر، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در پاسخ، کیت توسعهدهندگان موفقیت/عدم موفقیت درخواست و نیز آرایهای از بستههای خریداری شدهی فعال را برمیگرداند. توجه نمایید که این آرایه، آرایهای از نوع SibchePurchasePackage
است.
منظور از بستههای فعال، بستههایی هستند که خریداری شدهاند و هنوز مصرف نشدهاند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بستههای فعال برای هر کدام از نوع بستهها به شرح زیر میباشد:
SibcheConsumablePackage
: بستههایی که خریداری شدهاند ولی هنوز مصرف (Consume) نشدهاند.SibcheNonConsumablePackage
: بستههایی که خریداری شدهاند. چون این بستهها یکبار خرید هستند، در صورت خرید، به صورت مادامالعمر فعال هستند.SibcheSubscriptionPackage
: بستههایی که خریداری شدهاند ولی هنوز از تاریخ انقضای آنها باقی مانده است.
مصرف کردن بستهها در سمت کلاینت
SibcheStoreKit.consumePurchasePackage(purchasePackage.purchasePackageId, (isSuccessful, error) => {
console.log("Result of consume", isSuccessful, error);
});
برای مصرف کردن بستههای قابل مصرف (Consumable) بایستی شبیه دستور روبرو، تابع مربوطه از کیت توسعهدهندگان را فراخوانی کنیم:
در پاسخ پس از مشخص شدن وضعیت درخواست، کیت توسعهدهندگان callback داده شده را فراخوانی خواهد کرد. در صورت موفقیت، یعنی بسته مورد نظر با موفقیت مصرف شده و در صورت عدم موفقیت، در مصرف بسته مورد نظر، دچار مشکلی شدهایم.
مصرف کردن بستهها در سمت سرور
برای این کار بایستی، کد purchasePackageId
که بخشی از کلاس SibchePurchasePackage
میباشد را در دست داشته باشید. سپس لینکی به شکل زیر درست کنید و دیتای وریفای را از سرور بگیرید (آدرسها Case sensitive هستند!):
https://api.sibche.com/sdk/userInAppPurchasePackages/{purchasePackageId}/verifyConsume
همچنین برای این درخواست، بایستی هدر HTTP با اسم App-Key
تنظیم نمایید. این کلید از طریق پنل توسعهدهندگان به صورت اختصاصی برای هر برنامه قابل دریافت است. اسم این کلید، کلید سرور نام دارد و عبارت ۳۰ کاراکتری است.
curl --header "App-Key: YOUR_SERVER_KEY" -X POST \
'https://api.sibche.com/sdk/userInAppPurchasePackages/1/verifyConsume'
نمونه کد قابل فراخوانی برای curl به شکل روبرو خواهد بود:
در جواب، سرور پاسخی با یکی از HTTP Response Code های زیر خواهد داد:
{
"message" : "your package is already is used or not found",
"status_code" : 404
}
- HTTP Status Code 404 (Not Found):
در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
{
"message" : "app-key is not valid",
"status_code" : 401
}
- HTTP Status Code 401 (Unauthorized): یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
- HTTP Status Code 202 (Accepted / OK): در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت، سرور در متن پاسخ، هیچ نوشتهای بر نخواهد گرداند.
درخواست وارد شدن (Login) کاربر به کیت توسعهدهندگان سیبچه
SibcheStoreKit.loginUser((isSuccessful, error, userName, userId) => {
if (isSuccessful) {
// Successful login
}else{
// Failed login
}
})
با استفاده از این دستور، میتوانید به کتابخانه سیبچه، درخواست لاگین کاربر را بدهید. کافیست همانند کد روبر، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
در جواب، کیت توسعهدهندگان، موفقیت لاگین و اروری که بهش برخورده را برمیگرداند. همچنین، در صورت موفقیت و در صورت موجود بودن، نام کاربر و آیدی کاربر را برمیگرداند.
درخواست خارج شدن (Logout) کاربر از کیت توسعهدهندگان سیبچه
SibcheStoreKit.logoutUser(() => {
console.log("Logging out finished");
})
با استفاده از این دستور میتوانید کاربر فعلی لاگین کرده داخل سیستم را از کیت توسعهدهندگان خارج نمایید و کلیه اطلاعات session او را پاک نمایید. این تابع پس از اتمام کار، در قالب callback به شما جواب خواهد داد.
گرفتن اطلاعات کاربر فعلی
SibcheStoreKit.getCurrentUserData((isSuccessful, error, loginStatus, userCellphoneNumber, userId) => {
console.log("Get current user data", isSuccessful, error, loginStatus, userCellphoneNumber, userId);
})
زمانی که نیاز دارید تا شماره تلفن و نیز شماره کاربری (userId) کاربر را دریافت نمایید، میتوانید از تابع روبرو استفاده نمایید.
در جواب، کیت توسعهدهندگان، نتیجه موفق بودن عملیات و نیز ارور رخ داده را برمیگرداند. در حالت عادی، بایستی عملیات موفق باشد ولی ناموفق بودن عملیات میتواند به دلایل شبکهای مختلفی همانند موارد زیر باشد:
- دسترسی به اینترنت مقدور نبود
- هر اتفاق ناخواسته شبکهای رخ داده است
- سرور سیبچه در دسترس نیست
همچنین در جواب، پارامتر سومی هم دارد که وضعیت کاربر را از لحاظ لاگین بودن/نبودن به اطلاع شما میرساند. در صورتی که لاگین باشد، از نوع loginStatusTypeIsLoggedIn
جواب خواهد داد. در صورت لاگین نبودن نیز جواب داده شده از نوع loginStatusTypeIsLoggedOut
میباشد. در صورتی که عملیات ناموفق باشد و از وضعیت لاگین بودن کاربر مطمئن نباشیم نیز جواب loginStatusTypeHaveTokenButFailedToCheck
را خواهیم داد.
پارامترهای بعدی نیز شامل شماره تلفن کاربر و نیز id کاربر میباشد که در پاسخ به شما داده خواهد شد.
نصب کیت توسعهدهندگان b4i
نیازمندیهای نصب کیت توسعهدهندگان b4i
- بارگذاری برنامه در پنل توسعهدهندگان سیبچه
- دریافت کلید برنامه از پنل توسعهدهندگان
- آخرین نسخهی Xcode
- داشتن آخرین نسخه b4i
نصب کیت توسعهدهندگان سیبچه برای b4i
کیت توسعهدهندگان سیبچه مختص b4i را میتوانید از اینجا دانلود کرده و به پروژه خود اضافه کنید.
برای نصب فریمورک سیبچه بایستی ابتدا فایل libiSibcheStoreKit.a
را از داخل فایل زیپ دانلود شده بالا برداشته و به پروژه Xcode خود اضافه نمایید. همچنین فایل SibcheStoreKit.framework
را نیز به پروژه Xcode خود اضافه نمایید.
سپس فایل پلاگین را انتخاب نموده و گزینه add
را بزنید. سپس همانند شکل زیر، از بخش General
از داخل تنظیمات پروژه، SibcheStoreKit.framework را از قسمت Linked Frameworks and Libraries
حذف نمایید:
سپس دکمه + از بخش Embedded Binaries
را انتخاب نموده و SibcheStoreKit.framework
را انتخاب نموده و دکمه Add
را بزنید. همانند عکسهای زیر:
تنظیمات اولیه (b4i)
Library2=isibchestorekit
Sub Process_Globals
Private ssk As SibcheStoreKit
End Sub
همانند کد روبرو، کیت توسعهدهندگان سیبچه را به پروژه b4i
خود اضافه نمایید
افزودن Scheme مختص برنامه شما
برای اضافه کردن scheme اختصاصی بایستی طبق مراحل زیر تنظیمات برنامه را داخل Xcode باز کرده و سپس به تب info مراجعه نمایید:
سپس همانند شکل، url اختصاصی اپلیکیشن را اضافه نمایید:
به جای test، نام دلخواهی را تنظیم کرده و به جای testapp بایستی scheme مورد نظرتان را وارد نمایید. به عنوان مثال scheme تنظیم شده تلگرام tg
و scheme تنظیم شده برای برنامه اینستاگرام instagram
میباشد. لیست کامل scheme برنامههای معروف را میتوانید از
اینجا
مشاهده نمایید.
افزودن init اولیه کتابخانه سیبچه
Private Sub Application_Start (Nav As NavigationController)
ssk.Initialize("ssk",YOUR_API_KEY,YOUR_SCHEME)
End Sub
در جایی از ورودی پروژه بایستی تابع init کتابخانه سیبچه را فراخوانی نمایید تا برای استفادههای آتی آماده شده باشد:
به جای YOUR_API_KEY
بایستی api key دریافت شده از پنل دولوپری سیبچه را وارد نمایید. همچنین به جای YOUR_SCHEME
بایستی scheme تعریف شده از مراحل قبلی را وارد نمایید.
کلاسهای مورد استفاده در کیت توسعهدهندگان (b4i)
برای خرید، فعالسازی و استفاده از بستههای سیبچه، کلاسهای زیر ایجاد شده است که در ادامه در مورد هر کدام توضیحاتی ارائه خواهیم کرد.
SibchePackage
: این کلاس، نمایانگر بسته قابل خریدی هست که داخل پنل توسعهدهندگان اقدام به تعریفشان کردهاید.SibchePurchasePackage
: این کلاس، نمایانگر خرید متناظری از کاربر هست که به یک بسته SibchePackage اختصاص یافته است. این کلاس، شامل اطلاعات خرید، زمان خرید، و تاریخ انقضا و ... خواهد بود.SibcheError
:این کلاس، در مواقع رخداد خطا به شما ارجاع داده خواهد شد که شامل اطلاعات بیشتر از خطاهای رخ داده است. اطلاعاتی از قبیل خطا و Http status code و ...
SibchePackage
سه نوع بسته قابل خرید داریم که عبارتند از:
-
بستههای قابل خرید مصرفی یا
SibcheConsumablePackage
: بستههایی که قابل مصرف هستند که خریداری شده و داخل بازی یا برنامه مصرف میشود. مانند بستهی ۵۰۰ سکه طلا یا شارژ قابل مصرف داخل برنامه.
این بسته ها تا زمانی که مصرف نشدهاند، فعال و معتبر میباشند و پس از مصرف، قابل خرید مجدد هستند.
-
بستههای قابل خرید غیر مصرفی یا
SibcheNonConsumablePackage
: بستههایی که قابل مصرف نیستند و فقط یکبار خریداری میشوند. مانند بستهی باز شدن قابلیت آپلود آواتار یا تغییر نام.
این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بستههای فعال کاربر خواهند بود.
-
بستههای اشتراک یا
SibcheSubscriptionPackage
: بستههایی هستند که به مدت محدود قابل استفاده بوده و پس از اتمام زمان آنها، کاربر مجاز به استفاده از آن قابلیت نیست. به عنوان مثال، قابلیت استفاده از امکانات ویژه به مدت یک سال
Public packageId As String
Public type As String
Public code As String
Public name As String
Public packageDescription As String
Public price As Int
Public totalPrice As Int
Public discount As Int
همه این سه کلاس از کلاس والد SibchePackage
گرفته شدهاند و به صورت عمومی شامل خصوصیات روبرو هستند.
Public duration As Int
Public group As String
علاوه بر این توابع، کلاس SibcheSubscriptionPackage
شامل خصوصیات اضافیتر روبرو نیز هست:
SibchePurchasePackage
Public purchasePackageId As String
Public type As String
Public code As String
Public expireAt As Date
Public createdAt As Date
Public package As SibchePackage
این کلاس، شامل تناظر خرید کاربر به بستههای شما میباشد. این کلاس شامل خصوصیات روبرو است:
SibcheError
Public message As String
Public errorCode As Int
Public statusCode As Int
این کلاس در مواقع بروز خطا به شما داده خواهد شد و شامل خصوصیات روبرو میباشد:
- errorCode: همان شماره خطایی هست که مطابق جدول زیر ایجاد شده است.
- message: پیغام خطایی هست که از طرف سرور دریافت شده است.
- statusCode: همان شماره خطای http هست که سرور در جواب درخواست ما داده است.
شماره errorCode | دلیل خطای مربوطه |
---|---|
1000 | خطای نامشخص |
1001 | این بسته قبلا خریداری شده است |
1002 | کاربر از ادامه عملیات منصرف شد |
1003 | در فرایند ورود (لاگین) دچار مشکل شدهایم |
1004 | برنامه به درستی initiate نشده است |
گرفتن لیست بستههای قابل خرید (b4i)
ssk.FetchAllInAppPurchasePackage
پس از تنظیم برنامه، میتوانید بستههای قابل خرید را مشاهده نمایید. کافیست همانند کد روبرو، اقدام به فراخوانی تابع مورد نظر نمایید:
Sub ssk_AllPackageListArrived (PackageList As List)
For Each package As SibchePackage In PackageList
Log(package.name)
Next
End Sub
در پاسخ، در صورت موفقیت، کیت توسعهدهندگان بستههای قابل خرید را در کالبک روبرو به شما تحویل میدهد. این پارامتر آرایهای از بستههای قابل خرید میباشد. این بستهها از نوع SibchePackage
هستند.
در صورت ناموفق بودن درخواست نیز، event خطا ارسال خواهد شد
گرفتن اطلاعات بسته مشخص (b4i)
ssk.FetchInAppPurchasePackage(packageId)
با در اختیار داشتن آیدی یا کد باندل بسته مورد نظر میتوانید اطلاعات آن بسته را در اختیار بگیرید. نحوه استفاده از این API به شکل روبرو است:
Sub ssk_PackageInfoArrived (Package As SibchePackage)
' code
End Sub
در پاسخ، در صورت موفقیت، کیت توسعهدهندگان اطلاعات بسته را در کالبک روبرو به شما تحویل میدهد. این پارامتر از نوع بستههای قابل خرید SibchePackage
است.
در صورت ناموفق بودن درخواست نیز، event خطا ارسال خواهد شد
خرید بسته مشخص (b4i)
ssk.PurchasePackage(packageId)
پس از گرفتن لیست بستهها، میتوانید درخواست خرید این بستهها را از طریق کد روبرو به کیت توسعهدهندگان بدهید. در ادامه، کیت توسعهدهندگان، در صورت نیاز کاربر را لاگین کرده و فرایند پرداخت را پیگیری خواهد کرد. سپس موفق یا ناموفق بودن خرید را به همراه SibchePurchasePackage
به اطلاع شما خواهد رساند.
Sub ssk_PackagePurchased (PurchasedPackage As SibchePurchasePackage)
' code
End Sub
گرفتن لیست بسته های خریداری شده (b4i)
ssk.FetchActiveInAppPurchasePackages
با استفاده از این دستور، میتوانید لیست بستههای فعال (خریداری شده) کاربر را بدست آورید. کافیست همانند کد روبر، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
Sub ssk_ActivePackageListArrived (ActivePackageList As List)
' code
End Sub
در پاسخ، کیت توسعهدهندگان موفقیت/عدم موفقیت درخواست و نیز آرایهای از بستههای خریداری شدهی فعال را برمیگرداند. توجه نمایید که این آرایه، آرایهای از نوع SibchePurchasePackage
است.
منظور از بستههای فعال، بستههایی هستند که خریداری شدهاند و هنوز مصرف نشدهاند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بستههای فعال برای هر کدام از نوع بستهها به شرح روبرو میباشد:
SibcheConsumablePackage
: بستههایی که خریداری شدهاند ولی هنوز مصرف (Consume) نشدهاند.SibcheNonConsumablePackage
: بستههایی که خریداری شدهاند. چون این بستهها یکبار خرید هستند، در صورت خرید، به صورت مادامالعمر فعال هستند.SibcheSubscriptionPackage
: بستههایی که خریداری شدهاند ولی هنوز از تاریخ انقضای آنها باقی مانده است.
مصرف کردن بستهها در سمت کلاینت (b4i)
ssk.ConsumePurchasePackage(purchasePackageId)
برای مصرف کردن بستههای قابل مصرف (Consumable) بایستی شبیه دستور روبرو، تابع مربوطه از کیت توسعهدهندگان را فراخوانی کنیم:
Sub ssk_ConsumeSuccess
' code
End Sub
در پاسخ پس از مشخص شدن وضعیت درخواست، کیت توسعهدهندگان callback روبرو را فراخوانی خواهد کرد. در صورت موفقیت، یعنی بسته مورد نظر با موفقیت مصرف شده و در صورت عدم موفقیت، در مصرف بسته مورد نظر، دچار مشکلی شدهایم.
مصرف کردن بستهها در سمت سرور (b4i)
برای این کار بایستی، کد purchasePackageId
که بخشی از کلاس SibchePurchasePackage
میباشد را در دست داشته باشید. سپس لینکی به شکل زیر درست کنید و دیتای وریفای را از سرور بگیرید (آدرسها Case sensitive هستند!):
https://api.sibche.com/sdk/userInAppPurchasePackages/{purchasePackageId}/verifyConsume
همچنین برای این درخواست، بایستی هدر HTTP با اسم App-Key
تنظیم نمایید. این کلید از طریق پنل توسعهدهندگان به صورت اختصاصی برای هر برنامه قابل دریافت است. اسم این کلید، کلید سرور نام دارد و عبارت ۳۰ کاراکتری است.
curl --header "App-Key: YOUR_SERVER_KEY" -X POST \
'https://api.sibche.com/sdk/userInAppPurchasePackages/1/verifyConsume'
نمونه کد قابل فراخوانی برای curl به شکل روبرو خواهد بود:
در جواب، سرور پاسخی با یکی از HTTP Response Code های زیر خواهد داد:
- HTTP Status Code 404 (Not Found):
{
"message" : "your package is already is used or not found",
"status_code" : 404
}
در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
- HTTP Status Code 401 (Unauthorized):
{
"message" : "app-key is not valid",
"status_code" : 401
}
یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:
- HTTP Status Code 202 (Accepted / OK):
در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت، سرور در متن پاسخ، هیچ نوشتهای بر نخواهد گرداند.
درخواست وارد شدن کاربر به کیت توسعهدهندگان سیبچه (b4i)
ssk.LoginUser
با استفاده از این دستور، میتوانید به کتابخانه سیبچه، درخواست لاگین کاربر را بدهید. کافیست همانند کد روبرو، تابع مربوطه کیت توسعهدهندگان را فراخوانی نمایید.
Sub ssk_LoginSuccess(UserName As String, UserId As String)
' code
End Sub
در جواب، کیت توسعهدهندگان، موفقیت لاگین و اروری که بهش برخورده را برمیگرداند. همچنین، در صورت موفقیت و در صورت موجود بودن، نام کاربر و آیدی کاربر را برمیگرداند.
درخواست خارج شدن کاربر از کیت توسعهدهندگان سیبچه (b4i)
Sibche.LogoutUser
توصیه میکنیم، زمانی از این تابع استفاده نمایید که کاربر دکمه بازیابی خرید را زده و درخواست بازیابی خرید خود را دارد.
Sub ssk_LogoutSuccess
' code
End Sub
با استفاده از این دستور میتوانید کاربر فعلی لاگین کرده داخل سیستم را از کیت توسعهدهندگان خارج نمایید و کلیه اطلاعات session او را پاک نمایید. این تابع پس از اتمام کار، در قالب callback به شما جواب خواهد داد.
گرفتن اطلاعات کاربر فعلی (b4i)
Sibche.GetCurrentUserData
زمانی که نیاز دارید تا شماره تلفن و نیز شماره کاربری (userId) کاربر را دریافت نمایید، میتوانید از تابع روبرو استفاده نمایید.
Sub ssk_UserDataArrived(UserPhoneNumber As String, UserId As String, LoginStatus As String)
' code
End Sub
در جواب، کیت توسعهدهندگان، نتیجه موفق بودن عملیات و نیز ارور رخ داده را برمیگرداند. در حالت عادی، بایستی عملیات موفق باشد ولی ناموفق بودن عملیات میتواند به دلایل شبکهای مختلفی همانند موارد زیر باشد:
- دسترسی به اینترنت مقدور نبود
- هر اتفاق ناخواسته شبکهای رخ داده است
- سرور سیبچه در دسترس نیست
همچنین در جواب، پارامتر سومی هم دارد که وضعیت کاربر را از لحاظ لاگین بودن/نبودن به اطلاع شما میرساند. در صورتی که لاگین باشد، از نوع loginStatusTypeIsLoggedIn
جواب خواهد داد. در صورت لاگین نبودن نیز جواب داده شده از نوع loginStatusTypeIsLoggedOut
میباشد. در صورتی که عملیات ناموفق باشد و از وضعیت لاگین بودن کاربر مطمئن نباشیم نیز جواب loginStatusTypeHaveTokenButFailedToCheck
را خواهیم داد.
پارامترهای بعدی نیز شامل شماره تلفن کاربر و نیز id کاربر میباشد که در پاسخ به شما داده خواهد شد.