অ্যাপল মিউজিক ব্যবহারকারীর ডিভাইসে ইনস্টল আছে কিনা তা কীভাবে পরীক্ষা করবেন?


9

আমি দ্রুত সঙ্গে একটি সঙ্গীত অ্যাপ তৈরি করছি। অ্যাপ্লিকেশনটি ব্যবহারকারীদের তাদের অ্যাপল সঙ্গীত অ্যাপের মাধ্যমে অ্যাপল সঙ্গীত সাবস্ক্রিপশনের মাধ্যমে সঙ্গীত খেলতে দেয়। ব্যবহারকারীর অ্যাপল মিউজিক সাবস্ক্রিপশন রয়েছে কিনা তা আমি এই মাধ্যমে যাচাই করতে সক্ষম হয়েছি:

SKCloudServiceController().requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in

    guard err == nil else {
        print("error in capability check is \(err!)")
        return
    }

    if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) {
        print("user has Apple Music subscription")
    }

    if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) {
        print("user does not have subscription")
    }

}

তবে: এমন পরিস্থিতি রয়েছে যেখানে কারও কারও কাছে, কোনও কারণে অ্যাপল সংগীতের সাবস্ক্রিপশন থাকলেও তাদের ডিভাইসে অ্যাপল সংগীত অ্যাপ্লিকেশনটি ডাউনলোড করা হবে না। যদি ব্যবহারকারীটির সাবস্ক্রিপশন থাকে তবে ডিভাইসটি না থাকে তবে আমি মূলত সেই কেসটি এমনভাবে চিকিত্সা করতে চাই যেন তাদের সাবস্ক্রিপশন নেই, অর্থাৎ আমরা অ্যাপল মিউজিকের মাধ্যমে সঙ্গীত খেলতে পারি না।

সুতরাং, আমি অ্যাপল সঙ্গীত ব্যবহারকারীর ডিভাইসে আছে কিনা তা পরীক্ষা করার জন্য উপায়গুলি অনুসন্ধান করতে যাচ্ছি। আমি এই উত্তরটি খুঁজে পেয়েছি: অ্যাপল মিউজিকের ইউআরএল স্কিমটি সন্ধানের জন্য এই রিসোর্সের সাথে একত্রে সুইফট ব্যবহার করে কোনও অ্যাপ্লিকেশন ইনস্টল করা আছে কিনা তা পরীক্ষা করে দেখুন এবং উপসংহারে পৌঁছাতে পারি যে কোনও ব্যবহারকারীকে তাদের ডিভাইসে অ্যাপল মিউজিক সাবস্ক্রিপশন এবং অ্যাপল মিউজিক অ্যাপ্লিকেশন উভয়ই ইনস্টল করা আছে কিনা:

SKCloudServiceController()requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in

    guard err == nil else {
        print("error in capability check is \(err!)")
        return
    }

    if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) && UIApplication.shared.canOpenURL(URL(string: "music://")!) {
        print("user has Apple Music subscription and has the apple music app installed")
    }

    if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) || !UIApplication.shared.canOpenURL(URL(string: "music://")!) {
        print("user does not have subscription or doesn't have apple music installed")
    }

}

সমস্যাটি হ'ল, এমনকি আমার ডিভাইস থেকে অ্যাপল সংগীত মুছে ফেলার পরে, প্রথম কেস, অর্থাৎ মুদ্রিত user has Apple Music subscription and has the apple music app installedহওয়া এখনও কল করা হচ্ছে। আমি বিশ্বাস করি আমার সঠিক ইউআরএল স্কিম আছে কারণ পরিবর্তন "music://"করার সময় "musi://", দ্বিতীয় কেস, অর্থাৎ প্রিন্ট user does not have subscription or doesn't have apple music installedকরা হচ্ছে।

URL(string: "music://")অ্যাপল মিউজিকের মাধ্যমে খোলার চেষ্টা করার মাধ্যমে UIApplication.shared.open(URL(string: "music://")!), আমি নিম্নলিখিত সতর্কতার সাথে আঘাত পেয়েছি:

এখানে চিত্র বর্ণনা লিখুন

