0

我嘗試添加到我的項目GCM的iOS (https://components.xamarin.com/view/googleiosgcmXamarin.Forms - 推送通知 - iOS設備

This is my code: 
[Register ("AppDelegate")] 
public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate, IInstanceIdDelegate, IReceiverDelegate 
{ 
public Google.Core.Configuration Configuration { get; set; } 

    NSData DeviceToken { get; set; } 
    public override bool FinishedLaunching (UIApplication app, NSDictionary options) 
    { 

     NSError err; 
     Google.Core.Context.SharedInstance.Configure (out err); 
     if (err != null) 
      Console.WriteLine ("Failed to configure Google: {0}", err.LocalizedDescription); 
     Configuration = Google.Core.Context.SharedInstance.Configuration; 


     // Configure and Start GCM 
     var gcmConfig = Google.GoogleCloudMessaging.Config.DefaultConfig; 
     gcmConfig.ReceiverDelegate = this; 
     Service.SharedInstance.Start (gcmConfig); 

     // Register for remote notifications 
     var notTypes = UIUserNotificationType.Sound | UIUserNotificationType.Alert | UIUserNotificationType.Badge; 
     var settings = UIUserNotificationSettings.GetSettingsForTypes (notTypes, null); 
     UIApplication.SharedApplication.RegisterUserNotificationSettings (settings); 
     UIApplication.SharedApplication.RegisterForRemoteNotifications(); 

     global::Xamarin.Forms.Forms.Init(); 

     LoadApplication (new App()); 

     return base.FinishedLaunching (app, options); 
    } 

    public override void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken) 
    {   

     // Save our token in memory for future calls to GCM 
      DeviceToken = deviceToken; 

     // Configure and start Instance ID 
     var config = Google.InstanceID.Config.DefaultConfig; 
     InstanceId.SharedInstance.Start (config); 

     // Get a GCM token 
     GetToken(); 
    } 

    void GetToken() 
    { 
     // Register APNS Token to GCM 
     var options = new NSDictionary(); 
     options.SetValueForKey (DeviceToken, Constants.RegisterAPNSOption); 
     options.SetValueForKey (new NSNumber(true), Constants.APNSServerTypeSandboxOption); 

     // Get our token 
     InstanceId.SharedInstance.Token (
      "1055xxxx" ,//My sender id here, 
      Constants.ScopeGCM, 
      options, 
      (token, error) => Console.WriteLine ("GCM Registration ID: " + token)); 
    } 

    public override void DidReceiveRemoteNotification (UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) 
    { 
     // Your own notification handling logic here 

     // Notify GCM we received the message 
     Service.SharedInstance.AppDidReceiveMessage (userInfo); 
    } 

    public override void OnActivated (UIApplication application) 
    { 
     Service.SharedInstance.Connect (error => { 
      if (error != null) 
       Console.WriteLine ("Could not connect to GCM: {0}", error.LocalizedDescription); 
      else 
       Console.WriteLine ("Connected to GCM"); 
     }); 
    } 

    public override void DidEnterBackground (UIApplication application) 
    { 
     Service.SharedInstance.Disconnect(); 
    } 

    public void DeleteToken() 
    { 
     InstanceId.SharedInstance.DeleteToken (
      "1055xxxx" ,//My sender id here 
      Constants.ScopeGCM, 
      error => { 
       // Callback, non-null error if there was a problem 
       if (error != null) 
        Console.WriteLine ("Deleted Token"); 
       else 
        Console.WriteLine ("Error deleting token"); 
      }); 
    } 

    int messageId = 1; 

    // We can send upstream messages back to GCM 
    public void SendUpstreamMessage() 
    {    
     var msg = new NSDictionary(); 
     msg.SetValueForKey (new NSString ("1234"), new NSString ("userId")); 
     msg.SetValueForKey (new NSString ("hello world"), new NSString ("msg")); 

     var to = "1055xxxxxx" + "@gcm.googleapis.com"; 

     Service.SharedInstance.SendMessage (msg, to, (messageId++).ToString()); 
    } 

    [Export ("didDeleteMessagesOnServer")] 
    public void DidDeleteMessagesOnServer() 
    { 
     // ... 
    } 

    [Export ("didSendDataMessageWithID:")] 
    public void DidSendDataMessage (string messageID) 
    { 
     // ... 
    } 

    [Export ("willSendDataMessageWithID:error:")] 
    public void WillSendDataMessage (string messageID, NSError error) 
    { 
     // ... 
    } 

,這是控制檯:

You have enabled the CloudMessaging service in Developer Console, but it appears as though your Podfile is missing the line: 'pod "Google/CloudMessaging" or you may need to run pod update in your project directory. 

2016-04-26 20:54:43.197 xxxx.iOS[2072:94709] Failed to configure Google: Missing expected subspaces. 

GCM | GCM registration is not ready with auth credentials 
2016-04-26 20:54:47.712 xxxxxxxx.iOS[2072:94709] Could not connect to GCM: The operation couldn’t be completed. (com.google.gcm error 501.) 

我這樣做是從Xamarin。形式 - 也許這是問題?

我的確從獲得啓動所有的一步,但得到這個問題

任何想法傢伙是什麼問題??? 肯定的 - 我從谷歌文件添加到資源文件夾添加並建立行動 - BundleResource

在info.plist中籤刪除 - 通知模塊

回答

1

按照該gcm documentation,你應該有可可豆莢整合他們的框架。

所以請確保你添加/更新可可豆莢gcm。 根據日誌,pod未更新。

+0

噢好 - 謝謝。我會嘗試和更新這裏 – David

+0

也是非常好,如果你可以給我鏈接如何我添加cocoapods到我的iOS Xamarin – David

+0

請參閱此文檔 - > https://developer.xamarin.com/guides/ios/advanced_topics/binding_objective-c/ –