ব্যবহারকারীকে একটি নেটওয়ার্ক স্লাইসিং আপসেল অফার করুন

5G নেটওয়ার্ক স্লাইসিং বাহকদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে নেটওয়ার্ক কর্মক্ষমতা বৃদ্ধি করার ক্ষমতা দেয়। এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে একটি অ্যাপ নেটওয়ার্ক স্লাইসিং আপসেল UX ফ্লোকে ট্রিগার করতে পারে এবং ব্যবহারকারী যদি একটি কেনার সিদ্ধান্ত নেয় তাহলে একটি প্রিমিয়াম সংযোগের অনুরোধ করতে পারে।

UX ফ্লো ব্যবহারকারীকে একটি বিজ্ঞপ্তি দেখায় যা একটি ক্যারিয়ার ওয়েবশীট খোলে যেখানে তারা কেনাকাটা সম্পূর্ণ করতে পারে।
চিত্র 1. আপসেল ইউএক্স প্রবাহের একটি উদাহরণ।

প্রিমিয়াম ক্ষমতার অভিপ্রায় ঘোষণা করুন

একটি নেটওয়ার্ক ক্ষমতার জন্য আপনার অ্যাপের অনুরোধকে সম্মানিত করার জন্য, আপনার অ্যাপটিকে অবশ্যই অ্যাপ ম্যানিফেস্টে সেই সক্ষমতার অনুরোধ করার অভিপ্রায় ঘোষণা করতে হবে। অন্যথায়, নেটওয়ার্ক অনুরোধ একটি SecurityException নিক্ষেপ করতে ব্যর্থ হয়।

এটি করার জন্য, আপনার অ্যাপটিকে অবশ্যই AndroidManifest.xml ফাইলে PackageManager.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES প্রপার্টি ঘোষণা করতে হবে এবং একটি সংশ্লিষ্ট XML রিসোর্স ফাইল অন্তর্ভুক্ত করতে হবে।

ম্যানিফেস্ট ফাইলে একটি ক্ষমতা ঘোষণা এই মত দেখায়:

<property android:name="android.net.PROPERTY_SELF_CERTIFIED_NETWORK_CAPABILITIES"
          android:resource="@xml/network_capabilities" />

সংশ্লিষ্ট network_capabilities.xml রিসোর্স ফাইলটি দেখতে এইরকম:

<network-capabilities-declaration> xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-network-capability android:name="NET_CAPABILITY_PRIORITIZE_LATENCY"/>
</network-capabilities-declaration>

নেটওয়ার্ক স্লাইসিং আপসেল ফ্লো ট্রিগার করুন

এই কোড উদাহরণটি দেখায় কিভাবে আপসেল প্রবাহকে ট্রিগার করতে হয় এবং ক্রয়কৃত প্রিমিয়াম ক্ষমতার জন্য অনুরোধ করা যায়।

Context mContext;
Network mNetwork;

public void purchasePremiumCapability() {
    TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
    int capability = TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY;
    if (tm.isPremiumCapabilityAvailableForPurchase(capability)) {
        tm.purchasePremiumCapability(capability, Runnable::run, new Consumer<Integer>() {
            @Override
            public void accept(Integer result) {
                Log.d("Purchase premium capability result: "
                        + TelephonyManager.convertPurchaseResultToString(result));
                switch (result) {
                    case /* success or already purchased */:
                        requestPremiumCapabilityNetwork();
                        break;
                    case /* temporary failure */:
                        // TODO: wait and retry
                        break;
                    case /* hard failure */:
                        // TODO: handle failure
                        break;
                    default:
                        Log.e("Unknown purchase result: " + result);
                }
            }
        });
    } else {
        Log.e("Premium capability is not available for purchase.");
    }
}

public void requestPremiumCapabilityNetwork() {
    ConnectvityManager cm = mContext.getSystemService(ConnectivityManager.class);
    NetworkRequest request = NetworkRequest.Builder()
            .addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY)
            .build();
    cm.requestNetwork(request, new NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
            Log.d("Application can now use the network with the premium capability.");
            mNetwork = network;
        }

        @Override
        public void onLost(Network network) {
            Log.d("Premium capability network is no longer available.");
            mNetwork = null;
            // TODO: clean up anything relying on the premium capability network
        }
    });
}