তাহলে ডিভাইসটি কেন বলছে যে URL(string: "music://")অ্যাপল মিউজিক মোছার পরেও আমি খুলতে পারি ? URLখোলার পক্ষে সক্ষম, তবে ফলাফলটি কি কেবল উপরের সতর্কতার উপস্থাপনা? ব্যবহারকারী কি তাদের ডিভাইসে অ্যাপল সঙ্গীত ইনস্টল করেছে তা নিশ্চিত করার সঠিক উপায়? এমনকি ব্যবহারকারীরা তাদের ডিভাইসে অ্যাপল সংগীত ইনস্টল করেছেন কি না তা নিশ্চিত করার কোনও উপায় আছে? অ্যাপল যদি ব্যবহারকারীদের অ্যাপল মিউজিক অ্যাপ্লিকেশনটি মুছে ফেলার বিকল্প দেয় তবে তাদের অ্যাপ্লিকেশনটি ইনস্টল করা আছে কিনা তা বিকাশকারীদেরও পরীক্ষা করার ক্ষমতা দেওয়া উচিত।


আমি নিজে কখনও অ্যাপল সঙ্গীত নিয়ে কাজ করি নি, তবে আমি বিশ্বাস করি যে অ্যাপল এই url স্কিমটি একটি বিশেষ পদ্ধতিতে আচরণ করে, যেহেতু এটি তাদের নিজস্ব পণ্য, সুতরাং আপনি যখনই এই ইউআরএল স্কিমটি আঘাত করেন তখন তারা ফিরে আসার চেয়ে অ্যাপ্লিকেশনটি ডাউনলোড করার জন্য আরও ভাল প্রস্তাব দেয় মিথ্যা। আপনি কি কোনও বৈধ ইউআরএল স্কিম সনাক্ত করার চেষ্টা করেছিলেন যা অ্যাপল সংগীতে আসলে একটি আসল অ্যালবাম খুলবে বা একটি আসল গান বাজবে? প্রাক্তন .: URL(string: "music://trackID=3214534")। সম্ভবত এই সুস্পষ্ট url স্কিমটি একটি সাধারণ উপায়ে চিকিত্সা করা হবে তবে কোনও app restoreসতর্কতা ট্রিগার করা হবে না ।
স্টারস্কি

আমি বৈধ অ্যাপল গান ট্র্যাক এবং শিল্পী ID- র ব্যবহার করা URL গুলি যে সঙ্গে অ্যাপল সঙ্গীত গভীর লিংক বলে মনে হচ্ছে না একটি নম্বর চেষ্টা করেছি: URL(string: "music://trackId=1377813289")!, URL(string: "music://track=1377813289"), URL(string: "music://artist=562555")!, URL(string: "music://artistId=562555")!। আমি গভীর লিঙ্কে সক্ষম হয়ে ওঠার একমাত্র উপায় হ'ল এইরকম কিছু মাধ্যমে URL(string: "https://music.apple.com/us/artist/562555")!, তবে এটি অবশ্যই এইচটিটিপি হিসাবে কার্যকর হয় না।
ডেভিড চপিন

আপনি কি LSapplicationQueriesSchemes এর সাথে info.plist এ "সংগীত: //" সাদা তালিকাভুক্ত করেছেন ?. যদি তা না হয় তবে ক্যানওপেনআরলকে ভুল বিহেভ করার কথা।
কার্তিক রমেশ

1
দুর্ভাগ্যক্রমে, আমার তথ্য.প্লেস্টে স্কিমটিকে সাদা তালিকাভুক্ত করা আচরণের কোনও পরিবর্তন করে না। আমার সমস্যাটি হ'ল অ্যাপল মিউজিক অ্যাপ্লিকেশন মোছার পরেও সমস্ত সময় UIApplication.shared.canOpenURL(URL(string: "music://")!)ফিরছে true। আমার falseঅ্যাপ্লিকেশন মোছার পরে ফিরে আসা দরকার । ইউআরএল স্কিমকে হোয়াইটলিস্ট করা এই সমস্যাটি সমাধান করবে না (আমি এটি চেষ্টা করেছি)।
ডেভিড চপিন

আপনি কি এর জন্য আরও ভাল সমাধান খুঁজে পেয়েছেন?
মার্টিন ম্লোস্তেক

উত্তর:


3

আমি পেয়েছি সেরা সমাধান, যদিও আমি আশা করি সেখানে আরও ভাল কিছু আছে, এটি MPMusicPlayer.prepareToPlay(completionHandler:)ট্র্যাক খেলার চেষ্টা করার সময় কোনও ত্রুটি আছে কিনা তা পরীক্ষা করে দেখার জন্য:

SKCloudServiceController().requestCapabilities { (capability:SKCloudServiceCapability, err:Error?) in

    guard err == nil else {
        print("error in capability check is \(err!)")
        return
    }

    if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) {
        print("user has Apple Music subscription")
        MPMusicPlayerController.systemMusicPlayer.setQueue(with: ["1108845248"])
        systemMusicPlayer.prepareToPlay { (error) in
            if error != nil && error!.localizedDescription == "The operation couldn’t be completed. (MPCPlayerRequestErrorDomain error 1.)" {
                //It would appear that the user does not have the Apple Music App installed
            }
        }
    }

    if capability.contains(SKCloudServiceCapability.musicCatalogSubscriptionEligible) {
        print("user does not have subscription")
    }

}

আমি নিশ্চিত নই যে এটির অ্যাপ্লিকেশনটিতে ট্র্যাক বাজানো বাদে অন্য কোনও কিছুর জন্য অ্যাপল মিউজিক ব্যবহার করার ক্ষেত্রে কীভাবে এটি প্রয়োগ হতে পারে তবে আপনি যখন চেক খেলতে চলেছেন তখন এটি অবশ্যই একটি চেক হিসাবে কাজ করবে বলে মনে হয়। যখনই আমি এই ত্রুটিতে আক্রান্ত হই তখন আমি কেবলমাত্র তাদের কাছে একটি অ্যাপল মিউজিক সাবস্ক্রিপশন রয়েছে তবে তাদের কাছে অ্যাপ্লিকেশন ইনস্টল করা নেই বলে আলাদাভাবে সতর্কতা তৈরি করি।

