NAV Navbar
Swift Objective-C

مستندات سیبچه

به مستندات سیبچه خوش آمدید.



در صورتی که توسعه‌دهنده یونیتی هستید، مستندات مربوط به خود را می‌توانید از منوی سمت راست با انتخاب مورد «نصب کیت توسعه‌دهندگان یونیتی» پیدا کنید؛ همچنین اگر توسعه‌دهنده کرونا هستید، بایستی گزینه «نصب کیت توسعه‌دهندگان کرونا» را انتخاب کنید و در غیر اینصورت مستندات زیرشاخه «نصب کیت توسعه‌دهندگان» را بررسی و مطالعه نمایید.



موفق باشید :)

نصب کیت توسعه‌دهندگان

نیازمندیهای نصب کیت توسعه‌دهندگان

  1. بارگذاری برنامه در پنل توسعه‌دهندگان سیبچه
  2. دریافت کلید برنامه از پنل توسعه‌دهندگان
  3. آخرین نسخه‌ی 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

سه نوع بسته قابل خرید داریم که عبارتند از:

این بسته ها تا زمانی که مصرف نشده‌اند، فعال و معتبر می‌باشند و پس از مصرف، قابل خرید مجدد هستند.

این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بسته‌های فعال کاربر خواهند بود.

- (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 دلیل خطای مربوطه
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 است.

منظور از بسته‌های فعال، بسته‌هایی هستند که خریداری شده‌اند و هنوز مصرف نشده‌اند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بسته‌های فعال برای هر کدام از نوع بسته‌ها به شرح زیر می‌باشد:

مصرف کردن بسته‌ها در سمت کلاینت

[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
}



{
  "message" : "app-key is not valid",
  "status_code" : 401
}



درخواست وارد شدن (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 کاربر می‌باشد که در پاسخ به شما داده خواهد شد.

نصب کیت توسعه‌دهندگان یونیتی

نیازمندیهای نصب کیت توسعه‌دهندگان یونیتی

  1. بارگذاری برنامه در پنل توسعه‌دهندگان سیبچه
  2. دریافت کلید برنامه از پنل توسعه‌دهندگان
  3. آخرین نسخه‌ی Xcode
  4. داشتن 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

سه نوع بسته قابل خرید داریم که عبارتند از:

این بسته ها تا زمانی که مصرف نشده‌اند، فعال و معتبر می‌باشند و پس از مصرف، قابل خرید مجدد هستند.

این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بسته‌های فعال کاربر خواهند بود.

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 دلیل خطای مربوطه
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 است.

منظور از بسته‌های فعال، بسته‌هایی هستند که خریداری شده‌اند و هنوز مصرف نشده‌اند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بسته‌های فعال برای هر کدام از نوع بسته‌ها به شرح زیر می‌باشد:

مصرف کردن بسته‌ها در سمت کلاینت (یونیتی)

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 های روبرو خواهد داد:

{
  "message" : "your package is already is used or not found",
  "status_code" : 404
}

در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:


{
  "message" : "app-key is not valid",
  "status_code" : 401
}

یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:



در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت،‌ سرور در متن پاسخ، هیچ نوشته‌ای بر نخواهد گرداند.

درخواست وارد شدن کاربر به کیت توسعه‌دهندگان سیبچه (یونیتی)

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 کاربر می‌باشد که در پاسخ به شما داده خواهد شد.

نصب کیت توسعه‌دهندگان کرونا

نیازمندیهای نصب پلاگین کرونا

  1. بارگذاری برنامه در پنل توسعه‌دهندگان سیبچه
  2. دریافت کلید برنامه از پنل توسعه‌دهندگان
  3. آخرین نسخه‌ی Xcode
  4. داشتن آخرین نسخه از کرونا (نسخه‌ی بالاتر از 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

سه نوع بسته قابل خرید داریم که عبارتند از:

این بسته ها تا زمانی که مصرف نشده‌اند، فعال و معتبر می‌باشند و پس از مصرف، قابل خرید مجدد هستند.

این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بسته‌های فعال کاربر خواهند بود.


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 دلیل خطای مربوطه
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 است.

منظور از بسته‌های فعال، بسته‌هایی هستند که خریداری شده‌اند و هنوز مصرف نشده‌اند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بسته‌های فعال برای هر کدام از نوع بسته‌ها به شرح زیر می‌باشد:

مصرف کردن بسته‌ها در سمت کلاینت (کرونا)

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 های زیر خواهد داد:

در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:

{
  "message" : "your package is already is used or not found",
  "status_code" : 404
}

یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:

{
  "message" : "app-key is not valid",
  "status_code" : 401
}

در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت،‌ سرور در متن پاسخ، هیچ نوشته‌ای بر نخواهد گرداند.

درخواست وارد شدن کاربر داخل پلاگین سیبچه (کرونا)

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 کاربر می‌باشد که در پاسخ به شما داده خواهد شد.

نصب کیت توسعه‌دهندگان ری‌اکت نیتیو

نیازمندیهای نصب کیت توسعه‌دهندگان

  1. بارگذاری برنامه در پنل توسعه‌دهندگان سیبچه
  2. دریافت کلید برنامه از پنل توسعه‌دهندگان
  3. آخرین نسخه‌ی 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

سه نوع بسته قابل خرید داریم که عبارتند از:

این بسته ها تا زمانی که مصرف نشده‌اند، فعال و معتبر می‌باشند و پس از مصرف، قابل خرید مجدد هستند.

این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بسته‌های فعال کاربر خواهند بود.

{
    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 دلیل خطای مربوطه
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 است.

منظور از بسته‌های فعال، بسته‌هایی هستند که خریداری شده‌اند و هنوز مصرف نشده‌اند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بسته‌های فعال برای هر کدام از نوع بسته‌ها به شرح زیر می‌باشد:

مصرف کردن بسته‌ها در سمت کلاینت

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
}



{
  "message" : "app-key is not valid",
  "status_code" : 401
}



درخواست وارد شدن (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

  1. بارگذاری برنامه در پنل توسعه‌دهندگان سیبچه
  2. دریافت کلید برنامه از پنل توسعه‌دهندگان
  3. آخرین نسخه‌ی Xcode
  4. داشتن آخرین نسخه 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

سه نوع بسته قابل خرید داریم که عبارتند از:

این بسته ها تا زمانی که مصرف نشده‌اند، فعال و معتبر می‌باشند و پس از مصرف، قابل خرید مجدد هستند.

این بسته ها، فقط یکبار قابل خرید هستند و پس از خرید، همواره در لیست بسته‌های فعال کاربر خواهند بود.

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 دلیل خطای مربوطه
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 است.

منظور از بسته‌های فعال، بسته‌هایی هستند که خریداری شده‌اند و هنوز مصرف نشده‌اند و یا تاریخ انقضایشان به اتمام نرسیده است. تعریف سیبچه از بسته‌های فعال برای هر کدام از نوع بسته‌ها به شرح روبرو می‌باشد:

مصرف کردن بسته‌ها در سمت کلاینت (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 های زیر خواهد داد:

{
  "message" : "your package is already is used or not found",
  "status_code" : 404
}

در صورتی که آدرس لینک را اشتباه وارد کرده باشید، یا بسته مورد نظر با purchasePackageId اشتباه وارد شده باشد، یا بسته مورد نظر قبلا مصرف شده باشد این خطا رخ خواهد داد.
در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:

{
  "message" : "app-key is not valid",
  "status_code" : 401
}

یعنی اینکه کلید سروری که بر روی App-Key تنظیم شده است، غیر معتبر و اشتباه است. در این صورت، سرور در متن پاسخ، پاسخی شبیه روبرو خواهد داد:

در این صورت یعنی، بسته مورد نظر با موفقیت مصرف شد و خرید کاربر، معتبر بوده است. برای این حالت،‌ سرور در متن پاسخ، هیچ نوشته‌ای بر نخواهد گرداند.

درخواست وارد شدن کاربر به کیت توسعه‌دهندگان سیبچه (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 کاربر می‌باشد که در پاسخ به شما داده خواهد شد.