নিম্নলিখিত বিভাগগুলি এই প্রক্রিয়ার সাথে জড়িত পদক্ষেপগুলি আরও বিশদে বর্ণনা করে৷

ধাপ 1: প্রিমিয়াম ক্ষমতা উপলব্ধ কিনা যাচাই করুন

নির্বাচিত প্রিমিয়াম ক্ষমতা উপলব্ধ কিনা তা নির্ধারণ করতে isPremiumCapabilityAvailableForPurchase() API পদ্ধতিতে কল করুন। আপসেল বিজ্ঞপ্তি ওয়ার্কফ্লো ব্যবহার করে ক্যারিয়ারের কাছ থেকে ক্রয়ের জন্য সক্ষমতা উপলব্ধ থাকলে এই পদ্ধতিটি true হয়।

ধাপ 2: আপসেল বিজ্ঞপ্তি প্রবাহ শুরু করুন

প্রিমিয়াম সক্ষমতা উপলব্ধ রয়েছে তা নিশ্চিত করার পরে, আপসেল বিজ্ঞপ্তি প্রবাহ শুরু করতে আপনার অ্যাপটিকে purchasePremiumCapability() কল করা উচিত। যদি ব্যবহারকারী ইতিমধ্যেই নির্দিষ্ট ক্ষমতা ক্রয় না করে থাকে এবং সমস্ত পূর্বশর্ত সন্তুষ্ট হয়, তাহলে প্ল্যাটফর্ম ব্যবহারকারীকে একটি বিজ্ঞপ্তি দেখায় যাতে তাদের জানানো হয় যে কর্মক্ষমতা বৃদ্ধির বিকল্পগুলি তাদের ক্যারিয়ার থেকে উপলব্ধ হতে পারে। ব্যবহারকারী বিজ্ঞপ্তিতে ট্যাপ করলে, প্ল্যাটফর্মটি ক্যারিয়ারের ওয়েবভিউ খুলে দেয় যাতে ক্রয় প্রক্রিয়া চালিয়ে যেতে পারে।

purchasePremiumCapability() এ পাস করা parameter কলব্যাক ক্রয়ের অনুরোধের জন্য একটি ফলাফল কোড প্রদান করে।

ফলাফল কোডগুলি PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS এবং PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED সফল ফলাফলগুলিকে উপস্থাপন করে যেখানে আপনার অ্যাপ নির্বাচিত প্রিমিয়াম ক্ষমতার অনুরোধ করতে এগিয়ে যেতে পারে৷

নিম্নলিখিত তালিকার ফলাফল কোডগুলি ব্যর্থ ক্রয়ের অনুরোধগুলিকে উপস্থাপন করে। তাদের সম্পর্কে আরও জানতে API রেফারেন্স দেখুন।

ধাপ 3: কেনা প্রিমিয়াম সংযোগের জন্য অনুরোধ করুন

যদি আপসেল বিজ্ঞপ্তি প্রবাহ একটি সফল কোড প্রদান করে ( PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS বা PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED ), আপনার অ্যাপটি অনুরোধ করা সক্ষমতা পূরণ করে এমন একটি নেটওয়ার্কের অনুরোধ করতে requestNetwork() ব্যবহার করা উচিত। মনে রাখবেন যে আপনি যখন একটি NetworkRequest অবজেক্ট তৈরি করেন, তখন আপনি যে ক্ষমতা যোগ করেন সেটি একই ক্ষমতা নয় যা আপনি আগের ধাপে TelephonyManager API-এ পাস করেন। নিম্নলিখিত টেবিলটি TelephonyManager ক্লাস থেকে NetworkCapabilities সংশ্লিষ্ট ধ্রুবকগুলিকে মানচিত্র করে।

TelephonyManager ধ্রুবক NetworkCapabilities ধ্রুবক
PREMIUM_CAPABILITY_PRIORITIZE_LATENCY NET_CAPABILITY_PRIORITIZE_LATENCY

ক্রয়ের অনুরোধ ব্যর্থ হলে, আপনার অ্যাপের অনুরোধ করা উচিত এবং পরিবর্তে ডিফল্ট নেটওয়ার্ক ব্যবহার করা উচিত। কোনো স্বয়ংক্রিয় ফলব্যাক আচরণ নেই যদি প্রিমিয়াম স্লাইস অনুরোধ পূরণ করা না যায়।