তবুও, কিছু সমাপ্তি হ্যান্ডলার ছাড়াই চেক করতে সক্ষম হওয়া দুর্দান্ত হবে কারণ এটি বুলিয়ান চেককে শর্তাধীন বিবৃতিতে (মাধ্যমে if capability.contains(SKCloudServiceCapability.musicCatalogPlayback) && hasAppleMusicAppInstalled { //do something }) একীভূত করতে দেয় ।


ঠিক আছে, এই সমাধানটি ত্রুটিগুলি যাচাই করে কাজ করে তবে এটি কিছুটা হ্যাকি এবং একটি সম্পূর্ণতা হ্যান্ডলারে নিম্নলিখিত কোডটি কার্যকর করা প্রয়োজন। অ্যাপটি নিজেই ইনস্টল করা আছে কি না, এটি সরকারী চেক করার উপায় থাকা ভাল be
ডেভিড চপিন

তবে হ্যাঁ এই উত্তরটি হ'ল একটি ট্র্যাক খেলার প্রস্তুতি নেওয়ার সময় ত্রুটিগুলি ব্যবহার করে ar কোনও বিকাশকারীকে ট্র্যাক না খেলে অ্যাপল সংগীত ইনস্টল করা আছে কিনা তা জানতে হতে পারে।
ডেভিড চপিন

1
এটি কি এখনও আপনি খুঁজে পেয়েছেন সেরা সমাধান?
মার্টিন ম্লোস্তেক

দুর্ভাগ্যক্রমে, হ্যাঁ
ডেভিড চপিন

0

ভাগ্যক্রমে অ্যাপল আপনাকে এমন একটি পদ্ধতি সরবরাহ করে যা ডিভাইসে ইনস্টল হওয়া কোনও অ্যাপ্লিকেশন ইউআরএল এর স্কিমটি পরিচালনা করতে নিবন্ধভুক্ত না হয়, বা আপনি যদি আপনার তথ্য.প্লেস্ট ফাইলটিতে ইউআরএল এর স্কিম ঘোষণা না করে থাকেন তবে এটি মিথ্যা প্রত্যাখ্যান করে; অন্যথায়, সত্য।

func canOpenURL(_ url: URL) -> Bool

আমি ইউআরএল স্কিমগুলি পোস্ট করছি Following

Open = music://
Open = musics://
Open = audio-player-event://

আপনি আরও আপনার তথ্য.প্লেস্ট ফাইলটিতে ব্যবহার করবেন এমনগুলি যুক্ত করুন।

এর পরে আরও তথ্যের জন্য 'canOpenURL' ব্যবহার করে অ্যাপল ডক্স পরীক্ষা করে দেখুন

https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl


অ্যাপল মিউজিকের ইউআরএল স্কিমটি trueপাস করার সময় সর্বদা ফিরে আসে canOpenUrl। এই প্রশ্নটি দিয়ে আমি মূল সমস্যাটি সমাধান করতে চাই।
ডেভিড চপিন

আপনি কি এলএস অ্যাপ্লিকেশন কুইরিশেমসগুলিতে 'সংগীত অ্যাপ' নির্দিষ্ট করেছেন?
জিশান আহমেদ

উত্তরটি আবার পরীক্ষা করে দেখুন আমি এটি আপডেট করেছি।
জিশান আহমেদ

কার্তিক রমেশের মন্তব্যে, আমি পূর্বে আচরণের কোনও পরিবর্তন ছাড়াই ইউআরএল স্কিমগুলি হোয়াইটলিস্ট করার চেষ্টা করেছি
ডেভিড চপিন

0

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

requestUserToken(forDeveloperToken:completionHandler:)

যদি আপনার বিকাশকারী টোকেনটি বৈধ এবং ব্যবহারকারী টোকেন মানটি এখনও শূন্য / নাল থাকে তবে ডিভাইস ব্যবহারকারী অ্যাপল সঙ্গীত পরিষেবাটির গ্রাহক নয়। এইচটিটিপি স্থিতি কোড দিয়ে উত্পন্ন একটি ত্রুটি 401 (অননুমোদিত)। এটির জন্য এখনও আপনার একটি ত্রুটি পরীক্ষা করা দরকার তবে নির্দিষ্ট ট্র্যাক চেষ্টা করার প্রয়োজন নেই (বিশেষত কোনও কারণে যদি সামগ্রীটির ট্র্যাক আইডি আপনার চেকিংটি অবৈধ বা পরিবর্তিত হয়) some

ডিভাইসে সাইন ইন হওয়া এবং সাবস্ক্রিপশন রয়েছে তবে মিউজিক অ্যাপ্লিকেশনটি ডাউনলোড করা হয়নি এমন অ্যাকাউন্টের ইস্যুটির জন্য: নির্দিষ্ট বিষয়বস্তু প্লে করার চেষ্টা করার পরে ত্রুটিটি পরিচালনা করুন এবং ব্যবহারকারীকে তথ্য সরবরাহ করুন বা এমন সামগ্রী ব্যবহার করুন যাতে বিকল্প হিসাবে অ্যাপল সংগীত সাবস্ক্রিপশনের প্রয়োজন হয় না যখন একটি ত্রুটি ঘটে।


1
হ্যাঁ, সুতরাং আমি ইতিমধ্যে জানি যে কোনও ব্যবহারকারীর সাবস্ক্রিপশন আছে কিনা তা পরীক্ষা করে দেখুন । আমার দেওয়া উপরের উত্তরটি প্রকৃত ত্রুটি পরিচালনার ঠিকানা দেয়। আমি যে সমাধানটির সন্ধান করছি তা হ'ল কঠোরভাবে আপনি যদি বলতে পারেন যে ব্যবহারকারী কোনও ট্র্যাক খেলার চেষ্টা না করেই ডিভাইসে অ্যাপল মিউজিক অ্যাপ্লিকেশন ইনস্টল করেছেন কিনা ।
ডেভিড চপিন

0

হ্যাঁ, আমরা এই পদক্ষেপগুলি অনুসরণ করে বেশিরভাগ অ্যাপ্লিকেশন চেক করতে পারি:

  1. ব্যবহার করুন ডীপ URL টি বা URL টি প্রকল্প বিশেষ আবেদন আপনি খুলতে চান, যে যুক্ত করি সে সময় info.plist
  2. একই ইউআরএল ব্যবহার করুন এবং এই পদ্ধতিতে কল করুন
    func canOpenURL(_ url: URL) -> Bool
    let url = URL(string: "music://")

    UIApplication.shared.open(url!) { (result) in
       if result {
          // The URL was delivered successfully!
       }
    }

এটি ইস্যু নয়, অ্যাপ্লিকেশন ইনস্টল করা না থাকলেও, প্রশ্নটি রূপরেখাযুক্ত যা UIApplication.shared.canOpenUrl(URL(string: “music://”)!)সর্বদা ফিরে আসে true
ডেভিড চপিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.